diff --git a/DEPS b/DEPS
index d0b7f9f6..9024e6e 100644
--- a/DEPS
+++ b/DEPS
@@ -40,11 +40,11 @@
   # 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': '7d3d8723319038d16456137ba932f238c1e65dbf',
+  'skia_revision': '868d52be4e78f6dff330a1b931b5e2f8c55e87b4',
   # 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': 'c5350347a7ff55ad11f0944279b28dc8a3079636',
+  'v8_revision': '0b8651ca9ed0a692c111bf08ede1d3347e8c6a72',
   # 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.
@@ -52,11 +52,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'fe48632f2f47f9513c0557c331a8f346ed92c82d',
+  'angle_revision': 'bf67aa801a19e4d3877871bfea6a209226b94759',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
-  'buildtools_revision': 'e6b510a9daf822bbe9f922c200c58150803d2fd8',
+  'buildtools_revision': 'd3074448541662f242bcee623049c13a231b5648',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -64,7 +64,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '0e5d892fe86d7c2527d8f7b7ac2c5aa8fc77a7be',
+  'pdfium_revision': 'c4a2b7518949df00651aa3513c93079f1968441e',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -96,7 +96,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': 'fc76e21e74786edfd16ae1a9f4f661a22cb7b5be',
+  'catapult_revision': '5c399d8801ada5b88f1153fd3fb646bd7eb395e2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -196,13 +196,13 @@
     Var('chromium_git') + '/external/bidichecker/lib.git' + '@' + '97f2aa645b74c28c57eca56992235c79850fa9e0',
 
   'src/third_party/webgl/src':
-    Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'd0783b85bd445f700576dba25bf452d58c112d33',
+    Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '32cfddc9e452c93bcbe443d6ddcc0c18ac556501',
 
   'src/third_party/webdriver/pylib':
     Var('chromium_git') + '/external/selenium/py.git' + '@' + '5fd78261a75fe08d27ca4835fb6c5ce4b42275bd',
 
   'src/third_party/libvpx/source/libvpx':
-    Var('chromium_git') + '/webm/libvpx.git' + '@' +  '32b3d2f174f69f1484e024b276aff9226a751d4f',
+    Var('chromium_git') + '/webm/libvpx.git' + '@' +  '6af42f5102ad7c00d3fed389b186663a88d812ee',
 
   'src/third_party/ffmpeg':
     Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + '9751ef06f90fb7ebf02b4e9ecc963a4e36a221d3',
@@ -232,7 +232,7 @@
     Var('chromium_git') + '/native_client/src/third_party/scons-2.0.1.git' + '@' + '1c1550e17fc26355d08627fbdec13d8291227067',
 
   'src/third_party/webrtc':
-    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '05fb319d932116ccd7fe4d27d420e9694c560d69', # commit position 17589
+    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '4b544defc44efd77c96a63c199c7edbda8e7e69c', # commit position 17592
 
   'src/third_party/openmax_dl':
     Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' +  Var('openmax_dl_revision'),
diff --git a/WATCHLISTS b/WATCHLISTS
index dd6d356..0a62c83d 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -836,8 +836,9 @@
       'filepath': 'chrome/browser/ui/page_info/'\
                   '|chrome/browser/ui/.*/page_info/'\
                   '|chrome/android/java/src/org/chromium/chrome/browser/page_info/'\
+                  '|components/page_info_strings.grdp'\
                   '|ios/chrome/browser/ui/omnibox/page_info_'
-  },
+    },
     'page_load_metrics' : {
       'filepath': 'chrome/browser/page_load_metrics/'\
                   '|chrome/common/page_load_metrics/'\
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsGarbageCollectionTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsGarbageCollectionTest.java
index cb5c93d..566b60f 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsGarbageCollectionTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsGarbageCollectionTest.java
@@ -132,9 +132,7 @@
             resultReceivers[i] = runTestOnUiThreadAndGetResult(new Callable<ResultReceiver>() {
                 @Override
                 public ResultReceiver call() throws Exception {
-                    return containerView.getContentViewCore()
-                            .getImeAdapterForTest()
-                            .getNewShowKeyboardReceiver();
+                    return containerView.getContentViewCore().getNewShowKeyboardReceiver();
                 }
             });
         }
@@ -275,3 +273,4 @@
         assertTrue(criteria.isSatisfied());
     }
 }
+
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index 86afc07..bcd1472 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -342,6 +342,12 @@
       <message name="IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGHLIGHT_KEYBOARD_FOCUS" desc="The label used in the additional settings of accessibility menu of the system tray to toggle on/off highlight keyboard focus.">
         Highlight object with keyboard focus
       </message>
+      <message name="IDS_ASH_STATUS_TRAY_ACCESSIBILITY_STICKY_KEYS" desc="The label used in the additional settings of accessibility menu of the system tray to toggle on/off sticky keys.">
+        Sticky keys
+      </message>
+      <message name="IDS_ASH_STATUS_TRAY_ACCESSIBILITY_TAP_DRAGGING" desc="The label used in the additional settings of accessibility menu of the system tray to toggle on/off tap dragging.">
+        Tap dragging
+      </message>
       <message name="IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SETTINGS" desc="The label used in the accessibility menu of system tray to open accessibility setting page.">
         Accessibility settings
       </message>
diff --git a/ash/autoclick/mus/autoclick_application.cc b/ash/autoclick/mus/autoclick_application.cc
index f49a0476..f38b6a76 100644
--- a/ash/autoclick/mus/autoclick_application.cc
+++ b/ash/autoclick/mus/autoclick_application.cc
@@ -78,7 +78,10 @@
 };
 
 AutoclickApplication::AutoclickApplication()
-    : launchable_binding_(this), autoclick_binding_(this) {}
+    : launchable_binding_(this), autoclick_binding_(this) {
+  registry_.AddInterface<mash::mojom::Launchable>(this);
+  registry_.AddInterface<mojom::AutoclickController>(this);
+}
 
 AutoclickApplication::~AutoclickApplication() {}
 
@@ -90,12 +93,12 @@
       base::TimeDelta::FromMilliseconds(kDefaultAutoclickDelayMs), this));
 }
 
-bool AutoclickApplication::OnConnect(
+void AutoclickApplication::OnBindInterface(
     const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mash::mojom::Launchable>(this);
-  registry->AddInterface<mojom::AutoclickController>(this);
-  return true;
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(remote_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void AutoclickApplication::Launch(uint32_t what, mash::mojom::LaunchMode how) {
diff --git a/ash/autoclick/mus/autoclick_application.h b/ash/autoclick/mus/autoclick_application.h
index c5d9599..335c5b4 100644
--- a/ash/autoclick/mus/autoclick_application.h
+++ b/ash/autoclick/mus/autoclick_application.h
@@ -13,8 +13,8 @@
 #include "base/macros.h"
 #include "mash/public/interfaces/launchable.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/identity.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 
 namespace views {
@@ -39,8 +39,9 @@
  private:
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& remote_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // mojom::Launchable:
   void Launch(uint32_t what, mash::mojom::LaunchMode how) override;
@@ -65,6 +66,7 @@
                    const int mouse_event_flags) override;
   void OnAutoclickCanceled() override;
 
+  service_manager::BinderRegistry registry_;
   mojo::Binding<mash::mojom::Launchable> launchable_binding_;
   mojo::Binding<mojom::AutoclickController> autoclick_binding_;
 
diff --git a/ash/common/accelerators/debug_commands.cc b/ash/common/accelerators/debug_commands.cc
index fbbffef..60a91e3 100644
--- a/ash/common/accelerators/debug_commands.cc
+++ b/ash/common/accelerators/debug_commands.cc
@@ -35,26 +35,27 @@
 namespace {
 
 void HandlePrintLayerHierarchy() {
-  for (WmWindow* root : WmShell::Get()->GetAllRootWindows()) {
-    ui::Layer* layer = root->GetLayer();
+  for (aura::Window* root : Shell::Get()->GetAllRootWindows()) {
+    ui::Layer* layer = root->layer();
     if (layer)
       ui::PrintLayerHierarchy(
-          layer, root->GetRootWindowController()->GetLastMouseLocationInRoot());
+          layer,
+          RootWindowController::ForWindow(root)->GetLastMouseLocationInRoot());
   }
 }
 
 void HandlePrintViewHierarchy() {
-  WmWindow* active_window = WmWindow::Get(wm::GetActiveWindow());
+  aura::Window* active_window = wm::GetActiveWindow();
   if (!active_window)
     return;
-  views::Widget* widget = active_window->GetInternalWidget();
+  views::Widget* widget = WmWindow::Get(active_window)->GetInternalWidget();
   if (!widget)
     return;
   views::PrintViewHierarchy(widget->GetRootView());
 }
 
-void PrintWindowHierarchy(const WmWindow* active_window,
-                          WmWindow* window,
+void PrintWindowHierarchy(const aura::Window* active_window,
+                          aura::Window* window,
                           int indent,
                           std::ostringstream* out) {
   std::string indent_str(indent, ' ');
@@ -62,23 +63,22 @@
   if (name.empty())
     name = "\"\"";
   *out << indent_str << name << " (" << window << ")"
-       << " type=" << window->GetType()
+       << " type=" << window->type()
        << ((window == active_window) ? " [active] " : " ")
        << (window->IsVisible() ? " visible " : " ")
-       << window->GetBounds().ToString()
-       << (window->aura_window()->GetProperty(kSnapChildrenToPixelBoundary)
-               ? " [snapped] "
-               : "")
+       << window->bounds().ToString()
+       << (window->GetProperty(kSnapChildrenToPixelBoundary) ? " [snapped] "
+                                                             : "")
        << ", subpixel offset="
-       << window->GetLayer()->subpixel_position_offset().ToString() << '\n';
+       << window->layer()->subpixel_position_offset().ToString() << '\n';
 
-  for (WmWindow* child : window->GetChildren())
+  for (aura::Window* child : window->children())
     PrintWindowHierarchy(active_window, child, indent + 3, out);
 }
 
 void HandlePrintWindowHierarchy() {
-  WmWindow* active_window = WmWindow::Get(wm::GetActiveWindow());
-  WmWindow::Windows roots = WmShell::Get()->GetAllRootWindows();
+  aura::Window* active_window = wm::GetActiveWindow();
+  aura::Window::Windows roots = Shell::Get()->GetAllRootWindows();
   for (size_t i = 0; i < roots.size(); ++i) {
     std::ostringstream out;
     out << "RootWindow " << i << ":\n";
diff --git a/ash/common/accessibility_delegate.h b/ash/common/accessibility_delegate.h
index 25c0665..e7bc2de 100644
--- a/ash/common/accessibility_delegate.h
+++ b/ash/common/accessibility_delegate.h
@@ -84,6 +84,18 @@
   // Returns if focus highlighting is enabled.
   virtual bool IsFocusHighlightEnabled() const = 0;
 
+  // Invoked to enable or disable sticky keys.
+  virtual void SetStickyKeysEnabled(bool enabled) = 0;
+
+  // Returns if sticky keys is enabled.
+  virtual bool IsStickyKeysEnabled() const = 0;
+
+  // Invoked to enable or disable tap dragging.
+  virtual void SetTapDraggingEnabled(bool enabled) = 0;
+
+  // Returns if tap dragging is enabled.
+  virtual bool IsTapDraggingEnabled() const = 0;
+
   // Invoked to enable or disable select-to-speak.
   virtual void SetSelectToSpeakEnabled(bool enabled) = 0;
 
diff --git a/ash/common/default_accessibility_delegate.cc b/ash/common/default_accessibility_delegate.cc
index 6a1bd37..0c21c05 100644
--- a/ash/common/default_accessibility_delegate.cc
+++ b/ash/common/default_accessibility_delegate.cc
@@ -96,6 +96,22 @@
   return focus_highligh_enabled_;
 }
 
+void DefaultAccessibilityDelegate::SetStickyKeysEnabled(bool enabled) {
+  sticky_keys_enabled_ = enabled;
+}
+
+bool DefaultAccessibilityDelegate::IsStickyKeysEnabled() const {
+  return sticky_keys_enabled_;
+}
+
+void DefaultAccessibilityDelegate::SetTapDraggingEnabled(bool enabled) {
+  tap_dragging_enabled_ = enabled;
+}
+
+bool DefaultAccessibilityDelegate::IsTapDraggingEnabled() const {
+  return tap_dragging_enabled_;
+}
+
 void DefaultAccessibilityDelegate::SetSelectToSpeakEnabled(bool enabled) {
   select_to_speak_enabled_ = enabled;
 }
diff --git a/ash/common/default_accessibility_delegate.h b/ash/common/default_accessibility_delegate.h
index 46af280..d9f920c 100644
--- a/ash/common/default_accessibility_delegate.h
+++ b/ash/common/default_accessibility_delegate.h
@@ -38,6 +38,10 @@
   bool IsCursorHighlightEnabled() const override;
   void SetFocusHighlightEnabled(bool enabled) override;
   bool IsFocusHighlightEnabled() const override;
+  void SetStickyKeysEnabled(bool enabled) override;
+  bool IsStickyKeysEnabled() const override;
+  void SetTapDraggingEnabled(bool enabled) override;
+  bool IsTapDraggingEnabled() const override;
   void SetSelectToSpeakEnabled(bool enabled) override;
   bool IsSelectToSpeakEnabled() const override;
   void SetSwitchAccessEnabled(bool enabled) override;
@@ -70,6 +74,8 @@
   bool caret_highlight_enabled_ = false;
   bool cursor_highlight_enabled_ = false;
   bool focus_highligh_enabled_ = false;
+  bool sticky_keys_enabled_ = false;
+  bool tap_dragging_enabled_ = false;
   bool select_to_speak_enabled_ = false;
   bool switch_access_enabled_ = false;
   AccessibilityAlert accessibility_alert_ = A11Y_ALERT_NONE;
diff --git a/ash/common/devtools/ash_devtools_dom_agent.cc b/ash/common/devtools/ash_devtools_dom_agent.cc
index 058f10e..5254fbc 100644
--- a/ash/common/devtools/ash_devtools_dom_agent.cc
+++ b/ash/common/devtools/ash_devtools_dom_agent.cc
@@ -41,7 +41,7 @@
 std::unique_ptr<Array<std::string>> GetAttributes(const ash::WmWindow* window) {
   std::unique_ptr<Array<std::string>> attributes = Array<std::string>::create();
   attributes->addItem("name");
-  attributes->addItem(window->GetName());
+  attributes->addItem(window->aura_window()->GetName());
   attributes->addItem("active");
   attributes->addItem(window->IsActive() ? "true" : "false");
   return attributes;
diff --git a/ash/common/devtools/ash_devtools_unittest.cc b/ash/common/devtools/ash_devtools_unittest.cc
index 4ae947a..1b11d26 100644
--- a/ash/common/devtools/ash_devtools_unittest.cc
+++ b/ash/common/devtools/ash_devtools_unittest.cc
@@ -83,7 +83,7 @@
   if (window->GetInternalWidget())
     children_count++;
   return "Window" == node->getNodeName() &&
-         window->GetName() == GetAttributeValue("name", node) &&
+         window->aura_window()->GetName() == GetAttributeValue("name", node) &&
          children_count == node->getChildNodeCount(kDefaultChildNodeCount);
 }
 
@@ -140,7 +140,7 @@
           ->GetChildByShellWindowId(kShellWindowId_OverlayContainer)
           ->GetChildren();
   for (WmWindow* window : overlay_windows) {
-    if (window->GetName() == "HighlightingWidget")
+    if (window->aura_window()->GetName() == "HighlightingWidget")
       return window;
   }
   NOTREACHED();
@@ -298,10 +298,10 @@
   std::unique_ptr<views::Widget> widget(
       CreateTestWidget(gfx::Rect(1, 1, 1, 1)));
   WmWindow* parent_window = WmWindow::Get(widget->GetNativeWindow());
-  parent_window->SetName("parent_window");
+  parent_window->aura_window()->SetName("parent_window");
   std::unique_ptr<WindowOwner> child_owner(CreateChildWindow(parent_window));
   WmWindow* child_window = child_owner->window();
-  child_window->SetName("child_window");
+  child_window->aura_window()->SetName("child_window");
   widget->Show();
   views::View* child_view = new TestView("child_view");
   widget->GetRootView()->AddChildView(child_view);
diff --git a/ash/common/metrics/user_metrics_action.h b/ash/common/metrics/user_metrics_action.h
index 1164d6b..a472595b 100644
--- a/ash/common/metrics/user_metrics_action.h
+++ b/ash/common/metrics/user_metrics_action.h
@@ -75,6 +75,8 @@
   UMA_STATUS_AREA_DISABLE_MAGNIFIER,
   UMA_STATUS_AREA_DISABLE_MONO_AUDIO,
   UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK,
+  UMA_STATUS_AREA_DISABLE_STICKY_KEYS,
+  UMA_STATUS_AREA_DISABLE_TAP_DRAGGING,
   UMA_STATUS_AREA_DISABLE_WIFI,
   UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD,
   UMA_STATUS_AREA_DISPLAY_DEFAULT_SELECTED,
@@ -93,6 +95,8 @@
   UMA_STATUS_AREA_ENABLE_MAGNIFIER,
   UMA_STATUS_AREA_ENABLE_MONO_AUDIO,
   UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK,
+  UMA_STATUS_AREA_ENABLE_STICKY_KEYS,
+  UMA_STATUS_AREA_ENABLE_TAP_DRAGGING,
   UMA_STATUS_AREA_ENABLE_WIFI,
   UMA_STATUS_AREA_ENABLE_VIRTUAL_KEYBOARD,
   UMA_STATUS_AREA_IME_SHOW_DETAILED,
diff --git a/ash/common/mojo_interface_factory.cc b/ash/common/mojo_interface_factory.cc
index b7ec654..7bee749 100644
--- a/ash/common/mojo_interface_factory.cc
+++ b/ash/common/mojo_interface_factory.cc
@@ -21,7 +21,7 @@
 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h"
 #include "ash/shell.h"
 #include "base/bind.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "ui/app_list/presenter/app_list.h"
 
 namespace ash {
@@ -93,7 +93,7 @@
 namespace mojo_interface_factory {
 
 void RegisterInterfaces(
-    service_manager::InterfaceRegistry* registry,
+    service_manager::BinderRegistry* registry,
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) {
   registry->AddInterface(
       base::Bind(&BindAcceleratorControllerRequestOnMainThread),
diff --git a/ash/common/mojo_interface_factory.h b/ash/common/mojo_interface_factory.h
index 0851eb3..f47f131 100644
--- a/ash/common/mojo_interface_factory.h
+++ b/ash/common/mojo_interface_factory.h
@@ -14,7 +14,7 @@
 }
 
 namespace service_manager {
-class InterfaceRegistry;
+class BinderRegistry;
 }
 
 namespace ash {
@@ -25,7 +25,7 @@
 // (when running ash in-process in chrome) or on the main thread (when running
 // in mash).
 ASH_EXPORT void RegisterInterfaces(
-    service_manager::InterfaceRegistry* registry,
+    service_manager::BinderRegistry* registry,
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner);
 
 }  // namespace mojo_interface_factory
diff --git a/ash/common/shelf/shelf_model.cc b/ash/common/shelf/shelf_model.cc
index 640674ee..acc2c10 100644
--- a/ash/common/shelf/shelf_model.cc
+++ b/ash/common/shelf/shelf_model.cc
@@ -70,10 +70,7 @@
   DCHECK(index >= 0 && index < item_count());
   ShelfItem old_item(items_[index]);
   items_.erase(items_.begin() + index);
-  RemoveShelfItemDelegate(old_item.id);
-  // TODO(jamescook): Fold this into ShelfItemRemoved in existing observers.
-  for (auto& observer : observers_)
-    observer.OnSetShelfItemDelegate(old_item.id, nullptr);
+  id_to_item_delegate_map_.erase(old_item.id);
   for (auto& observer : observers_)
     observer.ShelfItemRemoved(index, old_item);
 }
@@ -160,14 +157,9 @@
 void ShelfModel::SetShelfItemDelegate(
     ShelfID id,
     std::unique_ptr<ShelfItemDelegate> item_delegate) {
-  // If another ShelfItemDelegate is already registered for |id|, we assume
-  // that this request is replacing ShelfItemDelegate for |id| with
-  // |item_delegate|.
-  RemoveShelfItemDelegate(id);
-
-  for (auto& observer : observers_)
-    observer.OnSetShelfItemDelegate(id, item_delegate.get());
-
+  if (item_delegate)
+    item_delegate->set_shelf_id(id);
+  // This assignment replaces any ShelfItemDelegate already registered for |id|.
   id_to_item_delegate_map_[id] = std::move(item_delegate);
 }
 
@@ -203,9 +195,4 @@
   return index;
 }
 
-void ShelfModel::RemoveShelfItemDelegate(ShelfID id) {
-  if (id_to_item_delegate_map_.find(id) != id_to_item_delegate_map_.end())
-    id_to_item_delegate_map_.erase(id);
-}
-
 }  // namespace ash
diff --git a/ash/common/shelf/shelf_model_observer.h b/ash/common/shelf/shelf_model_observer.h
index 194e202..9953513 100644
--- a/ash/common/shelf/shelf_model_observer.h
+++ b/ash/common/shelf/shelf_model_observer.h
@@ -11,7 +11,6 @@
 namespace ash {
 
 struct ShelfItem;
-class ShelfItemDelegate;
 
 class ASH_EXPORT ShelfModelObserver {
  public:
@@ -26,17 +25,9 @@
   // of the arguments.
   virtual void ShelfItemMoved(int start_index, int target_index) = 0;
 
-  // Invoked when the state of an item changes. |old_item| is the item
-  // before the change.
+  // Invoked after an item changes. |old_item| is the item before the change.
   virtual void ShelfItemChanged(int index, const ShelfItem& old_item) = 0;
 
-  // Gets called when a ShelfItemDelegate gets changed. Note that
-  // |item_delegate| can be null.
-  // NOTE: This is added a temporary fix for M39 to fix crbug.com/429870.
-  // TODO(skuhne): Find the real reason for this problem and remove this fix.
-  virtual void OnSetShelfItemDelegate(ShelfID id,
-                                      ShelfItemDelegate* item_delegate) = 0;
-
  protected:
   virtual ~ShelfModelObserver() {}
 };
diff --git a/ash/common/shelf/shelf_model_unittest.cc b/ash/common/shelf/shelf_model_unittest.cc
index 2f46faee..bbd69c7b 100644
--- a/ash/common/shelf/shelf_model_unittest.cc
+++ b/ash/common/shelf/shelf_model_unittest.cc
@@ -37,7 +37,6 @@
   void ShelfItemRemoved(int, const ShelfItem&) override { removed_count_++; }
   void ShelfItemChanged(int, const ShelfItem&) override { changed_count_++; }
   void ShelfItemMoved(int, int) override { moved_count_++; }
-  void OnSetShelfItemDelegate(ShelfID, ShelfItemDelegate*) override {}
 
  private:
   void AddToResult(const std::string& format, int count, std::string* result) {
diff --git a/ash/common/shelf/shelf_view.cc b/ash/common/shelf/shelf_view.cc
index 29cb970..0256cbd 100644
--- a/ash/common/shelf/shelf_view.cc
+++ b/ash/common/shelf/shelf_view.cc
@@ -1591,8 +1591,6 @@
     AnimateToIdealBounds();
 }
 
-void ShelfView::OnSetShelfItemDelegate(ShelfID, ShelfItemDelegate*) {}
-
 void ShelfView::AfterItemSelected(
     const ShelfItem& item,
     views::Button* sender,
diff --git a/ash/common/shelf/shelf_view.h b/ash/common/shelf/shelf_view.h
index 6115d39..ef004a4 100644
--- a/ash/common/shelf/shelf_view.h
+++ b/ash/common/shelf/shelf_view.h
@@ -289,7 +289,6 @@
   void ShelfItemRemoved(int model_index, const ShelfItem& old_item) override;
   void ShelfItemChanged(int model_index, const ShelfItem& old_item) override;
   void ShelfItemMoved(int start_index, int target_index) override;
-  void OnSetShelfItemDelegate(ShelfID, ShelfItemDelegate*) override;
 
   // Handles the result of an item selection, records the |action| taken and
   // optionally shows an application menu with the given |menu_items|.
diff --git a/ash/common/system/chromeos/audio/audio_detailed_view.cc b/ash/common/system/chromeos/audio/audio_detailed_view.cc
index 4772e8a..c17da9c 100644
--- a/ash/common/system/chromeos/audio/audio_detailed_view.cc
+++ b/ash/common/system/chromeos/audio/audio_detailed_view.cc
@@ -110,17 +110,7 @@
   HoverHighlightView* container = new HoverHighlightView(this);
 
   container->AddLabelRow(text);
-  if (checked) {
-    gfx::ImageSkia check_mark =
-        gfx::CreateVectorIcon(kCheckCircleIcon, gfx::kGoogleGreen700);
-    container->AddRightIcon(check_mark, check_mark.width());
-    container->SetRightViewVisible(true);
-    container->SetAccessiblityState(
-        HoverHighlightView::AccessibilityState::CHECKED_CHECKBOX);
-  } else {
-    container->SetAccessiblityState(
-        HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX);
-  }
+  TrayPopupUtils::InitializeAsCheckableRow(container, checked);
 
   scroll_content()->AddChildView(container);
   return container;
diff --git a/ash/common/system/chromeos/palette/common_palette_tool.cc b/ash/common/system/chromeos/palette/common_palette_tool.cc
index b8a0493..9653b0b 100644
--- a/ash/common/system/chromeos/palette/common_palette_tool.cc
+++ b/ash/common/system/chromeos/palette/common_palette_tool.cc
@@ -9,6 +9,7 @@
 #include "ash/common/system/chromeos/palette/palette_tool_manager.h"
 #include "ash/common/system/tray/hover_highlight_view.h"
 #include "ash/common/system/tray/tray_constants.h"
+#include "ash/common/system/tray/tray_popup_utils.h"
 #include "ash/common/system/tray/view_click_listener.h"
 #include "ash/resources/grit/ash_resources.h"
 #include "ash/resources/vector_icons/vector_icons.h"
@@ -51,22 +52,16 @@
   PaletteTool::OnEnable();
   start_time_ = base::TimeTicks::Now();
 
-  if (highlight_view_) {
-    highlight_view_->SetRightViewVisible(true);
-    highlight_view_->SetAccessiblityState(
-        HoverHighlightView::AccessibilityState::CHECKED_CHECKBOX);
-  }
+  if (highlight_view_)
+    TrayPopupUtils::UpdateCheckMarkVisibility(highlight_view_, true);
 }
 
 void CommonPaletteTool::OnDisable() {
   PaletteTool::OnDisable();
   AddHistogramTimes(GetToolId(), base::TimeTicks::Now() - start_time_);
 
-  if (highlight_view_) {
-    highlight_view_->SetRightViewVisible(false);
-    highlight_view_->SetAccessiblityState(
-        HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX);
-  }
+  if (highlight_view_)
+    TrayPopupUtils::UpdateCheckMarkVisibility(highlight_view_, false);
 }
 
 void CommonPaletteTool::OnViewClicked(views::View* sender) {
@@ -85,23 +80,13 @@
 views::View* CommonPaletteTool::CreateDefaultView(const base::string16& name) {
   gfx::ImageSkia icon =
       CreateVectorIcon(GetPaletteIcon(), kMenuIconSize, gfx::kChromeIconGrey);
-  gfx::ImageSkia check =
-      CreateVectorIcon(kCheckCircleIcon, kMenuIconSize, gfx::kGoogleGreen700);
 
   highlight_view_ = new HoverHighlightView(this);
   highlight_view_->SetBorder(views::CreateEmptyBorder(0, 0, 0, 0));
   highlight_view_->AddIconAndLabel(icon, name);
-  highlight_view_->AddRightIcon(check, kMenuIconSize);
   highlight_view_->set_custom_height(kMenuButtonSize);
 
-  if (enabled()) {
-    highlight_view_->SetAccessiblityState(
-        HoverHighlightView::AccessibilityState::CHECKED_CHECKBOX);
-  } else {
-    highlight_view_->SetRightViewVisible(false);
-    highlight_view_->SetAccessiblityState(
-        HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX);
-  }
+  TrayPopupUtils::InitializeAsCheckableRow(highlight_view_, enabled());
 
   return highlight_view_;
 }
diff --git a/ash/common/system/tray/tray_popup_utils.cc b/ash/common/system/tray/tray_popup_utils.cc
index 98e9fdb..56e0e68d 100644
--- a/ash/common/system/tray/tray_popup_utils.cc
+++ b/ash/common/system/tray/tray_popup_utils.cc
@@ -11,6 +11,7 @@
 #include "ash/common/ash_view_ids.h"
 #include "ash/common/session/session_controller.h"
 #include "ash/common/system/tray/fixed_sized_image_view.h"
+#include "ash/common/system/tray/hover_highlight_view.h"
 #include "ash/common/system/tray/size_range_layout.h"
 #include "ash/common/system/tray/tray_constants.h"
 #include "ash/common/system/tray/tray_popup_item_style.h"
@@ -18,6 +19,7 @@
 #include "ash/shell.h"
 #include "base/memory/ptr_util.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/color_palette.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/animation/flood_fill_ink_drop_ripple.h"
 #include "ui/views/animation/ink_drop_highlight.h"
@@ -434,4 +436,20 @@
          !Shell::Get()->session_controller()->IsInSecondaryLoginScreen();
 }
 
+void TrayPopupUtils::InitializeAsCheckableRow(HoverHighlightView* container,
+                                              bool checked) {
+  gfx::ImageSkia check_mark =
+      CreateVectorIcon(kCheckCircleIcon, gfx::kGoogleGreen700);
+  container->AddRightIcon(check_mark, check_mark.width());
+  UpdateCheckMarkVisibility(container, checked);
+}
+
+void TrayPopupUtils::UpdateCheckMarkVisibility(HoverHighlightView* container,
+                                               bool visible) {
+  container->SetRightViewVisible(visible);
+  container->SetAccessiblityState(
+      visible ? HoverHighlightView::AccessibilityState::CHECKED_CHECKBOX
+              : HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX);
+}
+
 }  // namespace ash
diff --git a/ash/common/system/tray/tray_popup_utils.h b/ash/common/system/tray/tray_popup_utils.h
index ecec2227..bd7ceb3 100644
--- a/ash/common/system/tray/tray_popup_utils.h
+++ b/ash/common/system/tray/tray_popup_utils.h
@@ -32,6 +32,7 @@
 }  // namespace views
 
 namespace ash {
+class HoverHighlightView;
 
 // Factory/utility functions used by the system menu.
 class TrayPopupUtils {
@@ -203,6 +204,15 @@
   // account flow.
   static bool CanOpenWebUISettings(LoginStatus status);
 
+  // Initializes a row in the system menu as checkable and update the check mark
+  // status of this row.
+  static void InitializeAsCheckableRow(HoverHighlightView* container,
+                                       bool checked);
+
+  // Updates the visibility and a11y state of the checkable row |container|.
+  static void UpdateCheckMarkVisibility(HoverHighlightView* container,
+                                        bool visible);
+
  private:
   // Returns the effective ink drop insets for |host| according to the
   // |ink_drop_style|.
diff --git a/ash/common/system/tray_accessibility.cc b/ash/common/system/tray_accessibility.cc
index 3d32c7a..790b225 100644
--- a/ash/common/system/tray_accessibility.cc
+++ b/ash/common/system/tray_accessibility.cc
@@ -25,7 +25,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/color_palette.h"
 #include "ui/gfx/image/image.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/resources/grit/ui_resources.h"
@@ -54,6 +53,8 @@
   A11Y_CARET_HIGHLIGHT = 1 << 8,
   A11Y_HIGHLIGHT_MOUSE_CURSOR = 1 << 9,
   A11Y_HIGHLIGHT_KEYBOARD_FOCUS = 1 << 10,
+  A11Y_STICKY_KEYS = 1 << 11,
+  A11Y_TAP_DRAGGING = 1 << 12,
 };
 
 uint32_t GetAccessibilityState() {
@@ -81,6 +82,10 @@
     state |= A11Y_HIGHLIGHT_MOUSE_CURSOR;
   if (delegate->IsFocusHighlightEnabled())
     state |= A11Y_HIGHLIGHT_KEYBOARD_FOCUS;
+  if (delegate->IsStickyKeysEnabled())
+    state |= A11Y_STICKY_KEYS;
+  if (delegate->IsTapDraggingEnabled())
+    state |= A11Y_TAP_DRAGGING;
   return state;
 }
 
@@ -88,20 +93,6 @@
   return Shell::Get()->system_tray_delegate()->GetUserLoginStatus();
 }
 
-void UpdateCheckMark(HoverHighlightView* container, bool checked) {
-  if (checked) {
-    gfx::ImageSkia check_mark =
-        CreateVectorIcon(kCheckCircleIcon, gfx::kGoogleGreen700);
-    container->AddRightIcon(check_mark, check_mark.width());
-    container->SetRightViewVisible(true);
-    container->SetAccessiblityState(
-        HoverHighlightView::AccessibilityState::CHECKED_CHECKBOX);
-  } else {
-    container->SetAccessiblityState(
-        HoverHighlightView::AccessibilityState::UNCHECKED_CHECKBOX);
-  }
-}
-
 }  // namespace
 
 namespace tray {
@@ -291,6 +282,16 @@
             IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGHLIGHT_KEYBOARD_FOCUS),
         highlight_keyboard_focus_enabled_);
   }
+
+  sticky_keys_enabled_ = delegate->IsStickyKeysEnabled();
+  sticky_keys_view_ = AddScrollListItemWithoutIcon(
+      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_STICKY_KEYS),
+      sticky_keys_enabled_);
+
+  tap_dragging_enabled_ = delegate->IsTapDraggingEnabled();
+  tap_dragging_view_ = AddScrollListItemWithoutIcon(
+      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_TAP_DRAGGING),
+      tap_dragging_enabled_);
 }
 
 HoverHighlightView* AccessibilityDetailedView::AddScrollListItem(
@@ -300,7 +301,7 @@
   HoverHighlightView* container = new HoverHighlightView(this);
   gfx::ImageSkia image = CreateVectorIcon(icon, kMenuIconColor);
   container->AddIconAndLabel(image, text);
-  UpdateCheckMark(container, checked);
+  TrayPopupUtils::InitializeAsCheckableRow(container, checked);
   scroll_content()->AddChildView(container);
   return container;
 }
@@ -310,9 +311,7 @@
     bool checked) {
   HoverHighlightView* container = new HoverHighlightView(this);
   container->AddLabelRow(text);
-
-  UpdateCheckMark(container, checked);
-
+  TrayPopupUtils::InitializeAsCheckableRow(container, checked);
   scroll_content()->AddChildView(container);
   return container;
 }
@@ -386,6 +385,16 @@
                       ? ash::UMA_STATUS_AREA_DISABLE_HIGHLIGHT_KEYBOARD_FOCUS
                       : ash::UMA_STATUS_AREA_ENABLE_HIGHLIGHT_KEYBOARD_FOCUS;
     delegate->SetFocusHighlightEnabled(!delegate->IsFocusHighlightEnabled());
+  } else if (sticky_keys_view_ && view == sticky_keys_view_) {
+    user_action = delegate->IsStickyKeysEnabled()
+                      ? ash::UMA_STATUS_AREA_DISABLE_STICKY_KEYS
+                      : ash::UMA_STATUS_AREA_ENABLE_STICKY_KEYS;
+    delegate->SetStickyKeysEnabled(!delegate->IsStickyKeysEnabled());
+  } else if (tap_dragging_view_ && view == tap_dragging_view_) {
+    user_action = delegate->IsTapDraggingEnabled()
+                      ? ash::UMA_STATUS_AREA_DISABLE_TAP_DRAGGING
+                      : ash::UMA_STATUS_AREA_ENABLE_TAP_DRAGGING;
+    delegate->SetTapDraggingEnabled(!delegate->IsTapDraggingEnabled());
   } else {
     return;
   }
diff --git a/ash/common/system/tray_accessibility.h b/ash/common/system/tray_accessibility.h
index ac67a07..2321aa8 100644
--- a/ash/common/system/tray_accessibility.h
+++ b/ash/common/system/tray_accessibility.h
@@ -103,6 +103,8 @@
   views::View* caret_highlight_view_ = nullptr;
   views::View* highlight_mouse_cursor_view_ = nullptr;
   views::View* highlight_keyboard_focus_view_ = nullptr;
+  views::View* sticky_keys_view_ = nullptr;
+  views::View* tap_dragging_view_ = nullptr;
 
   bool spoken_feedback_enabled_ = false;
   bool high_contrast_enabled_ = false;
@@ -114,6 +116,8 @@
   bool caret_highlight_enabled_ = false;
   bool highlight_mouse_cursor_enabled_ = false;
   bool highlight_keyboard_focus_enabled_ = false;
+  bool sticky_keys_enabled_ = false;
+  bool tap_dragging_enabled_ = false;
   LoginStatus login_;
 
   friend class chromeos::TrayAccessibilityTest;
diff --git a/ash/common/wallpaper/wallpaper_controller_unittest.cc b/ash/common/wallpaper/wallpaper_controller_unittest.cc
index 13503743..895692e7 100644
--- a/ash/common/wallpaper/wallpaper_controller_unittest.cc
+++ b/ash/common/wallpaper/wallpaper_controller_unittest.cc
@@ -165,18 +165,15 @@
     gfx::Canvas canvas(size, device_scale_factor, true);
     view->OnPaint(&canvas);
 
-    int canvas_width = canvas.sk_canvas()->imageInfo().width();
-    int canvas_height = canvas.sk_canvas()->imageInfo().height();
-    SkBitmap bitmap;
-    bitmap.allocN32Pixels(canvas_width, canvas_height);
-    canvas.sk_canvas()->readPixels(&bitmap, 0, 0);
-
-    for (int i = 0; i < canvas_width; i++) {
-      for (int j = 0; j < canvas_height; j++) {
-        if (i >= (canvas_width - image_width) / 2 &&
-            i < (canvas_width + image_width) / 2 &&
-            j >= (canvas_height - image_height) / 2 &&
-            j < (canvas_height + image_height) / 2) {
+    SkBitmap bitmap = canvas.GetBitmap();
+    int bitmap_width = bitmap.width();
+    int bitmap_height = bitmap.height();
+    for (int i = 0; i < bitmap_width; i++) {
+      for (int j = 0; j < bitmap_height; j++) {
+        if (i >= (bitmap_width - image_width) / 2 &&
+            i < (bitmap_width + image_width) / 2 &&
+            j >= (bitmap_height - image_height) / 2 &&
+            j < (bitmap_height + image_height) / 2) {
           EXPECT_EQ(color, bitmap.getColor(i, j));
         } else {
           EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(i, j));
diff --git a/ash/common/wm/overview/window_grid.cc b/ash/common/wm/overview/window_grid.cc
index eb7dd5d..034ecda0 100644
--- a/ash/common/wm/overview/window_grid.cc
+++ b/ash/common/wm/overview/window_grid.cc
@@ -539,7 +539,8 @@
 void WindowGrid::FilterItems(const base::string16& pattern) {
   base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents finder(pattern);
   for (const auto& window : window_list_) {
-    if (finder.Search(window->GetWindow()->GetTitle(), nullptr, nullptr)) {
+    if (finder.Search(window->GetWindow()->aura_window()->GetTitle(), nullptr,
+                      nullptr)) {
       window->SetDimmed(false);
     } else {
       window->SetDimmed(true);
@@ -651,7 +652,7 @@
   WmWindow* widget_window = WmWindow::Get(shield_widget_->GetNativeWindow());
   const gfx::Rect bounds = widget_window->GetParent()->GetBounds();
   widget_window->SetBounds(bounds);
-  widget_window->SetName("OverviewModeShield");
+  widget_window->aura_window()->SetName("OverviewModeShield");
 
   ui::ScopedLayerAnimationSettings animation_settings(
       widget_window->GetLayer()->GetAnimator());
@@ -674,7 +675,7 @@
   gfx::Vector2d fade_out_direction =
       GetSlideVectorForFadeIn(direction, target_bounds);
   widget_window->SetBounds(target_bounds - fade_out_direction);
-  widget_window->SetName("OverviewModeSelector");
+  widget_window->aura_window()->SetName("OverviewModeSelector");
 
   selector_shadow_.reset(new ::wm::Shadow());
   selector_shadow_->Init(::wm::ShadowElevation::LARGE);
diff --git a/ash/common/wm/overview/window_selector_item.cc b/ash/common/wm/overview/window_selector_item.cc
index f6a7b94..02e5000 100644
--- a/ash/common/wm/overview/window_selector_item.cc
+++ b/ash/common/wm/overview/window_selector_item.cc
@@ -414,7 +414,7 @@
       close_button_(new OverviewCloseButton(this)),
       window_selector_(window_selector),
       background_view_(nullptr) {
-  CreateWindowLabel(window->GetTitle());
+  CreateWindowLabel(window->aura_window()->GetTitle());
   GetWindow()->aura_window()->AddObserver(this);
 }
 
@@ -725,7 +725,7 @@
 
 void WindowSelectorItem::UpdateAccessibilityName() {
   caption_container_view_->listener_button()->SetAccessibleName(
-      GetWindow()->GetTitle());
+      GetWindow()->aura_window()->GetTitle());
 }
 
 void WindowSelectorItem::FadeOut(std::unique_ptr<views::Widget> widget) {
diff --git a/ash/common/wm/window_cycle_list.cc b/ash/common/wm/window_cycle_list.cc
index 390bca8..c4841fd 100644
--- a/ash/common/wm/window_cycle_list.cc
+++ b/ash/common/wm/window_cycle_list.cc
@@ -70,7 +70,7 @@
         mirror_view_(window->CreateViewWithRecreatedLayers().release()),
         window_observer_(this) {
     window_observer_.Add(window->aura_window());
-    window_title_->SetText(window->GetTitle());
+    window_title_->SetText(window->aura_window()->GetTitle());
     window_title_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
     window_title_->SetEnabledColor(SK_ColorWHITE);
     window_title_->SetAutoColorReadabilityEnabled(false);
diff --git a/ash/common/wm_window.cc b/ash/common/wm_window.cc
index 5216083..0232ff8 100644
--- a/ash/common/wm_window.cc
+++ b/ash/common/wm_window.cc
@@ -158,22 +158,6 @@
   return WmShell::Get();
 }
 
-void WmWindow::SetName(const char* name) {
-  window_->SetName(name);
-}
-
-std::string WmWindow::GetName() const {
-  return window_->GetName();
-}
-
-void WmWindow::SetTitle(const base::string16& title) {
-  window_->SetTitle(title);
-}
-
-base::string16 WmWindow::GetTitle() const {
-  return window_->GetTitle();
-}
-
 void WmWindow::SetShellWindowId(int id) {
   window_->set_id(id);
 }
diff --git a/ash/common/wm_window.h b/ash/common/wm_window.h
index 3711ec6..8d7d716 100644
--- a/ash/common/wm_window.h
+++ b/ash/common/wm_window.h
@@ -113,13 +113,6 @@
   // TODO(sky): fix constness.
   WmShell* GetShell() const;
 
-  // Used for debugging.
-  void SetName(const char* name);
-  std::string GetName() const;
-
-  void SetTitle(const base::string16& title);
-  base::string16 GetTitle() const;
-
   // See shell_window_ids.h for list of known ids.
   void SetShellWindowId(int id);
   int GetShellWindowId() const;
diff --git a/ash/laser/laser_pointer_view.cc b/ash/laser/laser_pointer_view.cc
index d104eaff..026f950 100644
--- a/ash/laser/laser_pointer_view.cc
+++ b/ash/laser/laser_pointer_view.cc
@@ -568,7 +568,7 @@
         gfx::ScaleToEnclosingRect(update_rect, scale_factor_);
     uint8_t* data = static_cast<uint8_t*>(gpu_memory_buffer_->memory(0));
     int stride = gpu_memory_buffer_->stride(0);
-    canvas.sk_canvas()->readPixels(
+    canvas.GetBitmap().readPixels(
         SkImageInfo::MakeN32Premul(pixel_rect.width(), pixel_rect.height()),
         data + pixel_rect.y() * stride + pixel_rect.x() * 4, stride, 0, 0);
   }
diff --git a/ash/metrics/user_metrics_recorder.cc b/ash/metrics/user_metrics_recorder.cc
index 7ca11171..ed5af502 100644
--- a/ash/metrics/user_metrics_recorder.cc
+++ b/ash/metrics/user_metrics_recorder.cc
@@ -407,6 +407,12 @@
     case UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK:
       RecordAction(UserMetricsAction("StatusArea_SpokenFeedbackDisabled"));
       break;
+    case UMA_STATUS_AREA_DISABLE_STICKY_KEYS:
+      RecordAction(UserMetricsAction("StatusArea_StickyKeysDisabled"));
+      break;
+    case UMA_STATUS_AREA_DISABLE_TAP_DRAGGING:
+      RecordAction(UserMetricsAction("StatusArea_TapDraggingDisabled"));
+      break;
     case UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD:
       RecordAction(UserMetricsAction("StatusArea_VirtualKeyboardDisabled"));
       break;
@@ -466,6 +472,12 @@
     case UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK:
       RecordAction(UserMetricsAction("StatusArea_SpokenFeedbackEnabled"));
       break;
+    case UMA_STATUS_AREA_ENABLE_STICKY_KEYS:
+      RecordAction(UserMetricsAction("StatusArea_StickyKeysEnabled"));
+      break;
+    case UMA_STATUS_AREA_ENABLE_TAP_DRAGGING:
+      RecordAction(UserMetricsAction("StatusArea_TapDraggingEnabled"));
+      break;
     case UMA_STATUS_AREA_ENABLE_VIRTUAL_KEYBOARD:
       RecordAction(UserMetricsAction("StatusArea_VirtualKeyboardEnabled"));
       break;
diff --git a/ash/mus/window_manager_application.cc b/ash/mus/window_manager_application.cc
index b90425a48..933af35 100644
--- a/ash/mus/window_manager_application.cc
+++ b/ash/mus/window_manager_application.cc
@@ -112,6 +112,9 @@
 }
 
 void WindowManagerApplication::OnStart() {
+  mojo_interface_factory::RegisterInterfaces(
+      &registry_, base::ThreadTaskRunnerHandle::Get());
+
   aura_init_ = base::MakeUnique<views::AuraInit>(
       context()->connector(), context()->identity(), "ash_mus_resources.pak",
       "ash_mus_resources_200.pak", nullptr,
@@ -135,13 +138,12 @@
                     init_network_handler);
 }
 
-bool WindowManagerApplication::OnConnect(
-    const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
-  // Register services used in both classic ash and mash.
-  mojo_interface_factory::RegisterInterfaces(
-      registry, base::ThreadTaskRunnerHandle::Get());
-  return true;
+void WindowManagerApplication::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 }  // namespace mus
diff --git a/ash/mus/window_manager_application.h b/ash/mus/window_manager_application.h
index 6b23199..bbab43d 100644
--- a/ash/mus/window_manager_application.h
+++ b/ash/mus/window_manager_application.h
@@ -14,6 +14,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/tracing/public/cpp/provider.h"
 #include "services/ui/common/types.h"
@@ -70,8 +71,9 @@
 
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   tracing::Provider tracing_;
 
@@ -86,6 +88,8 @@
   std::unique_ptr<chromeos::system::ScopedFakeStatisticsProvider>
       statistics_provider_;
 
+  service_manager::BinderRegistry registry_;
+
   DISALLOW_COPY_AND_ASSIGN(WindowManagerApplication);
 };
 
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
index d3f4f493..5aa073c0 100644
--- a/ash/root_window_controller.cc
+++ b/ash/root_window_controller.cc
@@ -41,6 +41,7 @@
 #include "ash/common/wm_window.h"
 #include "ash/high_contrast/high_contrast_controller.h"
 #include "ash/host/ash_window_tree_host.h"
+#include "ash/public/cpp/config.h"
 #include "ash/public/cpp/shelf_types.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/root_window_settings.h"
@@ -251,7 +252,7 @@
 WmWindow* CreateContainer(int window_id, const char* name, WmWindow* parent) {
   aura::Window* window = new aura::Window(nullptr, ui::wm::WINDOW_TYPE_UNKNOWN);
   window->Init(ui::LAYER_NOT_DRAWN);
-  if (WmShell::Get()->IsRunningInMash()) {
+  if (Shell::GetAshConfig() != Config::CLASSIC) {
     aura::WindowPortMus::Get(window)->SetEventTargetingPolicy(
         ui::mojom::EventTargetingPolicy::DESCENDANTS_ONLY);
   }
diff --git a/ash/shell.cc b/ash/shell.cc
index 1d7e60c4..e9718cf 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -791,8 +791,6 @@
   wallpaper_delegate_ = shell_delegate_->CreateWallpaperDelegate();
 
   // Can be null in tests.
-  // TODO(jonross): reenable once the cause of crbug.com/707321 is determined.
-  /*
   if (wm_shell_->IsRunningInMash() && shell_delegate_->GetShellConnector()) {
     prefs::ConnectToPrefService(
         shell_delegate_->GetShellConnector(),
@@ -800,7 +798,7 @@
         std::vector<PrefValueStore::PrefStoreType>(),
         base::Bind(&Shell::OnPrefServiceInitialized, base::Unretained(this)),
         prefs::mojom::kForwarderServiceName);
-  }*/
+  }
 
   // Some delegates access WmShell during their construction. Create them here
   // instead of the WmShell constructor.
diff --git a/ash/touch_hud/mus/touch_hud_application.cc b/ash/touch_hud/mus/touch_hud_application.cc
index 2aab640..aaa9f3a 100644
--- a/ash/touch_hud/mus/touch_hud_application.cc
+++ b/ash/touch_hud/mus/touch_hud_application.cc
@@ -10,7 +10,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "services/service_manager/public/cpp/connector.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/ui/public/cpp/property_type_converters.h"
 #include "services/ui/public/interfaces/window_manager_constants.mojom.h"
@@ -62,7 +61,9 @@
   DISALLOW_COPY_AND_ASSIGN(TouchHudUI);
 };
 
-TouchHudApplication::TouchHudApplication() : binding_(this) {}
+TouchHudApplication::TouchHudApplication() : binding_(this) {
+  registry_.AddInterface<mash::mojom::Launchable>(this);
+}
 TouchHudApplication::~TouchHudApplication() {}
 
 void TouchHudApplication::OnStart() {
@@ -71,11 +72,12 @@
       std::string(), nullptr, views::AuraInit::Mode::AURA_MUS);
 }
 
-bool TouchHudApplication::OnConnect(
-    const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mash::mojom::Launchable>(this);
-  return true;
+void TouchHudApplication::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void TouchHudApplication::Launch(uint32_t what, mash::mojom::LaunchMode how) {
diff --git a/ash/touch_hud/mus/touch_hud_application.h b/ash/touch_hud/mus/touch_hud_application.h
index 8c45ece..dbe96bf 100644
--- a/ash/touch_hud/mus/touch_hud_application.h
+++ b/ash/touch_hud/mus/touch_hud_application.h
@@ -10,6 +10,7 @@
 #include "base/macros.h"
 #include "mash/public/interfaces/launchable.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 
@@ -32,8 +33,9 @@
  private:
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // mojom::Launchable:
   void Launch(uint32_t what, mash::mojom::LaunchMode how) override;
@@ -42,6 +44,7 @@
   void Create(const service_manager::Identity& remote_identity,
               mash::mojom::LaunchableRequest request) override;
 
+  service_manager::BinderRegistry registry_;
   mojo::Binding<mash::mojom::Launchable> binding_;
   views::Widget* widget_ = nullptr;
 
diff --git a/base/allocator/partition_allocator/partition_alloc.cc b/base/allocator/partition_allocator/partition_alloc.cc
index 439ce177..b13f36b 100644
--- a/base/allocator/partition_allocator/partition_alloc.cc
+++ b/base/allocator/partition_allocator/partition_alloc.cc
@@ -1051,8 +1051,13 @@
   // determine it is a win.
   if (actual_new_size == actual_old_size) {
     // Trying to allocate a block of size new_size would give us a block of
-    // the same size as the one we've already got, so no point in doing
-    // anything here.
+    // the same size as the one we've already got, so re-use the allocation
+    // after updating statistics (and cookies, if present).
+    PartitionPageSetRawSize(page, PartitionCookieSizeAdjustAdd(new_size));
+#if DCHECK_IS_ON()
+    // Write a new trailing cookie.
+    PartitionCookieWriteValue(static_cast<char*>(ptr) + new_size);
+#endif
     return ptr;
   }
 
diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc
index 1ed26bba..0507c0b4 100644
--- a/base/allocator/partition_allocator/partition_alloc_unittest.cc
+++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -2088,6 +2088,27 @@
   }
 }
 
+TEST(PartitionAllocTest, ReallocMovesCookies) {
+  TestSetup();
+
+  // Resize so as to be sure to hit a "resize in place" case, and ensure that
+  // use of the entire result is compatible with the debug mode's cookies, even
+  // when the bucket size is large enough to span more than one partition page
+  // and we can track the "raw" size. See https://crbug.com/709271
+  const size_t kSize = base::kMaxSystemPagesPerSlotSpan * base::kSystemPageSize;
+  void* ptr =
+      PartitionAllocGeneric(generic_allocator.root(), kSize + 1, type_name);
+  EXPECT_TRUE(ptr);
+
+  memset(ptr, 0xbd, kSize + 1);
+  ptr = PartitionReallocGeneric(generic_allocator.root(), ptr, kSize + 2,
+                                type_name);
+  EXPECT_TRUE(ptr);
+
+  memset(ptr, 0xbd, kSize + 2);
+  PartitionFreeGeneric(generic_allocator.root(), ptr);
+}
+
 }  // namespace base
 
 #endif  // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
diff --git a/base/android/callback_android.cc b/base/android/callback_android.cc
index 2326d85..a97deab 100644
--- a/base/android/callback_android.cc
+++ b/base/android/callback_android.cc
@@ -4,6 +4,8 @@
 
 #include "base/android/callback_android.h"
 
+#include "base/android/jni_array.h"
+#include "base/android/scoped_java_ref.h"
 #include "jni/Callback_jni.h"
 
 namespace base {
@@ -25,5 +27,13 @@
                                       callback, arg);
 }
 
+void RunCallbackAndroid(const JavaRef<jobject>& callback,
+                        const std::vector<uint8_t>& arg) {
+  JNIEnv* env = base::android::AttachCurrentThread();
+  base::android::ScopedJavaLocalRef<jbyteArray> j_bytes =
+      base::android::ToJavaByteArray(env, arg);
+  Java_Callback_onResultFromNativeV_AB(env, callback, j_bytes);
+}
+
 }  // namespace android
 }  // namespace base
diff --git a/base/android/callback_android.h b/base/android/callback_android.h
index f118827c..5cefe0f 100644
--- a/base/android/callback_android.h
+++ b/base/android/callback_android.h
@@ -6,24 +6,27 @@
 #define BASE_ANDROID_CALLBACK_ANDROID_H_
 
 #include <jni.h>
+#include <vector>
 
 #include "base/android/scoped_java_ref.h"
 #include "base/base_export.h"
 
+// Provides helper utility methods that run the given callback with the
+// specified argument.
 namespace base {
 namespace android {
 
-// Runs the given |callback| with the specified |arg|.
 void BASE_EXPORT RunCallbackAndroid(const JavaRef<jobject>& callback,
                                     const JavaRef<jobject>& arg);
 
-// Runs the given |callback| with the specified |arg|.
 void BASE_EXPORT RunCallbackAndroid(const JavaRef<jobject>& callback,
                                     bool arg);
 
-// Runs the given |callback| with the specified |arg|.
 void BASE_EXPORT RunCallbackAndroid(const JavaRef<jobject>& callback, int arg);
 
+void BASE_EXPORT RunCallbackAndroid(const JavaRef<jobject>& callback,
+                                    const std::vector<uint8_t>& arg);
+
 }  // namespace android
 }  // namespace base
 
diff --git a/base/android/java/src/org/chromium/base/Callback.java b/base/android/java/src/org/chromium/base/Callback.java
index ee5857d6..0810b62 100644
--- a/base/android/java/src/org/chromium/base/Callback.java
+++ b/base/android/java/src/org/chromium/base/Callback.java
@@ -34,4 +34,10 @@
     private void onResultFromNative(int result) {
         onResult((T) Integer.valueOf(result));
     }
+
+    @SuppressWarnings("unchecked")
+    @CalledByNative
+    private void onResultFromNative(byte[] result) {
+        onResult((T) result);
+    }
 }
diff --git a/base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl b/base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl
index ea680c3..32a53478 100644
--- a/base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl
+++ b/base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl
@@ -16,5 +16,5 @@
   int setupConnection(in Bundle args, IBinder callback);
 
   // Asks the child service to crash so that we can test the termination logic.
-  void crashIntentionallyForTesting();
+  oneway void crashIntentionallyForTesting();
 }
diff --git a/base/files/file_util_win.cc b/base/files/file_util_win.cc
index 30749906..294726a 100644
--- a/base/files/file_util_win.cc
+++ b/base/files/file_util_win.cc
@@ -364,7 +364,6 @@
     }
   }
 
-  // Exist early if we can't create an unique name.
   if (!create_file_success) {
     DPLOG(WARNING) << "Failed to get temporary file name in "
                    << UTF16ToUTF8(dir.value());
diff --git a/base/mac/sdk_forward_declarations.h b/base/mac/sdk_forward_declarations.h
index b477347..86fac9c 100644
--- a/base/mac/sdk_forward_declarations.h
+++ b/base/mac/sdk_forward_declarations.h
@@ -144,6 +144,7 @@
 
 @interface NSView (YosemiteSDK)
 - (BOOL)isAccessibilitySelectorAllowed:(SEL)selector;
+@property(copy) NSString* accessibilityLabel;
 @end
 
 #endif  // MAC_OS_X_VERSION_10_10
diff --git a/base/metrics/bucket_ranges.h b/base/metrics/bucket_ranges.h
index c356195..db82e552 100644
--- a/base/metrics/bucket_ranges.h
+++ b/base/metrics/bucket_ranges.h
@@ -24,6 +24,7 @@
 
 #include <limits.h>
 
+#include "base/atomicops.h"
 #include "base/base_export.h"
 #include "base/macros.h"
 #include "base/metrics/histogram_base.h"
@@ -58,6 +59,17 @@
   // Return true iff |other| object has same ranges_ as |this| object's ranges_.
   bool Equals(const BucketRanges* other) const;
 
+  // Set and get a reference into persistent memory where this bucket data
+  // can be found (and re-used). These calls are internally atomic with no
+  // safety against overwriting an existing value since though it is wasteful
+  // to have multiple identical persistent records, it is still safe.
+  void set_persistent_reference(uint32_t ref) const {
+    subtle::NoBarrier_Store(&persistent_reference_, ref);
+  }
+  uint32_t persistent_reference() const {
+    return subtle::NoBarrier_Load(&persistent_reference_);
+  }
+
  private:
   // A monotonically increasing list of values which determine which bucket to
   // put a sample into.  For each index, show the smallest sample that can be
@@ -71,6 +83,12 @@
   // noise on UMA dashboard.
   uint32_t checksum_;
 
+  // A reference into a global PersistentMemoryAllocator where the ranges
+  // information is stored. This allows for the record to be created once and
+  // re-used simply by having all histograms with the same ranges use the
+  // same reference.
+  mutable subtle::Atomic32 persistent_reference_ = 0;
+
   DISALLOW_COPY_AND_ASSIGN(BucketRanges);
 };
 
diff --git a/base/metrics/persistent_histogram_allocator.cc b/base/metrics/persistent_histogram_allocator.cc
index 5f44b673..b2dae99 100644
--- a/base/metrics/persistent_histogram_allocator.cc
+++ b/base/metrics/persistent_histogram_allocator.cc
@@ -340,24 +340,49 @@
       return nullptr;
     }
 
-    size_t ranges_count = bucket_count + 1;
-    size_t ranges_bytes = ranges_count * sizeof(HistogramBase::Sample);
+    // Since the StasticsRecorder keeps a global collection of BucketRanges
+    // objects for re-use, it would be dangerous for one to hold a reference
+    // from a persistent allocator that is not the global one (which is
+    // permanent once set). If this stops being the case, this check can
+    // become an "if" condition beside "!ranges_ref" below and before
+    // set_persistent_reference() farther down.
+    DCHECK_EQ(this, GlobalHistogramAllocator::Get());
+
+    // Re-use an existing BucketRanges persistent allocation if one is known;
+    // otherwise, create one.
+    PersistentMemoryAllocator::Reference ranges_ref =
+        bucket_ranges->persistent_reference();
+    if (!ranges_ref) {
+      size_t ranges_count = bucket_count + 1;
+      size_t ranges_bytes = ranges_count * sizeof(HistogramBase::Sample);
+      ranges_ref =
+          memory_allocator_->Allocate(ranges_bytes, kTypeIdRangesArray);
+      if (ranges_ref) {
+        HistogramBase::Sample* ranges_data =
+            memory_allocator_->GetAsArray<HistogramBase::Sample>(
+                ranges_ref, kTypeIdRangesArray, ranges_count);
+        if (ranges_data) {
+          for (size_t i = 0; i < bucket_ranges->size(); ++i)
+            ranges_data[i] = bucket_ranges->range(i);
+          bucket_ranges->set_persistent_reference(ranges_ref);
+        } else {
+          // This should never happen but be tolerant if it does.
+          NOTREACHED();
+          ranges_ref = PersistentMemoryAllocator::kReferenceNull;
+        }
+      }
+    } else {
+      DCHECK_EQ(kTypeIdRangesArray, memory_allocator_->GetType(ranges_ref));
+    }
+
     PersistentMemoryAllocator::Reference counts_ref =
         memory_allocator_->Allocate(counts_bytes, kTypeIdCountsArray);
-    PersistentMemoryAllocator::Reference ranges_ref =
-        memory_allocator_->Allocate(ranges_bytes, kTypeIdRangesArray);
-    HistogramBase::Sample* ranges_data =
-        memory_allocator_->GetAsArray<HistogramBase::Sample>(
-            ranges_ref, kTypeIdRangesArray, ranges_count);
 
     // Only continue here if all allocations were successful. If they weren't,
     // there is no way to free the space but that's not really a problem since
     // the allocations only fail because the space is full or corrupt and so
     // any future attempts will also fail.
-    if (counts_ref && ranges_data && histogram_data) {
-      for (size_t i = 0; i < bucket_ranges->size(); ++i)
-        ranges_data[i] = bucket_ranges->range(i);
-
+    if (counts_ref && ranges_ref && histogram_data) {
       histogram_data->minimum = minimum;
       histogram_data->maximum = maximum;
       // |bucket_count| must fit within 32-bits or the allocation of the counts
diff --git a/base/metrics/persistent_histogram_allocator_unittest.cc b/base/metrics/persistent_histogram_allocator_unittest.cc
index df250a37..cfd20a8 100644
--- a/base/metrics/persistent_histogram_allocator_unittest.cc
+++ b/base/metrics/persistent_histogram_allocator_unittest.cc
@@ -281,4 +281,41 @@
   EXPECT_EQ(1, snapshot->GetCount(7));
 }
 
+TEST_F(PersistentHistogramAllocatorTest, RangesDeDuplication) {
+  // This corresponds to the "ranges_ref" field of the PersistentHistogramData
+  // structure defined (privately) inside persistent_histogram_allocator.cc.
+  const int kRangesRefIndex = 5;
+
+  // Create two histograms with the same ranges.
+  HistogramBase* histogram1 =
+      Histogram::FactoryGet("TestHistogram1", 1, 1000, 10, 0);
+  HistogramBase* histogram2 =
+      Histogram::FactoryGet("TestHistogram2", 1, 1000, 10, 0);
+  const uint32_t ranges_ref = static_cast<Histogram*>(histogram1)
+                                  ->bucket_ranges()
+                                  ->persistent_reference();
+  ASSERT_NE(0U, ranges_ref);
+  EXPECT_EQ(ranges_ref, static_cast<Histogram*>(histogram2)
+                            ->bucket_ranges()
+                            ->persistent_reference());
+
+  // Make sure that the persistent data record is also correct. Two histograms
+  // will be fetched; other allocations are not "iterable".
+  PersistentMemoryAllocator::Iterator iter(allocator_);
+  uint32_t type;
+  uint32_t ref1 = iter.GetNext(&type);
+  uint32_t ref2 = iter.GetNext(&type);
+  EXPECT_EQ(0U, iter.GetNext(&type));
+  EXPECT_NE(0U, ref1);
+  EXPECT_NE(0U, ref2);
+  EXPECT_NE(ref1, ref2);
+
+  uint32_t* data1 =
+      allocator_->GetAsArray<uint32_t>(ref1, 0, kRangesRefIndex + 1);
+  uint32_t* data2 =
+      allocator_->GetAsArray<uint32_t>(ref2, 0, kRangesRefIndex + 1);
+  EXPECT_EQ(ranges_ref, data1[kRangesRefIndex]);
+  EXPECT_EQ(ranges_ref, data2[kRangesRefIndex]);
+}
+
 }  // namespace base
diff --git a/base/metrics/statistics_recorder.cc b/base/metrics/statistics_recorder.cc
index ba2101b..409e637 100644
--- a/base/metrics/statistics_recorder.cc
+++ b/base/metrics/statistics_recorder.cc
@@ -431,8 +431,24 @@
 
 // static
 void StatisticsRecorder::ForgetHistogramForTesting(base::StringPiece name) {
-  if (histograms_)
-    histograms_->erase(name);
+  if (!histograms_)
+    return;
+
+  HistogramMap::iterator found = histograms_->find(name);
+  if (found == histograms_->end())
+    return;
+
+  HistogramBase* base = found->second;
+  if (base->GetHistogramType() != SPARSE_HISTOGRAM) {
+    // When forgetting a histogram, it's likely that other information is
+    // also becoming invalid. Clear the persistent reference that may no
+    // longer be valid. There's no danger in this as, at worst, duplicates
+    // will be created in persistent memory.
+    Histogram* histogram = static_cast<Histogram*>(base);
+    histogram->bucket_ranges()->set_persistent_reference(0);
+  }
+
+  histograms_->erase(found);
 }
 
 // static
diff --git a/blink/OWNERS b/blink/OWNERS
new file mode 100644
index 0000000..79837a2
--- /dev/null
+++ b/blink/OWNERS
@@ -0,0 +1,3 @@
+file://third_party/WebKit/API_OWNERS
+
+# COMPONENT: Blink
diff --git a/blink/tools/OWNERS b/blink/tools/OWNERS
index 4fc050a9..5c5aa17 100644
--- a/blink/tools/OWNERS
+++ b/blink/tools/OWNERS
@@ -1,3 +1,9 @@
-ojan@chromium.org
 dpranke@chromium.org
-*
+jeffcarp@chromium.org
+qyearsley@chromium.org
+tansell@chromium.org
+tkent@chromium.org
+wangxianzhu@chromium.org
+
+# TEAM: blink-infra@chromium.org
+# COMPONENT: Blink>Infra
diff --git a/build/OWNERS b/build/OWNERS
index 87d7654..c644ca7d 100644
--- a/build/OWNERS
+++ b/build/OWNERS
@@ -14,4 +14,9 @@
 per-file whitespace_file.txt=*
 per-file OWNERS.status=*
 
+# gn-dev is probably a better team here, but the tooling won't let us
+# have more than one team per component, and infra-dev is a catch-all
+# for other build-related lists.
+#
+# TEAM: infra-dev@chromium.org
 # COMPONENT: Build
diff --git a/build/experimental/install-build-deps.py b/build/experimental/install-build-deps.py
index 1687b94..04a26ab 100755
--- a/build/experimental/install-build-deps.py
+++ b/build/experimental/install-build-deps.py
@@ -13,7 +13,6 @@
 
 
 SUPPORTED_UBUNTU_VERSIONS = (
-  {'number': '12.04', 'codename': 'precise'},
   {'number': '14.04', 'codename': 'trusty'},
   {'number': '14.10', 'codename': 'utopic'},
   {'number': '15.04', 'codename': 'vivid'},
@@ -300,9 +299,7 @@
   lsb_codename = lsb_release_short_codename()
 
   # Find the proper version of libstdc++6-4.x-dbg.
-  if lsb_codename == 'precise':
-    _packages_dbg += ('libstdc++6-4.6-dbg',)
-  elif lsb_codename == 'trusty':
+  if lsb_codename == 'trusty':
     _packages_dbg += ('libstdc++6-4.8-dbg',)
   else:
     _packages_dbg += ('libstdc++6-4.9-dbg',)
diff --git a/build/install-build-deps-android.sh b/build/install-build-deps-android.sh
index cbf9931..06f79ae 100755
--- a/build/install-build-deps-android.sh
+++ b/build/install-build-deps-android.sh
@@ -32,11 +32,7 @@
 
 # Some binaries in the Android SDK require 32-bit libraries on the host.
 # See https://developer.android.com/sdk/installing/index.html?pkg=tools
-if [[ $lsb_release == "precise" ]]; then
-  sudo apt-get -y install ia32-libs
-else
-  sudo apt-get -y install libncurses5:i386 libstdc++6:i386 zlib1g:i386
-fi
+sudo apt-get -y install libncurses5:i386 libstdc++6:i386 zlib1g:i386
 
 # Required by //components/cronet/tools/generate_javadoc.py
 # TODO(375324): Stop requiring ANT.
diff --git a/build/linux/sysroot_scripts/install-sysroot.py b/build/linux/sysroot_scripts/install-sysroot.py
index c8e88ee..90b7068 100755
--- a/build/linux/sysroot_scripts/install-sysroot.py
+++ b/build/linux/sysroot_scripts/install-sysroot.py
@@ -122,12 +122,6 @@
   if host_arch == 'amd64':
     InstallDefaultSysrootForArch('i386')
 
-  # Desktop Chromium OS builds require the precise sysroot.
-  # TODO(thomasanderson): only download this when the GN arg target_os
-  # == 'chromeos', when the functionality to perform the check becomes
-  # available.
-  InstallSysroot('Precise', 'amd64')
-
   # If we can detect a non-standard target_arch such as ARM or MIPS,
   # then install the sysroot too.  Don't attempt to install arm64
   # since this is currently and android-only architecture.
diff --git a/build/linux/sysroot_scripts/packagelist.precise.amd64 b/build/linux/sysroot_scripts/packagelist.precise.amd64
deleted file mode 100644
index 8e6fc70..0000000
--- a/build/linux/sysroot_scripts/packagelist.precise.amd64
+++ /dev/null
@@ -1,179 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-1ubuntu10.2_amd64.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-1ubuntu10.2_amd64.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-0ubuntu1_amd64.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-0ubuntu1_amd64.deb
-main/a/avahi/libavahi-client3_0.6.30-5ubuntu2.2_amd64.deb
-main/a/avahi/libavahi-common3_0.6.30-5ubuntu2.2_amd64.deb
-main/b/bluez/libbluetooth3_4.98-2ubuntu7.2_amd64.deb
-main/b/bluez/libbluetooth-dev_4.98-2ubuntu7.2_amd64.deb
-main/b/brltty/libbrlapi0.5_4.3-1ubuntu5_amd64.deb
-main/b/brltty/libbrlapi-dev_4.3-1ubuntu5_amd64.deb
-main/c/cairo/libcairo2_1.10.2-6.1ubuntu3_amd64.deb
-main/c/cairo/libcairo2-dev_1.10.2-6.1ubuntu3_amd64.deb
-main/c/cairo/libcairo-gobject2_1.10.2-6.1ubuntu3_amd64.deb
-main/c/cairo/libcairo-script-interpreter2_1.10.2-6.1ubuntu3_amd64.deb
-main/c/cups/libcups2_1.5.3-0ubuntu8.7_amd64.deb
-main/c/cups/libcups2-dev_1.5.3-0ubuntu8.7_amd64.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.98-1ubuntu1.1_amd64.deb
-main/d/dbus/libdbus-1-3_1.4.18-1ubuntu1.8_amd64.deb
-main/d/dbus/libdbus-1-dev_1.4.18-1ubuntu1.8_amd64.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42-1ubuntu2.3_amd64.deb
-main/e/e2fsprogs/libcomerr2_1.42-1ubuntu2.3_amd64.deb
-main/e/eglibc/libc6_2.15-0ubuntu10.15_amd64.deb
-main/e/eglibc/libc6-dev_2.15-0ubuntu10.15_amd64.deb
-main/e/elfutils/libelf1_0.152-1ubuntu3.1_amd64.deb
-main/e/elfutils/libelf-dev_0.152-1ubuntu3.1_amd64.deb
-main/e/expat/libexpat1_2.0.1-7.2ubuntu1.4_amd64.deb
-main/e/expat/libexpat1-dev_2.0.1-7.2ubuntu1.4_amd64.deb
-main/f/fontconfig/libfontconfig1_2.8.0-3ubuntu9.2_amd64.deb
-main/f/fontconfig/libfontconfig1-dev_2.8.0-3ubuntu9.2_amd64.deb
-main/f/freetype/libfreetype6_2.4.8-1ubuntu2.3_amd64.deb
-main/f/freetype/libfreetype6-dev_2.4.8-1ubuntu2.3_amd64.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libgcc1_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libgomp1_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libquadmath0_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libstdc++6_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-1ubuntu5_amd64.deb
-main/g/gconf/libgconf-2-4_3.2.5-0ubuntu2_amd64.deb
-main/g/gconf/libgconf2-4_3.2.5-0ubuntu2_amd64.deb
-main/g/gconf/libgconf2-dev_3.2.5-0ubuntu2_amd64.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1ubuntu1.5_amd64.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1ubuntu1.5_amd64.deb
-main/g/glib2.0/libglib2.0-0_2.32.4-0ubuntu1_amd64.deb
-main/g/glib2.0/libglib2.0-dev_2.32.4-0ubuntu1_amd64.deb
-main/g/gnutls26/libgnutls26_2.12.14-5ubuntu3.13_amd64.deb
-main/g/gnutls26/libgnutls-dev_2.12.14-5ubuntu3.13_amd64.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.14-5ubuntu3.13_amd64.deb
-main/g/gnutls26/libgnutlsxx27_2.12.14-5ubuntu3.13_amd64.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-0ubuntu6.3_amd64.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-0ubuntu6.3_amd64.deb
-main/g/gtk+3.0/libgtk-3-0_3.4.2-0ubuntu0.9_amd64.deb
-main/g/gtk+3.0/libgtk-3-dev_3.4.2-0ubuntu0.9_amd64.deb
-main/k/keyutils/libkeyutils1_1.5.2-2_amd64.deb
-main/k/krb5/krb5-multidev_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libgssapi-krb5-2_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libgssrpc4_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libk5crypto3_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkadm5clnt-mit8_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkadm5srv-mit8_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkdb5-6_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkrb5-3_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkrb5-dev_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkrb5support0_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/libc/libcap2/libcap2_2.22-1ubuntu3_amd64.deb
-main/libc/libcap2/libcap-dev_2.22-1ubuntu3_amd64.deb
-main/libd/libdrm/libdrm2_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-dev_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-intel1_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-nouveau1a_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-nouveau2_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-radeon1_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libkms1_2.4.46-1ubuntu0.0.0.1_amd64.deb
-main/libf/libffi/libffi6_3.0.11~rc1-5_amd64.deb
-main/libf/libffi/libffi-dev_3.0.11~rc1-5_amd64.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-3ubuntu0.6_amd64.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-3ubuntu0.6_amd64.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.2.2-2_amd64.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.2.2-2_amd64.deb
-main/libg/libgpg-error/libgpg-error0_1.10-2ubuntu1_amd64.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-2ubuntu1_amd64.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-3.2ubuntu3_amd64.deb
-main/libp/libp11/libp11-2_0.2.8-2_amd64.deb
-main/libp/libpng/libpng12-0_1.2.46-3ubuntu4.2_amd64.deb
-main/libp/libpng/libpng12-dev_1.2.46-3ubuntu4.2_amd64.deb
-main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-3_amd64.deb
-main/libs/libselinux/libselinux1_2.1.0-4.1ubuntu1_amd64.deb
-main/libt/libtasn1-3/libtasn1-3_2.10-1ubuntu1.5_amd64.deb
-main/libx/libx11/libx11-6_1.4.99.1-0ubuntu2.3_amd64.deb
-main/libx/libx11/libx11-dev_1.4.99.1-0ubuntu2.3_amd64.deb
-main/libx/libx11/libx11-xcb1_1.4.99.1-0ubuntu2.3_amd64.deb
-main/libx/libx11/libx11-xcb-dev_1.4.99.1-0ubuntu2.3_amd64.deb
-main/libx/libxau/libxau6_1.0.6-4_amd64.deb
-main/libx/libxau/libxau-dev_1.0.6-4_amd64.deb
-main/libx/libxcb/libxcb1_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-render0_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2build1_amd64.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2build1_amd64.deb
-main/libx/libxcursor/libxcursor1_1.1.12-1ubuntu0.1_amd64.deb
-main/libx/libxcursor/libxcursor-dev_1.1.12-1ubuntu0.1_amd64.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2build1_amd64.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2build1_amd64.deb
-main/libx/libxdmcp/libxdmcp6_1.1.0-4_amd64.deb
-main/libx/libxdmcp/libxdmcp-dev_1.1.0-4_amd64.deb
-main/libx/libxext/libxext6_1.3.0-3ubuntu0.2_amd64.deb
-main/libx/libxext/libxext-dev_1.3.0-3ubuntu0.2_amd64.deb
-main/libx/libxfixes/libxfixes3_5.0-4ubuntu4.4_amd64.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4ubuntu4.4_amd64.deb
-main/libx/libxi/libxi6_1.7.1.901-1ubuntu1~precise3_amd64.deb
-main/libx/libxi/libxi-dev_1.7.1.901-1ubuntu1~precise3_amd64.deb
-main/libx/libxinerama/libxinerama1_1.1.1-3ubuntu0.1_amd64.deb
-main/libx/libxinerama/libxinerama-dev_1.1.1-3ubuntu0.1_amd64.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2ubuntu0.3_amd64.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2ubuntu0.3_amd64.deb
-main/libx/libxrender/libxrender1_0.9.6-2ubuntu0.2_amd64.deb
-main/libx/libxrender/libxrender-dev_0.9.6-2ubuntu0.2_amd64.deb
-main/libx/libxss/libxss1_1.2.1-2_amd64.deb
-main/libx/libxss/libxss-dev_1.2.1-2_amd64.deb
-main/libx/libxt/libxt6_1.1.1-2ubuntu0.1_amd64.deb
-main/libx/libxt/libxt-dev_1.1.1-2ubuntu0.1_amd64.deb
-main/libx/libxtst/libxtst6_1.2.0-4ubuntu0.1_amd64.deb
-main/libx/libxtst/libxtst-dev_1.2.0-4ubuntu0.1_amd64.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.1-2ubuntu0.1_amd64.deb
-main/l/linux/linux-libc-dev_3.2.0-123.166_amd64.deb
-main/m/mesa/libegl1-mesa_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libegl1-mesa-dev_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libegl1-mesa-drivers_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libgbm1_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libgbm-dev_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libgl1-mesa-dev_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libgl1-mesa-glx_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libglapi-mesa_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/mesa-common-dev_8.0.4-0ubuntu0.7_amd64.deb
-main/n/nspr/libnspr4_4.12-0ubuntu0.12.04.1_amd64.deb
-main/n/nspr/libnspr4-dev_4.12-0ubuntu0.12.04.1_amd64.deb
-main/n/nss/libnss3_3.26.2-0ubuntu0.12.04.1_amd64.deb
-main/n/nss/libnss3-dev_3.26.2-0ubuntu0.12.04.1_amd64.deb
-main/o/openssl/libssl1.0.0_1.0.1-4ubuntu5.39_amd64.deb
-main/o/openssl/libssl-dev_1.0.1-4ubuntu5.39_amd64.deb
-main/o/orbit2/liborbit2_2.14.19-0.1ubuntu1_amd64.deb
-main/p/p11-kit/libp11-kit0_0.12-2ubuntu1_amd64.deb
-main/p/pam/libpam0g_1.1.3-7ubuntu2.3_amd64.deb
-main/p/pam/libpam0g-dev_1.1.3-7ubuntu2.3_amd64.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-0ubuntu3.1_amd64.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-0ubuntu3.1_amd64.deb
-main/p/pciutils/libpci3_3.1.8-2ubuntu6_amd64.deb
-main/p/pciutils/libpci-dev_3.1.8-2ubuntu6_amd64.deb
-main/p/pcre3/libpcre3_8.12-4ubuntu0.2_amd64.deb
-main/p/pcre3/libpcre3-dev_8.12-4ubuntu0.2_amd64.deb
-main/p/pcre3/libpcrecpp0_8.12-4ubuntu0.2_amd64.deb
-main/p/pixman/libpixman-1-0_0.30.2-1ubuntu0.0.0.0.3_amd64.deb
-main/p/pixman/libpixman-1-dev_0.30.2-1ubuntu0.0.0.0.3_amd64.deb
-main/p/pulseaudio/libpulse0_1.1-0ubuntu15.4_amd64.deb
-main/p/pulseaudio/libpulse-dev_1.1-0ubuntu15.4_amd64.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_1.1-0ubuntu15.4_amd64.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6ubuntu3_amd64.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6ubuntu3_amd64.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6ubuntu3_amd64.deb
-main/w/wayland/libwayland0_0.85.0-1ubuntu2_amd64.deb
-main/w/wayland/libwayland-dev_0.85.0-1ubuntu2_amd64.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.22-1ubuntu0.2_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2ubuntu1_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.3-1~precise2_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.5-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.4.0+git20120101.is.really.1.4.0-0ubuntu1~precise2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.1-2_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.1-2_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1~precise2_all.deb
-main/z/zlib/zlib1g_1.2.3.4.dfsg-3ubuntu4_amd64.deb
-main/z/zlib/zlib1g-dev_1.2.3.4.dfsg-3ubuntu4_amd64.deb
-universe/libx/libxkbcommon/libxkbcommon0_0.1.0~1-0ubuntu1_amd64.deb
-universe/libx/libxkbcommon/libxkbcommon-dev_0.1.0~1-0ubuntu1_amd64.deb
diff --git a/build/linux/sysroot_scripts/sysroot-creator-precise.sh b/build/linux/sysroot_scripts/sysroot-creator-precise.sh
deleted file mode 100755
index 8c536b4a..0000000
--- a/build/linux/sysroot_scripts/sysroot-creator-precise.sh
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/bin/bash
-# Copyright 2016 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.
-
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-DISTRO=ubuntu
-DIST=precise
-DIST_UPDATES=precise-updates
-REPO_EXTRA="universe"
-
-# This is where we get all the debian packages from.
-APT_REPO=http://archive.ubuntu.com/ubuntu
-APT_REPO_ARM=http://ports.ubuntu.com
-APT_REPO_ARM64=http://ports.ubuntu.com
-KEYRING_FILE=/usr/share/keyrings/ubuntu-archive-keyring.gpg
-
-HAS_ARCH_AMD64=1
-
-# Precise supports these architectures but they are not needed by chrome.
-# HAS_ARCH_I386=1
-# HAS_ARCH_ARM=1
-
-# Sysroot packages: these are the packages needed to build chrome.
-# NOTE: When DEBIAN_PACKAGES is modified, the packagelist files must be updated
-# by running this script in GeneratePackageList mode.
-DEBIAN_PACKAGES="\
-  comerr-dev
-  gcc-4.6
-  krb5-multidev
-  libasound2
-  libasound2-dev
-  libatk1.0-0
-  libatk1.0-dev
-  libavahi-client3
-  libavahi-common3
-  libbluetooth3
-  libbluetooth-dev
-  libbrlapi0.5
-  libbrlapi-dev
-  libc6
-  libc6-dev
-  libcairo2
-  libcairo2-dev
-  libcairo-gobject2
-  libcairo-script-interpreter2
-  libcap-dev
-  libcap2
-  libcomerr2
-  libcups2
-  libcups2-dev
-  libdbus-1-3
-  libdbus-1-dev
-  libdbus-glib-1-2
-  libdrm-dev
-  libdrm-intel1
-  libdrm-nouveau1a
-  libdrm-nouveau2
-  libdrm-radeon1
-  libdrm2
-  libegl1-mesa
-  libegl1-mesa-dev
-  libegl1-mesa-drivers
-  libelf1
-  libelf-dev
-  libexpat1
-  libexpat1-dev
-  libffi6
-  libffi-dev
-  libfontconfig1
-  libfontconfig1-dev
-  libfreetype6
-  libfreetype6-dev
-  libgbm1
-  libgbm-dev
-  libgcc1
-  libgconf-2-4
-  libgconf2-4
-  libgconf2-dev
-  libgcrypt11
-  libgcrypt11-dev
-  libgdk-pixbuf2.0-0
-  libgdk-pixbuf2.0-dev
-  libgl1-mesa-dev
-  libgl1-mesa-glx
-  libglapi-mesa
-  libglib2.0-0
-  libglib2.0-dev
-  libgnome-keyring0
-  libgnome-keyring-dev
-  libgnutls26
-  libgnutls-dev
-  libgnutls-openssl27
-  libgnutlsxx27
-  libgomp1
-  libgpg-error0
-  libgpg-error-dev
-  libgssapi-krb5-2
-  libgssrpc4
-  libgtk-3-0
-  libgtk-3-dev
-  libgtk2.0-0
-  libgtk2.0-dev
-  libk5crypto3
-  libkadm5clnt-mit8
-  libkadm5srv-mit8
-  libkdb5-6
-  libkeyutils1
-  libkms1
-  libkrb5-3
-  libkrb5-dev
-  libkrb5support0
-  libnspr4
-  libnspr4-dev
-  libnss3
-  libnss3-dev
-  libnss-db
-  liborbit2
-  libp11-2
-  libp11-kit0
-  libpam0g
-  libpam0g-dev
-  libpango1.0-0
-  libpango1.0-dev
-  libpci3
-  libpci-dev
-  libpcre3
-  libpcre3-dev
-  libpcrecpp0
-  libpixman-1-0
-  libpixman-1-dev
-  libpng12-0
-  libpng12-dev
-  libpthread-stubs0-dev
-  libpulse0
-  libpulse-dev
-  libpulse-mainloop-glib0
-  libselinux1
-  libspeechd2
-  libspeechd-dev
-  libssl1.0.0
-  libssl-dev
-  libstdc++6
-  libstdc++6-4.6-dev
-  libtasn1-3
-  libwayland0
-  libwayland-dev
-  libx11-6
-  libx11-dev
-  libx11-xcb1
-  libx11-xcb-dev
-  libxau6
-  libxau-dev
-  libxcb1
-  libxcb1-dev
-  libxcb-glx0
-  libxcb-render0
-  libxcb-render0-dev
-  libxcb-shm0
-  libxcb-shm0-dev
-  libxcomposite1
-  libxcomposite-dev
-  libxcursor1
-  libxcursor-dev
-  libxdamage1
-  libxdamage-dev
-  libxdmcp6
-  libxdmcp-dev
-  libxext6
-  libxext-dev
-  libxfixes3
-  libxfixes-dev
-  libxi6
-  libxi-dev
-  libxinerama1
-  libxinerama-dev
-  libxkbcommon0
-  libxkbcommon-dev
-  libxrandr2
-  libxrandr-dev
-  libxrender1
-  libxrender-dev
-  libxss1
-  libxss-dev
-  libxt6
-  libxt-dev
-  libxtst6
-  libxtst-dev
-  libxxf86vm1
-  linux-libc-dev
-  mesa-common-dev
-  speech-dispatcher
-  x11proto-composite-dev
-  x11proto-core-dev
-  x11proto-damage-dev
-  x11proto-fixes-dev
-  x11proto-input-dev
-  x11proto-kb-dev
-  x11proto-randr-dev
-  x11proto-record-dev
-  x11proto-render-dev
-  x11proto-scrnsaver-dev
-  x11proto-xext-dev
-  zlib1g
-  zlib1g-dev
-"
-
-DEBIAN_PACKAGES_X86="libquadmath0"
-DEBIAN_PACKAGES_ARM="libdrm-omap1"
-
-. "${SCRIPT_DIR}/sysroot-creator.sh"
diff --git a/build/linux/sysroot_scripts/sysroots.json b/build/linux/sysroot_scripts/sysroots.json
index d06cea0d..d4b2f77 100644
--- a/build/linux/sysroot_scripts/sysroots.json
+++ b/build/linux/sysroot_scripts/sysroots.json
@@ -29,12 +29,6 @@
         "SysrootDir": "debian_jessie_mips-sysroot",
         "Tarball": "debian_jessie_mips_sysroot.tgz"
     },
-    "precise_amd64": {
-        "Revision": "d3d82f7c4e34a753953581a48e62ef577b334529",
-        "Sha1Sum": "8fffb717217b2dc4e29b3a1305877bcd0552f55e",
-        "SysrootDir": "ubuntu_precise_amd64-sysroot",
-        "Tarball": "ubuntu_precise_amd64_sysroot.tgz"
-    },
     "trusty_arm": {
         "Revision": "d3d82f7c4e34a753953581a48e62ef577b334529",
         "Sha1Sum": "f78eb929410b94cdf48276db82a7e7adcafcc277",
diff --git a/build/sanitizers/tsan_suppressions.cc b/build/sanitizers/tsan_suppressions.cc
index d9753ef8..74b802ae 100644
--- a/build/sanitizers/tsan_suppressions.cc
+++ b/build/sanitizers/tsan_suppressions.cc
@@ -246,6 +246,9 @@
 "race:net::(anonymous namespace)::ProxyResolverV8TracingImpl::RequestImpl"
 "::~RequestImpl()\n"
 
+// http://crbug.com/691029
+"deadlock:libGLX.so*\n"
+
 // End of suppressions.
 ;  // Please keep this semicolon.
 
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 6ffaedd..48686b8 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -48,6 +48,7 @@
     "input/selection.h",
     "input/single_scrollbar_animation_controller_thinning.cc",
     "input/single_scrollbar_animation_controller_thinning.h",
+    "layers/append_quads_data.cc",
     "layers/append_quads_data.h",
     "layers/content_layer_client.h",
     "layers/draw_properties.cc",
diff --git a/cc/animation/element_animations_unittest.cc b/cc/animation/element_animations_unittest.cc
index c6cb2d27..75e69c9 100644
--- a/cc/animation/element_animations_unittest.cc
+++ b/cc/animation/element_animations_unittest.cc
@@ -3588,5 +3588,27 @@
   EXPECT_EQ(0u, host_impl_->ticking_players_for_testing().size());
 }
 
+TEST_F(ElementAnimationsTest, RemoveAndReAddPlayerToTicking) {
+  CreateTestLayer(false, false);
+  AttachTimelinePlayerLayer();
+  EXPECT_EQ(0u, host_->ticking_players_for_testing().size());
+
+  // Add an animation and ensure the player is in the host's ticking players.
+  // Remove the player using RemoveFromTicking().
+  player_->AddAnimation(CreateAnimation(
+      std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.5f)),
+      2, TargetProperty::OPACITY));
+  ASSERT_EQ(1u, host_->ticking_players_for_testing().size());
+  player_->RemoveFromTicking();
+  ASSERT_EQ(0u, host_->ticking_players_for_testing().size());
+
+  // Ensure that adding a new animation will correctly update the ticking
+  // players list.
+  player_->AddAnimation(CreateAnimation(
+      std::unique_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 1.f, 0.5f)),
+      2, TargetProperty::OPACITY));
+  EXPECT_EQ(1u, host_->ticking_players_for_testing().size());
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/benchmarks/rasterize_and_record_benchmark_impl.cc b/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
index c41d38e..203f770 100644
--- a/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
+++ b/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
@@ -179,7 +179,7 @@
           settings.max_preraster_distance_in_screen_pixels);
 
   PictureLayerTiling* tiling =
-      tiling_set->AddTiling(1.f, layer->GetRasterSource());
+      tiling_set->AddTiling(gfx::AxisTransform2d(), layer->GetRasterSource());
   tiling->set_resolution(HIGH_RESOLUTION);
   tiling->CreateAllTilesForTesting();
   RasterSource* raster_source = tiling->raster_source().get();
@@ -189,7 +189,7 @@
     DCHECK(*it);
 
     gfx::Rect content_rect = (*it)->content_rect();
-    float contents_scale = (*it)->contents_scale();
+    float contents_scale = (*it)->raster_transform().scale();
 
     base::TimeDelta min_time;
     bool is_solid_color = false;
diff --git a/cc/ipc/BUILD.gn b/cc/ipc/BUILD.gn
index babff70..13e4325 100644
--- a/cc/ipc/BUILD.gn
+++ b/cc/ipc/BUILD.gn
@@ -54,6 +54,7 @@
     "render_pass.mojom",
     "returned_resource.mojom",
     "selection.mojom",
+    "shared_bitmap_manager.mojom",
     "shared_quad_state.mojom",
     "surface_id.mojom",
     "surface_info.mojom",
diff --git a/cc/ipc/cc_param_traits_macros.h b/cc/ipc/cc_param_traits_macros.h
index 8c65677d..39a4ecf 100644
--- a/cc/ipc/cc_param_traits_macros.h
+++ b/cc/ipc/cc_param_traits_macros.h
@@ -205,6 +205,7 @@
   IPC_STRUCT_TRAITS_MEMBER(selection)
   IPC_STRUCT_TRAITS_MEMBER(latency_info)
   IPC_STRUCT_TRAITS_MEMBER(referenced_surfaces)
+  IPC_STRUCT_TRAITS_MEMBER(embedded_surfaces)
   IPC_STRUCT_TRAITS_MEMBER(content_source_id)
   IPC_STRUCT_TRAITS_MEMBER(begin_frame_ack)
   IPC_STRUCT_TRAITS_MEMBER(frame_token)
diff --git a/cc/ipc/compositor_frame_metadata.mojom b/cc/ipc/compositor_frame_metadata.mojom
index eafa877..0b1a3d7 100644
--- a/cc/ipc/compositor_frame_metadata.mojom
+++ b/cc/ipc/compositor_frame_metadata.mojom
@@ -31,6 +31,7 @@
   Selection selection;
   array<ui.mojom.LatencyInfo> latency_info;
   array<SurfaceId> referenced_surfaces;
+  array<SurfaceId> embedded_surfaces;
   bool can_activate_before_dependencies;
   uint32 content_source_id;
   BeginFrameAck begin_frame_ack;
diff --git a/cc/ipc/compositor_frame_metadata_struct_traits.cc b/cc/ipc/compositor_frame_metadata_struct_traits.cc
index fae339a..ab79ed7 100644
--- a/cc/ipc/compositor_frame_metadata_struct_traits.cc
+++ b/cc/ipc/compositor_frame_metadata_struct_traits.cc
@@ -45,6 +45,7 @@
   return data.ReadSelection(&out->selection) &&
          data.ReadLatencyInfo(&out->latency_info) &&
          data.ReadReferencedSurfaces(&out->referenced_surfaces) &&
+         data.ReadEmbeddedSurfaces(&out->embedded_surfaces) &&
          data.ReadBeginFrameAck(&out->begin_frame_ack);
 }
 
diff --git a/cc/ipc/compositor_frame_metadata_struct_traits.h b/cc/ipc/compositor_frame_metadata_struct_traits.h
index 46bb130d..f3077ce 100644
--- a/cc/ipc/compositor_frame_metadata_struct_traits.h
+++ b/cc/ipc/compositor_frame_metadata_struct_traits.h
@@ -106,6 +106,11 @@
     return metadata.referenced_surfaces;
   }
 
+  static const std::vector<cc::SurfaceId>& embedded_surfaces(
+      const cc::CompositorFrameMetadata& metadata) {
+    return metadata.embedded_surfaces;
+  }
+
   static bool can_activate_before_dependencies(
       const cc::CompositorFrameMetadata& metadata) {
     return metadata.can_activate_before_dependencies;
diff --git a/cc/ipc/shared_bitmap_manager.mojom b/cc/ipc/shared_bitmap_manager.mojom
new file mode 100644
index 0000000..6b2d54dd
--- /dev/null
+++ b/cc/ipc/shared_bitmap_manager.mojom
@@ -0,0 +1,21 @@
+// 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.
+
+module cc.mojom;
+
+import "gpu/ipc/common/mailbox.mojom";
+
+// This interface is used when allocating shared bitmap memory to be shared
+// with a display compositor.
+// This interface needs to be associated with the RenderMessageFilter interface
+// to prevent running into message ordering issues (CC trying to access a
+// shared bitmap before the registration message below made it to the display
+// compositor).
+interface SharedBitmapManager {
+  // Informs the display compositor that the child allocated a shared bitmap.
+  DidAllocateSharedBitmap(handle<shared_buffer> buffer, gpu.mojom.Mailbox id);
+
+  // Informs the display compositor that the child deleted a shared bitmap.
+  DidDeleteSharedBitmap(gpu.mojom.Mailbox id);
+};
diff --git a/cc/ipc/struct_traits_unittest.cc b/cc/ipc/struct_traits_unittest.cc
index 5115809..d132d29 100644
--- a/cc/ipc/struct_traits_unittest.cc
+++ b/cc/ipc/struct_traits_unittest.cc
@@ -374,6 +374,10 @@
   SurfaceId id(FrameSinkId(1234, 4321),
                LocalSurfaceId(5678, base::UnguessableToken::Create()));
   referenced_surfaces.push_back(id);
+  std::vector<SurfaceId> embedded_surfaces;
+  SurfaceId id2(FrameSinkId(4321, 1234),
+                LocalSurfaceId(8765, base::UnguessableToken::Create()));
+  embedded_surfaces.push_back(id2);
   uint32_t frame_token = 0xdeadbeef;
 
   CompositorFrameMetadata input;
@@ -397,6 +401,7 @@
   input.selection = selection;
   input.latency_info = latency_infos;
   input.referenced_surfaces = referenced_surfaces;
+  input.embedded_surfaces = embedded_surfaces;
   input.frame_token = frame_token;
 
   mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
@@ -429,6 +434,9 @@
   EXPECT_EQ(referenced_surfaces.size(), output.referenced_surfaces.size());
   for (uint32_t i = 0; i < referenced_surfaces.size(); ++i)
     EXPECT_EQ(referenced_surfaces[i], output.referenced_surfaces[i]);
+  EXPECT_EQ(embedded_surfaces.size(), output.embedded_surfaces.size());
+  for (uint32_t i = 0; i < embedded_surfaces.size(); ++i)
+    EXPECT_EQ(embedded_surfaces[i], output.embedded_surfaces[i]);
   EXPECT_EQ(frame_token, output.frame_token);
 }
 
diff --git a/cc/layers/append_quads_data.cc b/cc/layers/append_quads_data.cc
new file mode 100644
index 0000000..63d6d17
--- /dev/null
+++ b/cc/layers/append_quads_data.cc
@@ -0,0 +1,13 @@
+// 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 "cc/layers/append_quads_data.h"
+
+namespace cc {
+
+AppendQuadsData::AppendQuadsData() = default;
+
+AppendQuadsData::~AppendQuadsData() = default;
+
+}  // namespace cc
diff --git a/cc/layers/append_quads_data.h b/cc/layers/append_quads_data.h
index cf17b5b28..45afa469 100644
--- a/cc/layers/append_quads_data.h
+++ b/cc/layers/append_quads_data.h
@@ -6,11 +6,19 @@
 #define CC_LAYERS_APPEND_QUADS_DATA_H_
 
 #include <stdint.h>
+#include <vector>
+
+#include "cc/cc_export.h"
+#include "cc/surfaces/surface_id.h"
 
 namespace cc {
 
 // Set by the layer appending quads.
-struct AppendQuadsData {
+class CC_EXPORT AppendQuadsData {
+ public:
+  AppendQuadsData();
+  ~AppendQuadsData();
+
   int64_t num_incomplete_tiles = 0;
   int64_t num_missing_tiles = 0;
   int64_t visible_layer_area = 0;
@@ -22,6 +30,8 @@
   int64_t checkerboarded_no_recording_content_area = 0;
   // This is the area within interest rect.
   int64_t checkerboarded_needs_raster_content_area = 0;
+  // This is the set of surface IDs embedded in SurfaceDrawQuads.
+  std::vector<SurfaceId> embedded_surfaces;
 };
 
 }  // namespace cc
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h
index a25a7d4..a8181a66 100644
--- a/cc/layers/layer_impl.h
+++ b/cc/layers/layer_impl.h
@@ -51,6 +51,7 @@
 
 namespace cc {
 
+class AppendQuadsData;
 class LayerTreeImpl;
 class MicroBenchmarkImpl;
 class MutatorHost;
@@ -60,7 +61,6 @@
 class SimpleEnclosedRegion;
 class Tile;
 
-struct AppendQuadsData;
 
 enum DrawMode {
   DRAW_MODE_NONE,
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index 26d36e0..f7cbbc8e 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -277,7 +277,7 @@
         } else if (iter.resolution() == LOW_RESOLUTION) {
           color = DebugColors::LowResTileBorderColor();
           width = DebugColors::LowResTileBorderWidth(device_scale_factor);
-        } else if (iter->contents_scale() > max_contents_scale) {
+        } else if (iter->contents_scale_key() > max_contents_scale) {
           color = DebugColors::ExtraHighResTileBorderColor();
           width = DebugColors::ExtraHighResTileBorderWidth(device_scale_factor);
         } else {
@@ -345,8 +345,8 @@
           // complete. But if a tile is ideal scale, we don't want to consider
           // it incomplete and trying to replace it with a tile at a worse
           // scale.
-          if (iter->contents_scale() != raster_contents_scale_ &&
-              iter->contents_scale() != ideal_contents_scale_ &&
+          if (iter->contents_scale_key() != raster_contents_scale_ &&
+              iter->contents_scale_key() != ideal_contents_scale_ &&
               geometry_rect.Intersects(scaled_viewport_for_tile_priority)) {
             append_quads_data->num_incomplete_tiles++;
           }
@@ -646,14 +646,11 @@
 }
 
 void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) {
-  if (layer_tree_impl()->IsActiveTree()) {
-    gfx::Rect layer_damage_rect = gfx::ScaleToEnclosingRect(
-        tile->content_rect(), 1.f / tile->contents_scale());
-    AddDamageRect(layer_damage_rect);
-  }
+  if (layer_tree_impl()->IsActiveTree())
+    AddDamageRect(tile->enclosing_layer_rect());
   if (tile->draw_info().NeedsRaster()) {
     PictureLayerTiling* tiling =
-        tilings_->FindTilingWithScaleKey(tile->contents_scale());
+        tilings_->FindTilingWithScaleKey(tile->contents_scale_key());
     if (tiling)
       tiling->set_all_tiles_done(false);
   }
@@ -726,7 +723,13 @@
   PictureLayerImpl* twin_layer = GetPendingOrActiveTwinLayer();
   if (!twin_layer)
     return nullptr;
-  return twin_layer->tilings_->FindTilingWithScaleKey(tiling->contents_scale());
+  const PictureLayerTiling* twin_tiling =
+      twin_layer->tilings_->FindTilingWithScaleKey(
+          tiling->contents_scale_key());
+  DCHECK(tiling->raster_transform().translation() == gfx::Vector2dF());
+  DCHECK(!twin_tiling ||
+         twin_tiling->raster_transform().translation() == gfx::Vector2dF());
+  return twin_tiling;
 }
 
 bool PictureLayerImpl::RequiresHighResToDraw() const {
@@ -887,7 +890,8 @@
   DCHECK_GE(contents_scale, MinimumContentsScale());
   DCHECK_LE(contents_scale, MaximumContentsScale());
   DCHECK(raster_source_->HasRecordings());
-  return tilings_->AddTiling(contents_scale, raster_source_);
+  return tilings_->AddTiling(
+      gfx::AxisTransform2d(contents_scale, gfx::Vector2dF()), raster_source_);
 }
 
 void PictureLayerImpl::RemoveAllTilings() {
diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h
index 306c602..0e85d8d 100644
--- a/cc/layers/picture_layer_impl.h
+++ b/cc/layers/picture_layer_impl.h
@@ -23,7 +23,7 @@
 
 namespace cc {
 
-struct AppendQuadsData;
+class AppendQuadsData;
 class MicroBenchmarkImpl;
 class Tile;
 
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index 86039df..68b304a 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -191,7 +191,7 @@
     auto prioritized_tiles =
         tiling->UpdateAndGetAllPrioritizedTilesForTesting();
     for (PictureLayerTiling::CoverageIterator iter(
-             tiling, tiling->contents_scale(),
+             tiling, tiling->contents_scale_key(),
              gfx::Rect(tiling->tiling_size()));
          iter; ++iter) {
       EXPECT_TRUE(*iter);
@@ -323,7 +323,7 @@
     EXPECT_EQ(
         tiling->GetCurrentVisibleRectForTesting(),
         gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space,
-                                  tiling->contents_scale()));
+                                  tiling->contents_scale_key()));
   }
 
   // Update tiles with viewport for tile priority as (200, 200, 100, 100) in
@@ -359,7 +359,7 @@
     EXPECT_EQ(
         tiling->GetCurrentVisibleRectForTesting(),
         gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space,
-                                  tiling->contents_scale()));
+                                  tiling->contents_scale_key()));
   }
 }
 
@@ -435,12 +435,12 @@
   EXPECT_GT(tilings->num_tilings(), 0u);
   for (size_t i = 0; i < tilings->num_tilings(); ++i) {
     const PictureLayerTiling* tiling = tilings->tiling_at(i);
-    gfx::Rect content_invalidation =
-        gfx::ScaleToEnclosingRect(layer_invalidation, tiling->contents_scale());
+    gfx::Rect content_invalidation = gfx::ScaleToEnclosingRect(
+        layer_invalidation, tiling->contents_scale_key());
     auto prioritized_tiles =
         tiling->UpdateAndGetAllPrioritizedTilesForTesting();
     for (PictureLayerTiling::CoverageIterator iter(
-             tiling, tiling->contents_scale(),
+             tiling, tiling->contents_scale_key(),
              gfx::Rect(tiling->tiling_size()));
          iter; ++iter) {
       // We don't always have a tile, but when we do it's because it was
@@ -464,7 +464,7 @@
     auto prioritized_tiles =
         tiling->UpdateAndGetAllPrioritizedTilesForTesting();
     for (PictureLayerTiling::CoverageIterator iter(
-             tiling, tiling->contents_scale(),
+             tiling, tiling->contents_scale_key(),
              gfx::Rect(tiling->tiling_size()));
          iter; ++iter) {
       EXPECT_TRUE(*iter);
@@ -518,10 +518,11 @@
                                     0.f,  // starting animation scale
                                     false);
   ASSERT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(6.f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(6.f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      6.f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      6.f * low_res_factor,
+      active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   // If we change the page scale factor, then we should get new tilings.
   SetupDrawPropertiesAndUpdateTiles(active_layer(),
@@ -532,10 +533,11 @@
                                     0.f,   // starting animation scale
                                     false);
   ASSERT_EQ(4u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(6.6f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(6.6f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      6.6f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      6.6f * low_res_factor,
+      active_layer()->tilings()->tiling_at(2)->contents_scale_key());
 
   // If we change the device scale factor, then we should get new tilings.
   SetupDrawPropertiesAndUpdateTiles(active_layer(),
@@ -546,10 +548,11 @@
                                     0.f,    // starting animation scale
                                     false);
   ASSERT_EQ(6u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(7.26f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(7.26f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(3)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      7.26f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      7.26f * low_res_factor,
+      active_layer()->tilings()->tiling_at(3)->contents_scale_key());
 
   // If we change the device scale factor, but end up at the same total scale
   // factor somehow, then we don't get new tilings.
@@ -561,10 +564,11 @@
                                     0.f,    // starting animation scale
                                     false);
   ASSERT_EQ(6u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(7.26f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(7.26f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(3)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      7.26f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      7.26f * low_res_factor,
+      active_layer()->tilings()->tiling_at(3)->contents_scale_key());
 }
 
 TEST_F(PictureLayerImplTest, PendingLayerOnlyHasHighResTiling) {
@@ -587,8 +591,8 @@
                                     0.f,  // starting animation scale
                                     false);
   ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(6.f,
-                  pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      6.f, pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the page scale factor, then we should get new tilings.
   SetupDrawPropertiesAndUpdateTiles(pending_layer(),
@@ -599,8 +603,8 @@
                                     0.f,   // starting animation scale
                                     false);
   ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(6.6f,
-                  pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      6.6f, pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the device scale factor, then we should get new tilings.
   SetupDrawPropertiesAndUpdateTiles(pending_layer(),
@@ -611,8 +615,8 @@
                                     0.f,    // starting animation scale
                                     false);
   ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(7.26f,
-                  pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      7.26f, pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the device scale factor, but end up at the same total scale
   // factor somehow, then we don't get new tilings.
@@ -624,8 +628,8 @@
                                     0.f,    // starting animation scale
                                     false);
   ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(7.26f,
-                  pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      7.26f, pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 }
 
 TEST_F(PictureLayerImplTest, CreateTilingsEvenIfTwinHasNone) {
@@ -692,7 +696,7 @@
   ResetTilingsAndRasterScales();
   EXPECT_EQ(0u, active_layer()->tilings()->num_tilings());
   SetContentsScaleOnBothLayers(32.0f, 1.0f, 32.0f, 1.0f, 0.f, false);
-  EXPECT_EQ(32.f, active_layer()->HighResTiling()->contents_scale());
+  EXPECT_EQ(32.f, active_layer()->HighResTiling()->contents_scale_key());
   host_impl()->PinchGestureBegin();
   SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, 1.0f, 0.f, false);
   SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, 1.0f, 0.f, false);
@@ -717,7 +721,7 @@
             static_cast<float>(std::numeric_limits<int>::max()));
 
   SetContentsScaleOnBothLayers(scale, 1.0f, scale, 1.0f, 0.f, false);
-  float adjusted_scale = active_layer()->HighResTiling()->contents_scale();
+  float adjusted_scale = active_layer()->HighResTiling()->contents_scale_key();
   EXPECT_LT(adjusted_scale, scale);
 
   // PopulateSharedQuadState CHECKs for overflows.
@@ -740,8 +744,8 @@
   SetContentsScaleOnBothLayers(2.f, 1.0f, 2.f, 1.0f, 0.f, false);
   EXPECT_EQ(active_layer()->num_tilings(), 2u);
   EXPECT_EQ(pending_layer()->num_tilings(), 1u);
-  EXPECT_EQ(active_layer()->tilings()->tiling_at(0)->contents_scale(), 2.f);
-  EXPECT_EQ(active_layer()->tilings()->tiling_at(1)->contents_scale(),
+  EXPECT_EQ(active_layer()->tilings()->tiling_at(0)->contents_scale_key(), 2.f);
+  EXPECT_EQ(active_layer()->tilings()->tiling_at(1)->contents_scale_key(),
             2.f * low_res_factor);
   // One of the tilings has to be a low resolution one.
   EXPECT_EQ(LOW_RESOLUTION,
@@ -757,12 +761,13 @@
   // the scale (2/kMaxScaleRatioDuringPinch).
   SetContentsScaleOnBothLayers(1.8f, 1.0f, 1.8f, 1.0f, 0.f, false);
   EXPECT_EQ(3u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(2.0f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.0f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
-  EXPECT_FLOAT_EQ(2.0f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      2.0f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.0f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      2.0f * low_res_factor,
+      active_layer()->tilings()->tiling_at(2)->contents_scale_key());
   // Since we're pinching, we shouldn't create a low resolution tiling.
   EXPECT_FALSE(
       active_layer()->tilings()->FindTilingWithResolution(LOW_RESOLUTION));
@@ -782,8 +787,8 @@
   // kMaxScaleRatioDuringPinch, this will create a new tiling at 4.0.
   SetContentsScaleOnBothLayers(3.8f, 1.0f, 3.8f, 1.f, 0.f, false);
   EXPECT_EQ(4u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(4.0f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      4.0f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
   // Although one of the tilings matches the low resolution scale, it still
   // shouldn't be marked as low resolution since we're pinching.
   auto* low_res_tiling =
@@ -801,8 +806,8 @@
   // (checked above).
   SetContentsScaleOnBothLayers(4.0f, 1.0f, 4.0f, 1.f, 0.f, false);
   EXPECT_EQ(4u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(4.0f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      4.0f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
   // Now that we stopped pinching, the low resolution tiling that existed should
   // now be marked as low resolution.
   low_res_tiling =
@@ -821,10 +826,10 @@
   // Set up the high and low res tilings before pinch zoom.
   SetContentsScaleOnBothLayers(0.24f, 1.0f, 0.24f, 1.0f, 0.f, false);
   EXPECT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(0.24f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(0.0625f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      0.24f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      0.0625f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   // Ensure UpdateTiles won't remove any tilings.
   active_layer()->MarkAllTilingsUsed();
@@ -836,12 +841,12 @@
   // the scale (1/kMaxScaleRatioDuringPinch).
   SetContentsScaleOnBothLayers(0.2f, 1.0f, 0.2f, 1.0f, 0.f, false);
   EXPECT_EQ(3u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(0.24f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(0.12f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
-  EXPECT_FLOAT_EQ(0.0625,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      0.24f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      0.12f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      0.0625, active_layer()->tilings()->tiling_at(2)->contents_scale_key());
 
   // Ensure UpdateTiles won't remove any tilings.
   active_layer()->MarkAllTilingsUsed();
@@ -860,8 +865,8 @@
   // is a power of 2 times 0.24.
   SetContentsScaleOnBothLayers(1.f, 1.0f, 1.f, 1.0f, 0.f, false);
   EXPECT_EQ(4u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.92f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.92f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
 }
 
 TEST_F(PictureLayerImplTest, CleanUpTilings) {
@@ -878,10 +883,11 @@
   SetupDefaultTrees(layer_bounds);
   active_layer()->SetHasWillChangeTransformHint(true);
   EXPECT_FLOAT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f * low_res_factor,
+      active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   // Ensure UpdateTiles won't remove any tilings. Note this is unrelated to
   // |used_tilings| variable, and it's here only to ensure that active_layer()
@@ -892,10 +898,11 @@
   used_tilings.clear();
   active_layer()->CleanUpTilingsOnActiveLayer(used_tilings);
   EXPECT_FLOAT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f * low_res_factor,
+      active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   host_impl()->PinchGestureBegin();
 
@@ -904,19 +911,21 @@
   page_scale = 1.5f;
   SetContentsScaleOnBothLayers(scale, 1.f, page_scale, 1.f, 0.f, false);
   EXPECT_FLOAT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f * low_res_factor,
+      active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   // The tilings are still our target scale, so they aren't removed.
   used_tilings.clear();
   active_layer()->CleanUpTilingsOnActiveLayer(used_tilings);
   ASSERT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f * low_res_factor,
+      active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   host_impl()->PinchGestureEnd();
 
@@ -925,14 +934,16 @@
   page_scale = 1.2f;
   SetContentsScaleOnBothLayers(1.2f, 1.f, page_scale, 1.f, 0.f, false);
   ASSERT_EQ(4u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.2f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
-  EXPECT_FLOAT_EQ(1.2f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(3)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.2f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.2f * low_res_factor,
+      active_layer()->tilings()->tiling_at(2)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f * low_res_factor,
+      active_layer()->tilings()->tiling_at(3)->contents_scale_key());
 
   // Ensure UpdateTiles won't remove any tilings.
   active_layer()->MarkAllTilingsUsed();
@@ -943,14 +954,16 @@
   used_tilings.push_back(active_layer()->tilings()->tiling_at(3));
   active_layer()->CleanUpTilingsOnActiveLayer(used_tilings);
   ASSERT_EQ(4u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.2f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
-  EXPECT_FLOAT_EQ(1.2f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(3)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.2f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.2f * low_res_factor,
+      active_layer()->tilings()->tiling_at(2)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f * low_res_factor,
+      active_layer()->tilings()->tiling_at(3)->contents_scale_key());
 
   // Now move the ideal scale to 0.5. Our target stays 1.2.
   SetContentsScaleOnBothLayers(0.5f, 1.f, page_scale, 1.f, 0.f, false);
@@ -960,12 +973,13 @@
   used_tilings.clear();
   active_layer()->CleanUpTilingsOnActiveLayer(used_tilings);
   ASSERT_EQ(3u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.2f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
-  EXPECT_FLOAT_EQ(1.2f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.2f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.2f * low_res_factor,
+      active_layer()->tilings()->tiling_at(2)->contents_scale_key());
 
   // Now move the ideal scale to 1.0. Our target stays 1.2.
   SetContentsScaleOnBothLayers(1.f, 1.f, page_scale, 1.f, 0.f, false);
@@ -975,12 +989,13 @@
   used_tilings.clear();
   active_layer()->CleanUpTilingsOnActiveLayer(used_tilings);
   ASSERT_EQ(3u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.2f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
-  EXPECT_FLOAT_EQ(1.2f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.2f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.2f * low_res_factor,
+      active_layer()->tilings()->tiling_at(2)->contents_scale_key());
 
   // Now move the ideal scale to 1.1 on the active layer. Our target stays 1.2.
   SetupDrawPropertiesAndUpdateTiles(active_layer(), 1.1f, 1.f, page_scale, 1.f,
@@ -991,12 +1006,13 @@
   used_tilings.clear();
   active_layer()->CleanUpTilingsOnActiveLayer(used_tilings);
   ASSERT_EQ(3u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.2f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
-  EXPECT_FLOAT_EQ(1.2f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.2f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.2f * low_res_factor,
+      active_layer()->tilings()->tiling_at(2)->contents_scale_key());
 
   // Move the ideal scale on the pending layer to 1.1 as well. Our target stays
   // 1.2 still.
@@ -1010,22 +1026,24 @@
   used_tilings.push_back(active_layer()->tilings()->tiling_at(1));
   active_layer()->CleanUpTilingsOnActiveLayer(used_tilings);
   ASSERT_EQ(3u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.2f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
-  EXPECT_FLOAT_EQ(1.2f * low_res_factor,
-                  active_layer()->tilings()->tiling_at(2)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.2f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.2f * low_res_factor,
+      active_layer()->tilings()->tiling_at(2)->contents_scale_key());
 
   // If we remove it from our used tilings set, it is outside the range to keep
   // so it is deleted.
   used_tilings.clear();
   active_layer()->CleanUpTilingsOnActiveLayer(used_tilings);
   ASSERT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.2f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_FLOAT_EQ(1.2 * low_res_factor,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.2f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_FLOAT_EQ(
+      1.2 * low_res_factor,
+      active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 }
 
 TEST_F(PictureLayerImplTest, DontAddLowResDuringAnimation) {
@@ -1050,7 +1068,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 1.f);
   EXPECT_BOTH_EQ(num_tilings(), 1u);
 
   // Stop animating, low res gets created.
@@ -1058,8 +1076,9 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f);
-  EXPECT_EQ(active_layer()->LowResTiling()->contents_scale(), low_res_factor);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 1.f);
+  EXPECT_EQ(active_layer()->LowResTiling()->contents_scale_key(),
+            low_res_factor);
   EXPECT_EQ(active_layer()->num_tilings(), 2u);
   EXPECT_EQ(pending_layer()->num_tilings(), 1u);
 
@@ -1076,7 +1095,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 2.f);
   EXPECT_FALSE(active_layer()->LowResTiling());
   EXPECT_FALSE(pending_layer()->LowResTiling());
   EXPECT_EQ(3u, active_layer()->num_tilings());
@@ -1087,8 +1106,8 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f);
-  EXPECT_EQ(active_layer()->LowResTiling()->contents_scale(),
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 2.f);
+  EXPECT_EQ(active_layer()->LowResTiling()->contents_scale_key(),
             2.f * low_res_factor);
   EXPECT_EQ(4u, active_layer()->num_tilings());
   EXPECT_EQ(1u, pending_layer()->num_tilings());
@@ -1116,7 +1135,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), contents_scale);
   EXPECT_BOTH_EQ(num_tilings(), 1u);
 
   ResetTilingsAndRasterScales();
@@ -1126,7 +1145,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), contents_scale);
   EXPECT_BOTH_EQ(num_tilings(), 1u);
 
   // TODO(danakj): Remove these when raster scale doesn't get fixed?
@@ -1138,8 +1157,8 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale);
-  EXPECT_EQ(active_layer()->LowResTiling()->contents_scale(),
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), contents_scale);
+  EXPECT_EQ(active_layer()->LowResTiling()->contents_scale_key(),
             contents_scale * low_res_factor);
   EXPECT_FALSE(pending_layer()->LowResTiling());
   EXPECT_EQ(active_layer()->num_tilings(), 2u);
@@ -1166,7 +1185,7 @@
   SetupDrawPropertiesAndUpdateTiles(
       mask_raw, contents_scale, device_scale, page_scale,
       maximum_animation_scale, starting_animation_scale, animating_transform);
-  EXPECT_EQ(mask_raw->HighResTiling()->contents_scale(), contents_scale);
+  EXPECT_EQ(mask_raw->HighResTiling()->contents_scale_key(), contents_scale);
   EXPECT_EQ(mask_raw->num_tilings(), 1u);
 }
 
@@ -1195,7 +1214,7 @@
   FakePictureLayerImpl* pending_mask = static_cast<FakePictureLayerImpl*>(
       pending_layer()->test_properties()->mask_layer);
 
-  EXPECT_EQ(1.f, pending_mask->HighResTiling()->contents_scale());
+  EXPECT_EQ(1.f, pending_mask->HighResTiling()->contents_scale_key());
   EXPECT_EQ(1u, pending_mask->num_tilings());
 
   host_impl()->tile_manager()->InitializeTilesWithResourcesForTesting(
@@ -1241,7 +1260,7 @@
   host_impl()->pending_tree()->UpdateDrawProperties(update_lcd_text);
 
   // The mask tiling gets scaled down.
-  EXPECT_LT(pending_mask->HighResTiling()->contents_scale(), 1.f);
+  EXPECT_LT(pending_mask->HighResTiling()->contents_scale_key(), 1.f);
   EXPECT_EQ(1u, pending_mask->num_tilings());
 
   host_impl()->tile_manager()->InitializeTilesWithResourcesForTesting(
@@ -1325,7 +1344,7 @@
       pending_layer()->test_properties()->mask_layer);
 
   // Masks are scaled, and do not have a low res tiling.
-  EXPECT_EQ(1.3f, pending_mask->HighResTiling()->contents_scale());
+  EXPECT_EQ(1.3f, pending_mask->HighResTiling()->contents_scale_key());
   EXPECT_EQ(1u, pending_mask->num_tilings());
 
   host_impl()->tile_manager()->InitializeTilesWithResourcesForTesting(
@@ -1660,7 +1679,7 @@
   SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region());
 
   ASSERT_EQ(1u, pending_layer()->num_tilings());
-  ASSERT_EQ(1.f, pending_layer()->HighResTiling()->contents_scale());
+  ASSERT_EQ(1.f, pending_layer()->HighResTiling()->contents_scale_key());
 
   // Set external viewport for tile priority.
   gfx::Transform transform;
@@ -1858,7 +1877,7 @@
 
   // One ideal tile exists, this will get used when drawing.
   std::vector<Tile*> ideal_tiles;
-  EXPECT_EQ(2.f, active_layer()->HighResTiling()->contents_scale());
+  EXPECT_EQ(2.f, active_layer()->HighResTiling()->contents_scale_key());
   ideal_tiles.push_back(active_layer()->HighResTiling()->TileAt(0, 0));
   host_impl()->tile_manager()->InitializeTilesWithResourcesForTesting(
       ideal_tiles);
@@ -1870,13 +1889,13 @@
   SetupDrawPropertiesAndUpdateTiles(active_layer(), 2.f, 1.f, 1.f, 1.f, 0.f,
                                     false);
 
-  EXPECT_EQ(1.f, active_layer()->HighResTiling()->contents_scale());
+  EXPECT_EQ(1.f, active_layer()->HighResTiling()->contents_scale_key());
   EXPECT_EQ(1.f, active_layer()->raster_contents_scale());
   EXPECT_EQ(2.f, active_layer()->ideal_contents_scale());
 
   // Both tilings still exist.
-  EXPECT_EQ(2.f, active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_EQ(1.f, active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_EQ(2.f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_EQ(1.f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   // All high res tiles have resources.
   std::vector<Tile*> high_tiles =
@@ -2450,7 +2469,7 @@
   SetupDefaultTrees(gfx::Size(10, 10));
 
   // We start with a tiling at scale 1.
-  EXPECT_EQ(1.f, pending_layer()->HighResTiling()->contents_scale());
+  EXPECT_EQ(1.f, pending_layer()->HighResTiling()->contents_scale_key());
 
   // When we page scale up by 2.3, we get a new tiling that is a power of 2, in
   // this case 4.
@@ -2458,14 +2477,14 @@
   float high_res_scale = 2.3f;
   SetContentsScaleOnBothLayers(high_res_scale, 1.f, high_res_scale, 1.f, 0.f,
                                false);
-  EXPECT_EQ(4.f, pending_layer()->HighResTiling()->contents_scale());
+  EXPECT_EQ(4.f, pending_layer()->HighResTiling()->contents_scale_key());
 }
 
 TEST_F(PictureLayerImplTest, PinchingTooSmall) {
   SetupDefaultTrees(gfx::Size(10, 10));
 
   // We start with a tiling at scale 1.
-  EXPECT_EQ(1.f, pending_layer()->HighResTiling()->contents_scale());
+  EXPECT_EQ(1.f, pending_layer()->HighResTiling()->contents_scale_key());
 
   host_impl()->PinchGestureBegin();
   float high_res_scale = 0.0001f;
@@ -2474,7 +2493,7 @@
   SetContentsScaleOnBothLayers(high_res_scale, 1.f, high_res_scale, 1.f, 0.f,
                                false);
   EXPECT_FLOAT_EQ(pending_layer()->MinimumContentsScale(),
-                  pending_layer()->HighResTiling()->contents_scale());
+                  pending_layer()->HighResTiling()->contents_scale_key());
 }
 
 TEST_F(PictureLayerImplTest, PinchingTooSmallWithContentsScale) {
@@ -2487,7 +2506,7 @@
 
   ASSERT_GE(pending_layer()->num_tilings(), 0u);
   EXPECT_FLOAT_EQ(contents_scale,
-                  pending_layer()->HighResTiling()->contents_scale());
+                  pending_layer()->HighResTiling()->contents_scale_key());
 
   host_impl()->PinchGestureBegin();
 
@@ -2499,7 +2518,7 @@
                                1.f, 0.f, false);
   ASSERT_GE(pending_layer()->num_tilings(), 0u);
   EXPECT_FLOAT_EQ(pending_layer()->MinimumContentsScale(),
-                  pending_layer()->HighResTiling()->contents_scale());
+                  pending_layer()->HighResTiling()->contents_scale_key());
 }
 
 TEST_F(PictureLayerImplTest, ConsiderAnimationStartScaleForRasterScale) {
@@ -2516,13 +2535,13 @@
   float starting_animation_scale = 1.f;
   bool animating_transform = true;
 
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 1.f);
 
   // Maximum animation scale is greater than starting animation scale
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 3.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 3.f);
 
   animating_transform = false;
 
@@ -2530,7 +2549,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 2.f);
 
   // Starting animation scale greater than maximum animation scale
   // Bounds at starting scale within the viewport
@@ -2540,14 +2559,14 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 5.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 5.f);
 
   // Once we stop animating, a new high-res tiling should be created.
   animating_transform = false;
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 2.f);
 
   // Starting Animation scale greater than maximum animation scale
   // Bounds at starting scale outisde the viewport
@@ -2557,7 +2576,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 3.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 3.f);
 }
 
 TEST_F(PictureLayerImplTest, HighResTilingDuringAnimation) {
@@ -2574,7 +2593,7 @@
   float starting_animation_scale = 0.f;
   bool animating_transform = false;
 
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 1.f);
 
   // Starting an animation should cause tiling resolution to get set to the
   // maximum animation scale factor.
@@ -2585,7 +2604,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 3.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 3.f);
 
   // Further changes to scale during the animation should not cause a new
   // high-res tiling to get created.
@@ -2595,7 +2614,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 3.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 3.f);
 
   // Once we stop animating, a new high-res tiling should be created.
   animating_transform = false;
@@ -2603,7 +2622,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 4.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 4.f);
 
   // When animating with an unknown maximum animation scale factor, a new
   // high-res tiling should be created at a source scale of 1.
@@ -2614,7 +2633,8 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), page_scale * device_scale);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(),
+                 page_scale * device_scale);
 
   // Further changes to scale during the animation should not cause a new
   // high-res tiling to get created.
@@ -2623,7 +2643,8 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), page_scale * device_scale);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(),
+                 page_scale * device_scale);
 
   // Once we stop animating, a new high-res tiling should be created.
   animating_transform = false;
@@ -2632,7 +2653,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 4.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 4.f);
 
   // When animating with a maxmium animation scale factor that is so large
   // that the layer grows larger than the viewport at this scale, a new
@@ -2645,7 +2666,8 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), page_scale * device_scale);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(),
+                 page_scale * device_scale);
 
   // Once we stop animating, a new high-res tiling should be created.
   animating_transform = false;
@@ -2654,7 +2676,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 11.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 11.f);
 
   // When animating with a maxmium animation scale factor that is so large
   // that the layer grows larger than the viewport at this scale, and where
@@ -2667,7 +2689,8 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), device_scale * page_scale);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(),
+                 device_scale * page_scale);
 
   // Once we stop animating, a new high-res tiling should be created.
   animating_transform = false;
@@ -2676,7 +2699,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 12.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 12.f);
 
   // When animating toward a smaller scale, but that is still so large that the
   // layer grows larger than the viewport at this scale, a new high-res tiling
@@ -2688,7 +2711,8 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), device_scale * page_scale);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(),
+                 device_scale * page_scale);
 
   // Once we stop animating, a new high-res tiling should be created.
   animating_transform = false;
@@ -2697,7 +2721,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 11.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 11.f);
 }
 
 TEST_F(PictureLayerImplTest, TilingSetRasterQueue) {
@@ -2962,18 +2986,19 @@
 
     EXPECT_FALSE(tile->required_for_activation());
 
-    while (std::abs(tile->contents_scale() - expected_scales[scale_index]) >
+    while (std::abs(tile->contents_scale_key() - expected_scales[scale_index]) >
            std::numeric_limits<float>::epsilon()) {
       ++scale_index;
       ASSERT_LT(scale_index, arraysize(expected_scales));
     }
 
-    EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]);
+    EXPECT_FLOAT_EQ(tile->contents_scale_key(), expected_scales[scale_index]);
     unique_tiles.insert(tile);
 
     if (tile->required_for_activation() ==
             last_tile.tile()->required_for_activation() &&
-        std::abs(tile->contents_scale() - last_tile.tile()->contents_scale()) <
+        std::abs(tile->contents_scale_key() -
+                 last_tile.tile()->contents_scale_key()) <
             std::numeric_limits<float>::epsilon()) {
       if (priority.distance_to_visible <=
           last_tile.priority().distance_to_visible)
@@ -3009,13 +3034,13 @@
       scale_index = 0;
     }
 
-    while (std::abs(tile->contents_scale() - expected_scales[scale_index]) >
+    while (std::abs(tile->contents_scale_key() - expected_scales[scale_index]) >
            std::numeric_limits<float>::epsilon()) {
       ++scale_index;
       ASSERT_LT(scale_index, arraysize(expected_scales));
     }
 
-    EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]);
+    EXPECT_FLOAT_EQ(tile->contents_scale_key(), expected_scales[scale_index]);
     unique_tiles.insert(tile);
     queue->Pop();
   }
@@ -3090,7 +3115,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 2.f);
 
   // Changing the source scale without being in an animation will cause
   // the layer to change scale.
@@ -3099,14 +3124,14 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 3.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 3.f);
 
   contents_scale = 0.5f;
 
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 0.5f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 0.5f);
 
   // However, if the layer has a will-change property, then the raster scale
   // will get fixed at the last value.
@@ -3118,7 +3143,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 0.5f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 0.5f);
 
   // Further changes to the source scale will no longer be reflected in the
   // contents scale.
@@ -3127,7 +3152,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 0.5f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 0.5f);
 
   // Disabling the will-change hint will once again make the raster scale update
   // with the ideal scale.
@@ -3139,7 +3164,7 @@
   SetContentsScaleOnBothLayers(contents_scale, device_scale, page_scale,
                                maximum_animation_scale,
                                starting_animation_scale, animating_transform);
-  EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 3.f);
+  EXPECT_BOTH_EQ(HighResTiling()->contents_scale_key(), 3.f);
 }
 
 TEST_F(PictureLayerImplTest, LowResReadyToDrawNotEnoughToActivate) {
@@ -3222,8 +3247,8 @@
                                     0.f,  // starting animation scale
                                     false);
   ASSERT_EQ(1u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(6.f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      6.f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the page scale factor, then we should get new tilings.
   SetupDrawPropertiesAndUpdateTiles(active_layer(),
@@ -3234,8 +3259,8 @@
                                     0.f,   // starting animation scale
                                     false);
   ASSERT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(6.6f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      6.6f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the device scale factor, then we should get new tilings.
   SetupDrawPropertiesAndUpdateTiles(active_layer(),
@@ -3246,8 +3271,8 @@
                                     0.f,    // starting animation scale
                                     false);
   ASSERT_EQ(3u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(7.26f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      7.26f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the device scale factor, but end up at the same total scale
   // factor somehow, then we don't get new tilings.
@@ -3259,8 +3284,8 @@
                                     0.f,    // starting animation scale
                                     false);
   ASSERT_EQ(3u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(7.26f,
-                  active_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      7.26f, active_layer()->tilings()->tiling_at(0)->contents_scale_key());
 }
 
 TEST_F(NoLowResPictureLayerImplTest, PendingLayerOnlyHasHighResTiling) {
@@ -3280,8 +3305,8 @@
                                     0.f,  // starting animation scale
                                     false);
   ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(6.f,
-                  pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      6.f, pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the page scale factor, then we should get new tilings.
   SetupDrawPropertiesAndUpdateTiles(pending_layer(),
@@ -3292,8 +3317,8 @@
                                     0.f,   // starting animation scale
                                     false);
   ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(6.6f,
-                  pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      6.6f, pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the device scale factor, then we should get new tilings.
   SetupDrawPropertiesAndUpdateTiles(pending_layer(),
@@ -3304,8 +3329,8 @@
                                     0.f,    // starting animation scale
                                     false);
   ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(7.26f,
-                  pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      7.26f, pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 
   // If we change the device scale factor, but end up at the same total scale
   // factor somehow, then we don't get new tilings.
@@ -3317,8 +3342,8 @@
                                     0.f,    // starting animation scale
                                     false);
   ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(7.26f,
-                  pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      7.26f, pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 }
 
 TEST_F(NoLowResPictureLayerImplTest, AllHighResRequiredEvenIfNotChanged) {
@@ -3428,8 +3453,8 @@
   page_scale /= 4.f;
   SetContentsScaleOnBothLayers(1.2f, device_scale, page_scale, 1.f, 0.f, false);
   ASSERT_EQ(2u, active_layer()->tilings()->num_tilings());
-  EXPECT_FLOAT_EQ(1.f,
-                  active_layer()->tilings()->tiling_at(1)->contents_scale());
+  EXPECT_FLOAT_EQ(
+      1.f, active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   // Ensure UpdateTiles won't remove any tilings.
   active_layer()->MarkAllTilingsUsed();
@@ -3650,8 +3675,8 @@
 
           EXPECT_TRUE(tile_priority_bin < last_tile_priority_bin ||
                       tile->required_for_activation() ||
-                      tile->contents_scale() !=
-                          last_tile.tile()->contents_scale())
+                      tile->contents_scale_key() !=
+                          last_tile.tile()->contents_scale_key())
               << "line: " << source_line;
         }
       }
@@ -3929,7 +3954,7 @@
     for (size_t j = 0; j < tiles.size(); ++j) {
       if (prioritized_tiles[tiles[j]].is_occluded()) {
         gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
-            tiles[j]->content_rect(), 1.f / tiles[j]->contents_scale());
+            tiles[j]->content_rect(), 1.f / tiles[j]->contents_scale_key());
         EXPECT_GE(scaled_content_rect.x(), occluding_layer_position.x());
         occluded_tile_count++;
       }
@@ -3993,7 +4018,7 @@
       const Tile* tile = *iter;
 
       gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
-          tile->content_rect(), 1.f / tile->contents_scale());
+          tile->content_rect(), 1.f / tile->contents_scale_key());
       // Tiles are occluded on the active tree iff they lie beneath the
       // occluding layer.
       EXPECT_EQ(prioritized_tiles[tile].is_occluded(),
@@ -4029,7 +4054,7 @@
           active_layer()->GetPendingOrActiveTwinTiling(tiling)->TileAt(
               iter.i(), iter.j());
       gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
-          tile->content_rect(), 1.f / tile->contents_scale());
+          tile->content_rect(), 1.f / tile->contents_scale_key());
 
       if (scaled_content_rect.Intersects(invalidation_rect)) {
         // Tiles inside the invalidation rect exist on both trees.
@@ -4137,7 +4162,7 @@
     }
     EXPECT_EQ(expected_occluded_tile_count_on_pending[i],
               occluded_tile_count_on_pending)
-        << tiling->contents_scale();
+        << tiling->contents_scale_key();
   }
 
   // Verify number of occluded tiles on the active layer for each tiling.
@@ -4727,7 +4752,7 @@
   float page_scale = 2.f;
   SetContentsScaleOnBothLayers(page_scale, 1.0f, page_scale, 1.0f, 0.f, false);
   EXPECT_BOTH_EQ(num_tilings(), 1u);
-  EXPECT_BOTH_EQ(tilings()->tiling_at(0)->contents_scale(), page_scale);
+  EXPECT_BOTH_EQ(tilings()->tiling_at(0)->contents_scale_key(), page_scale);
 
   host_impl()->PinchGestureBegin();
 
@@ -4736,7 +4761,8 @@
   float zoomed = page_scale / low_res_factor;
   SetContentsScaleOnBothLayers(zoomed, 1.0f, zoomed, 1.0f, 0.f, false);
   EXPECT_EQ(1u, pending_layer()->num_tilings());
-  EXPECT_EQ(zoomed, pending_layer()->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_EQ(zoomed,
+            pending_layer()->tilings()->tiling_at(0)->contents_scale_key());
 }
 
 TEST_F(PictureLayerImplTest, HighResWasLowResCollision) {
@@ -4754,8 +4780,9 @@
                                     page_scale, 1.0f, 0.f, false);
   EXPECT_EQ(2u, active_layer()->tilings()->num_tilings());
   EXPECT_EQ(page_scale,
-            active_layer()->tilings()->tiling_at(0)->contents_scale());
-  EXPECT_EQ(low_res, active_layer()->tilings()->tiling_at(1)->contents_scale());
+            active_layer()->tilings()->tiling_at(0)->contents_scale_key());
+  EXPECT_EQ(low_res,
+            active_layer()->tilings()->tiling_at(1)->contents_scale_key());
 
   // Grab a current low res tile.
   PictureLayerTiling* old_low_res_tiling =
@@ -4780,9 +4807,9 @@
   EXPECT_EQ(3u, active_layer()->num_tilings());
 
   PictureLayerTilingSet* tilings = active_layer()->tilings();
-  EXPECT_EQ(page_scale, tilings->tiling_at(0)->contents_scale());
-  EXPECT_EQ(low_res, tilings->tiling_at(1)->contents_scale());
-  EXPECT_EQ(extra_low_res, tilings->tiling_at(2)->contents_scale());
+  EXPECT_EQ(page_scale, tilings->tiling_at(0)->contents_scale_key());
+  EXPECT_EQ(low_res, tilings->tiling_at(1)->contents_scale_key());
+  EXPECT_EQ(extra_low_res, tilings->tiling_at(2)->contents_scale_key());
 
   EXPECT_EQ(NON_IDEAL_RESOLUTION, tilings->tiling_at(0)->resolution());
   EXPECT_EQ(HIGH_RESOLUTION, tilings->tiling_at(1)->resolution());
@@ -4853,7 +4880,8 @@
       pending_layer_ptr, suggested_ideal_contents_scale, device_scale_factor,
       page_scale_factor, animation_contents_scale, animation_contents_scale,
       animating_transform_to_screen);
-  EXPECT_EQ(1.f, pending_layer_ptr->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_EQ(1.f,
+            pending_layer_ptr->tilings()->tiling_at(0)->contents_scale_key());
 
   // Push to active layer.
   host_impl()->ActivateSyncTree();
@@ -4864,7 +4892,7 @@
       active_layer, suggested_ideal_contents_scale, device_scale_factor,
       page_scale_factor, animation_contents_scale, animation_contents_scale,
       animating_transform_to_screen);
-  EXPECT_EQ(1.f, active_layer->tilings()->tiling_at(0)->contents_scale());
+  EXPECT_EQ(1.f, active_layer->tilings()->tiling_at(0)->contents_scale_key());
   active_layer->set_visible_layer_rect(gfx::Rect(layer_bounds));
 
   // Create resources for the tiles.
@@ -4920,7 +4948,7 @@
     EXPECT_FLOAT_EQ(expected_contents_scale,
                     pending_layer_ptr->picture_layer_tiling_set()
                         ->FindTilingWithResolution(HIGH_RESOLUTION)
-                        ->contents_scale())
+                        ->contents_scale_key())
         << "ideal_contents_scale: " << ideal_contents_scale;
   }
 
@@ -4942,7 +4970,7 @@
     EXPECT_FLOAT_EQ(expected_contents_scale,
                     pending_layer_ptr->picture_layer_tiling_set()
                         ->FindTilingWithResolution(HIGH_RESOLUTION)
-                        ->contents_scale())
+                        ->contents_scale_key())
         << "ideal_contents_scale: " << ideal_contents_scale;
   }
 }
diff --git a/cc/layers/render_surface_impl.h b/cc/layers/render_surface_impl.h
index 7ccc3df..5cf15e8 100644
--- a/cc/layers/render_surface_impl.h
+++ b/cc/layers/render_surface_impl.h
@@ -24,14 +24,13 @@
 
 namespace cc {
 
+class AppendQuadsData;
 class DamageTracker;
 class FilterOperations;
 class Occlusion;
 class LayerImpl;
 class LayerTreeImpl;
 
-struct AppendQuadsData;
-
 class CC_EXPORT RenderSurfaceImpl {
  public:
   RenderSurfaceImpl(LayerTreeImpl* layer_tree_impl, int stable_effect_id);
diff --git a/cc/layers/surface_layer_impl.cc b/cc/layers/surface_layer_impl.cc
index 167cd71..ed5b443a 100644
--- a/cc/layers/surface_layer_impl.cc
+++ b/cc/layers/surface_layer_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/trace_event/trace_event_argument.h"
 #include "cc/debug/debug_colors.h"
+#include "cc/layers/append_quads_data.h"
 #include "cc/quads/solid_color_draw_quad.h"
 #include "cc/quads/surface_draw_quad.h"
 #include "cc/trees/layer_tree_impl.h"
@@ -65,19 +66,22 @@
                                    AppendQuadsData* append_quads_data) {
   AppendRainbowDebugBorder(render_pass);
   auto* primary = CreateSurfaceDrawQuad(
-      render_pass, SurfaceDrawQuadType::PRIMARY, primary_surface_info_);
+      render_pass, SurfaceDrawQuadType::PRIMARY, primary_surface_info_,
+      &append_quads_data->embedded_surfaces);
   // Emitting a fallback SurfaceDrawQuad is unnecessary if the primary and
   // fallback surface Ids match.
   if (primary && fallback_surface_info_.id() != primary_surface_info_.id()) {
     primary->fallback_quad = CreateSurfaceDrawQuad(
-        render_pass, SurfaceDrawQuadType::FALLBACK, fallback_surface_info_);
+        render_pass, SurfaceDrawQuadType::FALLBACK, fallback_surface_info_,
+        &append_quads_data->embedded_surfaces);
   }
 }
 
 SurfaceDrawQuad* SurfaceLayerImpl::CreateSurfaceDrawQuad(
     RenderPass* render_pass,
     SurfaceDrawQuadType surface_draw_quad_type,
-    const SurfaceInfo& surface_info) {
+    const SurfaceInfo& surface_info,
+    std::vector<SurfaceId>* embedded_surfaces) {
   if (!surface_info.is_valid())
     return nullptr;
 
@@ -117,6 +121,8 @@
       render_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
   surface_draw_quad->SetNew(shared_quad_state, quad_rect, visible_quad_rect,
                             surface_info.id(), surface_draw_quad_type, nullptr);
+  embedded_surfaces->push_back(surface_info.id());
+
   return surface_draw_quad;
 }
 
diff --git a/cc/layers/surface_layer_impl.h b/cc/layers/surface_layer_impl.h
index a5bb8c5..9b853df5 100644
--- a/cc/layers/surface_layer_impl.h
+++ b/cc/layers/surface_layer_impl.h
@@ -50,7 +50,8 @@
   SurfaceDrawQuad* CreateSurfaceDrawQuad(
       RenderPass* render_pass,
       SurfaceDrawQuadType surface_draw_quad_type,
-      const SurfaceInfo& surface_info);
+      const SurfaceInfo& surface_info,
+      std::vector<SurfaceId>* embedded_surfaces);
 
   void GetDebugBorderProperties(SkColor* color, float* width) const override;
   void AppendRainbowDebugBorder(RenderPass* render_pass);
diff --git a/cc/layers/surface_layer_impl_unittest.cc b/cc/layers/surface_layer_impl_unittest.cc
index 1b41a538..a526a516 100644
--- a/cc/layers/surface_layer_impl_unittest.cc
+++ b/cc/layers/surface_layer_impl_unittest.cc
@@ -9,8 +9,11 @@
 #include "cc/layers/append_quads_data.h"
 #include "cc/test/layer_test_common.h"
 #include "cc/trees/layer_tree_host_common.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using testing::UnorderedElementsAre;
+
 namespace cc {
 namespace {
 
@@ -168,6 +171,7 @@
   std::unique_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   surface_layer_impl->AppendQuads(render_pass.get(), &data);
+  EXPECT_THAT(data.embedded_surfaces, UnorderedElementsAre(surface_id));
 
   const QuadList& quads = render_pass->quad_list;
   ASSERT_EQ(1u, quads.size());
@@ -236,6 +240,8 @@
   std::unique_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   surface_layer_impl->AppendQuads(render_pass.get(), &data);
+  EXPECT_THAT(data.embedded_surfaces,
+              UnorderedElementsAre(surface_id1, surface_id2));
 
   ASSERT_EQ(2u, render_pass->quad_list.size());
   const SurfaceDrawQuad* surface_draw_quad1 =
@@ -286,6 +292,7 @@
   std::unique_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   surface_layer_impl->AppendQuads(render_pass.get(), &data);
+  EXPECT_THAT(data.embedded_surfaces, UnorderedElementsAre(surface_id1));
 
   ASSERT_EQ(1u, render_pass->quad_list.size());
   const SurfaceDrawQuad* surface_draw_quad1 =
diff --git a/cc/output/compositor_frame_metadata.h b/cc/output/compositor_frame_metadata.h
index 98bed56..a3ebfc2 100644
--- a/cc/output/compositor_frame_metadata.h
+++ b/cc/output/compositor_frame_metadata.h
@@ -77,8 +77,17 @@
   std::vector<ui::LatencyInfo> latency_info;
 
   // This is the set of Surfaces that are referenced by this frame.
+  // Note: this includes occluded and clipped surfaces and surfaces that may
+  // be accessed by this CompositorFrame in the future.
+  // TODO(fsamuel): In the future, a generalized frame eviction system will
+  // determine which surfaces to retain and which to evict. It will likely
+  // be unnecessary for the embedder to explicitly specify which surfaces to
+  // retain. Thus, this field will likely go away.
   std::vector<SurfaceId> referenced_surfaces;
 
+  // This is the set of SurfaceIds embedded in DrawQuads.
+  std::vector<SurfaceId> embedded_surfaces;
+
   // This indicates whether this CompositorFrame can be activated before
   // dependencies have been resolved.
   bool can_activate_before_dependencies = true;
diff --git a/cc/paint/paint_canvas.h b/cc/paint/paint_canvas.h
index 8796447..daacc301 100644
--- a/cc/paint/paint_canvas.h
+++ b/cc/paint/paint_canvas.h
@@ -34,13 +34,6 @@
   virtual void flush() = 0;
 
   virtual SkISize getBaseLayerSize() const = 0;
-  virtual bool readPixels(const SkImageInfo& dest_info,
-                          void* dest_pixels,
-                          size_t dest_row_bytes,
-                          int src_x,
-                          int src_y) = 0;
-  virtual bool readPixels(SkBitmap* bitmap, int src_x, int src_y) = 0;
-  virtual bool readPixels(const SkIRect& srcRect, SkBitmap* bitmap) = 0;
   virtual bool writePixels(const SkImageInfo& info,
                            const void* pixels,
                            size_t row_bytes,
diff --git a/cc/paint/skia_paint_canvas.cc b/cc/paint/skia_paint_canvas.cc
index 35515bab6..94b0cfb7 100644
--- a/cc/paint/skia_paint_canvas.cc
+++ b/cc/paint/skia_paint_canvas.cc
@@ -42,23 +42,6 @@
   return canvas_->getBaseLayerSize();
 }
 
-bool SkiaPaintCanvas::readPixels(const SkImageInfo& dest_info,
-                                 void* dest_pixels,
-                                 size_t dest_row_bytes,
-                                 int src_x,
-                                 int src_y) {
-  return canvas_->readPixels(dest_info, dest_pixels, dest_row_bytes, src_x,
-                             src_y);
-}
-
-bool SkiaPaintCanvas::readPixels(SkBitmap* bitmap, int src_x, int src_y) {
-  return canvas_->readPixels(bitmap, src_x, src_y);
-}
-
-bool SkiaPaintCanvas::readPixels(const SkIRect& srcRect, SkBitmap* bitmap) {
-  return canvas_->readPixels(srcRect, bitmap);
-}
-
 bool SkiaPaintCanvas::writePixels(const SkImageInfo& info,
                                   const void* pixels,
                                   size_t row_bytes,
diff --git a/cc/paint/skia_paint_canvas.h b/cc/paint/skia_paint_canvas.h
index 8d2be88..669ca9b 100644
--- a/cc/paint/skia_paint_canvas.h
+++ b/cc/paint/skia_paint_canvas.h
@@ -39,13 +39,6 @@
   void flush() override;
 
   SkISize getBaseLayerSize() const override;
-  bool readPixels(const SkImageInfo& dest_info,
-                  void* dest_pixels,
-                  size_t dest_row_bytes,
-                  int src_x,
-                  int src_y) override;
-  bool readPixels(SkBitmap* bitmap, int src_x, int src_y) override;
-  bool readPixels(const SkIRect& srcRect, SkBitmap* bitmap) override;
   bool writePixels(const SkImageInfo& info,
                    const void* pixels,
                    size_t row_bytes,
diff --git a/cc/surfaces/compositor_frame_sink_support_unittest.cc b/cc/surfaces/compositor_frame_sink_support_unittest.cc
index 44771bf..319471a 100644
--- a/cc/surfaces/compositor_frame_sink_support_unittest.cc
+++ b/cc/surfaces/compositor_frame_sink_support_unittest.cc
@@ -71,32 +71,43 @@
       LocalSurfaceId(local_id, base::UnguessableToken::Deserialize(0, 1u)));
 }
 
-CompositorFrame MakeCompositorFrame() {
+CompositorFrame MakeCompositorFrame(std::vector<SurfaceId> embedded_surfaces,
+                                    std::vector<SurfaceId> referenced_surfaces,
+                                    TransferableResourceArray resource_list) {
   CompositorFrame compositor_frame;
   compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
-  return compositor_frame;
-}
-
-CompositorFrame MakeCompositorFrame(
-    std::vector<SurfaceId> referenced_surfaces) {
-  CompositorFrame compositor_frame;
-  compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
-  compositor_frame.metadata.referenced_surfaces =
-      std::move(referenced_surfaces);
-  return compositor_frame;
-}
-
-CompositorFrame MakeCompositorFrameWithResources(
-    std::vector<SurfaceId> referenced_surfaces,
-    TransferableResourceArray resource_list) {
-  CompositorFrame compositor_frame;
-  compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
+  compositor_frame.metadata.embedded_surfaces = std::move(embedded_surfaces);
   compositor_frame.metadata.referenced_surfaces =
       std::move(referenced_surfaces);
   compositor_frame.resource_list = std::move(resource_list);
   return compositor_frame;
 }
 
+CompositorFrame MakeCompositorFrame() {
+  return MakeCompositorFrame(empty_surface_ids(), empty_surface_ids(),
+                             TransferableResourceArray());
+}
+
+CompositorFrame MakeCompositorFrame(std::vector<SurfaceId> embedded_surfaces) {
+  return MakeCompositorFrame(embedded_surfaces, embedded_surfaces,
+                             TransferableResourceArray());
+}
+
+CompositorFrame MakeCompositorFrame(
+    std::vector<SurfaceId> embedded_surfaces,
+    std::vector<SurfaceId> referenced_surfaces) {
+  return MakeCompositorFrame(std::move(embedded_surfaces),
+                             std::move(referenced_surfaces),
+                             TransferableResourceArray());
+}
+
+CompositorFrame MakeCompositorFrameWithResources(
+    std::vector<SurfaceId> embedded_surfaces,
+    TransferableResourceArray resource_list) {
+  return MakeCompositorFrame(embedded_surfaces, embedded_surfaces,
+                             std::move(resource_list));
+}
+
 TransferableResource MakeResource(ResourceId id,
                                   ResourceFormat format,
                                   uint32_t filter,
@@ -1194,5 +1205,42 @@
   EXPECT_FALSE(dependency_tracker().has_deadline());
 }
 
+// This test verifies that a CompositorFrame will only blocked on embedded
+// surfaces but not on other retained surface IDs in the CompositorFrame.
+TEST_F(CompositorFrameSinkSupportTest, OnlyBlockOnEmbeddedSurfaces) {
+  const SurfaceId display_id = MakeSurfaceId(kDisplayFrameSink, 1);
+  const SurfaceId parent_id1 = MakeSurfaceId(kParentFrameSink, 1);
+  const SurfaceId parent_id2 = MakeSurfaceId(kParentFrameSink, 2);
+
+  display_support().SubmitCompositorFrame(
+      display_id.local_surface_id(),
+      MakeCompositorFrame({parent_id1}, {parent_id1, parent_id2}));
+
+  EXPECT_TRUE(display_surface()->HasPendingFrame());
+  EXPECT_FALSE(display_surface()->HasActiveFrame());
+  EXPECT_TRUE(dependency_tracker().has_deadline());
+
+  // Verify that the display CompositorFrame will only block on |parent_id1| but
+  // not |parent_id2|.
+  EXPECT_THAT(display_surface()->blocking_surfaces(),
+              UnorderedElementsAre(parent_id1));
+  // Verify that the display CompositorFrame holds refernces to both
+  // |parent_id1| and |parent_id2|.
+  EXPECT_THAT(GetChildReferences(display_id),
+              UnorderedElementsAre(parent_id1, parent_id2));
+
+  // Submitting a CompositorFrame with |parent_id1| should unblock the display
+  // CompositorFrame.
+  parent_support().SubmitCompositorFrame(parent_id1.local_surface_id(),
+                                         MakeCompositorFrame());
+
+  EXPECT_FALSE(dependency_tracker().has_deadline());
+  EXPECT_FALSE(display_surface()->HasPendingFrame());
+  EXPECT_TRUE(display_surface()->HasActiveFrame());
+  EXPECT_THAT(display_surface()->blocking_surfaces(), IsEmpty());
+  EXPECT_THAT(GetChildReferences(display_id),
+              UnorderedElementsAre(parent_id1, parent_id2));
+}
+
 }  // namespace test
 }  // namespace cc
diff --git a/cc/surfaces/surface.cc b/cc/surfaces/surface.cc
index 3e16c69..3290f84b 100644
--- a/cc/surfaces/surface.cc
+++ b/cc/surfaces/surface.cc
@@ -216,8 +216,7 @@
 
   base::flat_set<SurfaceId> new_blocking_surfaces;
 
-  for (const SurfaceId& surface_id :
-       current_frame.metadata.referenced_surfaces) {
+  for (const SurfaceId& surface_id : current_frame.metadata.embedded_surfaces) {
     Surface* surface = factory_->manager()->GetSurfaceForId(surface_id);
     // If a referenced surface does not have a corresponding active frame in the
     // display compositor, then it blocks this frame.
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc
index 19fbc42..a1d015f7 100644
--- a/cc/surfaces/surface_aggregator.cc
+++ b/cc/surfaces/surface_aggregator.cc
@@ -369,7 +369,7 @@
       color_conversion_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
   quad->SetNew(shared_quad_state, output_rect, output_rect,
                root_render_pass->id, 0, gfx::RectF(), gfx::Size(),
-               gfx::Vector2dF(), gfx::PointF(), gfx::RectF());
+               gfx::Vector2dF(), gfx::PointF(), gfx::RectF(output_rect));
   dest_pass_list_->push_back(std::move(color_conversion_pass));
 }
 
diff --git a/cc/surfaces/surface_dependency_tracker.cc b/cc/surfaces/surface_dependency_tracker.cc
index 302a021..9e05907 100644
--- a/cc/surfaces/surface_dependency_tracker.cc
+++ b/cc/surfaces/surface_dependency_tracker.cc
@@ -43,8 +43,7 @@
 
   // Referenced surface IDs that aren't currently known to the surface manager
   // or do not have an active CompsotiorFrame block this frame.
-  for (const SurfaceId& surface_id :
-       pending_frame.metadata.referenced_surfaces) {
+  for (const SurfaceId& surface_id : pending_frame.metadata.embedded_surfaces) {
     Surface* surface_dependency = surface_manager_->GetSurfaceForId(surface_id);
     if (!surface_dependency || !surface_dependency->HasActiveFrame())
       blocked_surfaces_from_dependency_[surface_id].insert(
@@ -117,10 +116,9 @@
 
   const CompositorFrame& pending_frame = surface->GetPendingFrame();
 
-  DCHECK(!pending_frame.metadata.referenced_surfaces.empty());
+  DCHECK(!pending_frame.metadata.embedded_surfaces.empty());
 
-  for (const SurfaceId& surface_id :
-       pending_frame.metadata.referenced_surfaces) {
+  for (const SurfaceId& surface_id : pending_frame.metadata.embedded_surfaces) {
     auto it = blocked_surfaces_from_dependency_.find(surface_id);
     if (it == blocked_surfaces_from_dependency_.end())
       continue;
diff --git a/cc/test/fake_picture_layer_tiling_client.cc b/cc/test/fake_picture_layer_tiling_client.cc
index e4b3a32..06c20b0 100644
--- a/cc/test/fake_picture_layer_tiling_client.cc
+++ b/cc/test/fake_picture_layer_tiling_client.cc
@@ -66,7 +66,8 @@
   if (!twin_set_)
     return twin_tiling_;
   for (size_t i = 0; i < twin_set_->num_tilings(); ++i) {
-    if (twin_set_->tiling_at(i)->contents_scale() == tiling->contents_scale())
+    if (twin_set_->tiling_at(i)->raster_transform() ==
+        tiling->raster_transform())
       return twin_set_->tiling_at(i);
   }
   return nullptr;
diff --git a/cc/tiles/picture_layer_tiling.cc b/cc/tiles/picture_layer_tiling.cc
index b429260..e52a8ab 100644
--- a/cc/tiles/picture_layer_tiling.cc
+++ b/cc/tiles/picture_layer_tiling.cc
@@ -32,29 +32,36 @@
 
 PictureLayerTiling::PictureLayerTiling(
     WhichTree tree,
-    float contents_scale,
+    const gfx::AxisTransform2d& raster_transform,
     scoped_refptr<RasterSource> raster_source,
     PictureLayerTilingClient* client,
     float min_preraster_distance,
     float max_preraster_distance)
-    : contents_scale_(contents_scale),
+    : raster_transform_(raster_transform),
       client_(client),
       tree_(tree),
       raster_source_(raster_source),
       min_preraster_distance_(min_preraster_distance),
       max_preraster_distance_(max_preraster_distance) {
   DCHECK(!raster_source->IsSolidColor());
-  gfx::Size content_bounds =
-      gfx::ScaleToCeiledSize(raster_source_->GetSize(), contents_scale_);
-  gfx::Size tile_size = client_->CalculateTileSize(content_bounds);
+  DCHECK_GE(raster_transform.translation().x(), 0.f);
+  DCHECK_LT(raster_transform.translation().x(), 1.f);
+  DCHECK_GE(raster_transform.translation().y(), 0.f);
+  DCHECK_LT(raster_transform.translation().y(), 1.f);
 
-  DCHECK(!gfx::ScaleToFlooredSize(raster_source_->GetSize(), contents_scale_)
+  DCHECK(!gfx::ScaleToFlooredSize(raster_source_->GetSize(),
+                                  raster_transform.scale())
               .IsEmpty())
       << "Tiling created with scale too small as contents become empty."
       << " Layer bounds: " << raster_source_->GetSize().ToString()
-      << " Raster scale: " << contents_scale_;
+      << " Raster transform: " << raster_transform_.ToString();
 
-  tiling_data_.SetTilingSize(content_bounds);
+  gfx::Rect content_bounds_rect =
+      EnclosingContentsRectFromLayerRect(gfx::Rect(raster_source_->GetSize()));
+  gfx::Size tiling_size = gfx::Size(content_bounds_rect.bottom_right().x(),
+                                    content_bounds_rect.bottom_right().y());
+  tiling_data_.SetTilingSize(tiling_size);
+  gfx::Size tile_size = client_->CalculateTileSize(tiling_size);
   tiling_data_.SetMaxTextureSize(tile_size);
 }
 
@@ -108,7 +115,7 @@
           for (Region::Iterator iter(*invalidation); iter.has_rect();
                iter.next()) {
             gfx::Rect invalid_content_rect =
-                gfx::ScaleToEnclosingRect(iter.rect(), contents_scale_);
+                EnclosingContentsRectFromLayerRect(iter.rect());
             invalid_content_rect.Intersect(tile_rect);
             invalidated.Union(invalid_content_rect);
           }
@@ -167,12 +174,13 @@
   gfx::Size old_layer_bounds = raster_source_->GetSize();
   raster_source_ = std::move(raster_source);
   gfx::Size new_layer_bounds = raster_source_->GetSize();
-  gfx::Size content_bounds =
-      gfx::ScaleToCeiledSize(new_layer_bounds, contents_scale_);
-  gfx::Size tile_size = client_->CalculateTileSize(content_bounds);
+  gfx::Rect content_rect =
+      EnclosingContentsRectFromLayerRect(gfx::Rect(new_layer_bounds));
+  DCHECK(content_rect.origin() == gfx::Point());
+  gfx::Size tile_size = client_->CalculateTileSize(content_rect.size());
 
   if (tile_size != tiling_data_.max_texture_size()) {
-    tiling_data_.SetTilingSize(content_bounds);
+    tiling_data_.SetTilingSize(content_rect.size());
     tiling_data_.SetMaxTextureSize(tile_size);
     // When the tile size changes, the TilingData positions no longer work
     // as valid keys to the TileMap, so just drop all tiles and clear the live
@@ -187,7 +195,6 @@
   // The SetLiveTilesRect() method would drop tiles outside the new bounds,
   // but may do so incorrectly if resizing the tiling causes the number of
   // tiles in the tiling_data_ to change.
-  gfx::Rect content_rect(content_bounds);
   int before_left = tiling_data_.TileXIndexFromSrcCoord(live_tiles_rect_.x());
   int before_top = tiling_data_.TileYIndexFromSrcCoord(live_tiles_rect_.y());
   int before_right =
@@ -198,7 +205,7 @@
   // The live_tiles_rect_ is clamped to stay within the tiling size as we
   // change it.
   live_tiles_rect_.Intersect(content_rect);
-  tiling_data_.SetTilingSize(content_bounds);
+  tiling_data_.SetTilingSize(content_rect.size());
 
   int after_right = -1;
   int after_bottom = -1;
@@ -263,7 +270,7 @@
     gfx::Rect layer_rect = iter.rect();
     // The pixels which are invalid in content space.
     gfx::Rect invalid_content_rect =
-        gfx::ScaleToEnclosingRect(layer_rect, contents_scale_);
+        EnclosingContentsRectFromLayerRect(layer_rect);
     gfx::Rect coverage_content_rect = invalid_content_rect;
     // Avoid needless work by not bothering to invalidate where there aren't
     // tiles.
@@ -300,9 +307,9 @@
   gfx::Rect tile_rect = tiling_data_.TileBoundsWithBorder(i, j);
   tile_rect.set_size(tiling_data_.max_texture_size());
   gfx::Rect enclosing_layer_rect =
-      gfx::ScaleToEnclosingRect(tile_rect, 1.f / contents_scale_);
+      EnclosingLayerRectFromContentsRect(tile_rect);
   return Tile::CreateInfo(this, i, j, enclosing_layer_rect, tile_rect,
-                          contents_scale_);
+                          raster_transform_);
 }
 
 bool PictureLayerTiling::ShouldCreateTileAt(
@@ -342,7 +349,7 @@
   for (Region::Iterator iter(*layer_invalidation); iter.has_rect();
        iter.next()) {
     gfx::Rect invalid_content_rect =
-        gfx::ScaleToEnclosingRect(iter.rect(), contents_scale_);
+        EnclosingContentsRectFromLayerRect(iter.rect());
     if (invalid_content_rect.Intersects(info.content_rect))
       return true;
   }
@@ -371,12 +378,16 @@
     const PictureLayerTiling* tiling,
     float coverage_scale,
     const gfx::Rect& coverage_rect)
-    : tiling_(tiling), coverage_rect_(coverage_rect) {
+    : tiling_(tiling),
+      coverage_rect_(coverage_rect),
+      coverage_to_content_(
+          gfx::PreScaleAxisTransform2d(tiling->raster_transform(),
+                                       1.f / coverage_scale)) {
   DCHECK(tiling_);
   // In order to avoid artifacts in geometry_rect scaling and clamping to ints,
   // the |coverage_scale| should always be at least as big as the tiling's
   // raster scales.
-  DCHECK_GE(coverage_scale, tiling_->contents_scale_);
+  DCHECK_GE(coverage_scale, tiling_->raster_transform_.scale());
 
   // Clamp |coverage_rect| to the bounds of this tiling's raster source.
   coverage_rect_max_bounds_ =
@@ -385,8 +396,6 @@
   if (coverage_rect_.IsEmpty())
     return;
 
-  coverage_to_content_scale_ = tiling_->contents_scale_ / coverage_scale;
-
   // Find the indices of the texel samples that enclose the rect we want to
   // cover.
   // Because we don't know the target transform at this point, we have to be
@@ -394,8 +403,8 @@
   // snapped to a pixel sample) inside of the content rect may be sampled.
   // This code maps the boundary points into contents space, then find out the
   // enclosing texture samples. For example, assume we have:
-  // dest_scale : content_scale = 1.23 : 1
-  // dest_rect = (l:123, t:234, r:345, b:456)
+  // coverage_scale : content_scale = 1.23 : 1
+  // coverage_rect = (l:123, t:234, r:345, b:456)
   // Then it follows that:
   // content_rect = (l:100.00, t:190.24, r:280.49, b:370.73)
   // Without MSAA, the sample point of a texel is at the center of that texel,
@@ -404,7 +413,7 @@
   // Or in integer index:
   // wanted_texels(integer index) = (l:99, t:189, r:280, b:371)
   gfx::RectF content_rect =
-      gfx::ScaleRect(gfx::RectF(coverage_rect_), coverage_to_content_scale_);
+      coverage_to_content_.MapRect(gfx::RectF(coverage_rect_));
   content_rect.Offset(-0.5f, -0.5f);
   gfx::Rect wanted_texels = gfx::ToEnclosingRect(content_rect);
 
@@ -465,8 +474,8 @@
 
   // Convert texel_extent to coverage scale, which is what we have to report
   // geometry_rect in.
-  current_geometry_rect_ = gfx::ToEnclosedRect(
-      gfx::ScaleRect(texel_extent, 1.f / coverage_to_content_scale_));
+  current_geometry_rect_ =
+      gfx::ToEnclosedRect(coverage_to_content_.InverseMapRect(texel_extent));
   {
     // Adjust external edges to cover the whole layer in dest space.
     //
@@ -529,12 +538,9 @@
   auto tex_origin = gfx::PointF(
       tiling_->tiling_data_.TileBoundsWithBorder(tile_i_, tile_j_).origin());
 
-  // Convert from dest space => content space => texture space.
+  // Convert from coverage space => content space => texture space.
   gfx::RectF texture_rect(current_geometry_rect_);
-  texture_rect.Scale(coverage_to_content_scale_);
-  texture_rect.Intersect(gfx::RectF(gfx::SizeF(tiling_->tiling_size())));
-  if (texture_rect.IsEmpty())
-    return texture_rect;
+  texture_rect = coverage_to_content_.MapRect(texture_rect);
   texture_rect.Offset(-tex_origin.OffsetFromOrigin());
 
   return texture_rect;
@@ -577,16 +583,15 @@
     set_all_tiles_done(false);
   }
 
-  float content_to_screen_scale = ideal_contents_scale / contents_scale_;
+  const float content_to_screen_scale =
+      ideal_contents_scale / raster_transform_.scale();
 
   const gfx::Rect* input_rects[] = {
       &visible_rect_in_layer_space, &skewport_in_layer_space,
       &soon_border_rect_in_layer_space, &eventually_rect_in_layer_space};
   gfx::Rect output_rects[4];
-  for (size_t i = 0; i < arraysize(input_rects); ++i) {
-    output_rects[i] = gfx::ToEnclosingRect(
-        gfx::ScaleRect(gfx::RectF(*input_rects[i]), contents_scale_));
-  }
+  for (size_t i = 0; i < arraysize(input_rects); ++i)
+    output_rects[i] = EnclosingContentsRectFromLayerRect(*input_rects[i]);
   // Make sure the eventually rect is aligned to tile bounds.
   output_rects[3] =
       tiling_data_.ExpandRectIgnoringBordersToTileBounds(output_rects[3]);
@@ -731,10 +736,7 @@
   if (tile_query_rect.IsEmpty())
     return false;
 
-  if (contents_scale_ != 1.f) {
-    tile_query_rect =
-        gfx::ScaleToEnclosingRect(tile_query_rect, 1.f / contents_scale_);
-  }
+  tile_query_rect = EnclosingLayerRectFromContentsRect(tile_query_rect);
   return current_occlusion_in_layer_space_.IsOccluded(tile_query_rect);
 }
 
@@ -825,7 +827,8 @@
     PriorityRectType priority_rect_type) const {
   DCHECK(tile);
   DCHECK(raster_source()->CoversRect(tile->enclosing_layer_rect()))
-      << "Tile layer rect: " << tile->enclosing_layer_rect().ToString();
+      << "Recording rect: "
+      << EnclosingLayerRectFromContentsRect(tile->content_rect()).ToString();
 
   UpdateRequiredStatesOnTile(tile);
   const auto& tile_priority = ComputePriorityForTile(tile, priority_rect_type);
@@ -925,7 +928,13 @@
 void PictureLayerTiling::AsValueInto(
     base::trace_event::TracedValue* state) const {
   state->SetInteger("num_tiles", base::saturated_cast<int>(tiles_.size()));
-  state->SetDouble("content_scale", contents_scale());
+  state->SetDouble("content_scale", contents_scale_key());
+
+  state->BeginArray("raster_transform");
+  state->AppendDouble(raster_transform_.scale());
+  state->AppendDouble(raster_transform_.translation().x());
+  state->AppendDouble(raster_transform_.translation().y());
+  state->EndArray();
 
   MathUtil::AddToTracedValue("visible_rect", current_visible_rect_, state);
   MathUtil::AddToTracedValue("skewport_rect", current_skewport_rect_, state);
@@ -944,4 +953,15 @@
   return amount;
 }
 
+gfx::Rect PictureLayerTiling::EnclosingContentsRectFromLayerRect(
+    const gfx::Rect& layer_rect) const {
+  return ToEnclosingRect(raster_transform_.MapRect(gfx::RectF(layer_rect)));
+}
+
+gfx::Rect PictureLayerTiling::EnclosingLayerRectFromContentsRect(
+    const gfx::Rect& contents_rect) const {
+  return ToEnclosingRect(
+      raster_transform_.InverseMapRect(gfx::RectF(contents_rect)));
+}
+
 }  // namespace cc
diff --git a/cc/tiles/picture_layer_tiling.h b/cc/tiles/picture_layer_tiling.h
index b718ca18..369807f5 100644
--- a/cc/tiles/picture_layer_tiling.h
+++ b/cc/tiles/picture_layer_tiling.h
@@ -21,6 +21,7 @@
 #include "cc/tiles/tile.h"
 #include "cc/tiles/tile_priority.h"
 #include "cc/trees/occlusion.h"
+#include "ui/gfx/geometry/axis_transform2d.h"
 #include "ui/gfx/geometry/rect.h"
 
 namespace base {
@@ -80,8 +81,13 @@
  public:
   static const int kBorderTexels = 1;
 
+  // Note on raster_transform: In general raster_transform could be arbitrary,
+  // the only restriction is that the layer bounds after transform should
+  // be positive (because the tiling logic doesn't support negative space).
+  // Also the implementation checks the transformed bounds leaves less than
+  // 1px margin on top left edges, because there is few reason to do so.
   PictureLayerTiling(WhichTree tree,
-                     float raster_scale,
+                     const gfx::AxisTransform2d& raster_transform,
                      scoped_refptr<RasterSource> raster_source,
                      PictureLayerTilingClient* client,
                      float min_preraster_distance,
@@ -120,7 +126,14 @@
   gfx::Size tiling_size() const { return tiling_data_.tiling_size(); }
   gfx::Rect live_tiles_rect() const { return live_tiles_rect_; }
   gfx::Size tile_size() const { return tiling_data_.max_texture_size(); }
-  float contents_scale() const { return contents_scale_; }
+  // PictureLayerTilingSet uses the scale component of the raster transform
+  // as the key for indexing and sorting. In theory we can have multiple
+  // tilings with the same scale but different translation, but currently
+  // we only allow tilings with unique scale for the sake of simplicity.
+  float contents_scale_key() const { return raster_transform_.scale(); }
+  const gfx::AxisTransform2d& raster_transform() const {
+    return raster_transform_;
+  }
   const TilingData* tiling_data() const { return &tiling_data_; }
 
   Tile* TileAt(int i, int j) const {
@@ -169,7 +182,7 @@
 
   void SetAllTilesOccludedForTesting() {
     gfx::Rect viewport_in_layer_space =
-        ScaleToEnclosingRect(current_visible_rect_, 1.f / contents_scale_);
+        EnclosingLayerRectFromContentsRect(current_visible_rect_);
     current_occlusion_in_layer_space_ =
         Occlusion(gfx::Transform(),
                   SimpleEnclosedRegion(viewport_in_layer_space),
@@ -220,7 +233,7 @@
     const PictureLayerTiling* tiling_ = nullptr;
     gfx::Size coverage_rect_max_bounds_;
     gfx::Rect coverage_rect_;
-    float coverage_to_content_scale_;
+    gfx::AxisTransform2d coverage_to_content_;
 
     Tile* current_tile_ = nullptr;
     gfx::Rect current_geometry_rect_;
@@ -330,8 +343,13 @@
   }
   void RemoveTilesInRegion(const Region& layer_region, bool recreate_tiles);
 
+  gfx::Rect EnclosingContentsRectFromLayerRect(
+      const gfx::Rect& layer_rect) const;
+  gfx::Rect EnclosingLayerRectFromContentsRect(
+      const gfx::Rect& contents_rect) const;
+
   // Given properties.
-  const float contents_scale_;
+  const gfx::AxisTransform2d raster_transform_;
   PictureLayerTilingClient* const client_;
   const WhichTree tree_;
   scoped_refptr<RasterSource> raster_source_;
@@ -353,7 +371,7 @@
   gfx::Rect current_soon_border_rect_;
   gfx::Rect current_eventually_rect_;
   // Other properties used for tile iteration and prioritization.
-  float current_content_to_screen_scale_;
+  float current_content_to_screen_scale_ = 0.f;
   Occlusion current_occlusion_in_layer_space_;
   float max_skewport_extent_in_screen_space_ = 0.f;
 
diff --git a/cc/tiles/picture_layer_tiling_set.cc b/cc/tiles/picture_layer_tiling_set.cc
index d9c21aba..5452019 100644
--- a/cc/tiles/picture_layer_tiling_set.cc
+++ b/cc/tiles/picture_layer_tiling_set.cc
@@ -24,7 +24,7 @@
  public:
   bool operator()(const std::unique_ptr<PictureLayerTiling>& left,
                   const std::unique_ptr<PictureLayerTiling>& right) {
-    return left->contents_scale() > right->contents_scale();
+    return left->contents_scale_key() > right->contents_scale_key();
   }
 };
 
@@ -84,11 +84,17 @@
 
   bool tiling_sort_required = false;
   for (const auto& pending_twin_tiling : pending_twin_set->tilings_) {
+    gfx::AxisTransform2d raster_transform =
+        pending_twin_tiling->raster_transform();
     PictureLayerTiling* this_tiling =
-        FindTilingWithScaleKey(pending_twin_tiling->contents_scale());
+        FindTilingWithScaleKey(pending_twin_tiling->contents_scale_key());
+    if (this_tiling && this_tiling->raster_transform() != raster_transform) {
+      Remove(this_tiling);
+      this_tiling = nullptr;
+    }
     if (!this_tiling) {
       std::unique_ptr<PictureLayerTiling> new_tiling(new PictureLayerTiling(
-          tree_, pending_twin_tiling->contents_scale(), raster_source_, client_,
+          tree_, raster_transform, raster_source_, client_,
           kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_));
       tilings_.push_back(std::move(new_tiling));
       this_tiling = tilings_.back().get();
@@ -124,7 +130,7 @@
   // If the tiling is not shared (FindTilingWithScale returns nullptr), then
   // invalidate tiles and update them to the new raster source.
   for (const auto& tiling : tilings_) {
-    if (pending_twin_set->FindTilingWithScaleKey(tiling->contents_scale()))
+    if (pending_twin_set->FindTilingWithScaleKey(tiling->contents_scale_key()))
       continue;
 
     tiling->SetRasterSourceAndResize(raster_source);
@@ -241,8 +247,8 @@
   std::vector<PictureLayerTiling*> to_remove;
   for (const auto& tiling : tilings_) {
     // Keep all tilings within the min/max scales.
-    if (tiling->contents_scale() >= min_acceptable_high_res_scale_key &&
-        tiling->contents_scale() <= max_acceptable_high_res_scale_key) {
+    if (tiling->contents_scale_key() >= min_acceptable_high_res_scale_key &&
+        tiling->contents_scale_key() <= max_acceptable_high_res_scale_key) {
       continue;
     }
 
@@ -277,20 +283,20 @@
 }
 
 PictureLayerTiling* PictureLayerTilingSet::AddTiling(
-    float contents_scale,
+    const gfx::AxisTransform2d& raster_transform,
     scoped_refptr<RasterSource> raster_source) {
   if (!raster_source_)
     raster_source_ = raster_source;
 
 #if DCHECK_IS_ON()
   for (size_t i = 0; i < tilings_.size(); ++i) {
-    DCHECK_NE(tilings_[i]->contents_scale(), contents_scale);
+    DCHECK_NE(tilings_[i]->contents_scale_key(), raster_transform.scale());
     DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get());
   }
 #endif  // DCHECK_IS_ON()
 
   tilings_.push_back(base::MakeUnique<PictureLayerTiling>(
-      tree_, contents_scale, raster_source, client_,
+      tree_, raster_transform, raster_source, client_,
       kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_));
   PictureLayerTiling* appended = tilings_.back().get();
   state_since_last_tile_priority_update_.added_tilings = true;
@@ -309,7 +315,7 @@
 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithScaleKey(
     float scale_key) const {
   for (size_t i = 0; i < tilings_.size(); ++i) {
-    if (tilings_[i]->contents_scale() == scale_key)
+    if (tilings_[i]->contents_scale_key() == scale_key)
       return tilings_[i].get();
   }
   return nullptr;
@@ -332,7 +338,7 @@
   base::EraseIf(
       tilings_,
       [minimum_scale_key](const std::unique_ptr<PictureLayerTiling>& tiling) {
-        return tiling->contents_scale() < minimum_scale_key;
+        return tiling->contents_scale_key() < minimum_scale_key;
       });
 }
 
@@ -341,7 +347,7 @@
   base::EraseIf(
       tilings_,
       [maximum_scale_key](const std::unique_ptr<PictureLayerTiling>& tiling) {
-        return tiling->contents_scale() > maximum_scale_key;
+        return tiling->contents_scale_key() > maximum_scale_key;
       });
 }
 
@@ -372,7 +378,7 @@
   float snapped_contents_scale = start_scale;
   float snapped_ratio = snap_to_existing_tiling_ratio;
   for (const auto& tiling : tilings_) {
-    float tiling_contents_scale = tiling->contents_scale();
+    float tiling_contents_scale = tiling->contents_scale_key();
     float ratio = LargerRatio(tiling_contents_scale, start_scale);
     if (ratio < snapped_ratio) {
       snapped_contents_scale = tiling_contents_scale;
@@ -386,7 +392,7 @@
   if (tilings_.empty())
     return 0.f;
   // The first tiling has the largest contents scale.
-  return tilings_[0]->contents_scale();
+  return tilings_[0]->raster_transform().scale();
 }
 
 bool PictureLayerTilingSet::TilingsNeedUpdate(
@@ -574,7 +580,7 @@
   size_t tilings_size = set_->tilings_.size();
   for (ideal_tiling_ = 0; ideal_tiling_ < tilings_size; ++ideal_tiling_) {
     PictureLayerTiling* tiling = set_->tilings_[ideal_tiling_].get();
-    if (tiling->contents_scale() < ideal_contents_scale) {
+    if (tiling->contents_scale_key() < ideal_contents_scale) {
       if (ideal_tiling_ > 0)
         ideal_tiling_--;
       break;
diff --git a/cc/tiles/picture_layer_tiling_set.h b/cc/tiles/picture_layer_tiling_set.h
index 608c43c2..30c1d29 100644
--- a/cc/tiles/picture_layer_tiling_set.h
+++ b/cc/tiles/picture_layer_tiling_set.h
@@ -80,7 +80,7 @@
 
   void UpdateTilingsForImplSideInvalidation(const Region& layer_invalidation);
 
-  PictureLayerTiling* AddTiling(float contents_scale,
+  PictureLayerTiling* AddTiling(const gfx::AxisTransform2d& raster_transform,
                                 scoped_refptr<RasterSource> raster_source);
   size_t num_tilings() const { return tilings_.size(); }
   int NumHighResTilings() const;
diff --git a/cc/tiles/picture_layer_tiling_set_unittest.cc b/cc/tiles/picture_layer_tiling_set_unittest.cc
index 2bc9274..c113b6d 100644
--- a/cc/tiles/picture_layer_tiling_set_unittest.cc
+++ b/cc/tiles/picture_layer_tiling_set_unittest.cc
@@ -67,9 +67,9 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateEmpty(layer_bounds);
 
-  set->AddTiling(1.0, raster_source);
-  set->AddTiling(1.5, raster_source);
-  set->AddTiling(2.0, raster_source);
+  set->AddTiling(gfx::AxisTransform2d(), raster_source);
+  set->AddTiling(gfx::AxisTransform2d(1.5, gfx::Vector2dF()), raster_source);
+  set->AddTiling(gfx::AxisTransform2d(2.0, gfx::Vector2dF()), raster_source);
 
   float contents_scale = 2.0;
   gfx::Size content_bounds(
@@ -106,13 +106,14 @@
       FakeRasterSource::CreateFilled(layer_bounds);
 
   std::unique_ptr<TestablePictureLayerTilingSet> set = CreateTilingSet(&client);
-  set->AddTiling(2.0, raster_source);
-  high_res_tiling = set->AddTiling(1.0, raster_source);
+  set->AddTiling(gfx::AxisTransform2d(2.0, gfx::Vector2dF()), raster_source);
+  high_res_tiling = set->AddTiling(gfx::AxisTransform2d(), raster_source);
   high_res_tiling->set_resolution(HIGH_RESOLUTION);
-  set->AddTiling(0.5, raster_source);
-  low_res_tiling = set->AddTiling(0.25, raster_source);
+  set->AddTiling(gfx::AxisTransform2d(0.5, gfx::Vector2dF()), raster_source);
+  low_res_tiling = set->AddTiling(gfx::AxisTransform2d(0.25, gfx::Vector2dF()),
+                                  raster_source);
   low_res_tiling->set_resolution(LOW_RESOLUTION);
-  set->AddTiling(0.125, raster_source);
+  set->AddTiling(gfx::AxisTransform2d(0.125, gfx::Vector2dF()), raster_source);
 
   higher_than_high_res_range =
       set->GetTilingRange(PictureLayerTilingSet::HIGHER_THAN_HIGH_RES);
@@ -139,11 +140,15 @@
 
   std::unique_ptr<TestablePictureLayerTilingSet> set_without_low_res =
       CreateTilingSet(&client);
-  set_without_low_res->AddTiling(2.0, raster_source);
-  high_res_tiling = set_without_low_res->AddTiling(1.0, raster_source);
+  set_without_low_res->AddTiling(gfx::AxisTransform2d(2.0, gfx::Vector2dF()),
+                                 raster_source);
+  high_res_tiling =
+      set_without_low_res->AddTiling(gfx::AxisTransform2d(), raster_source);
   high_res_tiling->set_resolution(HIGH_RESOLUTION);
-  set_without_low_res->AddTiling(0.5, raster_source);
-  set_without_low_res->AddTiling(0.25, raster_source);
+  set_without_low_res->AddTiling(gfx::AxisTransform2d(0.5, gfx::Vector2dF()),
+                                 raster_source);
+  set_without_low_res->AddTiling(gfx::AxisTransform2d(0.25, gfx::Vector2dF()),
+                                 raster_source);
 
   higher_than_high_res_range = set_without_low_res->GetTilingRange(
       PictureLayerTilingSet::HIGHER_THAN_HIGH_RES);
@@ -170,11 +175,11 @@
 
   std::unique_ptr<TestablePictureLayerTilingSet>
       set_with_only_high_and_low_res = CreateTilingSet(&client);
-  high_res_tiling =
-      set_with_only_high_and_low_res->AddTiling(1.0, raster_source);
+  high_res_tiling = set_with_only_high_and_low_res->AddTiling(
+      gfx::AxisTransform2d(), raster_source);
   high_res_tiling->set_resolution(HIGH_RESOLUTION);
-  low_res_tiling =
-      set_with_only_high_and_low_res->AddTiling(0.5, raster_source);
+  low_res_tiling = set_with_only_high_and_low_res->AddTiling(
+      gfx::AxisTransform2d(0.5, gfx::Vector2dF()), raster_source);
   low_res_tiling->set_resolution(LOW_RESOLUTION);
 
   higher_than_high_res_range = set_with_only_high_and_low_res->GetTilingRange(
@@ -204,7 +209,8 @@
 
   std::unique_ptr<TestablePictureLayerTilingSet> set_with_only_high_res =
       CreateTilingSet(&client);
-  high_res_tiling = set_with_only_high_res->AddTiling(1.0, raster_source);
+  high_res_tiling =
+      set_with_only_high_res->AddTiling(gfx::AxisTransform2d(), raster_source);
   high_res_tiling->set_resolution(HIGH_RESOLUTION);
 
   higher_than_high_res_range = set_with_only_high_res->GetTilingRange(
@@ -256,7 +262,8 @@
 
     float scale = min_scale;
     for (int i = 0; i < num_tilings; ++i, scale += scale_increment) {
-      PictureLayerTiling* tiling = set->AddTiling(scale, raster_source);
+      PictureLayerTiling* tiling = set->AddTiling(
+          gfx::AxisTransform2d(scale, gfx::Vector2dF()), raster_source);
       tiling->set_resolution(HIGH_RESOLUTION);
       tiling->CreateAllTilesForTesting();
       std::vector<Tile*> tiles = tiling->AllTilesForTesting();
@@ -277,7 +284,7 @@
       ASSERT_TRUE(remaining.Contains(geometry_rect));
       remaining.Subtract(geometry_rect);
 
-      float scale = iter.CurrentTiling()->contents_scale();
+      float scale = iter.CurrentTiling()->contents_scale_key();
       EXPECT_EQ(expected_scale, scale);
 
       if (num_tilings)
@@ -341,7 +348,7 @@
   gfx::Size tile_size3(20, 20);
 
   pending_client.SetTileSize(tile_size1);
-  pending_set->AddTiling(1.f, raster_source);
+  pending_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   // New tilings get the correct tile size.
   EXPECT_EQ(tile_size1, pending_set->tiling_at(0)->tile_size());
 
@@ -366,7 +373,7 @@
   // activation, since we can't set the raster source twice on the pending tree
   // without activating. For test, just remove and add a new tiling instead.
   pending_set->RemoveAllTilings();
-  pending_set->AddTiling(1.f, raster_source);
+  pending_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   pending_set->tiling_at(0)->set_resolution(HIGH_RESOLUTION);
   pending_client.SetTileSize(tile_size2);
   pending_set->UpdateTilingsToCurrentRasterSourceForCommit(raster_source.get(),
@@ -446,9 +453,11 @@
       FakeRasterSource::CreateEmpty(layer_bounds);
 
   // Tilings can be added of any scale, the tiling client can controls this.
-  pending_set->AddTiling(1.f, raster_source);
-  pending_set->AddTiling(2.f, raster_source);
-  pending_set->AddTiling(3.f, raster_source);
+  pending_set->AddTiling(gfx::AxisTransform2d(), raster_source);
+  pending_set->AddTiling(gfx::AxisTransform2d(2.f, gfx::Vector2dF()),
+                         raster_source);
+  pending_set->AddTiling(gfx::AxisTransform2d(3.f, gfx::Vector2dF()),
+                         raster_source);
 
   // Set some expected things for the tiling set to function.
   pending_set->tiling_at(0)->set_resolution(HIGH_RESOLUTION);
@@ -503,7 +512,7 @@
       CreateTilingSetWithSettings(&client, settings);
 
   EXPECT_FALSE(tiling_set->TilingsNeedUpdate(viewport, 1.0));
-  tiling_set->AddTiling(1.f, raster_source);
+  tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   EXPECT_TRUE(tiling_set->TilingsNeedUpdate(viewport, 1.0));
 
   tiling_set->UpdateTilePriorities(viewport, 1.f, 1.0, Occlusion(), true);
@@ -589,7 +598,7 @@
       FakeRasterSource::CreateFilled(layer_bounds);
   std::unique_ptr<TestablePictureLayerTilingSet> tiling_set =
       CreateTilingSetWithSettings(&client, settings);
-  tiling_set->AddTiling(1.f, raster_source);
+  tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
 
   gfx::Rect viewport1(-1918, 255860, 4010, 2356);
   gfx::Rect viewport2(-7088, -91738, 14212, 8350);
@@ -606,7 +615,8 @@
 
   // Use a tiling with a large scale, so the viewport times the scale no longer
   // fits into integers, and the viewport is not anywhere close to the tiling.
-  PictureLayerTiling* tiling = tiling_set->AddTiling(1000.f, raster_source);
+  PictureLayerTiling* tiling = tiling_set->AddTiling(
+      gfx::AxisTransform2d(1000.f, gfx::Vector2dF()), raster_source);
   EXPECT_TRUE(tiling_set->TilingsNeedUpdate(viewport3, time));
   tiling_set->UpdateTilePriorities(viewport3, 1.f, time, Occlusion(), true);
   EXPECT_TRUE(tiling->GetCurrentVisibleRectForTesting().IsEmpty());
@@ -624,7 +634,7 @@
       FakeRasterSource::CreateFilled(layer_bounds);
   std::unique_ptr<TestablePictureLayerTilingSet> tiling_set =
       CreateTilingSet(&client);
-  tiling_set->AddTiling(1.f, raster_source);
+  tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
 
   tiling_set->UpdateTilePriorities(viewport, 1.f, 1.0, Occlusion(), true);
 
@@ -686,7 +696,7 @@
       FakeRasterSource::CreateFilled(layer_bounds);
   std::unique_ptr<TestablePictureLayerTilingSet> tiling_set =
       CreateTilingSet(&client);
-  tiling_set->AddTiling(1.f, raster_source);
+  tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
 
   tiling_set->UpdateTilePriorities(viewport, 1.f, 1.0, Occlusion(), true);
 
@@ -760,7 +770,8 @@
       FakeRasterSource::CreateFilled(layer_bounds);
   std::unique_ptr<TestablePictureLayerTilingSet> tiling_set =
       CreateTilingSet(&client);
-  auto* tiling = tiling_set->AddTiling(0.25f, raster_source);
+  auto* tiling = tiling_set->AddTiling(
+      gfx::AxisTransform2d(0.25f, gfx::Vector2dF()), raster_source);
   tiling->set_resolution(HIGH_RESOLUTION);
   gfx::Rect viewport_in_content_space =
       gfx::ScaleToEnclosedRect(viewport, 0.25f);
@@ -921,7 +932,8 @@
   EXPECT_FLOAT_EQ(8.f, priority.distance_to_visible);
 
   // Test additional scales.
-  tiling = tiling_set->AddTiling(0.2f, raster_source);
+  tiling = tiling_set->AddTiling(gfx::AxisTransform2d(0.2f, gfx::Vector2dF()),
+                                 raster_source);
   tiling->set_resolution(HIGH_RESOLUTION);
   tiling_set->UpdateTilePriorities(viewport, 1.0f, 4.0, Occlusion(), true);
   prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting();
@@ -956,7 +968,8 @@
       FakeRasterSource::CreateFilled(gfx::Size(100, 100));
   std::unique_ptr<TestablePictureLayerTilingSet> tiling_set =
       CreateTilingSet(&pending_client);
-  auto* pending_tiling = tiling_set->AddTiling(1.f, raster_source);
+  auto* pending_tiling =
+      tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   pending_tiling->set_resolution(HIGH_RESOLUTION);
 
   // Ensure that we can compute tile priority rects, invalidate, and compute the
@@ -999,7 +1012,8 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(layer_bounds);
 
-  auto* pending_tiling = pending_set->AddTiling(1.f, raster_source);
+  auto* pending_tiling =
+      pending_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   pending_tiling->set_resolution(HIGH_RESOLUTION);
   active_client.set_twin_tiling_set(pending_set.get());
 
@@ -1038,5 +1052,64 @@
       active_set->UpdateTilePriorities(viewport, 1.f, time, Occlusion(), true));
 }
 
+TEST(PictureLayerTilingSetTest, TilingTranslationChanges) {
+  gfx::Size tile_size(64, 64);
+  FakePictureLayerTilingClient pending_client;
+  FakePictureLayerTilingClient active_client;
+  pending_client.SetTileSize(tile_size);
+  active_client.SetTileSize(tile_size);
+  std::unique_ptr<PictureLayerTilingSet> pending_set =
+      PictureLayerTilingSet::Create(PENDING_TREE, &pending_client, 0, 1.f, 0,
+                                    0.f);
+  std::unique_ptr<PictureLayerTilingSet> active_set =
+      PictureLayerTilingSet::Create(ACTIVE_TREE, &active_client, 0, 1.f, 0,
+                                    0.f);
+  active_client.set_twin_tiling_set(pending_set.get());
+
+  gfx::Size layer_bounds(100, 100);
+  scoped_refptr<FakeRasterSource> raster_source =
+      FakeRasterSource::CreateFilled(layer_bounds);
+
+  gfx::AxisTransform2d raster_transform1(1.f, gfx::Vector2dF(0.25f, 0.25f));
+  pending_set->AddTiling(raster_transform1, raster_source);
+  pending_set->tiling_at(0)->set_resolution(HIGH_RESOLUTION);
+
+  // Set a priority rect so we get tiles.
+  pending_set->UpdateTilePriorities(gfx::Rect(layer_bounds), 1.f, 1.0,
+                                    Occlusion(), false);
+
+  // Make sure all tiles are generated.
+  EXPECT_EQ(4u, pending_set->tiling_at(0)->AllTilesForTesting().size());
+
+  // Clone from the pending to the active tree.
+  active_set->UpdateTilingsToCurrentRasterSourceForActivation(
+      raster_source.get(), pending_set.get(), Region(), 1.f, 1.f);
+
+  // Verifies active tree cloned the tiling correctly.
+  ASSERT_EQ(1u, active_set->num_tilings());
+  EXPECT_EQ(active_set->tiling_at(0)->raster_transform(), raster_transform1);
+  EXPECT_EQ(4u, active_set->tiling_at(0)->AllTilesForTesting().size());
+
+  // Change raster translation on the pending set.
+  gfx::AxisTransform2d raster_transform2(1.f, gfx::Vector2dF(0.75f, 0.75f));
+  pending_set->RemoveAllTilings();
+  pending_set->AddTiling(raster_transform2, raster_source);
+  pending_set->tiling_at(0)->set_resolution(HIGH_RESOLUTION);
+
+  // Set a different priority rect to get one tile.
+  pending_set->UpdateTilePriorities(gfx::Rect(1, 1), 1.f, 1.0, Occlusion(),
+                                    false);
+  EXPECT_EQ(1u, pending_set->tiling_at(0)->AllTilesForTesting().size());
+
+  // Commit the pending to the active tree again.
+  active_set->UpdateTilingsToCurrentRasterSourceForActivation(
+      raster_source.get(), pending_set.get(), Region(), 1.f, 1.f);
+
+  // Verifies the old tiling with a different translation is dropped.
+  ASSERT_EQ(1u, active_set->num_tilings());
+  EXPECT_EQ(active_set->tiling_at(0)->raster_transform(), raster_transform2);
+  EXPECT_EQ(1u, active_set->tiling_at(0)->AllTilesForTesting().size());
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/tiles/picture_layer_tiling_unittest.cc b/cc/tiles/picture_layer_tiling_unittest.cc
index fdafb2d..d8afa163 100644
--- a/cc/tiles/picture_layer_tiling_unittest.cc
+++ b/cc/tiles/picture_layer_tiling_unittest.cc
@@ -47,12 +47,12 @@
 
   static std::unique_ptr<TestablePictureLayerTiling> Create(
       WhichTree tree,
-      float contents_scale,
+      const gfx::AxisTransform2d& raster_transform,
       scoped_refptr<RasterSource> raster_source,
       PictureLayerTilingClient* client,
       const LayerTreeSettings& settings) {
     return base::WrapUnique(new TestablePictureLayerTiling(
-        tree, contents_scale, raster_source, client,
+        tree, raster_transform, raster_source, client,
         settings.tiling_interest_area_padding,
         settings.skewport_target_time_in_seconds,
         settings.skewport_extrapolation_limit_in_screen_pixels,
@@ -71,7 +71,7 @@
 
  protected:
   TestablePictureLayerTiling(WhichTree tree,
-                             float contents_scale,
+                             const gfx::AxisTransform2d& raster_transform,
                              scoped_refptr<RasterSource> raster_source,
                              PictureLayerTilingClient* client,
                              size_t tiling_interest_area_padding,
@@ -80,7 +80,7 @@
                              float min_preraster_distance,
                              float max_preraster_distance)
       : PictureLayerTiling(tree,
-                           contents_scale,
+                           raster_transform,
                            raster_source,
                            client,
                            min_preraster_distance,
@@ -98,7 +98,19 @@
     client_.SetTileSize(tile_size);
     scoped_refptr<FakeRasterSource> raster_source =
         FakeRasterSource::CreateFilled(layer_bounds);
-    tiling_ = TestablePictureLayerTiling::Create(PENDING_TREE, contents_scale,
+    tiling_ = TestablePictureLayerTiling::Create(
+        PENDING_TREE, gfx::AxisTransform2d(contents_scale, gfx::Vector2dF()),
+        raster_source, &client_, LayerTreeSettings());
+    tiling_->set_resolution(HIGH_RESOLUTION);
+  }
+
+  void InitializeWithTranslation(const gfx::Size& tile_size,
+                                 const gfx::AxisTransform2d& raster_transform,
+                                 const gfx::Size& layer_bounds) {
+    client_.SetTileSize(tile_size);
+    scoped_refptr<FakeRasterSource> raster_source =
+        FakeRasterSource::CreateFilled(layer_bounds);
+    tiling_ = TestablePictureLayerTiling::Create(PENDING_TREE, raster_transform,
                                                  raster_source, &client_,
                                                  LayerTreeSettings());
     tiling_->set_resolution(HIGH_RESOLUTION);
@@ -110,9 +122,9 @@
     client_.SetTileSize(tile_size);
     scoped_refptr<FakeRasterSource> raster_source =
         FakeRasterSource::CreateFilled(layer_bounds);
-    tiling_ = TestablePictureLayerTiling::Create(ACTIVE_TREE, contents_scale,
-                                                 raster_source, &client_,
-                                                 LayerTreeSettings());
+    tiling_ = TestablePictureLayerTiling::Create(
+        ACTIVE_TREE, gfx::AxisTransform2d(contents_scale, gfx::Vector2dF()),
+        raster_source, &client_, LayerTreeSettings());
     tiling_->set_resolution(HIGH_RESOLUTION);
   }
 
@@ -137,7 +149,7 @@
     // tiling scale. This is because coverage computation is done in integer
     // grids in the dest space, and the overlap between tiles may not guarantee
     // to enclose an integer grid line to round to if scaled down.
-    ASSERT_GE(rect_scale, tiling_->contents_scale());
+    ASSERT_GE(rect_scale, tiling_->contents_scale_key());
 
     Region remaining = expect_rect;
     for (PictureLayerTiling::CoverageIterator
@@ -205,7 +217,7 @@
 
   void VerifyTilesCoverNonContainedRect(float rect_scale,
                                         const gfx::Rect& dest_rect) {
-    float dest_to_contents_scale = tiling_->contents_scale() / rect_scale;
+    float dest_to_contents_scale = tiling_->contents_scale_key() / rect_scale;
     gfx::Rect clamped_rect = gfx::ScaleToEnclosingRect(
         gfx::Rect(tiling_->tiling_size()), 1.f / dest_to_contents_scale);
     clamped_rect.Intersect(dest_rect);
@@ -498,9 +510,9 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(layer_size);
   std::unique_ptr<TestablePictureLayerTiling> active_tiling =
-      TestablePictureLayerTiling::Create(ACTIVE_TREE, content_scale,
-                                         raster_source, &active_client,
-                                         LayerTreeSettings());
+      TestablePictureLayerTiling::Create(
+          ACTIVE_TREE, gfx::AxisTransform2d(content_scale, gfx::Vector2dF()),
+          raster_source, &active_client, LayerTreeSettings());
   active_tiling->set_resolution(HIGH_RESOLUTION);
 
   gfx::Rect invalid_rect(0, 750, 220, 100);
@@ -715,8 +727,8 @@
 
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(layer_bounds);
-  tiling_ = TestablePictureLayerTiling::Create(PENDING_TREE, 1.f, raster_source,
-                                               &client_, settings);
+  tiling_ = TestablePictureLayerTiling::Create(
+      PENDING_TREE, gfx::AxisTransform2d(), raster_source, &client_, settings);
   tiling_->set_resolution(HIGH_RESOLUTION);
   VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
   VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
@@ -753,8 +765,9 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(current_layer_bounds);
   std::unique_ptr<TestablePictureLayerTiling> tiling =
-      TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, raster_source,
-                                         &client, LayerTreeSettings());
+      TestablePictureLayerTiling::Create(ACTIVE_TREE, gfx::AxisTransform2d(),
+                                         raster_source, &client,
+                                         LayerTreeSettings());
   tiling->set_resolution(HIGH_RESOLUTION);
 
   LayerTreeSettings settings;
@@ -811,8 +824,9 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(current_layer_bounds);
   std::unique_ptr<TestablePictureLayerTiling> tiling =
-      TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, raster_source,
-                                         &client, LayerTreeSettings());
+      TestablePictureLayerTiling::Create(ACTIVE_TREE, gfx::AxisTransform2d(),
+                                         raster_source, &client,
+                                         LayerTreeSettings());
   tiling->set_resolution(HIGH_RESOLUTION);
 
   LayerTreeSettings settings;
@@ -879,8 +893,9 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(current_layer_bounds);
   std::unique_ptr<TestablePictureLayerTiling> tiling =
-      TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, raster_source,
-                                         &client, LayerTreeSettings());
+      TestablePictureLayerTiling::Create(ACTIVE_TREE, gfx::AxisTransform2d(),
+                                         raster_source, &client,
+                                         LayerTreeSettings());
   tiling->set_resolution(HIGH_RESOLUTION);
 
   LayerTreeSettings settings;
@@ -921,8 +936,9 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(gfx::Size(100, 100));
   std::unique_ptr<TestablePictureLayerTiling> active_tiling =
-      TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, raster_source,
-                                         &active_client, LayerTreeSettings());
+      TestablePictureLayerTiling::Create(ACTIVE_TREE, gfx::AxisTransform2d(),
+                                         raster_source, &active_client,
+                                         LayerTreeSettings());
   active_tiling->set_resolution(HIGH_RESOLUTION);
   // Create all tiles on this tiling.
   gfx::Rect visible_rect = gfx::Rect(0, 0, 100, 100);
@@ -937,8 +953,9 @@
 
   raster_source = FakeRasterSource::CreateFilled(gfx::Size(100, 100));
   std::unique_ptr<TestablePictureLayerTiling> recycle_tiling =
-      TestablePictureLayerTiling::Create(PENDING_TREE, 1.0f, raster_source,
-                                         &recycle_client, settings);
+      TestablePictureLayerTiling::Create(PENDING_TREE, gfx::AxisTransform2d(),
+                                         raster_source, &recycle_client,
+                                         settings);
   recycle_tiling->set_resolution(HIGH_RESOLUTION);
 
   // Create all tiles on the recycle tiling.
@@ -966,8 +983,9 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(gfx::Size(500, 500));
   std::unique_ptr<TestablePictureLayerTiling> pending_tiling =
-      TestablePictureLayerTiling::Create(PENDING_TREE, 1.0f, raster_source,
-                                         &pending_client, LayerTreeSettings());
+      TestablePictureLayerTiling::Create(PENDING_TREE, gfx::AxisTransform2d(),
+                                         raster_source, &pending_client,
+                                         LayerTreeSettings());
   pending_tiling->set_resolution(HIGH_RESOLUTION);
   pending_tiling->set_can_require_tiles_for_activation(true);
 
@@ -1038,9 +1056,9 @@
   client_.SetTileSize(tile_size);
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateEmpty(layer_size);
-  tiling_ = TestablePictureLayerTiling::Create(PENDING_TREE, contents_scale,
-                                               raster_source, &client_,
-                                               LayerTreeSettings());
+  tiling_ = TestablePictureLayerTiling::Create(
+      PENDING_TREE, gfx::AxisTransform2d(contents_scale, gfx::Vector2dF()),
+      raster_source, &client_, LayerTreeSettings());
 
   gfx::Rect content_rect(25554432, 25554432, 950, 860);
   VerifyTilesExactlyCoverRect(contents_scale, content_rect);
@@ -1126,7 +1144,8 @@
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(bounds);
   auto active_tiling = TestablePictureLayerTiling::Create(
-      ACTIVE_TREE, 1.f, raster_source, &client_, LayerTreeSettings());
+      ACTIVE_TREE, gfx::AxisTransform2d(), raster_source, &client_,
+      LayerTreeSettings());
   active_tiling->set_resolution(HIGH_RESOLUTION);
 
   active_tiling->TakeTilesAndPropertiesFrom(tiling_.get(),
@@ -1136,5 +1155,106 @@
   }
 }
 
+TEST_F(PictureLayerTilingIteratorTest, FractionalTranslatedTiling) {
+  InitializeWithTranslation(
+      gfx::Size(256, 256),
+      gfx::AxisTransform2d(1.f, gfx::Vector2dF(0.125f, 0.125f)),
+      gfx::Size(1000, 1));
+  EXPECT_EQ(tiling_->tiling_size(), gfx::Size(1001, 2));
+  SetLiveRectAndVerifyTiles(gfx::Rect(1000, 1));
+
+  // Verifies the texture coordinate is correctly translated.
+  for (PictureLayerTiling::CoverageIterator iter(tiling_.get(), 1.f,
+                                                 gfx::Rect(1000, 1));
+       iter; ++iter) {
+    gfx::Rect geometry_rect = iter.geometry_rect();
+    gfx::RectF texture_rect = iter.texture_rect();
+    if (geometry_rect == gfx::Rect(0, 0, 255, 1)) {
+      EXPECT_EQ(gfx::RectF(0.125f, 0.125f, 255.f, 1.f), texture_rect);
+    } else if (geometry_rect == gfx::Rect(255, 0, 254, 1)) {
+      EXPECT_EQ(gfx::RectF(1.125f, 0.125f, 254.f, 1.f), texture_rect);
+    } else if (geometry_rect == gfx::Rect(509, 0, 254, 1)) {
+      EXPECT_EQ(gfx::RectF(1.125f, 0.125f, 254.f, 1.f), texture_rect);
+    } else {
+      EXPECT_EQ(gfx::Rect(763, 0, 237, 1), geometry_rect);
+      EXPECT_EQ(gfx::RectF(1.125f, 0.125f, 237.f, 1.f), texture_rect);
+    }
+  }
+
+  // Similar to above, with a different coverage scale.
+  for (PictureLayerTiling::CoverageIterator iter(tiling_.get(), 1.375f,
+                                                 gfx::Rect(1375, 2));
+       iter; ++iter) {
+    gfx::Rect geometry_rect = iter.geometry_rect();
+    gfx::RectF texture_rect = iter.texture_rect();
+    if (geometry_rect == gfx::Rect(0, 0, 351, 2)) {
+      gfx::RectF expectation(geometry_rect);
+      expectation.Scale(1.f / 1.375f);
+      expectation.Offset(0.125f, 0.125f);
+      EXPECT_FLOAT_EQ(expectation.x(), texture_rect.x());
+      EXPECT_FLOAT_EQ(expectation.y(), texture_rect.y());
+      EXPECT_FLOAT_EQ(expectation.width(), texture_rect.width());
+      EXPECT_FLOAT_EQ(expectation.height(), texture_rect.height());
+    } else if (geometry_rect == gfx::Rect(351, 0, 349, 2)) {
+      gfx::RectF expectation(geometry_rect);
+      expectation.Scale(1.f / 1.375f);
+      expectation.Offset(0.125f - 254.f, 0.125f);
+      EXPECT_FLOAT_EQ(expectation.x(), texture_rect.x());
+      EXPECT_FLOAT_EQ(expectation.y(), texture_rect.y());
+      EXPECT_FLOAT_EQ(expectation.width(), texture_rect.width());
+      EXPECT_FLOAT_EQ(expectation.height(), texture_rect.height());
+    } else if (geometry_rect == gfx::Rect(700, 0, 349, 2)) {
+      gfx::RectF expectation(geometry_rect);
+      expectation.Scale(1.f / 1.375f);
+      expectation.Offset(0.125f - 254.f * 2.f, 0.125f);
+      EXPECT_FLOAT_EQ(expectation.x(), texture_rect.x());
+      EXPECT_FLOAT_EQ(expectation.y(), texture_rect.y());
+      EXPECT_FLOAT_EQ(expectation.width(), texture_rect.width());
+      EXPECT_FLOAT_EQ(expectation.height(), texture_rect.height());
+    } else {
+      EXPECT_EQ(gfx::Rect(1049, 0, 326, 2), geometry_rect);
+      gfx::RectF expectation(geometry_rect);
+      expectation.Scale(1.f / 1.375f);
+      expectation.Offset(0.125f - 254.f * 3.f, 0.125f);
+      EXPECT_FLOAT_EQ(expectation.x(), texture_rect.x());
+      EXPECT_FLOAT_EQ(expectation.y(), texture_rect.y());
+      EXPECT_FLOAT_EQ(expectation.width(), texture_rect.width());
+      EXPECT_FLOAT_EQ(expectation.height(), texture_rect.height());
+    }
+  }
+}
+
+TEST_F(PictureLayerTilingIteratorTest, FractionalTranslatedTilingOverflow) {
+  // This tests a corner case where the coverage rect is slightly greater
+  // than the layer rect due to rounding up, and the bottom right edge of
+  // the tiling coincide with actual layer bound. That is, the requested
+  // coverage rect slightly exceed the valid extent, but we still return
+  // full coverage as a special case for external edges.
+
+  // The layer bounds is (9, 9), which after scale and translation
+  // becomes (l=0.5, t=0.5, r=14, b=14) in the contents space.
+  InitializeWithTranslation(
+      gfx::Size(256, 256),
+      gfx::AxisTransform2d(1.5f, gfx::Vector2dF(0.5f, 0.5f)), gfx::Size(9, 9));
+  EXPECT_EQ(tiling_->tiling_size(), gfx::Size(14, 14));
+  SetLiveRectAndVerifyTiles(gfx::Rect(9, 9));
+
+  PictureLayerTiling::CoverageIterator iter(tiling_.get(), 1.56f,
+                                            gfx::Rect(15, 15));
+  ASSERT_TRUE(iter);
+  gfx::Rect geometry_rect = iter.geometry_rect();
+  gfx::RectF texture_rect = iter.texture_rect();
+  EXPECT_EQ(gfx::Rect(0, 0, 15, 15), geometry_rect);
+  gfx::RectF expectation(geometry_rect);
+  expectation.Scale(1.5f / 1.56f);
+  expectation.Offset(0.5f, 0.5f);
+  EXPECT_FLOAT_EQ(expectation.x(), texture_rect.x());
+  EXPECT_FLOAT_EQ(expectation.y(), texture_rect.y());
+  EXPECT_FLOAT_EQ(expectation.width(), texture_rect.width());
+  EXPECT_FLOAT_EQ(expectation.height(), texture_rect.height());
+
+  EXPECT_FALSE(++iter);
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/tiles/tile.cc b/cc/tiles/tile.cc
index b43383f..4432d98 100644
--- a/cc/tiles/tile.cc
+++ b/cc/tiles/tile.cc
@@ -26,7 +26,7 @@
       tiling_(info.tiling),
       content_rect_(info.content_rect),
       enclosing_layer_rect_(info.enclosing_layer_rect),
-      contents_scale_(info.contents_scale),
+      raster_transform_(info.raster_transform),
       layer_id_(layer_id),
       source_frame_number_(source_frame_number),
       flags_(flags),
@@ -49,7 +49,13 @@
 void Tile::AsValueInto(base::trace_event::TracedValue* value) const {
   TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
       TRACE_DISABLED_BY_DEFAULT("cc.debug"), value, "cc::Tile", this);
-  value->SetDouble("contents_scale", contents_scale());
+  value->SetDouble("contents_scale", contents_scale_key());
+
+  value->BeginArray("raster_transform");
+  value->AppendDouble(raster_transform_.scale());
+  value->AppendDouble(raster_transform_.translation().x());
+  value->AppendDouble(raster_transform_.translation().y());
+  value->EndArray();
 
   MathUtil::AddToTracedValue("content_rect", content_rect_, value);
 
diff --git a/cc/tiles/tile.h b/cc/tiles/tile.h
index 16d37d1..435d5f0 100644
--- a/cc/tiles/tile.h
+++ b/cc/tiles/tile.h
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "cc/raster/tile_task.h"
 #include "cc/tiles/tile_draw_info.h"
+#include "ui/gfx/geometry/axis_transform2d.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
 
@@ -29,20 +30,20 @@
     int tiling_j_index;
     gfx::Rect enclosing_layer_rect;
     gfx::Rect content_rect;
-    float contents_scale;
+    gfx::AxisTransform2d raster_transform;
 
     CreateInfo(const PictureLayerTiling* tiling,
                int tiling_i_index,
                int tiling_j_index,
                const gfx::Rect& enclosing_layer_rect,
                const gfx::Rect& content_rect,
-               float contents_scale)
+               const gfx::AxisTransform2d& raster_transform)
         : tiling(tiling),
           tiling_i_index(tiling_i_index),
           tiling_j_index(tiling_j_index),
           enclosing_layer_rect(enclosing_layer_rect),
           content_rect(content_rect),
-          contents_scale(contents_scale) {}
+          raster_transform(raster_transform) {}
   };
 
   enum TileRasterFlags { USE_PICTURE_ANALYSIS = 1 << 0, IS_OPAQUE = 1 << 1 };
@@ -76,7 +77,10 @@
   const TileDrawInfo& draw_info() const { return draw_info_; }
   TileDrawInfo& draw_info() { return draw_info_; }
 
-  float contents_scale() const { return contents_scale_; }
+  float contents_scale_key() const { return raster_transform_.scale(); }
+  const gfx::AxisTransform2d& raster_transform() const {
+    return raster_transform_;
+  }
   const gfx::Rect& content_rect() const { return content_rect_; }
   const gfx::Rect& enclosing_layer_rect() const {
     return enclosing_layer_rect_;
@@ -132,7 +136,7 @@
   const PictureLayerTiling* tiling_;
   const gfx::Rect content_rect_;
   const gfx::Rect enclosing_layer_rect_;
-  const float contents_scale_;
+  const gfx::AxisTransform2d raster_transform_;
 
   TileDrawInfo draw_info_;
 
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc
index 79ab6ba..5639661f 100644
--- a/cc/tiles/tile_manager.cc
+++ b/cc/tiles/tile_manager.cc
@@ -99,7 +99,7 @@
         raster_source_(std::move(raster_source)),
         content_rect_(tile->content_rect()),
         invalid_content_rect_(invalidated_rect),
-        raster_scale_(tile->contents_scale()),
+        raster_transform_(tile->raster_transform()),
         playback_settings_(playback_settings),
         tile_resolution_(tile_resolution),
         layer_id_(tile->layer_id()),
@@ -127,10 +127,9 @@
 
     DCHECK(raster_source_);
 
-    raster_buffer_->Playback(
-        raster_source_.get(), content_rect_, invalid_content_rect_,
-        new_content_id_, gfx::AxisTransform2d(raster_scale_, gfx::Vector2dF()),
-        playback_settings_);
+    raster_buffer_->Playback(raster_source_.get(), content_rect_,
+                             invalid_content_rect_, new_content_id_,
+                             raster_transform_, playback_settings_);
   }
 
   // Overridden from TileTask:
@@ -164,7 +163,7 @@
   scoped_refptr<RasterSource> raster_source_;
   gfx::Rect content_rect_;
   gfx::Rect invalid_content_rect_;
-  float raster_scale_;
+  gfx::AxisTransform2d raster_transform_;
   RasterSource::PlaybackSettings playback_settings_;
   TileResolution tile_resolution_;
   int layer_id_;
@@ -666,9 +665,11 @@
       // canvas which is reset between tiles.
       tile->set_solid_color_analysis_performed(true);
       SkColor color = SK_ColorTRANSPARENT;
+      gfx::RectF layer_rect = tile->raster_transform().InverseMapRect(
+          gfx::RectF(tile->content_rect()));
       bool is_solid_color =
           prioritized_tile.raster_source()->PerformSolidColorAnalysis(
-              tile->content_rect(), tile->contents_scale(), &color);
+              gfx::ToEnclosingRect(layer_rect), 1.f, &color);
       if (is_solid_color) {
         tile->draw_info().set_solid_color(color);
         client_->NotifyTileStateChanged(tile);
@@ -865,7 +866,7 @@
     // the CheckerImageTracker as well. See crbug.com/691087.
     std::vector<DrawImage> images;
     prioritized_tile.raster_source()->GetDiscardableImagesInRect(
-        tile->enclosing_layer_rect(), tile->contents_scale(),
+        tile->enclosing_layer_rect(), tile->raster_transform().scale(),
         raster_color_space, &images);
     new_locked_images.insert(new_locked_images.end(), images.begin(),
                              images.end());
@@ -970,8 +971,8 @@
   images.clear();
   if (!playback_settings.skip_images) {
     prioritized_tile.raster_source()->GetDiscardableImagesInRect(
-        tile->enclosing_layer_rect(), tile->contents_scale(), color_space,
-        &images);
+        tile->enclosing_layer_rect(), tile->raster_transform().scale(),
+        color_space, &images);
     checker_image_tracker_.FilterImagesForCheckeringForTile(
         &images, &images_to_skip, prioritized_tile.tile()->tiling()->tree());
   }
@@ -1384,7 +1385,7 @@
 
     value->SetInteger("id", tile->id());
     value->SetString("content_rect", tile->content_rect().ToString());
-    value->SetDouble("contents_scale", tile->contents_scale());
+    value->SetDouble("contents_scale", tile->contents_scale_key());
     value->SetBoolean("is_ready_to_draw", tile->draw_info().IsReadyToDraw());
     value->SetString("resolution", TileResolutionToString(priority.resolution));
     value->SetString("priority_bin",
diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc
index 59e73f36..b410cc00 100644
--- a/cc/tiles/tile_manager_unittest.cc
+++ b/cc/tiles/tile_manager_unittest.cc
@@ -356,10 +356,18 @@
   host_impl()->SetViewportSize(viewport);
   SetupDefaultTrees(layer_bounds);
 
-  pending_layer()->tilings()->AddTiling(1.5f, pending_layer()->raster_source());
-  active_layer()->tilings()->AddTiling(1.5f, active_layer()->raster_source());
-  pending_layer()->tilings()->AddTiling(1.7f, pending_layer()->raster_source());
-  active_layer()->tilings()->AddTiling(1.7f, active_layer()->raster_source());
+  pending_layer()->tilings()->AddTiling(
+      gfx::AxisTransform2d(1.5f, gfx::Vector2dF()),
+      pending_layer()->raster_source());
+  active_layer()->tilings()->AddTiling(
+      gfx::AxisTransform2d(1.5f, gfx::Vector2dF()),
+      active_layer()->raster_source());
+  pending_layer()->tilings()->AddTiling(
+      gfx::AxisTransform2d(1.7f, gfx::Vector2dF()),
+      pending_layer()->raster_source());
+  active_layer()->tilings()->AddTiling(
+      gfx::AxisTransform2d(1.7f, gfx::Vector2dF()),
+      active_layer()->raster_source());
 
   pending_layer()->tilings()->UpdateTilePriorities(gfx::Rect(viewport), 1.f,
                                                    5.0, Occlusion(), true);
@@ -369,7 +377,7 @@
   std::set<Tile*> all_expected_tiles;
   for (size_t i = 0; i < pending_layer()->num_tilings(); ++i) {
     PictureLayerTiling* tiling = pending_layer()->tilings()->tiling_at(i);
-    if (tiling->contents_scale() == 1.f) {
+    if (tiling->contents_scale_key() == 1.f) {
       tiling->set_resolution(HIGH_RESOLUTION);
       const auto& all_tiles = tiling->AllTilesForTesting();
       all_expected_tiles.insert(all_tiles.begin(), all_tiles.end());
@@ -380,7 +388,7 @@
 
   for (size_t i = 0; i < active_layer()->num_tilings(); ++i) {
     PictureLayerTiling* tiling = active_layer()->tilings()->tiling_at(i);
-    if (tiling->contents_scale() == 1.5f) {
+    if (tiling->contents_scale_key() == 1.5f) {
       tiling->set_resolution(HIGH_RESOLUTION);
       const auto& all_tiles = tiling->AllTilesForTesting();
       all_expected_tiles.insert(all_tiles.begin(), all_tiles.end());
@@ -388,7 +396,7 @@
       tiling->set_resolution(NON_IDEAL_RESOLUTION);
       // Non ideal tilings with a high res pending twin have to be processed
       // because of possible activation tiles.
-      if (tiling->contents_scale() == 1.f) {
+      if (tiling->contents_scale_key() == 1.f) {
         tiling->UpdateAndGetAllPrioritizedTilesForTesting();
         const auto& all_tiles = tiling->AllTilesForTesting();
         for (auto* tile : all_tiles)
@@ -423,10 +431,18 @@
   host_impl()->SetViewportSize(viewport);
   SetupDefaultTrees(layer_bounds);
 
-  pending_layer()->tilings()->AddTiling(1.5f, pending_layer()->raster_source());
-  active_layer()->tilings()->AddTiling(1.5f, active_layer()->raster_source());
-  pending_layer()->tilings()->AddTiling(1.7f, pending_layer()->raster_source());
-  active_layer()->tilings()->AddTiling(1.7f, active_layer()->raster_source());
+  pending_layer()->tilings()->AddTiling(
+      gfx::AxisTransform2d(1.5f, gfx::Vector2dF()),
+      pending_layer()->raster_source());
+  active_layer()->tilings()->AddTiling(
+      gfx::AxisTransform2d(1.5f, gfx::Vector2dF()),
+      active_layer()->raster_source());
+  pending_layer()->tilings()->AddTiling(
+      gfx::AxisTransform2d(1.7f, gfx::Vector2dF()),
+      pending_layer()->raster_source());
+  active_layer()->tilings()->AddTiling(
+      gfx::AxisTransform2d(1.7f, gfx::Vector2dF()),
+      active_layer()->raster_source());
 
   pending_layer()->tilings()->UpdateTilePriorities(gfx::Rect(viewport), 1.f,
                                                    5.0, Occlusion(), true);
@@ -436,7 +452,7 @@
   std::set<Tile*> all_expected_tiles;
   for (size_t i = 0; i < pending_layer()->num_tilings(); ++i) {
     PictureLayerTiling* tiling = pending_layer()->tilings()->tiling_at(i);
-    if (tiling->contents_scale() == 1.f) {
+    if (tiling->contents_scale_key() == 1.f) {
       tiling->set_resolution(HIGH_RESOLUTION);
       const auto& all_tiles = tiling->AllTilesForTesting();
       all_expected_tiles.insert(all_tiles.begin(), all_tiles.end());
@@ -447,7 +463,7 @@
 
   for (size_t i = 0; i < active_layer()->num_tilings(); ++i) {
     PictureLayerTiling* tiling = active_layer()->tilings()->tiling_at(i);
-    if (tiling->contents_scale() == 1.5f) {
+    if (tiling->contents_scale_key() == 1.5f) {
       tiling->set_resolution(HIGH_RESOLUTION);
       const auto& all_tiles = tiling->AllTilesForTesting();
       all_expected_tiles.insert(all_tiles.begin(), all_tiles.end());
@@ -455,7 +471,7 @@
       tiling->set_resolution(LOW_RESOLUTION);
       // Low res tilings with a high res pending twin have to be processed
       // because of possible activation tiles.
-      if (tiling->contents_scale() == 1.f) {
+      if (tiling->contents_scale_key() == 1.f) {
         tiling->UpdateAndGetAllPrioritizedTilesForTesting();
         const auto& all_tiles = tiling->AllTilesForTesting();
         for (auto* tile : all_tiles)
@@ -913,8 +929,8 @@
 
         EXPECT_TRUE((tile_priority_bin < last_tile_priority_bin) ||
                     prioritized_tile.tile()->required_for_activation() ||
-                    (prioritized_tile.tile()->contents_scale() !=
-                     last_tile.tile()->contents_scale()));
+                    (prioritized_tile.tile()->raster_transform() !=
+                     last_tile.tile()->raster_transform()));
       }
     }
     last_tile = prioritized_tile;
@@ -1135,7 +1151,8 @@
 
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(layer_bounds);
-  PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, raster_source);
+  PictureLayerTiling* tiling =
+      tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   tiling->set_resolution(HIGH_RESOLUTION);
 
   tiling_set->UpdateTilePriorities(viewport, 1.0f, 1.0, Occlusion(), true);
@@ -1246,7 +1263,8 @@
 
   scoped_refptr<FakeRasterSource> raster_source =
       FakeRasterSource::CreateFilled(layer_bounds);
-  PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, raster_source);
+  PictureLayerTiling* tiling =
+      tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   tiling->set_resolution(HIGH_RESOLUTION);
 
   tiling_set->UpdateTilePriorities(viewport, 1.0f, 1.0, Occlusion(), true);
@@ -1402,7 +1420,7 @@
                                     1.0f, 1.0f, 1000, 1000.f);
   pending_client.set_twin_tiling_set(tiling_set.get());
 
-  auto* tiling = tiling_set->AddTiling(1.0f, raster_source);
+  auto* tiling = tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
 
   tiling->set_resolution(HIGH_RESOLUTION);
   tiling->CreateAllTilesForTesting();
@@ -1478,7 +1496,8 @@
   layer_impl->set_is_drawn_render_surface_layer_list_member(true);
   PictureLayerTilingSet* tiling_set = layer_impl->picture_layer_tiling_set();
 
-  PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, raster_source);
+  PictureLayerTiling* tiling =
+      tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   tiling->set_resolution(HIGH_RESOLUTION);
   tiling->CreateAllTilesForTesting();
   tiling->SetTilePriorityRectsForTesting(
@@ -1681,7 +1700,7 @@
     PictureLayerTilingSet* tiling_set = layer->picture_layer_tiling_set();
     layer->set_is_drawn_render_surface_layer_list_member(true);
 
-    auto* tiling = tiling_set->AddTiling(1.0f, raster);
+    auto* tiling = tiling_set->AddTiling(gfx::AxisTransform2d(), raster);
     tiling->set_resolution(resolutions[i]);
     tiling->CreateAllTilesForTesting();
     tiling->SetTilePriorityRectsForTesting(
@@ -2363,7 +2382,8 @@
   layer_impl->set_is_drawn_render_surface_layer_list_member(true);
   PictureLayerTilingSet* tiling_set = layer_impl->picture_layer_tiling_set();
 
-  PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, raster_source);
+  PictureLayerTiling* tiling =
+      tiling_set->AddTiling(gfx::AxisTransform2d(), raster_source);
   tiling->set_resolution(HIGH_RESOLUTION);
   tiling->CreateAllTilesForTesting();
   tiling->SetTilePriorityRectsForTesting(
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 7adf840..62654865 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -973,6 +973,9 @@
         layer->set_was_ever_ready_since_last_transform_animation(true);
       }
     }
+    frame->embedded_surfaces.insert(frame->embedded_surfaces.end(),
+                                    append_quads_data.embedded_surfaces.begin(),
+                                    append_quads_data.embedded_surfaces.end());
   }
 
   // If CommitToActiveTree() is true, then we wait to draw until
@@ -1704,6 +1707,7 @@
 
   CompositorFrameMetadata metadata = MakeCompositorFrameMetadata();
   metadata.may_contain_video = frame->may_contain_video;
+  metadata.embedded_surfaces = std::move(frame->embedded_surfaces);
   active_tree()->FinishSwapPromises(&metadata);
   for (auto& latency : metadata.latency_info) {
     TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow",
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 103a98c45..0b72dc4 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -36,6 +36,7 @@
 #include "cc/scheduler/draw_result.h"
 #include "cc/scheduler/video_frame_controller.h"
 #include "cc/surfaces/local_surface_id.h"
+#include "cc/surfaces/surface_id.h"
 #include "cc/tiles/decoded_image_tracker.h"
 #include "cc/tiles/image_decode_cache.h"
 #include "cc/tiles/tile_manager.h"
@@ -222,6 +223,7 @@
     ~FrameData();
     void AsValueInto(base::trace_event::TracedValue* value) const;
 
+    std::vector<SurfaceId> embedded_surfaces;
     std::vector<gfx::Rect> occluding_screen_space_rects;
     std::vector<gfx::Rect> non_occluding_screen_space_rects;
     RenderPassList render_passes;
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 5350b1a..e2bf3d4f 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -30,6 +30,7 @@
 #include "cc/layers/render_surface_impl.h"
 #include "cc/layers/solid_color_layer_impl.h"
 #include "cc/layers/solid_color_scrollbar_layer_impl.h"
+#include "cc/layers/surface_layer_impl.h"
 #include "cc/layers/texture_layer_impl.h"
 #include "cc/layers/video_layer_impl.h"
 #include "cc/layers/viewport.h"
@@ -93,6 +94,12 @@
 namespace cc {
 namespace {
 
+SurfaceId MakeSurfaceId(const FrameSinkId& frame_sink_id, uint32_t local_id) {
+  return SurfaceId(
+      frame_sink_id,
+      LocalSurfaceId(local_id, base::UnguessableToken::Deserialize(0, 1u)));
+}
+
 struct TestFrameData : public LayerTreeHostImpl::FrameData {
   TestFrameData() {
     // Set ack to something valid, so DCHECKs don't complain.
@@ -3481,6 +3488,43 @@
   SetupMouseMoveAtWithDeviceScale(2.f);
 }
 
+// This test verifies that only SurfaceLayers in the viewport are included
+// in CompositorFrameMetadata's |embedded_surfaces|.
+TEST_F(LayerTreeHostImplTest, EmbeddedSurfacesInMetadata) {
+  SetupScrollAndContentsLayers(gfx::Size(100, 100));
+  host_impl_->SetViewportSize(gfx::Size(50, 50));
+  LayerImpl* root = host_impl_->active_tree()->root_layer_for_testing();
+
+  std::vector<SurfaceId> children = {MakeSurfaceId(FrameSinkId(1, 1), 1),
+                                     MakeSurfaceId(FrameSinkId(2, 2), 2),
+                                     MakeSurfaceId(FrameSinkId(3, 3), 3)};
+  for (size_t i = 0; i < children.size(); ++i) {
+    std::unique_ptr<SurfaceLayerImpl> child =
+        SurfaceLayerImpl::Create(host_impl_->active_tree(), i + 6);
+    child->SetPosition(gfx::PointF(25.f * i, 0.f));
+    child->SetBounds(gfx::Size(1, 1));
+    child->SetDrawsContent(true);
+    child->SetPrimarySurfaceInfo(
+        SurfaceInfo(children[i], 1.f /* device_scale_factor */,
+                    gfx::Size(10, 10) /* size_in_pixels */));
+    root->test_properties()->AddChild(std::move(child));
+  }
+
+  host_impl_->active_tree()->BuildPropertyTreesForTesting();
+  DrawFrame();
+
+  FakeCompositorFrameSink* fake_compositor_frame_sink =
+      static_cast<FakeCompositorFrameSink*>(
+          host_impl_->compositor_frame_sink());
+  const CompositorFrameMetadata& metadata =
+      fake_compositor_frame_sink->last_sent_frame()->metadata;
+  EXPECT_THAT(metadata.embedded_surfaces,
+              testing::UnorderedElementsAre(children[0], children[1]));
+  EXPECT_THAT(
+      metadata.referenced_surfaces,
+      testing::UnorderedElementsAre(children[0], children[1], children[2]));
+}
+
 TEST_F(LayerTreeHostImplTest, CompositorFrameMetadata) {
   SetupScrollAndContentsLayers(gfx::Size(100, 100));
   host_impl_->SetViewportSize(gfx::Size(50, 50));
@@ -11288,7 +11332,7 @@
   layer->SetBounds(gfx::Size(10, 10));
   layer->set_gpu_raster_max_texture_size(host_impl_->device_viewport_size());
   layer->SetDrawsContent(true);
-  layer->tilings()->AddTiling(1.0f, raster_source_with_tiles);
+  layer->tilings()->AddTiling(gfx::AxisTransform2d(), raster_source_with_tiles);
   layer->UpdateRasterSource(raster_source_with_tiles, &empty_invalidation,
                             nullptr);
   layer->tilings()->tiling_at(0)->set_resolution(
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index d4363879..526cc3d6 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -6033,14 +6033,15 @@
       // On frame 3, we will have a lower res tile complete for the pinch-out
       // gesture even though it's not displayed. We wait for it here to prevent
       // flakiness.
-      EXPECT_EQ(0.75f, tile->contents_scale());
+      EXPECT_EQ(gfx::AxisTransform2d(0.75f, gfx::Vector2dF()),
+                tile->raster_transform());
       PostNextAfterDraw(host_impl);
     }
     // On frame_ == 4, we are preventing texture uploads from completing,
     // so this verifies they are not completing before frame_ == 5.
     // Flaky failures here indicate we're failing to prevent uploads from
     // completing.
-    EXPECT_NE(4, frame_) << tile->contents_scale();
+    EXPECT_NE(4, frame_) << tile->contents_scale_key();
   }
 
   void AfterTest() override {}
diff --git a/cc/trees/layer_tree_host_unittest_picture.cc b/cc/trees/layer_tree_host_unittest_picture.cc
index ec3d99d6..7745304 100644
--- a/cc/trees/layer_tree_host_unittest_picture.cc
+++ b/cc/trees/layer_tree_host_unittest_picture.cc
@@ -452,19 +452,22 @@
       case 0:
         // On 1st commit the pending layer has tilings.
         ASSERT_EQ(1u, picture->tilings()->num_tilings());
-        EXPECT_EQ(1.f, picture->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(gfx::AxisTransform2d(),
+                  picture->tilings()->tiling_at(0)->raster_transform());
         break;
       case 1:
         // On 2nd commit, the pending layer is transparent, so has a stale
         // value.
         ASSERT_EQ(1u, picture->tilings()->num_tilings());
-        EXPECT_EQ(1.f, picture->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(gfx::AxisTransform2d(),
+                  picture->tilings()->tiling_at(0)->raster_transform());
         break;
       case 2:
         // On 3rd commit, the pending layer is visible again, so has tilings and
         // is updated for the pinch.
         ASSERT_EQ(1u, picture->tilings()->num_tilings());
-        EXPECT_EQ(2.f, picture->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(gfx::AxisTransform2d(2.f, gfx::Vector2dF()),
+                  picture->tilings()->tiling_at(0)->raster_transform());
     }
   }
 
@@ -482,7 +485,8 @@
         if (draws_in_frame_ == 1) {
           // On 1st commit the layer has tilings.
           EXPECT_GT(picture->tilings()->num_tilings(), 0u);
-          EXPECT_EQ(1.f, picture->HighResTiling()->contents_scale());
+          EXPECT_EQ(gfx::AxisTransform2d(),
+                    picture->HighResTiling()->raster_transform());
 
           // Pinch zoom in to change the scale on the active tree.
           impl->PinchGestureBegin();
@@ -492,7 +496,8 @@
           // If the pinch gesture caused a commit we could get here with a
           // pending tree.
           EXPECT_FALSE(impl->pending_tree());
-          EXPECT_EQ(2.f, picture->HighResTiling()->contents_scale());
+          EXPECT_EQ(gfx::AxisTransform2d(2.f, gfx::Vector2dF()),
+                    picture->HighResTiling()->raster_transform());
 
           // Need to wait for ready to draw here so that the pinch is
           // entirely complete, otherwise another draw might come in before
@@ -610,10 +615,12 @@
       case 0:
         // On first commit, both layers are at the default scale.
         ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings());
-        EXPECT_EQ(1.f,
-                  will_change_layer->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(
+            gfx::AxisTransform2d(),
+            will_change_layer->tilings()->tiling_at(0)->raster_transform());
         ASSERT_EQ(1u, normal_layer->tilings()->num_tilings());
-        EXPECT_EQ(1.f, normal_layer->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(gfx::AxisTransform2d(),
+                  normal_layer->tilings()->tiling_at(0)->raster_transform());
 
         MainThreadTaskRunner()->PostTask(
             FROM_HERE,
@@ -625,10 +632,12 @@
         // On 2nd commit after scaling up to 2, the normal layer will adjust its
         // scale and the will change layer should not (as it is will change.
         ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings());
-        EXPECT_EQ(1.f,
-                  will_change_layer->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(
+            gfx::AxisTransform2d(),
+            will_change_layer->tilings()->tiling_at(0)->raster_transform());
         ASSERT_EQ(1u, normal_layer->tilings()->num_tilings());
-        EXPECT_EQ(2.f, normal_layer->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(gfx::AxisTransform2d(2.f, gfx::Vector2dF()),
+                  normal_layer->tilings()->tiling_at(0)->raster_transform());
 
         MainThreadTaskRunner()->PostTask(
             FROM_HERE,
@@ -640,10 +649,12 @@
         // On 3rd commit, both layers should adjust scales due to forced
         // recalculating.
         ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings());
-        EXPECT_EQ(4.f,
-                  will_change_layer->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(
+            gfx::AxisTransform2d(4.f, gfx::Vector2dF()),
+            will_change_layer->tilings()->tiling_at(0)->raster_transform());
         ASSERT_EQ(1u, normal_layer->tilings()->num_tilings());
-        EXPECT_EQ(4.f, normal_layer->tilings()->tiling_at(0)->contents_scale());
+        EXPECT_EQ(gfx::AxisTransform2d(4.f, gfx::Vector2dF()),
+                  normal_layer->tilings()->tiling_at(0)->raster_transform());
         EndTest();
         break;
     }
diff --git a/chrome/android/java/res/layout/search_activity.xml b/chrome/android/java/res/layout/search_activity.xml
new file mode 100644
index 0000000..378e268
--- /dev/null
+++ b/chrome/android/java/res/layout/search_activity.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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. -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/control_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="#9affffff" >
+
+    <!-- This view is unnecessary visually, but required for the LocationBarLayout. -->
+    <org.chromium.chrome.browser.searchwidget.SearchActivityFadingBackgroundView
+            android:id="@+id/fading_focus_target"
+            android:layout_width="0dp"
+            android:layout_height="0dp" />
+
+    <ViewStub
+            android:id="@+id/omnibox_results_container_stub"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@android:color/white"
+            android:layout="@layout/omnibox_results_container" />
+
+    <ImageView
+            android:id="@+id/toolbar_shadow"
+            android:src="@drawable/toolbar_shadow"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/toolbar_height_no_shadow"
+            android:scaleType="fitXY"
+            android:contentDescription="@null" />
+
+    <FrameLayout
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/toolbar_height_no_shadow"
+            android:background="@android:color/white"
+            android:clickable="true" >
+
+        <!-- TODO(dfalcantara): Ask UX about what to do for tablets. -->
+        <org.chromium.chrome.browser.searchwidget.SearchActivityLocationBarLayout
+                android:id="@+id/search_location_bar"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/tablet_toolbar_start_padding_no_buttons"
+                android:layout_marginEnd="@dimen/tablet_toolbar_start_padding_no_buttons"
+                android:layout_marginTop="@dimen/tablet_toolbar_start_padding_no_buttons" />
+
+    </FrameLayout>
+
+    <FrameLayout
+            android:id="@+id/bottom_container"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+</FrameLayout>
\ No newline at end of file
diff --git a/chrome/android/java/res/layout/search_widget_template_transparent.xml b/chrome/android/java/res/layout/search_widget_template_transparent.xml
deleted file mode 100644
index 8e0b4294..0000000
--- a/chrome/android/java/res/layout/search_widget_template_transparent.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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. -->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:alpha="0.0" >
-
-    <include layout="@layout/search_widget_template" />
-
-</FrameLayout>
diff --git a/chrome/android/java/res_template/xml/launchershortcuts.xml b/chrome/android/java/res_template/xml/launchershortcuts.xml
index 5e6ebfb..bd6cd4a 100644
--- a/chrome/android/java/res_template/xml/launchershortcuts.xml
+++ b/chrome/android/java/res_template/xml/launchershortcuts.xml
@@ -15,16 +15,13 @@
         </intent>
     </shortcut>
 
-    <!-- The "New incognito tab" shortcut is now provided as a dynamic shortcut.
-         See crbug.com/707446.
-         TODO(twellington): Either remove this XML shorcut or add a disabled
-                            message. -->
     <shortcut
         android:shortcutId="new-incognito-tab-shortcut"
         android:enabled="false"
         android:icon="@drawable/shortcut_incognito"
         android:shortcutShortLabel="@string/accessibility_tabstrip_incognito_identifier"
-        android:shortcutLongLabel="@string/menu_new_incognito_tab" >
+        android:shortcutLongLabel="@string/menu_new_incognito_tab"
+        android:shortcutDisabledMessage="@string/disabled_incognito_launcher_shortcut_message" >
         <intent
             android:action="chromium.shortcut.action.OPEN_NEW_INCOGNITO_TAB"
             android:targetPackage="{{manifest_package}}"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
index 6df7874..b0f114e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -612,6 +612,11 @@
                         (ControlContainer) findViewById(R.id.control_container);
                 controlContainer.getToolbarResourceAdapter().invalidate(null);
             }
+
+            @Override
+            public void onContentChanged(Tab tab) {
+                if (getBottomSheet() != null) setStatusBarColor(tab, tab.getDefaultThemeColor());
+            }
         };
 
         if (mAssistStatusHandler != null) {
@@ -794,11 +799,6 @@
     protected void setStatusBarColor(Tab tab, int color) {
         int statusBarColor = (tab != null && tab.isDefaultThemeColor())
                 ? Color.BLACK : ColorUtils.getDarkenedColorForStatusBar(color);
-        if (getBottomSheet() != null) {
-            statusBarColor =
-                    ApiCompatibilityUtils.getColor(getResources(), R.color.default_primary_color);
-            getBottomSheet().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
-        }
         ApiCompatibilityUtils.setStatusBarColor(getWindow(), statusBarColor);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
index e92b1e9..ad1bf99 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
@@ -5,6 +5,7 @@
 package org.chromium.chrome.browser;
 
 import android.app.Activity;
+import android.app.Application;
 import android.content.SharedPreferences;
 import android.provider.Settings;
 import android.text.TextUtils;
@@ -12,6 +13,7 @@
 import org.chromium.base.ApplicationState;
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.ApplicationStatus.ApplicationStateListener;
+import org.chromium.base.Callback;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.LocaleUtils;
 import org.chromium.base.ThreadUtils;
@@ -47,7 +49,7 @@
     // Used to trigger variation changes (such as seed fetches) upon application foregrounding.
     private VariationsSession mVariationsSession;
 
-    private ChromeApplication mApplication;
+    private Application mApplication;
     private boolean mIsInitialized;
     private boolean mIsStarted;
     private boolean mIsFinishedCachingNativeFlags;
@@ -67,7 +69,17 @@
      * @see #getInstance()
      */
     protected ChromeActivitySessionTracker() {
-        mApplication = (ChromeApplication) ContextUtils.getApplicationContext();
+        mApplication = (Application) ContextUtils.getApplicationContext();
+        mVariationsSession = AppHooks.get().createVariationsSession();
+    }
+
+    /**
+     * Asynchronously returns the value of the "restrict" URL param that the variations service
+     * should use for variation seed requests.
+     * @param callback Callback that will be called with the param value when available.
+     */
+    public void getVariationsRestrictModeValue(Callback<String> callback) {
+        mVariationsSession.getRestrictModeValue(mApplication, callback);
     }
 
     /**
@@ -81,7 +93,6 @@
         assert !mIsStarted;
 
         ApplicationStatus.registerApplicationStateListener(createApplicationStateListener());
-        mVariationsSession = AppHooks.get().createVariationsSession();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index 37fb5dde..1f51018 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -720,6 +720,7 @@
         assert isMainIntent(intent);
 
         if (!mIntentHandler.isIntentUserVisible()) return false;
+        if (FeatureUtilities.isChromeHomeEnabled()) return false;
 
         if (!ChromeFeatureList.isEnabled(ChromeFeatureList.NTP_LAUNCH_AFTER_INACTIVITY)) {
             return false;
@@ -1838,6 +1839,22 @@
     @Override
     protected void setStatusBarColor(Tab tab, int color) {
         if (DeviceFormFactor.isTablet(getApplicationContext())) return;
+
+        // If Chrome Home is enabled, the super of this function is not called because it only
+        // performs unnecessary transformations on the theme color.
+        if (getBottomSheet() != null) {
+            color = ApiCompatibilityUtils.getColor(getResources(), R.color.default_primary_color);
+            getBottomSheet().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+
+            // Special case the incognito NTP and the tab switcher.
+            if ((tab != null && NewTabPage.isNTPUrl(tab.getUrl()) && tab.isIncognito())
+                    || isInOverviewMode()) {
+                color = Color.BLACK;
+            }
+            ApiCompatibilityUtils.setStatusBarColor(getWindow(), color);
+            return;
+        }
+
         super.setStatusBarColor(tab, isInOverviewMode() ? Color.BLACK : color);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
index 4d616f5..db629e0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -781,7 +781,6 @@
             return true;
         }
         if (ExternalAuthUtils.getInstance().isGoogleSigned(
-                    ContextUtils.getApplicationContext(),
                     ApiCompatibilityUtils.getCreatorPackage(token))) {
             return true;
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
index afeda54..cd508545 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
@@ -28,10 +28,14 @@
 
 import java.util.List;
 
+import javax.annotation.Nullable;
+
 /**
  * A helper class that handles generating context menus for {@link ContentViewCore}s.
  */
 public class ContextMenuHelper implements OnCreateContextMenuListener {
+    private static final int MAX_SHARE_DIMEN_PX = 2048;
+
     private long mNativeContextMenuHelper;
 
     private ContextMenuPopulator mPopulator;
@@ -40,8 +44,6 @@
     private Callback<Integer> mCallback;
     private Runnable mOnMenuShown;
     private Runnable mOnMenuClosed;
-    private Callback<Bitmap> mOnThumbnailReceivedCallback;
-    private ComponentName mComponentName;
 
     private ContextMenuHelper(long nativeContextMenuHelper) {
         mNativeContextMenuHelper = nativeContextMenuHelper;
@@ -169,50 +171,47 @@
      * Share the image that triggered the current context menu.
      */
     public void shareImage() {
-        if (mNativeContextMenuHelper == 0) return;
-        nativeShareImage(mNativeContextMenuHelper);
-    }
-
-    @CalledByNative
-    private void onShareImageReceived(
-            WindowAndroid windowAndroid, byte[] jpegImageData) {
-        Activity activity = windowAndroid.getActivity().get();
-        if (activity == null) return;
-
-        ShareHelper.shareImage(activity, jpegImageData, mComponentName);
-        // This needs to be reset to null after a share. This way the next time a user shares an
-        // image it won't share with the last shared app unless explicitly told.
-        mComponentName = null;
+        shareImageDirectly(null);
     }
 
     /**
      * Share image triggered with the current context menu directly with a specific app.
      * @param name The {@link ComponentName} of the app to share the image directly with.
      */
-    public void shareImageDirectly(ComponentName name) {
-        mComponentName = name;
-        shareImage();
+    public void shareImageDirectly(@Nullable final ComponentName name) {
+        if (mNativeContextMenuHelper == 0) return;
+        Callback<byte[]> callback = new Callback<byte[]>() {
+            @Override
+            public void onResult(byte[] result) {
+                WebContents webContents = nativeGetJavaWebContents(mNativeContextMenuHelper);
+                WindowAndroid windowAndroid = webContents.getTopLevelNativeWindow();
+
+                Activity activity = windowAndroid.getActivity().get();
+                if (activity == null) return;
+
+                ShareHelper.shareImage(activity, result, name);
+            }
+        };
+        nativeRetrieveImage(mNativeContextMenuHelper, callback, MAX_SHARE_DIMEN_PX);
     }
 
     /**
      * Gets the thumbnail of the current image that triggered the context menu.
      * @param callback Called once the the thumbnail is received.
      */
-    private void getThumbnail(Callback<Bitmap> callback) {
-        mOnThumbnailReceivedCallback = callback;
+    private void getThumbnail(final Callback<Bitmap> callback) {
         if (mNativeContextMenuHelper == 0) return;
         int maxSizePx = mActivity.getResources().getDimensionPixelSize(
                 R.dimen.context_menu_header_image_max_size);
-        nativeRetrieveHeaderThumbnail(mNativeContextMenuHelper, maxSizePx);
-    }
-
-    @CalledByNative
-    private void onHeaderThumbnailReceived(WindowAndroid windowAndroid, byte[] jpegImageData) {
-        // TODO(tedchoc): Decode in separate process before launch.
-        Bitmap bitmap = BitmapFactory.decodeByteArray(jpegImageData, 0, jpegImageData.length);
-        if (mOnThumbnailReceivedCallback != null) {
-            mOnThumbnailReceivedCallback.onResult(bitmap);
-        }
+        Callback<byte[]> rawDataCallback = new Callback<byte[]>() {
+            @Override
+            public void onResult(byte[] result) {
+                // TODO(tedchoc): Decode in separate process before launch.
+                Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
+                callback.onResult(bitmap);
+            }
+        };
+        nativeRetrieveImage(mNativeContextMenuHelper, rawDataCallback, maxSizePx);
     }
 
     @Override
@@ -232,10 +231,11 @@
         return mPopulator;
     }
 
+    private native WebContents nativeGetJavaWebContents(long nativeContextMenuHelper);
     private native void nativeOnStartDownload(
             long nativeContextMenuHelper, boolean isLink, boolean isDataReductionProxyEnabled);
     private native void nativeSearchForImage(long nativeContextMenuHelper);
-    private native void nativeShareImage(long nativeContextMenuHelper);
+    private native void nativeRetrieveImage(
+            long nativeContextMenuHelper, Callback<byte[]> callback, int maxSizePx);
     private native void nativeOnContextMenuClosed(long nativeContextMenuHelper);
-    private native void nativeRetrieveHeaderThumbnail(long nativeContextMenuHelper, int maxSizePx);
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java
index db9ea63..37f89e62 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java
@@ -90,34 +90,12 @@
         return true;
     }
 
-    // TODO(paulmiller): Remove; replaced by no-argument isChromeGoogleSigned().
-    /**
-     * Returns whether the current build of Chrome is a Google-signed package.
-     *
-     * @param context the current context.
-     * @return whether the currently running application is signed with Google keys.
-     */
-    public boolean isChromeGoogleSigned(Context context) {
-        return isGoogleSigned(context, context.getPackageName());
-    }
-
     /**
      * Returns whether the current build of Chrome is a Google-signed package.
      * @return whether the currently running application is signed with Google keys.
      */
     public boolean isChromeGoogleSigned() {
         String packageName = ContextUtils.getApplicationContext().getPackageName();
-        return isGoogleSigned(null, packageName);
-    }
-
-    // TODO(paulmiller): Remove; replaced by isGoogleSigned(String).
-    /**
-     * Returns whether the call is originating from a Google-signed package.
-     * @param appContext the current context.
-     * @param packageName The package name to inquire about.
-     */
-    public boolean isGoogleSigned(Context context, String packageName) {
-        // This is overridden in a subclass.
         return isGoogleSigned(packageName);
     }
 
@@ -149,7 +127,7 @@
         for (String packageName : callingPackages) {
             if (!TextUtils.isEmpty(packageToMatch) && !packageName.equals(packageToMatch)) continue;
             matchFound = true;
-            if ((shouldBeGoogleSigned && !isGoogleSigned(context, packageName))
+            if ((shouldBeGoogleSigned && !isGoogleSigned(packageName))
                     || (shouldBeSystem && !isSystemBuild(pm, packageName))) {
                 return false;
             }
@@ -263,7 +241,7 @@
     public boolean canUseFirstPartyGooglePlayServices(
             Context context, UserRecoverableErrorHandler userRecoverableErrorHandler) {
         return canUseGooglePlayServices(context, userRecoverableErrorHandler)
-                && isChromeGoogleSigned(context);
+                && isChromeGoogleSigned();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gcore/ChromeGoogleApiClientImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/gcore/ChromeGoogleApiClientImpl.java
index 499fae4..66311d7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gcore/ChromeGoogleApiClientImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gcore/ChromeGoogleApiClientImpl.java
@@ -36,8 +36,7 @@
             boolean requireFirstPartyBuild) {
         mApplicationContext = context.getApplicationContext();
         mClient = client;
-        if (requireFirstPartyBuild
-                && !ExternalAuthUtils.getInstance().isChromeGoogleSigned(mApplicationContext)) {
+        if (requireFirstPartyBuild && !ExternalAuthUtils.getInstance().isChromeGoogleSigned()) {
             throw new IllegalStateException("GoogleApiClient requires first-party build");
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/historyreport/AppIndexingReporter.java b/chrome/android/java/src/org/chromium/chrome/browser/historyreport/AppIndexingReporter.java
index 9e1ea15..92670c0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/historyreport/AppIndexingReporter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/historyreport/AppIndexingReporter.java
@@ -29,17 +29,6 @@
     }
 
     /**
-     * Reports provided entity to on-device index.
-     * Base class does not implement any reporting, and call is a no-op. Child classes should
-     * implement this functionality.
-     *
-     * Deprecated, to be removed in follow-up cl, after downstream change.
-     */
-    public void reportWebPage(org.chromium.blink.mojom.WebPage webpage) {
-        // Overriden by private class. Base class does nothing.
-    }
-
-    /**
      * Clears history of reported entities.
      * Currently, we do not support clearing only a subset of history. Base class does not implement
      * any reporting, and call is a no-op. Child classes should implement this functionality.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java
index 2fc7507..73a6dd3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java
@@ -6,12 +6,14 @@
 
 import android.os.AsyncTask;
 
+import org.chromium.base.Callback;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.library_loader.LibraryProcessType;
 import org.chromium.base.library_loader.ProcessInitException;
+import org.chromium.chrome.browser.ChromeActivitySessionTracker;
 import org.chromium.chrome.browser.ChromeVersionInfo;
 import org.chromium.components.variations.firstrun.VariationsSeedFetcher;
 import org.chromium.content.browser.ChildProcessLauncher;
@@ -67,9 +69,15 @@
     }
 
     private class FetchSeedTask extends AsyncTask<Void, Void, Void> {
+        private final String mRestrictMode;
+
+        public FetchSeedTask(String restrictMode) {
+            mRestrictMode = restrictMode;
+        }
+
         @Override
         protected Void doInBackground(Void... params) {
-            VariationsSeedFetcher.get().fetchSeed();
+            VariationsSeedFetcher.get().fetchSeed(mRestrictMode);
             return null;
         }
 
@@ -92,8 +100,15 @@
         assert mLoadTask == null;
         if (fetchVariationSeed && shouldFetchVariationsSeedDuringFirstRun()) {
             mFetchingVariations = true;
-            mFetchSeedTask = new FetchSeedTask();
-            mFetchSeedTask.executeOnExecutor(getExecutor());
+            ChromeActivitySessionTracker sessionTracker =
+                    ChromeActivitySessionTracker.getInstance();
+            sessionTracker.getVariationsRestrictModeValue(new Callback<String>() {
+                @Override
+                public void onResult(String restrictMode) {
+                    mFetchSeedTask = new FetchSeedTask(restrictMode);
+                    mFetchSeedTask.executeOnExecutor(getExecutor());
+                }
+            });
         }
 
         if (allocateChildConnection) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsController.java b/chrome/android/java/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsController.java
index 913a1cb..e8c1d5b5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsController.java
@@ -11,6 +11,7 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 
+import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
@@ -21,7 +22,9 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -93,22 +96,55 @@
         String oldAccount = prefs.getString(DELAYED_ACCOUNT_NAME, null);
         // Make sure to construct a new set so it can be modified safely. See crbug.com/568369.
         Set<String> invals = new HashSet<String>(
-                prefs.getStringSet(DELAYED_INVALIDATIONS, new HashSet<String>(1)));
+                prefs.getStringSet(DELAYED_INVALIDATIONS, Collections.<String>emptySet()));
         assert invals.isEmpty() || oldAccount != null;
-        if (oldAccount != null && !oldAccount.equals(account)) {
-            invals.clear();
+        boolean invalidateAllTypes = false;
+        // We invalidate all types if:
+        // - the account has changed
+        // - we were in "invalidate all types" mode already
+        // - new invalidation indicates to invalidate all types by setting source to 0
+        // - adding invalidation to the current set failed
+        if (oldAccount != null && !oldAccount.equals(account)) invalidateAllTypes = true;
+        if (oldAccount != null && invals.isEmpty()) invalidateAllTypes = true;
+        if (invalidation.mObjectSource == 0) invalidateAllTypes = true;
+        if (!invalidateAllTypes && !addInvalidationToSet(invalidation, invals)) {
+            invalidateAllTypes = true;
         }
+
         SharedPreferences.Editor editor = prefs.edit();
         editor.putString(DELAYED_ACCOUNT_NAME, account);
-        if (invalidation.mObjectSource == 0 || (oldAccount != null && invals.isEmpty())) {
-            editor.putStringSet(DELAYED_INVALIDATIONS, null);
+        if (invalidateAllTypes) {
+            editor.remove(DELAYED_INVALIDATIONS);
         } else {
-            invals.add(invalidation.encodeToString());
             editor.putStringSet(DELAYED_INVALIDATIONS, invals);
         }
         editor.apply();
     }
 
+    /**
+     * Adds newInvalidation into set of encoded invalidations. Invalidations with the same id/source
+     * and lower version are removed from the set. If invalidation with same or higher version is
+     * is present, then new invalidation is discarded.
+     * @return true if update is successful, false when decoding invalidation from string fails.
+     */
+    private boolean addInvalidationToSet(
+            PendingInvalidation newInvalidation, Set<String> invalidations) {
+        for (Iterator<String> iter = invalidations.iterator(); iter.hasNext();) {
+            String encodedInvalidation = iter.next();
+            PendingInvalidation invalidation =
+                    PendingInvalidation.decodeToPendingInvalidation(encodedInvalidation);
+            if (invalidation == null) return false;
+            if (ApiCompatibilityUtils.objectEquals(
+                        invalidation.mObjectId, newInvalidation.mObjectId)
+                    && invalidation.mObjectSource == newInvalidation.mObjectSource) {
+                if (invalidation.mVersion >= newInvalidation.mVersion) return true;
+                iter.remove();
+            }
+        }
+        invalidations.add(newInvalidation.encodeToString());
+        return true;
+    }
+
     private List<Bundle> popPendingInvalidations(final Context context) {
         SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
         assert prefs.contains(DELAYED_ACCOUNT_NAME);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
index 6367531..15dea8564 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
@@ -43,6 +43,14 @@
             new HashMap<String, Map<MediaRouteProvider, List<MediaSink>>>();
     private final Map<String, List<MediaSink>> mSinksPerSource =
             new HashMap<String, List<MediaSink>>();
+    private static boolean sAndroidMediaRouterSetForTest = false;
+    private static MediaRouter sAndroidMediaRouterForTest = null;
+
+    @VisibleForTesting
+    public static void setAndroidMediaRouterForTest(MediaRouter router) {
+        sAndroidMediaRouterSetForTest = true;
+        sAndroidMediaRouterForTest = router;
+    }
 
     @VisibleForTesting
     public static void setRouteProviderBuilderForTest(MediaRouteProvider.Builder builder) {
@@ -76,6 +84,7 @@
      */
     @Nullable
     public static MediaRouter getAndroidMediaRouter() {
+        if (sAndroidMediaRouterSetForTest) return sAndroidMediaRouterForTest;
         try {
             // Pre-MR1 versions of JB do not have the complete MediaRouter APIs,
             // so getting the MediaRouter instance will throw an exception.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterDialogController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterDialogController.java
index 7217bb8b..e895de9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterDialogController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterDialogController.java
@@ -44,7 +44,10 @@
         if (isShowingDialog()) return;
 
         MediaSource source = MediaSource.from(sourceUrn);
-        if (source == null) return;
+        if (source == null) {
+            nativeOnMediaSourceNotSupported(mNativeDialogController);
+            return;
+        }
 
         mDialogManager = new MediaRouteChooserDialogManager(source, this);
         mDialogManager.openDialog();
@@ -60,7 +63,10 @@
         if (isShowingDialog()) return;
 
         MediaSource source = MediaSource.from(sourceUrn);
-        if (source == null) return;
+        if (source == null) {
+            nativeOnMediaSourceNotSupported(mNativeDialogController);
+            return;
+        }
 
         mDialogManager = new MediaRouteControllerDialogManager(source, mediaRouteId, this);
         mDialogManager.openDialog();
@@ -117,4 +123,5 @@
     native void nativeOnSinkSelected(
             long nativeMediaRouterDialogControllerAndroid, String sinkId);
     native void nativeOnRouteClosed(long nativeMediaRouterDialogControllerAndroid, String routeId);
+    native void nativeOnMediaSourceNotSupported(long nativeMediaRouterDialogControllerAndroid);
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java
index 594e5ffe..fc92cfd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java
@@ -91,7 +91,6 @@
     @Nullable
     public static CastMediaRouteProvider create(MediaRouteManager manager) {
         MediaRouter androidMediaRouter = ChromeMediaRouter.getAndroidMediaRouter();
-        if (androidMediaRouter == null) return null;
 
         return new CastMediaRouteProvider(androidMediaRouter, manager);
     }
@@ -182,10 +181,19 @@
 
     @Override
     public void startObservingMediaSinks(String sourceId) {
-        if (mAndroidMediaRouter == null) return;
+        if (mAndroidMediaRouter == null) {
+            // If the MediaRouter API is not available, report no devices so the page doesn't even
+            // try to cast.
+            onSinksReceived(sourceId, new ArrayList<MediaSink>());
+            return;
+        }
 
         MediaSource source = MediaSource.from(sourceId);
-        if (source == null) return;
+        if (source == null) {
+            // If the source is invalid, report no devices available.
+            onSinksReceived(sourceId, new ArrayList<MediaSink>());
+            return;
+        }
 
         MediaRouteSelector routeSelector = source.buildRouteSelector();
         if (routeSelector == null) {
@@ -322,7 +330,7 @@
         }
 
         ClientRecord client = getClientRecordByRouteId(routeId);
-        if (client != null) {
+        if (client != null && mAndroidMediaRouter != null) {
             MediaSink sink = MediaSink.fromSinkId(mSession.getSinkId(), mAndroidMediaRouter);
             if (sink != null) sendReceiverAction(routeId, sink, client.clientId, "stop");
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java
index 52635314..a171ca0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java
@@ -13,39 +13,61 @@
  * triggering seed fetches on application startup.
  */
 public class VariationsSession {
-    private boolean mInitialized;
+    private boolean mRestrictModeFetchStarted;
     private String mRestrictMode;
 
     /**
      * Triggers to the native VariationsService that the application has entered the foreground.
      */
     public void start(Context context) {
-        if (!mInitialized) {
-            mInitialized = true;
-            // Check the restrict mode only once initially to avoid doing extra work each time the
-            // app enters foreground.
-            getRestrictMode(context, new Callback<String>() {
-                @Override
-                public void onResult(String restrictMode) {
-                    assert restrictMode != null;
-                    mRestrictMode = restrictMode;
-                    nativeStartVariationsSession(mRestrictMode);
-                }
-            });
-        // If |mRestrictMode| is null, async initialization is in progress and
-        // nativeStartVariationsSession will be called when it completes.
-        } else if (mRestrictMode != null) {
-            nativeStartVariationsSession(mRestrictMode);
+        // If |mRestrictModeFetchStarted| is true and |mRestrictMode| is null, then async
+        // initializationn is in progress and nativeStartVariationsSession() will be called
+        // when it completes.
+        if (mRestrictModeFetchStarted && mRestrictMode == null) {
+            return;
         }
+
+        mRestrictModeFetchStarted = true;
+        getRestrictModeValue(context, new Callback<String>() {
+            @Override
+            public void onResult(String restrictMode) {
+                nativeStartVariationsSession(mRestrictMode);
+            }
+        });
     }
 
     /**
      * Asynchronously returns the value of the "restrict" URL param that the variations service
-     * should use for variation seed requests.
+     * should use for variation seed requests. Public version that can be called externally.
+     * Uses the protected version (that could be overridden by subclasses) to actually get the
+     * value and also sets that value internally when retrieved.
+     * @param callback Callback that will be called with the param value when available.
+     */
+    public final void getRestrictModeValue(Context context, final Callback<String> callback) {
+        // If |mRestrictMode| is not null, the value has already been fetched and so it can
+        // simply be provided to the callback.
+        if (mRestrictMode != null) {
+            callback.onResult(mRestrictMode);
+            return;
+        }
+        getRestrictMode(context, new Callback<String>() {
+            @Override
+            public void onResult(String restrictMode) {
+                assert restrictMode != null;
+                mRestrictMode = restrictMode;
+                callback.onResult(restrictMode);
+            }
+        });
+    }
+
+    /**
+     * Asynchronously returns the value of the "restrict" URL param that the variations service
+     * should use for variation seed requests. This can be overriden by subclass to provide actual
+     * restrict values, which must not be null.
      */
     protected void getRestrictMode(Context context, Callback<String> callback) {
         callback.onResult("");
     }
 
-    private native void nativeStartVariationsSession(String restrictMode);
+    protected native void nativeStartVariationsSession(String restrictMode);
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageScrollView.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageScrollView.java
index 1da0d0b..76c409ca 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageScrollView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageScrollView.java
@@ -19,35 +19,16 @@
 
 import org.chromium.base.Log;
 import org.chromium.chrome.R;
-import org.chromium.chrome.browser.ntp.ContextMenuManager.TouchDisableableView;
 import org.chromium.chrome.browser.widget.FadingShadow;
 
 /**
  * Simple wrapper on top of a ScrollView that will acquire focus when tapped.  Ensures the
  * New Tab page receives focus when clicked. This is only used in the Incognito NTP.
  */
-public class NewTabPageScrollView extends ScrollView implements TouchDisableableView {
+public class NewTabPageScrollView extends ScrollView {
     private static final String TAG = "NewTabPageScrollView";
 
-    /** Whether the ScrollView and its children should react to touch events. */
-    private boolean mTouchEnabled = true;
-
-    /**
-     * Listener for scroll changes.
-     */
-    public interface OnScrollListener {
-        /**
-         * Triggered when the scroll changes.  See ScrollView#onScrollChanged for more
-         * details.
-         */
-        void onScrollChanged(int l, int t, int oldl, int oldt);
-    }
-
     private GestureDetector mGestureDetector;
-    private OnScrollListener mOnScrollListener;
-
-    private NewTabPageLayout mNewTabPageLayout;
-
     private FadingShadow mFadingShadow;
 
     /**
@@ -80,38 +61,14 @@
     }
 
     @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        // Incognito also uses this scroll view but will not have the id so will return null.
-        mNewTabPageLayout = (NewTabPageLayout) findViewById(R.id.ntp_content);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        if (mNewTabPageLayout != null) {
-            mNewTabPageLayout.setParentViewportHeight(MeasureSpec.getSize(heightMeasureSpec));
-        }
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-    }
-
-    @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
         mGestureDetector.onTouchEvent(ev);
-        if (!mTouchEnabled) return true;
         return super.onInterceptTouchEvent(ev);
     }
 
     @Override
-    public void setTouchEnabled(boolean enabled) {
-        mTouchEnabled = enabled;
-    }
-
-    @Override
     @SuppressLint("ClickableViewAccessibility")
     public boolean onTouchEvent(MotionEvent ev) {
-        if (!mTouchEnabled) return false;
-
         // Action down would already have been handled in onInterceptTouchEvent
         if (ev.getActionMasked() != MotionEvent.ACTION_DOWN) {
             mGestureDetector.onTouchEvent(ev);
@@ -133,20 +90,6 @@
         }
     }
 
-    /**
-     * Sets the listener to be notified of scroll changes.
-     * @param listener The listener to be updated on scroll changes.
-     */
-    public void setOnScrollListener(OnScrollListener listener) {
-        mOnScrollListener = listener;
-    }
-
-    @Override
-    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
-        super.onScrollChanged(l, t, oldl, oldt);
-        if (mOnScrollListener != null) mOnScrollListener.onScrollChanged(l, t, oldl, oldt);
-    }
-
     @Override
     public void focusableViewAvailable(View v) {
         // To avoid odd jumps during NTP animation transitions, we do not attempt to give focus
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
index bd2fcef..e69cd59 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
@@ -4,6 +4,9 @@
 
 package org.chromium.chrome.browser.ntp.snippets;
 
+import android.content.Context;
+import android.net.ConnectivityManager;
+
 import com.google.android.gms.gcm.GcmNetworkManager;
 import com.google.android.gms.gcm.PeriodicTask;
 import com.google.android.gms.gcm.Task;
@@ -165,6 +168,14 @@
         return schedule(0, 0);
     }
 
+    @CalledByNative
+    public boolean isOnUnmeteredConnection() {
+        Context context = ContextUtils.getApplicationContext();
+        ConnectivityManager manager =
+                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+        return !manager.isActiveNetworkMetered();
+    }
+
     public static boolean shouldRescheduleTasksOnUpgrade() {
         // Reschedule the periodic tasks if they were enabled previously.
         return ContextUtils.getAppSharedPreferences().getBoolean(PREF_IS_SCHEDULED, false);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
index 2a95de7..8fa4ae6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
@@ -71,9 +71,6 @@
     /** The contents of the URL that precede the path/query before formatting. */
     private String mOriginalUrlLocation;
 
-    /** Overrides the text announced during accessibility events. */
-    private String mAccessibilityTextOverride;
-
     private boolean mShowKeyboardOnWindowFocus;
 
     private boolean mFirstDrawComplete;
@@ -109,7 +106,6 @@
     private Boolean mUseDarkColors;
 
     private AccessibilityManager mAccessibilityManager;
-    private boolean mDisableTextAccessibilityEvents;
 
     /**
      * Whether default TextView scrolling should be disabled because autocomplete has been added.
@@ -136,7 +132,7 @@
 
     // Set to true when the URL bar text is modified programmatically. Initially set
     // to true until the old state has been loaded.
-    private boolean mIgnoreAutocomplete = true;
+    private boolean mIgnoreTextChangeFromAutocomplete = true;
     private boolean mLastUrlEditWasDelete;
 
     /** This tracks whether or not the last ACTION_DOWN event was when the url bar had focus. */
@@ -286,7 +282,7 @@
     public void setIgnoreTextChangesForAutocomplete(boolean ignoreAutocomplete) {
         assert mUrlBarDelegate != null;
 
-        mIgnoreAutocomplete = ignoreAutocomplete;
+        mIgnoreTextChangeFromAutocomplete = ignoreAutocomplete;
     }
 
     /**
@@ -301,7 +297,7 @@
      *         at the beginning of the inline autocomplete text if present otherwise the very
      *         end of the current text).
      */
-    public boolean isCursorAtEndOfTypedText() {
+    private boolean isCursorAtEndOfTypedText() {
         final int selectionStart = getSelectionStart();
         final int selectionEnd = getSelectionEnd();
 
@@ -320,7 +316,7 @@
      */
     // isInBatchEditMode is a package protected method on TextView, so we intentionally chose
     // a different name.
-    public boolean isHandlingBatchInput() {
+    private boolean isHandlingBatchInput() {
         return mInBatchEditMode;
     }
 
@@ -743,15 +739,19 @@
                     + currentText.substring(mFormattedUrlLocation.length());
             selectedEndIndex = selectedEndIndex - mFormattedUrlLocation.length()
                     + mOriginalUrlLocation.length();
+
             setIgnoreTextChangesForAutocomplete(true);
             setText(newText);
             setSelection(0, selectedEndIndex);
+            setIgnoreTextChangesForAutocomplete(false);
+
             boolean retVal = super.onTextContextMenuItem(id);
             if (getText().toString().equals(newText)) {
+                setIgnoreTextChangesForAutocomplete(true);
                 setText(currentText);
                 setSelection(getText().length());
+                setIgnoreTextChangesForAutocomplete(false);
             }
-            setIgnoreTextChangesForAutocomplete(false);
             return retVal;
         }
         return super.onTextContextMenuItem(id);
@@ -811,7 +811,6 @@
         CharSequence newText = TextUtils.concat(userText, inlineAutocompleteText);
 
         setIgnoreTextChangesForAutocomplete(true);
-        mDisableTextAccessibilityEvents = true;
 
         if (!TextUtils.equals(previousText, newText)) {
             // The previous text may also have included autocomplete text, so we only
@@ -843,7 +842,6 @@
         }
 
         setIgnoreTextChangesForAutocomplete(false);
-        mDisableTextAccessibilityEvents = false;
     }
 
     /**
@@ -857,16 +855,6 @@
     }
 
     /**
-     * Overrides the text announced when focusing on the field for accessibility.  This value will
-     * be cleared automatically when the text content changes for this view.
-     * @param accessibilityOverride The text to be announced instead of the current text value
-     *                              (or null if the text content should be read).
-     */
-    public void setAccessibilityTextOverride(String accessibilityOverride) {
-        mAccessibilityTextOverride = accessibilityOverride;
-    }
-
-    /**
      * Scroll to ensure the TLD is visible.
      * @return Whether the TLD was discovered and successfully scrolled to.
      */
@@ -923,10 +911,11 @@
         // URL is being edited).
         if (!TextUtils.equals(getEditableText(), text)) {
             super.setText(text, type);
-            mAccessibilityTextOverride = null;
         }
 
         // Verify the autocomplete is still valid after the text change.
+        // Note: mAutocompleteSpan may be still null here if setText() is called in View
+        // constructor.
         if (mAutocompleteSpan != null
                 && mAutocompleteSpan.mUserText != null
                 && mAutocompleteSpan.mAutocompleteText != null) {
@@ -1011,7 +1000,7 @@
 
     @Override
     public void sendAccessibilityEventUnchecked(AccessibilityEvent event) {
-        if (mDisableTextAccessibilityEvents) {
+        if (mIgnoreTextChangeFromAutocomplete) {
             if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED
                     || event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED) {
                 return;
@@ -1030,10 +1019,6 @@
         } finally {
             StrictMode.setThreadPolicy(oldPolicy);
         }
-
-        if (mAccessibilityTextOverride != null) {
-            info.setText(mAccessibilityTextOverride);
-        }
     }
 
     @VisibleForTesting
@@ -1204,7 +1189,7 @@
     private void notifyAutocompleteTextStateChanged(boolean textDeleted) {
         if (mUrlBarDelegate == null) return;
         if (!hasFocus()) return;
-        if (mIgnoreAutocomplete) return;
+        if (mIgnoreTextChangeFromAutocomplete) return;
 
         mLastUrlEditWasDelete = textDeleted;
         mUrlBarDelegate.onTextChangedForAutocomplete(textDeleted);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
index 39da8b00..b253f41d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
@@ -60,7 +60,7 @@
      * Meta data name of an app's supported default payment method name.
      */
     static final String META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME =
-            "org.chromum.default_payment_method_name";
+            "org.chromium.default_payment_method_name";
 
     /** The maximum number of payment method manifests to download. */
     private static final int MAX_NUMBER_OF_MANIFESTS = 10;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/BoxAnimatorScrim.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/BoxAnimatorScrim.java
deleted file mode 100644
index ae7a4d8..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/BoxAnimatorScrim.java
+++ /dev/null
@@ -1,87 +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.
-
-package org.chromium.chrome.browser.searchwidget;
-
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-import android.view.View;
-
-import org.chromium.base.ApiCompatibilityUtils;
-import org.chromium.chrome.R;
-
-/** Draws a scrim and animates a search box moving into place. */
-class BoxAnimatorScrim extends View implements ValueAnimator.AnimatorUpdateListener {
-    /** Transparency used for the scrim. */
-    private static final int BACKGROUND_TRANSPARENCY = 154;
-
-    private final Drawable mCardDrawable;
-    private final Rect mAnimationRect = new Rect();
-    private final int mBackgroundColor;
-
-    private Rect mSourceRect;
-    private Rect mTargetRect;
-    private float mInterpolatedValue;
-
-    public BoxAnimatorScrim(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        mBackgroundColor =
-                ApiCompatibilityUtils.getColor(getResources(), R.color.light_normal_color)
-                & 0x00ffffff;
-
-        // Mutate to prevent the animation from affecting other places the Drawable is used.
-        mCardDrawable = ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.card_single);
-        mCardDrawable.mutate();
-    }
-
-    /** Sets where the box will animate from and where it will go. */
-    public void setAnimationRects(Rect source, Rect target) {
-        mSourceRect = source;
-        mTargetRect = target;
-    }
-
-    /** Returns the last known value of the animation. */
-    public float getInterpolatedValue() {
-        return mInterpolatedValue;
-    }
-
-    /** Set the current value of the animation. */
-    public void setInterpolatedValue(float value) {
-        mInterpolatedValue = Math.max(0.0f, Math.min(1.0f, value));
-        postInvalidateOnAnimation();
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        // Draw the background.
-        int currentAlpha = (int) (BACKGROUND_TRANSPARENCY * mInterpolatedValue);
-        int color = (currentAlpha << 24) + mBackgroundColor;
-        canvas.drawColor(color);
-
-        // Draw the search box moving into place, if needed.
-        if (mSourceRect == null || mTargetRect == null) return;
-        if (mInterpolatedValue >= 1.0f) return;
-
-        mAnimationRect.left = (int) interpolate(mSourceRect.left, mTargetRect.left);
-        mAnimationRect.right = (int) interpolate(mSourceRect.right, mTargetRect.right);
-        mAnimationRect.top = (int) interpolate(mSourceRect.top, mTargetRect.top);
-        mAnimationRect.bottom = (int) interpolate(mSourceRect.bottom, mTargetRect.bottom);
-        mCardDrawable.setBounds(mAnimationRect);
-        mCardDrawable.draw(canvas);
-    }
-
-    @Override
-    public void onAnimationUpdate(ValueAnimator animation) {
-        setInterpolatedValue((Float) animation.getAnimatedValue());
-    }
-
-    private float interpolate(float start, float end) {
-        return ((1.0f - mInterpolatedValue) * start) + (mInterpolatedValue * end);
-    }
-}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java
index 28cac5d..77aff29 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java
@@ -4,9 +4,6 @@
 
 package org.chromium.chrome.browser.searchwidget;
 
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
 import android.content.Intent;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
@@ -15,13 +12,9 @@
 import android.support.customtabs.CustomTabsIntent;
 import android.support.v4.app.ActivityOptionsCompat;
 import android.text.TextUtils;
-import android.view.Gravity;
+import android.view.LayoutInflater;
 import android.view.View;
-import android.view.View.MeasureSpec;
 import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
-import android.view.ViewStub;
-import android.widget.FrameLayout;
 
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.ContextUtils;
@@ -43,7 +36,6 @@
 import org.chromium.chrome.browser.tab.TabIdManager;
 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
 import org.chromium.chrome.browser.util.IntentUtils;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
 import org.chromium.components.url_formatter.UrlFormatter;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.ui.UiUtils;
@@ -51,55 +43,30 @@
 
 /** Prototype that queries the user's default search engine and shows autocomplete suggestions. */
 public class SearchActivity extends AsyncInitializationActivity
-        implements SnackbarManageable, SearchLocationBarLayout.Delegate,
+        implements SnackbarManageable, SearchActivityLocationBarLayout.Delegate,
                    View.OnLayoutChangeListener {
     private static final String TAG = "searchwidget";
 
-    /** How long the animation should run for. */
-    private static final int ANIMATION_DURATION_MS = 200;
-
     /** Padding gleaned from the background Drawable of the search box. */
     private final Rect mSearchBoxPadding = new Rect();
 
-    /** Location of the search box on the home screen. */
-    private Rect mSearchBoxWidgetBounds;
-
-    /** Small margin/padding used for the search box. */
-    private int mSpacingSmall;
-
     /** Medium margin/padding used for the search box. */
     private int mSpacingMedium;
 
     /** Large margin/padding used for the search box. */
     private int mSpacingLarge;
 
-    /**
-     * View that the omnibox suggestion list anchors to. This is different from the main search box
-     * because the upstream LocationBarLayout code expects a full white box instead of a floating
-     * box with shadows.
-     */
-    private View mAnchorView;
-
-    /** See {@link BoxAnimatorScrim}. */
-    private BoxAnimatorScrim mScrimView;
-
     /** Main content view. */
     private ViewGroup mContentView;
 
-    /** Whether or not the library has begun loading. */
-    private boolean mIsNativeLoading;
-
     /** Whether the native library has been loaded. */
     private boolean mIsNativeReady;
 
     /** Input submitted before before the native library was loaded. */
     private String mQueuedUrl;
 
-    /** Animates the SearchActivity's controls moving into place. */
-    private ValueAnimator mAnimator;
-
     /** The View that represents the search box. */
-    private SearchLocationBarLayout mSearchBox;
+    private SearchActivityLocationBarLayout mSearchBox;
 
     private UrlBar mUrlBar;
 
@@ -122,12 +89,6 @@
 
     @Override
     public void finish() {
-        if (SearchWidgetProvider.ANIMATE_TRANSITION) {
-            // Update the search widgets so that they all show up as opaque again.
-            SearchWidgetProvider.setLaunchingWidgetId(SearchWidgetProvider.INVALID_WIDGET_ID);
-            SearchWidgetProvider.updateAllWidgets();
-        }
-
         super.finish();
         overridePendingTransition(0, android.R.anim.fade_out);
     }
@@ -155,78 +116,28 @@
 
         mWindowAndroid = new ActivityWindowAndroid(this);
         mSnackbarManager = new SnackbarManager(this);
-
-        // Build the Views that {@link SearchLocationBarLayout} expects to exist.
-        ViewStub resultsStub = new ViewStub(this);
-        resultsStub.setId(R.id.omnibox_results_container_stub);
-        resultsStub.setLayoutResource(R.layout.omnibox_results_container);
-
-        // The FadingBackgroundView isn't used here, but is still animated by the LocationBarLayout.
-        // This interferes with the animation we need to show the widget moving to the right place.
-        FadingBackgroundView fadingView = new FadingBackgroundView(this, null) {
-            @Override
-            public void showFadingOverlay() {}
-            @Override
-            public void hideFadingOverlay(boolean fadeOut) {}
-        };
-
-        fadingView.setId(R.id.fading_focus_target);
-        FrameLayout.LayoutParams fadingBackgroundLayoutParams = new FrameLayout.LayoutParams(0, 0);
-
-        // Add an empty view to prevent crashing.
-        ViewGroup bottomContainer = new FrameLayout(this);
-        bottomContainer.setId(R.id.bottom_container);
-
-        // Build the search box, set it to invisible until the animation is done.
-        mSearchBox = new SearchLocationBarLayout(this, null);
-        mSearchBox.setDelegate(this);
-        mSearchBox.setVisibility(mSearchBoxWidgetBounds == null ? View.VISIBLE : View.INVISIBLE);
-        mSearchBox.setBackgroundResource(R.drawable.card_single);
-        mSearchBox.setPadding(mSpacingLarge, mSpacingMedium, mSpacingLarge, mSpacingMedium);
-        mSearchBox.initializeControls(new WindowDelegate(getWindow()), mWindowAndroid);
-        mSearchBox.setUrlBarFocusable(true);
         mSearchBoxDataProvider = new SearchBoxDataProvider();
-        mSearchBox.setToolbarDataProvider(mSearchBoxDataProvider);
-        FrameLayout.LayoutParams searchParams =
-                new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
-        ApiCompatibilityUtils.setMarginStart(searchParams, mSpacingSmall);
-        ApiCompatibilityUtils.setMarginEnd(searchParams, mSpacingSmall);
-        searchParams.topMargin = mSpacingSmall;
 
-        // The scrim animates the search box moving into place.
-        mScrimView = new BoxAnimatorScrim(this, null);
-        mScrimView.setOnClickListener(new View.OnClickListener() {
+        mContentView = createContentView(mSearchBox);
+        mContentView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                // Don't allow clicking on the scrim until the animation completes.
-                if (mScrimView.getInterpolatedValue() < 1.0f) return;
-
                 // Finish the Activity if the user clicks on the scrim.
                 finish();
             }
         });
-        if (!SearchWidgetProvider.ANIMATE_TRANSITION) mScrimView.setInterpolatedValue(1.0f);
 
-        // The anchor view puts the omnibox suggestions in the correct place, visually.
-        mAnchorView = new View(this);
-        mAnchorView.setId(R.id.toolbar);
-        mAnchorView.setClickable(true);
-        FrameLayout.LayoutParams anchorParams =
-                new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
-        anchorParams.gravity = Gravity.CENTER_HORIZONTAL;
+        // Build the search box.
+        mSearchBox = (SearchActivityLocationBarLayout) mContentView.findViewById(
+                R.id.search_location_bar);
+        mSearchBox.setDelegate(this);
+        mSearchBox.setPadding(mSpacingLarge, mSpacingMedium, mSpacingLarge, mSpacingMedium);
+        mSearchBox.initializeControls(new WindowDelegate(getWindow()), mWindowAndroid);
+        mSearchBox.setUrlBarFocusable(true);
+        mSearchBox.setToolbarDataProvider(mSearchBoxDataProvider);
 
-        // Initialize and build the View hierarchy.
-        mContentView = createContentView(mSearchBox);
-        mContentView.addView(fadingView, fadingBackgroundLayoutParams);
-        mContentView.addView(mScrimView);
-        mContentView.addView(resultsStub);
-        mContentView.addView(mAnchorView, anchorParams);
-        mContentView.addView(mSearchBox, searchParams);
-        mContentView.addView(bottomContainer);
         setContentView(mContentView);
         mUrlBar = (UrlBar) mSearchBox.findViewById(R.id.url_bar);
-
-        mSearchBox.setShowCachedZeroSuggestResults(true);
     }
 
     @Override
@@ -243,6 +154,7 @@
         mSearchBoxDataProvider.onNativeLibraryReady(mTab);
         mSearchBox.onNativeLibraryReady();
         mSearchBox.setAutocompleteProfile(Profile.getLastUsedProfile().getOriginalProfile());
+        mSearchBox.setShowCachedZeroSuggestResults(true);
 
         if (mQueuedUrl != null) loadUrl(mQueuedUrl);
 
@@ -307,10 +219,13 @@
 
     private void focusTextBox(boolean clearQuery) {
         if (mIsNativeReady) mSearchBox.onUrlFocusChange(true);
+
+        if (clearQuery) {
+            mUrlBar.setIgnoreTextChangesForAutocomplete(true);
+            mUrlBar.setUrl("", null);
+            mUrlBar.setIgnoreTextChangesForAutocomplete(false);
+        }
         mUrlBar.setCursorVisible(true);
-        mUrlBar.setIgnoreTextChangesForAutocomplete(true);
-        if (clearQuery) mUrlBar.setUrl("", null);
-        mUrlBar.setIgnoreTextChangesForAutocomplete(false);
         mUrlBar.setSelection(0, mUrlBar.getText().length());
         new Handler().post(new Runnable() {
             @Override
@@ -359,136 +274,33 @@
     private ViewGroup createContentView(final View searchBox) {
         assert mContentView == null;
 
-        ViewGroup contentView = new FrameLayout(this) {
-            @Override
-            public void onMeasure(int widthSpec, int heightSpec) {
-                super.onMeasure(widthSpec, heightSpec);
-                if (mAnchorView == null) return;
-
-                // Calculate how big the box is without shadow-induced padding.
-                FrameLayout.LayoutParams anchorParams =
-                        (FrameLayout.LayoutParams) mAnchorView.getLayoutParams();
-                int anchorViewWidth = searchBox.getMeasuredWidth() - mSearchBoxPadding.left
-                        - mSearchBoxPadding.right;
-                int anchorViewHeight =
-                        mSpacingSmall + mSearchBox.getMeasuredHeight() - mSearchBoxPadding.bottom;
-                if (anchorParams.width == anchorViewWidth
-                        && anchorParams.height == anchorViewHeight) {
-                    return;
-                }
-
-                // Move the anchor view up a little bit as a dirty hack until we can add a
-                // dimension. This allows the suggestion list to move up past the rounded corners of
-                // the search box.
-                anchorParams.topMargin = -(mSpacingSmall / 4);
-                anchorParams.width = anchorViewWidth;
-                anchorParams.height = anchorViewHeight;
-
-                // Measure the anchor view to match the search box's height without its side or
-                // bottom shadow padding. This isn't exactly what we need, but it's hard to get the
-                // correct behavior because LocationBarLayout overrides how the suggestions are
-                // laid out.
-                int anchorWidthSpec =
-                        MeasureSpec.makeMeasureSpec(anchorViewWidth, MeasureSpec.EXACTLY);
-                int anchorHeightSpec =
-                        MeasureSpec.makeMeasureSpec(anchorViewHeight, MeasureSpec.EXACTLY);
-                measureChild(mAnchorView, anchorWidthSpec, anchorHeightSpec);
-            }
-        };
-
+        ViewGroup contentView = (ViewGroup) LayoutInflater.from(this).inflate(
+                R.layout.search_activity, null, false);
         contentView.addOnLayoutChangeListener(this);
-        contentView.setId(R.id.control_container);
         return contentView;
     }
 
     @Override
     public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
             int oldTop, int oldRight, int oldBottom) {
-        if (mSearchBoxWidgetBounds != null) {
-            if (mAnimator == null) initializeAnimation();
-        } else {
-            // If there's no animation, then we can load the library immediately without worrying
-            // about jank.
-            beginLoadingLibrary();
-        }
         mContentView.removeOnLayoutChangeListener(this);
+        beginLoadingLibrary();
     }
 
     private void initializeDimensions() {
-        mSearchBoxWidgetBounds = getIntent().getSourceBounds();
-
         // Cache the padding of the Drawable that is used as the background for the search box.
         Drawable searchBackground =
                 ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.card_single);
         searchBackground.getPadding(mSearchBoxPadding);
 
         // TODO(dfalcantara): Add values to the XML files instead of reusing random ones.
-        mSpacingSmall = getResources().getDimensionPixelSize(
-                R.dimen.tablet_toolbar_start_padding_no_buttons);
         mSpacingMedium =
                 getResources().getDimensionPixelSize(R.dimen.location_bar_incognito_badge_padding);
         mSpacingLarge =
                 getResources().getDimensionPixelSize(R.dimen.contextual_search_peek_promo_padding);
     }
 
-    private void initializeAnimation() {
-        assert SearchWidgetProvider.ANIMATE_TRANSITION;
-
-        // The bounds of the home screen widget are given in window space coordinates, so they need
-        // to be converted into conrdinates that are relative from the root View.  The converted
-        // bounds are used to animate the box moving from its widget location to the location at the
-        // top of the screen.
-        int[] rootWindowLocation = new int[2];
-        mContentView.getLocationInWindow(rootWindowLocation);
-
-        final Rect sourceRect = new Rect();
-        sourceRect.left = mSearchBoxWidgetBounds.left - rootWindowLocation[0];
-        sourceRect.right = mSearchBoxWidgetBounds.right - rootWindowLocation[0];
-        sourceRect.top = mSearchBoxWidgetBounds.top - rootWindowLocation[1];
-        sourceRect.bottom = mSearchBoxWidgetBounds.bottom - rootWindowLocation[1];
-
-        int[] targetBoxLocation = new int[2];
-        mSearchBox.getLocationInWindow(targetBoxLocation);
-        final Rect targetRect = new Rect();
-        targetRect.left = targetBoxLocation[0] - rootWindowLocation[0];
-        targetRect.right = targetRect.left + mSearchBox.getMeasuredWidth();
-        targetRect.top = targetBoxLocation[1] - rootWindowLocation[1];
-        targetRect.bottom = targetRect.top + mSearchBox.getMeasuredHeight();
-
-        mScrimView.setAnimationRects(sourceRect, targetRect);
-
-        mAnimator = ValueAnimator.ofFloat(0, 1);
-        mAnimator.setDuration(ANIMATION_DURATION_MS);
-        mAnimator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                // Make the widget on the homescreen hide itself.
-                SearchWidgetProvider.updateAllWidgets();
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                // Defer loading the library until the box is in the right place to prevent jank.
-                beginLoadingLibrary();
-            }
-        });
-        mAnimator.addUpdateListener(mScrimView);
-
-        new Handler().post(new Runnable() {
-            @Override
-            public void run() {
-                mAnimator.start();
-            }
-        });
-    }
-
     private void beginLoadingLibrary() {
-        if (mIsNativeLoading) return;
-        mIsNativeLoading = true;
-
-        // Show the real search box and let the user type in it.
-        mScrimView.setInterpolatedValue(1.0f);
-        mSearchBox.setVisibility(View.VISIBLE);
         beginQuery();
         mHandler.post(new Runnable() {
             @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityFadingBackgroundView.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityFadingBackgroundView.java
new file mode 100644
index 0000000..0f210a5
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityFadingBackgroundView.java
@@ -0,0 +1,26 @@
+// 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.
+
+package org.chromium.chrome.browser.searchwidget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import org.chromium.chrome.browser.widget.FadingBackgroundView;
+
+/**
+ * The FadingBackgroundView isn't used here, but is still animated by the LocationBarLayout.
+ * This interferes with the animation we need to show the widget moving to the right place.
+ */
+public class SearchActivityFadingBackgroundView extends FadingBackgroundView {
+    public SearchActivityFadingBackgroundView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public void showFadingOverlay() {}
+
+    @Override
+    public void hideFadingOverlay(boolean fadeOut) {}
+}
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchLocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java
similarity index 81%
rename from chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchLocationBarLayout.java
rename to chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java
index 6cf4865..6d6ab8d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchLocationBarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java
@@ -12,7 +12,7 @@
 import org.chromium.chrome.browser.omnibox.LocationBarLayout;
 
 /** Implementation of the {@link LocationBarLayout} that is displayed for widget searches. */
-class SearchLocationBarLayout extends LocationBarLayout {
+public class SearchActivityLocationBarLayout extends LocationBarLayout {
     /** Delegates calls out to the containing Activity. */
     public static interface Delegate {
         /** Load a URL in the associated tab. */
@@ -24,12 +24,10 @@
 
     private Delegate mDelegate;
 
-    public SearchLocationBarLayout(Context context, AttributeSet attrs) {
+    public SearchActivityLocationBarLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
-        findViewById(R.id.google_g_container).setVisibility(View.GONE);
-
-        // TODO(dfalcantara|yusufo): Remove once upstream and the bar is inflated from XML.
-        onFinishInflate();
+        View gContainer = findViewById(R.id.google_g_container);
+        if (gContainer != null) gContainer.setVisibility(View.GONE);
     }
 
     /** Set the {@link Delegate}. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java
index 035a48a..8527aed 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java
@@ -11,14 +11,12 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
-import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v4.app.ActivityOptionsCompat;
 import android.text.TextUtils;
 import android.widget.RemoteViews;
 
-import org.chromium.base.ApplicationStatus;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 import org.chromium.base.ThreadUtils;
@@ -51,10 +49,6 @@
         }
     }
 
-    static final int INVALID_WIDGET_ID = -1;
-
-    static final boolean ANIMATE_TRANSITION = false;
-
     private static final String ACTION_START_TEXT_QUERY =
             "org.chromium.chrome.browser.searchwidget.START_TEXT_QUERY";
     private static final String ACTION_START_VOICE_QUERY =
@@ -64,11 +58,7 @@
 
     static final String EXTRA_START_VOICE_SEARCH =
             "org.chromium.chrome.browser.searchwidget.START_VOICE_SEARCH";
-    private static final String EXTRA_WIDGET_ID =
-            "org.chromium.chrome.browser.searchwidget.WIDGET_ID";
 
-    private static final String PREF_LAUNCHING_WIDGET_ID =
-            "org.chromium.chrome.browser.searchwidget.LAUNCHING_WIDGET_ID";
     private static final String PREF_SEARCH_ENGINE_SHORTNAME =
             "org.chromium.chrome.browser.searchwidget.SEARCH_ENGINE_SHORTNAME";
     static final String PREF_USE_HERB_TAB = "org.chromium.chrome.browser.searchwidget.USE_HERB_TAB";
@@ -107,10 +97,10 @@
     public void onReceive(Context context, Intent intent) {
         if (IntentHandler.isIntentChromeOrFirstParty(intent)) {
             if (ACTION_START_TEXT_QUERY.equals(intent.getAction())) {
-                startSearchActivity(context, intent, false);
+                startSearchActivity(context, false);
                 return;
             } else if (ACTION_START_VOICE_QUERY.equals(intent.getAction())) {
-                startSearchActivity(context, intent, true);
+                startSearchActivity(context, true);
                 return;
             }
         } else if (ACTION_UPDATE_ALL_WIDGETS.equals(intent.getAction())) {
@@ -120,10 +110,8 @@
         super.onReceive(context, intent);
     }
 
-    private void startSearchActivity(Context context, Intent intent, boolean startVoiceSearch) {
-        int widgetId = getLaunchingWidgetIdFromIntent(intent);
-        SearchWidgetProvider.setLaunchingWidgetId(widgetId);
-        Log.d(TAG, "Launching SearchActivity: ID=" + widgetId + " VOICE=" + startVoiceSearch);
+    private void startSearchActivity(Context context, boolean startVoiceSearch) {
+        Log.d(TAG, "Launching SearchActivity: VOICE=" + startVoiceSearch);
 
         // Launch the SearchActivity.
         Intent searchIntent = new Intent();
@@ -133,16 +121,9 @@
         searchIntent.putExtra(EXTRA_START_VOICE_SEARCH, startVoiceSearch);
 
         Bundle optionsBundle;
-        if (ANIMATE_TRANSITION) {
-            // Pass the widget's bounds along to allow moving the box into place.
-            Rect rect = intent.getSourceBounds();
-            if (rect != null) searchIntent.setSourceBounds(rect);
-            optionsBundle = ActivityOptionsCompat.makeCustomAnimation(context, 0, 0).toBundle();
-        } else {
-            optionsBundle = ActivityOptionsCompat
-                                    .makeCustomAnimation(context, R.anim.activity_open_enter, 0)
-                                    .toBundle();
-        }
+        optionsBundle =
+                ActivityOptionsCompat.makeCustomAnimation(context, R.anim.activity_open_enter, 0)
+                        .toBundle();
         context.startActivity(searchIntent, optionsBundle);
     }
 
@@ -162,12 +143,9 @@
     }
 
     private void updateWidget(Context context, int id) {
-        int launchingWidgetId = ANIMATE_TRANSITION ? getLaunchingWidgetId() : INVALID_WIDGET_ID;
-
         AppWidgetManager manager = AppWidgetManager.getInstance(context);
-        RemoteViews views = new RemoteViews(context.getPackageName(),
-                id == launchingWidgetId ? R.layout.search_widget_template_transparent
-                                        : R.layout.search_widget_template);
+        RemoteViews views =
+                new RemoteViews(context.getPackageName(), R.layout.search_widget_template);
 
         // Clicking on the widget fires an Intent back at this BroadcastReceiver, allowing control
         // over how the Activity is animated when it starts up.
@@ -239,38 +217,6 @@
                 ContextUtils.getApplicationContext(), SearchWidgetProvider.class.getName()));
     }
 
-    private int getLaunchingWidgetId() {
-        int launchingWidgetId = INVALID_WIDGET_ID;
-
-        // If the SearchActivity isn't in the foreground, the user must have exited it.
-        if (ApplicationStatus.getLastTrackedFocusedActivity() instanceof SearchActivity) {
-            launchingWidgetId = ContextUtils.getAppSharedPreferences().getInt(
-                    PREF_LAUNCHING_WIDGET_ID, INVALID_WIDGET_ID);
-        }
-
-        return launchingWidgetId;
-    }
-
-    /** Cache the ID of the widget that was used to launch the SearchActivity. */
-    static void setLaunchingWidgetId(int id) {
-        SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putInt(PREF_LAUNCHING_WIDGET_ID, id);
-        editor.apply();
-    }
-
-    /** Parse out which widget launched the Activity from the given Intent. */
-    private static int getLaunchingWidgetIdFromIntent(Intent intent) {
-        String data = intent.getData() == null ? null : intent.getData().toString();
-        if (data == null) return INVALID_WIDGET_ID;
-
-        try {
-            return Integer.parseInt(data);
-        } catch (NumberFormatException e) {
-            return INVALID_WIDGET_ID;
-        }
-    }
-
     /** Creates a trusted Intent that lets the user begin performing queries. */
     private Intent createStartQueryIntent(Context context, String action, int widgetId) {
         Intent intent = new Intent(action, Uri.parse(String.valueOf(widgetId)));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
index d3de2eb..ed0bc3c7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -94,7 +94,6 @@
 import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.crypto.CipherFactory;
 import org.chromium.content_public.browser.GestureStateListener;
-import org.chromium.content_public.browser.ImeEventObserver;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.common.BrowserControlsState;
@@ -375,6 +374,20 @@
 
     private class TabContentViewClient extends ContentViewClient {
         @Override
+        public void onImeEvent() {
+            // Some text was set in the page. Don't reuse it if a tab is
+            // open from the same external application, we might lose some
+            // user data.
+            mAppAssociatedWith = null;
+        }
+
+        @Override
+        public void onFocusedNodeEditabilityChanged(boolean editable) {
+            if (getFullscreenManager() == null) return;
+            updateFullscreenEnabledState();
+        }
+
+        @Override
         public int getSystemWindowInsetBottom() {
             ChromeActivity activity = getActivity();
             if (activity != null && activity.getInsetObserverView() != null) {
@@ -1314,22 +1327,6 @@
                 setContentViewCore(contentViewCore);
             }
 
-            mContentViewCore.addImeEventObserver(new ImeEventObserver() {
-                @Override
-                public void onImeEvent() {
-                    // Some text was set in the page. Don't reuse it if a tab is
-                    // open from the same external application, we might lose some
-                    // user data.
-                    mAppAssociatedWith = null;
-                }
-
-                @Override
-                public void onNodeAttributeUpdated(boolean editable, boolean password) {
-                    if (getFullscreenManager() == null) return;
-                    updateFullscreenEnabledState();
-                }
-            });
-
             if (!creatingWebContents && webContents.isLoadingToDifferentDocument()) {
                 didStartPageLoad(webContents.getUrl(), false);
             }
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index 33f6215f..1b3bfd3 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -2852,12 +2852,17 @@
       </message>
 
       <!-- Search Widget strings -->
-      <message name="IDS_SEARCH_WIDGET_DEFAULT" desc= "Default text for the search widget">
+      <message name="IDS_SEARCH_WIDGET_DEFAULT" desc="Default text for the search widget">
         Search
       </message>
-      <message name="IDS_SEARCH_WITH_PRODUCT" desc= "Text for search widget with a search engine name">
+      <message name="IDS_SEARCH_WITH_PRODUCT" desc="Text for search widget with a search engine name">
         Search with <ph name="PRODUCT_NAME">%1$s<ex>Google</ex></ph>
       </message>
+
+      <!-- Launcher Shortcuts -->
+      <message name="IDS_DISABLED_INCOGNITO_LAUNCHER_SHORTCUT_MESSAGE" desc="Text for a toast displayed prompting the user to remove the disabled 'New incognito tab' app shortcut and recreate it.">
+        Remove and recreate this shortcut
+      </message>
     </messages>
   </release>
 </grit>
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index 2111dae..6e587d2 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -911,10 +911,10 @@
   "java/src/org/chromium/chrome/browser/rappor/RapporServiceBridge.java",
   "java/src/org/chromium/chrome/browser/rlz/RevenueStats.java",
   "java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java",
-  "java/src/org/chromium/chrome/browser/searchwidget/BoxAnimatorScrim.java",
   "java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java",
+  "java/src/org/chromium/chrome/browser/searchwidget/SearchActivityFadingBackgroundView.java",
+  "java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java",
   "java/src/org/chromium/chrome/browser/searchwidget/SearchBoxDataProvider.java",
-  "java/src/org/chromium/chrome/browser/searchwidget/SearchLocationBarLayout.java",
   "java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java",
   "java/src/org/chromium/chrome/browser/services/AccountsChangedReceiver.java",
   "java/src/org/chromium/chrome/browser/services/AndroidEduAndChildAccountHelper.java",
@@ -1463,7 +1463,6 @@
   "javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompletePhoneTest.java",
   "javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteServerCardTest.java",
   "javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java",
-  "javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerUnitTest.java",
   "javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsUnitTest.java",
   "javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMultipleContactDetailsTest.java",
   "javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java",
@@ -1618,6 +1617,7 @@
   "junit/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterRouteTest.java",
   "junit/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterSinkObservationTest.java",
   "junit/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterTestBase.java",
+  "junit/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProviderTest.java",
   "junit/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandlerTest.java",
   "junit/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallbackTest.java",
   "junit/src/org/chromium/chrome/browser/media/router/cast/JSONTestUtils.java",
@@ -1625,6 +1625,7 @@
   "junit/src/org/chromium/chrome/browser/media/router/cast/TestUtils.java",
   "junit/src/org/chromium/chrome/browser/media/ui/MediaImageManagerTest.java",
   "junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationButtonComputationTest.java",
+  "junit/src/org/chromium/chrome/browser/metrics/VariationsSessionTest.java",
   "junit/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java",
   "junit/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java",
   "junit/src/org/chromium/chrome/browser/ntp/TitleUtilTest.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java
index 4fccac7..59551b8 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java
@@ -189,4 +189,70 @@
         Assert.assertEquals(1, mController.mBundles.size());
         Assert.assertEquals(allInvalidations, new PendingInvalidation(mController.mBundles.get(0)));
     }
+
+    @Test
+    @SmallTest
+    @Feature({"Sync", "Invalidation"})
+    @UiThreadTest
+    public void testSameObjectInvalidationsGetCombined() throws InterruptedException {
+        // First make sure there are no pending invalidations.
+        mController.clearPendingInvalidations(mContext);
+        Assert.assertFalse(mController.notifyPendingInvalidations(mContext));
+        Assert.assertFalse(mController.mInvalidated);
+
+        // Create invalidations with the same id/src, but different versions and payloads.
+        PendingInvalidation lowerVersionInv =
+                new PendingInvalidation(OBJECT_ID, OBJECT_SRC, VERSION, PAYLOAD);
+        PendingInvalidation higherVersionInv =
+                new PendingInvalidation(OBJECT_ID, OBJECT_SRC, VERSION_2, PAYLOAD_2);
+
+        // Can't invalidate while Chrome is in the background.
+        setApplicationState(ActivityState.STOPPED);
+        Assert.assertFalse(mController.shouldNotifyInvalidation(new Bundle()));
+
+        // Add multiple pending invalidations.
+        mController.addPendingInvalidation(mContext, TEST_ACCOUNT, lowerVersionInv);
+        mController.addPendingInvalidation(mContext, TEST_ACCOUNT, higherVersionInv);
+
+        // Make sure there are pending invalidations.
+        Assert.assertTrue(mController.notifyPendingInvalidations(mContext));
+        Assert.assertTrue(mController.mInvalidated);
+
+        // As Invalidation for all ids has been received, it will supersede all other invalidations.
+        Assert.assertEquals(1, mController.mBundles.size());
+        Assert.assertEquals(higherVersionInv, new PendingInvalidation(mController.mBundles.get(0)));
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"Sync", "Invalidation"})
+    @UiThreadTest
+    public void testSameObjectLowerVersionInvalidationGetsDiscarded() throws InterruptedException {
+        // First make sure there are no pending invalidations.
+        mController.clearPendingInvalidations(mContext);
+        Assert.assertFalse(mController.notifyPendingInvalidations(mContext));
+        Assert.assertFalse(mController.mInvalidated);
+
+        // Create invalidations with the same id/src, but different versions and payloads.
+        PendingInvalidation lowerVersionInv =
+                new PendingInvalidation(OBJECT_ID, OBJECT_SRC, VERSION, PAYLOAD);
+        PendingInvalidation higherVersionInv =
+                new PendingInvalidation(OBJECT_ID, OBJECT_SRC, VERSION_2, PAYLOAD_2);
+
+        // Can't invalidate while Chrome is in the background.
+        setApplicationState(ActivityState.STOPPED);
+        Assert.assertFalse(mController.shouldNotifyInvalidation(new Bundle()));
+
+        // Add multiple pending invalidations.
+        mController.addPendingInvalidation(mContext, TEST_ACCOUNT, higherVersionInv);
+        mController.addPendingInvalidation(mContext, TEST_ACCOUNT, lowerVersionInv);
+
+        // Make sure there are pending invalidations.
+        Assert.assertTrue(mController.notifyPendingInvalidations(mContext));
+        Assert.assertTrue(mController.mInvalidated);
+
+        // As Invalidation for all ids has been received, it will supersede all other invalidations.
+        Assert.assertEquals(1, mController.mBundles.size());
+        Assert.assertEquals(higherVersionInv, new PendingInvalidation(mController.mBundles.get(0)));
+    }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerUnitTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerUnitTest.java
deleted file mode 100644
index b7f8bbb..0000000
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerUnitTest.java
+++ /dev/null
@@ -1,726 +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.
-
-package org.chromium.chrome.browser.payments;
-
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.base.test.BaseJUnit4ClassRunner;
-import org.chromium.base.test.util.Feature;
-import org.chromium.chrome.test.util.ApplicationData;
-import org.chromium.components.payments.JourneyLogger;
-import org.chromium.content.browser.test.NativeLibraryTestRule;
-
-/**
- * Tests for the PaymentRequestJourneyLogger class.
- */
-@RunWith(BaseJUnit4ClassRunner.class)
-public class PaymentRequestJourneyLoggerUnitTest {
-    @Rule
-    public NativeLibraryTestRule mNativeLibraryTestRule = new NativeLibraryTestRule();
-
-    @Before
-    public void setUp() throws Exception {
-        ApplicationData.clearAppData(
-                InstrumentationRegistry.getInstrumentation().getTargetContext());
-        mNativeLibraryTestRule.loadNativeLibraryAndInitBrowserProcess();
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant does not use it and does not
-     * show the PaymentRequest to the user.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentNotCalled_NoShow() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_USER_ABORTED);
-
-        // CanMakePayment was not used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_NOT_USED));
-
-        // There should be no completion stats since PR was not shown to the user
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant does not use it and the
-     * transaction is aborted.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentNotCalled_ShowAndUserAbort() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The merchant does not query CanMakePayment, show the PaymentRequest and the user
-        // aborts it.
-        logger.setShowCalled();
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_USER_ABORTED);
-
-        // CanMakePayment was not used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_NOT_USED));
-
-        // There should be a record for an abort when CanMakePayment is not used but the PR is shown
-        // to the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant does not use it and the
-     * transaction is aborted.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentNotCalled_ShowAndOtherAbort() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The merchant does not query CanMakePayment, show the PaymentRequest and the user
-        // aborts it.
-        logger.setShowCalled();
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED);
-
-        // CanMakePayment was not used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_NOT_USED));
-
-        // There should be a record for an abort when CanMakePayment is not used but the PR is shown
-        // to the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant does not use it and the
-     * transaction is completed.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentNotCalled_ShowAndComplete() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The merchant does not query CanMakePayment, show the PaymentRequest and the user
-        // completes it.
-        logger.setShowCalled();
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_COMPLETED);
-
-        // CanMakePayment was not used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_NOT_USED));
-
-        // There should be a record for a completion when CanMakePayment is not used but the PR is
-        // shown to the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant uses it, returns false and
-     * show is not called.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentCalled_FalseAndNoShow() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user cannot make payment and the PaymentRequest is not shown.
-        logger.setCanMakePaymentValue(false);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED);
-
-        // CanMakePayment was used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-
-        // The CanMakePayment effect on show should be recorded as being false and not shown.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.EffectOnShow",
-                        JourneyLogger.CMP_SHOW_COULD_NOT_MAKE_PAYMENT_AND_DID_NOT_SHOW));
-
-        // There should be no completion stats since PR was not shown to the user.
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant uses it, returns true and
-     * show is not called.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentCalled_TrueAndNoShow() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user can make a payment but the Payment Request is not shown.
-        logger.setCanMakePaymentValue(true);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED);
-
-        // CanMakePayment was used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-
-        // The CanMakePayment effect on show should be recorded as being true and not shown.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.EffectOnShow",
-                        JourneyLogger.CMP_SHOW_COULD_MAKE_PAYMENT));
-
-        // There should be no completion stats since PR was not shown to the user.
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant uses it, returns false, show
-     * is called but the transaction is aborted by the user.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentCalled_FalseShowAndUserAbort() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user cannot make a payment. the payment request is shown but aborted.
-        logger.setShowCalled();
-        logger.setCanMakePaymentValue(false);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_USER_ABORTED);
-
-        // CanMakePayment was used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-
-        // The CanMakePayment effect on show should be recorded as being true and not shown.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.EffectOnShow",
-                        JourneyLogger.CMP_SHOW_DID_SHOW));
-
-        // There should be a record for an abort when CanMakePayment is false but the PR is shown to
-        // the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant uses it, returns false, show
-     * is called but the transaction is aborted.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentCalled_FalseShowAndOtherAbort() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user cannot make a payment. the payment request is shown but aborted.
-        logger.setShowCalled();
-        logger.setCanMakePaymentValue(false);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED);
-
-        // CanMakePayment was used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-
-        // The CanMakePayment effect on show should be recorded as being true and not shown.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.EffectOnShow",
-                        JourneyLogger.CMP_SHOW_DID_SHOW));
-
-        // There should be a record for an abort when CanMakePayment is false but the PR is shown to
-        // the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant uses it, returns false,
-     * show is called and the transaction is completed.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentCalled_FalseShowAndComplete() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user cannot make a payment. the payment request is shown and completed.
-        logger.setShowCalled();
-        logger.setCanMakePaymentValue(false);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_COMPLETED);
-
-        // CanMakePayment was used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-
-        // The CanMakePayment effect on show should be recorded as being true and not shown.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.EffectOnShow",
-                        JourneyLogger.CMP_SHOW_DID_SHOW));
-
-        // There should be a record for a completion when CanMakePayment is false and the PR is
-        // shown to the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant uses it, returns true, show
-     * is called but the transaction is aborted by the user.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentCalled_TrueShowAndUserAbort() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user cannot make a payment. the payment request is shown and completed.
-        logger.setShowCalled();
-        logger.setCanMakePaymentValue(true);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_USER_ABORTED);
-
-        // CanMakePayment was used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-
-        // The CanMakePayment effect on show should be recorded as being true and not shown.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.EffectOnShow",
-                        JourneyLogger.CMP_SHOW_DID_SHOW
-                                | JourneyLogger.CMP_SHOW_COULD_MAKE_PAYMENT));
-
-        // There should be a record for an abort when CanMakePayment is true and the PR is shown to
-        // the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant uses it, returns true, show
-     * is called but the transaction is aborted.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentCalled_TrueShowAndOtherAbort() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user cannot make a payment. the payment request is shown and completed.
-        logger.setShowCalled();
-        logger.setCanMakePaymentValue(true);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED);
-
-        // CanMakePayment was used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-
-        // The CanMakePayment effect on show should be recorded as being true and not shown.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.EffectOnShow",
-                        JourneyLogger.CMP_SHOW_DID_SHOW
-                                | JourneyLogger.CMP_SHOW_COULD_MAKE_PAYMENT));
-
-        // There should be a record for an abort when CanMakePayment is true and the PR is shown to
-        // the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-    }
-
-    /**
-     * Tests the canMakePayment stats for the case where the merchant uses it, returns true, show
-     * is called and the transaction is completed.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePaymentCalled_TrueShowAndComplete() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user cannot make a payment. the payment request is shown and completed.
-        logger.setShowCalled();
-        logger.setCanMakePaymentValue(true);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_COMPLETED);
-
-        // CanMakePayment was used.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-
-        // The CanMakePayment effect on show should be recorded as being true and not shown.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.EffectOnShow",
-                        JourneyLogger.CMP_SHOW_DID_SHOW
-                                | JourneyLogger.CMP_SHOW_COULD_MAKE_PAYMENT));
-
-        // There should be a record for a completion when CanMakePayment is true and the PR is shown
-        // to the user.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-    }
-
-    /**
-     * Tests the canMakePayment metrics are not logged if the Payment Request was done in an
-     * incognito tab.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_CanMakePayment_IncognitoTab() {
-        JourneyLogger logger = new JourneyLogger(true /* is_incognito */);
-        assertNoLogForCanMakePayment();
-
-        // The user is in an incognito tab so CanMakePayment is always true;
-        logger.setShowCalled();
-        logger.setCanMakePaymentValue(true);
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_COMPLETED);
-
-        // There should be no CanMakePayment metrics logged.
-        assertNoLogForCanMakePayment();
-    }
-
-    /**
-     * Tests that the completion status metrics based on whether the user had suggestions for all
-     * the requested sections are logged as correctly.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_SuggestionsForEverything_Completed() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-
-        // Simulate that the user had suggestions for all the requested sections.
-        logger.setNumberOfSuggestionsShown(JourneyLogger.SECTION_CREDIT_CARDS, 1);
-
-        // Simulate that the user completes the checkout.
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_COMPLETED);
-
-        // Make sure the appropriate metric was logged.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-    }
-
-    /**
-     * Tests that the completion status metrics based on whether the user had suggestions for all
-     * the requested sections are logged as correctly.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_SuggestionsForEverything_UserAborted() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-
-        // Simulate that the user had suggestions for all the requested sections.
-        logger.setNumberOfSuggestionsShown(JourneyLogger.SECTION_CREDIT_CARDS, 1);
-
-        // Simulate that the user aborts the checkout.
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_USER_ABORTED);
-
-        // Make sure the appropriate metric was logged.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-    }
-
-    /**
-     * Tests that the completion status metrics based on whether the user had suggestions for all
-     * the requested sections are logged as correctly.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_SuggestionsForEverything_OtherAborted() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-
-        // Simulate that the user had suggestions for all the requested sections.
-        logger.setNumberOfSuggestionsShown(JourneyLogger.SECTION_CREDIT_CARDS, 1);
-
-        // Simulate that the user aborts the checkout.
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED);
-
-        // Make sure the appropriate metric was logged.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-    }
-
-    /**
-     * Tests that the completion status metrics based on whether the user had suggestions for all
-     * the requested sections are logged as correctly.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_NoSuggestionsForEverything_Completed() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-
-        // Simulate that the user did not have suggestions for all the requested sections.
-        logger.setNumberOfSuggestionsShown(JourneyLogger.SECTION_CREDIT_CARDS, 0);
-
-        // Simulate that the user completes the checkout.
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_COMPLETED);
-
-        // Make sure the appropriate metric was logged.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-    }
-
-    /**
-     * Tests that the completion status metrics based on whether the user had suggestions for all
-     * the requested sections are logged as correctly.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_NoSuggestionsForEverything_UserAborted() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-
-        // Simulate that the user did not have suggestions for all the requested sections.
-        logger.setNumberOfSuggestionsShown(JourneyLogger.SECTION_CREDIT_CARDS, 0);
-
-        // Simulate that the user aborts the checkout.
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_USER_ABORTED);
-
-        // Make sure the appropriate metric was logged.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-    }
-
-    /**
-     * Tests that the completion status metrics based on whether the user had suggestions for all
-     * the requested sections are logged as correctly.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_NoSuggestionsForEverything_OtherAborted() {
-        JourneyLogger logger = new JourneyLogger(false /* is_incognito */);
-
-        // Simulate that the user did not have suggestions for all the requested sections.
-        logger.setNumberOfSuggestionsShown(JourneyLogger.SECTION_CREDIT_CARDS, 0);
-
-        // Simulate that the user aborts the checkout.
-        logger.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED);
-
-        // Make sure the appropriate metric was logged.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-
-        Assert.assertEquals(0,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_OTHER_ABORTED));
-    }
-
-    /**
-     * Tests that the metrics are logged correctly for two simultaneous Payment Requests.
-     */
-    @Test
-    @SmallTest
-    @Feature({"Payments"})
-    public void testRecordJourneyStatsHistograms_TwoPaymentRequests() {
-        JourneyLogger logger1 = new JourneyLogger(false /* is_incognito */);
-        JourneyLogger logger2 = new JourneyLogger(false /* is_incognito */);
-
-        // Make the two loggers have different data.
-        logger1.setShowCalled();
-        logger2.setShowCalled();
-
-        logger1.setCanMakePaymentValue(true);
-
-        logger1.setNumberOfSuggestionsShown(JourneyLogger.SECTION_CREDIT_CARDS, 1);
-        logger2.setNumberOfSuggestionsShown(JourneyLogger.SECTION_CREDIT_CARDS, 0);
-
-        // Simulate that the user completes one checkout and aborts the other.
-        logger1.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_COMPLETED);
-        logger2.recordJourneyStatsHistograms(JourneyLogger.COMPLETION_STATUS_USER_ABORTED);
-
-        // Make sure the appropriate metric was logged for logger1.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_USED));
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_COMPLETED));
-
-        // Make sure the appropriate metric was logged for logger2.
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.Usage",
-                        JourneyLogger.CAN_MAKE_PAYMENT_NOT_USED));
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramValueCountForTesting(
-                        "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
-                        JourneyLogger.COMPLETION_STATUS_USER_ABORTED));
-    }
-
-    /**
-     * Asserts that no histogram is logged.
-     */
-    private void assertNoLogForCanMakePayment() {
-        // Use stats.
-        for (int i = 0; i < JourneyLogger.CAN_MAKE_PAYMENT_USE_MAX; ++i) {
-            Assert.assertEquals(0,
-                    RecordHistogram.getHistogramValueCountForTesting(
-                            "PaymentRequest.CanMakePayment.Usage", i));
-        }
-
-        // Effect on show stats.
-        for (int i = 0; i < JourneyLogger.CMP_SHOW_MAX; ++i) {
-            Assert.assertEquals(0,
-                    RecordHistogram.getHistogramValueCountForTesting(
-                            "PaymentRequest.CanMakePayment.Used.EffectOnShow", i));
-        }
-
-        // Effect on completion stats.
-        for (int i = 0; i < JourneyLogger.COMPLETION_STATUS_MAX; ++i) {
-            Assert.assertEquals(0,
-                    RecordHistogram.getHistogramValueCountForTesting(
-                            "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion", i));
-            Assert.assertEquals(0,
-                    RecordHistogram.getHistogramValueCountForTesting(
-                            "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
-                            i));
-            Assert.assertEquals(0,
-                    RecordHistogram.getHistogramValueCountForTesting(
-                            "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion",
-                            i));
-        }
-    }
-}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
index 3e5b997..f964109 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
@@ -12,6 +12,7 @@
 import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_NON_DAYDREAM;
 import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_WEBVR_SUPPORTED;
 
+import android.os.Build;
 import android.support.test.filters.LargeTest;
 import android.support.test.filters.MediumTest;
 import android.support.test.filters.SmallTest;
@@ -327,7 +328,7 @@
         mockChecker.setMockReturnValue(checkerReturnValue);
         VrShellDelegate.getInstanceForTesting().overrideVrCoreVersionCheckerForTesting(mockChecker);
         String testName = "generic_webvr_page";
-        loadUrl(getHtmlTestFile(testName), 10);
+        loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
         String displayFound = "VRDisplay Found";
         String barPresent = "InfoBar present";
         if (checkerReturnValue == VrCoreVersionChecker.VR_READY) {
@@ -406,4 +407,17 @@
     public void testInfoBarNotPresentWhenVrServicesNotSupported() throws InterruptedException {
         infoBarTestHelper(VrCoreVersionChecker.VR_NOT_SUPPORTED);
     }
+
+    /**
+     * Tests that the reported WebVR capabilities match expectations on the
+     * devices the WebVR tests are run on continuously.
+     */
+    @MediumTest
+    public void testDeviceCapabilitiesMatchExpectations() throws InterruptedException {
+        String testName = "test_device_capabilities_match_expectations";
+        loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
+        assertTrue("VRDisplayFound", vrDisplayFound(mWebContents));
+        executeStepAndWait("stepCheckDeviceCapabilities('" + Build.DEVICE + "')", mWebContents);
+        endTest(mWebContents);
+    }
 }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java
index 5835abf..34fb48c 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java
@@ -86,7 +86,7 @@
         verify(mLoader).ensureInitialized();
         verify(mLoader).asyncPrefetchLibrariesToMemory();
         verify(mRunner).onSuccess();
-        verify(mVariationsSeedFetcher, never()).fetchSeed();
+        verify(mVariationsSeedFetcher, never()).fetchSeed("");
     }
 
     @Test
@@ -100,7 +100,7 @@
         Robolectric.flushForegroundThreadScheduler();
         assertTrue(mLatch.await(0, TimeUnit.SECONDS));
         verify(mRunner).onFailure();
-        verify(mVariationsSeedFetcher, never()).fetchSeed();
+        verify(mVariationsSeedFetcher, never()).fetchSeed("");
     }
 
     @Test
@@ -113,7 +113,7 @@
         verify(mLoader).ensureInitialized();
         verify(mLoader).asyncPrefetchLibrariesToMemory();
         verify(mRunner).onSuccess();
-        verify(mVariationsSeedFetcher).fetchSeed();
+        verify(mVariationsSeedFetcher).fetchSeed("");
     }
 
     // TODO(aberent) Test for allocateChildConnection. Needs refactoring of ChildProcessLauncher to
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProviderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProviderTest.java
new file mode 100644
index 0000000..04578c68
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProviderTest.java
@@ -0,0 +1,65 @@
+// 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.
+
+package org.chromium.chrome.browser.media.router.cast;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.verify;
+
+import android.support.v7.media.MediaRouter;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.media.router.ChromeMediaRouter;
+import org.chromium.chrome.browser.media.router.MediaRouteManager;
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
+import java.util.ArrayList;
+
+/**
+ * Robolectric tests for {@link CastMediaRouteProvider}.
+ */
+@RunWith(LocalRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class CastMediaRouteProviderTest {
+    private static final String SUPPORTED_SOURCE =
+            "https://google.com/cast/#__castAppId__=DEADBEEF";
+    private static final String UNSUPPORTED_SOURCE = "https://example.com";
+
+    @Test
+    @Feature({"MediaRouter"})
+    public void testStartObservingMediaSinksNoMediaRouter() {
+        ChromeMediaRouter.setAndroidMediaRouterForTest(null);
+
+        MediaRouteManager mockManager = mock(MediaRouteManager.class);
+        CastMediaRouteProvider provider = CastMediaRouteProvider.create(mockManager);
+
+        provider.startObservingMediaSinks(SUPPORTED_SOURCE);
+
+        verify(mockManager, timeout(100))
+                .onSinksReceived(
+                        eq(SUPPORTED_SOURCE), same(provider), eq(new ArrayList<MediaSink>()));
+    }
+
+    @Test
+    @Feature({"MediaRouter"})
+    public void testStartObservingMediaSinksUnsupportedSource() {
+        ChromeMediaRouter.setAndroidMediaRouterForTest(mock(MediaRouter.class));
+
+        MediaRouteManager mockManager = mock(MediaRouteManager.class);
+        CastMediaRouteProvider provider = CastMediaRouteProvider.create(mockManager);
+
+        provider.startObservingMediaSinks(UNSUPPORTED_SOURCE);
+
+        verify(mockManager, timeout(100))
+                .onSinksReceived(
+                        eq(UNSUPPORTED_SOURCE), same(provider), eq(new ArrayList<MediaSink>()));
+    }
+}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/metrics/VariationsSessionTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/metrics/VariationsSessionTest.java
new file mode 100644
index 0000000..4afaf1f6
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/metrics/VariationsSessionTest.java
@@ -0,0 +1,78 @@
+// 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.
+
+package org.chromium.chrome.browser.metrics;
+
+import android.content.Context;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.Callback;
+import org.chromium.base.ContextUtils;
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
+/**
+ * Tests for VariationsSession
+ */
+@RunWith(LocalRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class VariationsSessionTest {
+    private TestVariationsSession mSession;
+
+    private static class TestVariationsSession extends VariationsSession {
+        private Callback<String> mCallback;
+
+        @Override
+        protected void getRestrictMode(Context context, Callback<String> callback) {
+            mCallback = callback;
+        }
+
+        public void runCallback(String value) {
+            mCallback.onResult(value);
+        }
+
+        @Override
+        protected void nativeStartVariationsSession(String restrictMode) {
+            // No-op for tests.
+        }
+    }
+
+    @Before
+    public void setUp() {
+        mSession = spy(new TestVariationsSession());
+    }
+
+    @Test
+    public void testStart() {
+        mSession.start(ContextUtils.getApplicationContext());
+        verify(mSession, never()).nativeStartVariationsSession(any(String.class));
+
+        String restrictValue = "test";
+        mSession.runCallback(restrictValue);
+        verify(mSession, times(1)).nativeStartVariationsSession(restrictValue);
+    }
+
+    @Test
+    public void testGetRestrictModeValue() {
+        mSession.getRestrictModeValue(ContextUtils.getApplicationContext(), new Callback<String>() {
+            @Override
+            public void onResult(String restrictMode) {}
+        });
+        String restrictValue = "test";
+        mSession.runCallback(restrictValue);
+        verify(mSession, never()).nativeStartVariationsSession(any(String.class));
+
+        mSession.start(ContextUtils.getApplicationContext());
+        verify(mSession, times(1)).nativeStartVariationsSession(restrictValue);
+    }
+}
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index b982327f..8f7edb1 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -1926,10 +1926,16 @@
           Search or type URL
         </message>
         <message name="IDS_TOUCH_BAR_SEARCH"
-                   desc="Text for the search button in the touch bar when Google is not the default search provider. Pressing the button will bring focus to the omnibox.">
-          Search $1
+                   desc="Text for the search button in the touch bar when Google is not the default search provider. Pressing the button will bring focus to the omnibox. $1 is the name of the search provider)">
+          Search <ph name="SEARCH_ENGINE">$1<ex>Bing</ex></ph>
         </message>
 
+        <message name="IDS_TOOLTIP_TOUCH_BAR_BACK" desc="The tooltip for the touch bar back button.">
+        Touch to go back.
+        </message>
+        <message name="IDS_TOOLTIP_TOUCH_BAR_FORWARD" desc="The tooltip for the touch bar forward button.">
+        Touch to go forward.
+        </message>
       </if>
 
       <!-- Remove in-progress downloads confirmation dialog -->
@@ -12016,6 +12022,9 @@
       <message name="IDS_DEVICE_LOG_TYPE_POWER" desc="Checkbox to enable showing events of type POWER">
         Power
       </message>
+      <message name="IDS_DEVICE_LOG_TYPE_BLUETOOTH" desc="Checkbox to enable showing events of type BLUETOOTH">
+        Bluetooth
+      </message>
       <message name="IDS_DEVICE_LOG_TYPE_USB" desc="Checkbox to enable showing events of type USB">
         USB
       </message>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index d3f7c7c..5c0c273 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -2225,9 +2225,6 @@
   <message name="IDS_SETTINGS_PEOPLE_MANAGE_SUPERVISED_USERS" desc="Label for the button that opens the supervised users dashboard.">
     Manage supervised users
   </message>
-  <message name="IDS_SETTINGS_PEOPLE_MANAGE_SUPERVISED_USERS_DESCRIPTION" desc="Description for the button that opens the supervised users dashboard.">
-    Opens Supervised Users Dashboard
-  </message>
   <message name="IDS_SETTINGS_CHANGE_PICTURE_PROFILE_PHOTO" desc="The text on the Google profile photo of the user.">
     Google Profile photo
   </message>
@@ -2525,7 +2522,7 @@
     Personalize Google services
   </message>
   <message name="IDS_SETTINGS_PERSONALIZE_GOOGLE_SERVICES_TEXT" desc="Text of the personalize Google services section. When clicked, takes the user to the Google Activity Controls.">
-    Control how Google uses your browsing history to personalize Search, ads, and other Google services
+    Control how your browsing history personalizes Search, ads, and other Google services
   </message>
 
   <if expr="not chromeos">
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index b10d8287..91e464c 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2755,8 +2755,6 @@
       "android/download/intercept_download_resource_throttle.h",
       "android/download/items/offline_content_aggregator_factory_android.cc",
       "android/download/items/offline_content_aggregator_factory_android.h",
-      "android/download/mock_download_controller.cc",
-      "android/download/mock_download_controller.h",
       "android/download/ui/thumbnail_provider.cc",
       "android/download/ui/thumbnail_provider.h",
       "android/favicon_helper.cc",
@@ -4450,7 +4448,12 @@
     "//ui/gfx",
   ]
 
-  if (!is_android) {
+  if (is_android) {
+    sources += [
+      "android/download/mock_download_controller.cc",
+      "android/download/mock_download_controller.h",
+    ]
+  } else {
     sources += [
       "chooser_controller/mock_chooser_controller.cc",
       "chooser_controller/mock_chooser_controller.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index d52f73551..c2471f3 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1528,11 +1528,11 @@
     {"translate-lang-by-ulp", flag_descriptions::kTranslateLanguageByUlpName,
      flag_descriptions::kTranslateLanguageByUlpDescription, kOsAll,
      FEATURE_VALUE_TYPE(translate::kTranslateLanguageByULP)},
-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+#if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS)
     {"enable-native-notifications", flag_descriptions::kNotificationsNativeFlag,
      flag_descriptions::kNotificationsNativeFlagDescription, kOsMac | kOsLinux,
      FEATURE_VALUE_TYPE(features::kNativeNotifications)},
-#endif  // defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+#endif  // ENABLE_NATIVE_NOTIFICATIONS
 #if defined(TOOLKIT_VIEWS)
     {"disable-views-rect-based-targeting",
      flag_descriptions::kViewsRectBasedTargetingName,
@@ -2193,9 +2193,9 @@
      kOsCrOS,
      SINGLE_VALUE_TYPE(
          chromeos::switches::kDisableSystemTimezoneAutomaticDetectionPolicy)},
-    {"enable-native-cups", flag_descriptions::kEnableNativeCupsName,
-     flag_descriptions::kEnableNativeCupsDescription, kOsCrOS,
-     SINGLE_VALUE_TYPE(switches::kEnableNativeCups)},
+    {"disable-native-cups", flag_descriptions::kDisableNativeCupsName,
+     flag_descriptions::kDisableNativeCupsDescription, kOsCrOS,
+     SINGLE_VALUE_TYPE(switches::kDisableNativeCups)},
     {"enable-encryption-migration",
      flag_descriptions::kEnableEncryptionMigrationName,
      flag_descriptions::kEnableEncryptionMigrationDescription, kOsCrOS,
diff --git a/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc b/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
index f726666..c0b69b8 100644
--- a/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
+++ b/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.h"
 
+#include <utility>
+
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
 #include "base/location.h"
@@ -50,15 +52,16 @@
     base::WeakPtr<AppBannerManager> weak_manager,
     const base::string16& app_title,
     std::unique_ptr<ShortcutInfo> shortcut_info,
-    std::unique_ptr<SkBitmap> icon,
+    const SkBitmap& primary_icon,
+    const SkBitmap& badge_icon,
     int event_request_id,
     webapk::InstallSource webapk_install_source) {
   bool is_webapk = ChromeWebApkHost::CanInstallWebApk();
   const GURL url = shortcut_info->url;
   auto infobar_delegate =
       base::WrapUnique(new banners::AppBannerInfoBarDelegateAndroid(
-          weak_manager, app_title, std::move(shortcut_info), std::move(icon),
-          event_request_id, is_webapk, webapk_install_source));
+          weak_manager, app_title, std::move(shortcut_info), primary_icon,
+          badge_icon, event_request_id, is_webapk, webapk_install_source));
   auto* raw_delegate = infobar_delegate.get();
   auto infobar = base::MakeUnique<AppBannerInfoBarAndroid>(
       std::move(infobar_delegate), url, is_webapk);
@@ -85,12 +88,12 @@
     content::WebContents* web_contents,
     const base::string16& app_title,
     const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
-    std::unique_ptr<SkBitmap> icon,
+    const SkBitmap& icon,
     const std::string& native_app_package,
     const std::string& referrer,
     int event_request_id) {
   auto infobar_delegate = base::WrapUnique(new AppBannerInfoBarDelegateAndroid(
-      app_title, native_app_data, std::move(icon), native_app_package, referrer,
+      app_title, native_app_data, icon, native_app_package, referrer,
       event_request_id));
   return InfoBarService::FromWebContents(web_contents)
       ->AddInfoBar(base::MakeUnique<AppBannerInfoBarAndroid>(
@@ -207,14 +210,16 @@
     base::WeakPtr<AppBannerManager> weak_manager,
     const base::string16& app_title,
     std::unique_ptr<ShortcutInfo> shortcut_info,
-    std::unique_ptr<SkBitmap> icon,
+    const SkBitmap& primary_icon,
+    const SkBitmap& badge_icon,
     int event_request_id,
     bool is_webapk,
     webapk::InstallSource webapk_install_source)
     : weak_manager_(weak_manager),
       app_title_(app_title),
       shortcut_info_(std::move(shortcut_info)),
-      icon_(std::move(icon)),
+      primary_icon_(primary_icon),
+      badge_icon_(badge_icon),
       event_request_id_(event_request_id),
       has_user_interaction_(false),
       is_webapk_(is_webapk),
@@ -228,13 +233,13 @@
 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid(
     const base::string16& app_title,
     const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
-    std::unique_ptr<SkBitmap> icon,
+    const SkBitmap& icon,
     const std::string& native_app_package,
     const std::string& referrer,
     int event_request_id)
     : app_title_(app_title),
       native_app_data_(native_app_data),
-      icon_(std::move(icon)),
+      primary_icon_(icon),
       native_app_package_(native_app_package),
       referrer_(referrer),
       event_request_id_(event_request_id),
@@ -284,7 +289,7 @@
       web_contents, shortcut_info_->url.spec(), AppBannerSettingsHelper::WEB);
 
   ShortcutHelper::AddToLauncherWithSkBitmap(web_contents, *shortcut_info_,
-                                            *icon_.get());
+                                            primary_icon_);
 
   SendBannerAccepted();
   return true;
@@ -332,8 +337,9 @@
   WebApkInstallService::FinishCallback callback =
       base::Bind(&AppBannerInfoBarDelegateAndroid::OnWebApkInstallFinished,
                  weak_ptr_factory_.GetWeakPtr());
-  ShortcutHelper::InstallWebApkWithSkBitmap(web_contents, *shortcut_info_,
-                                            *icon_.get(), callback);
+  ShortcutHelper::InstallWebApkWithSkBitmap(
+      web_contents, *shortcut_info_, primary_icon_, badge_icon_, callback);
+
   SendBannerAccepted();
 
   // Prevent the infobar from disappearing, because the infobar will show
@@ -379,7 +385,7 @@
         InfoBarService::WebContentsFromInfoBar(infobar());
     // Add webapp shortcut to the homescreen.
     ShortcutHelper::AddToLauncherWithSkBitmap(web_contents, *shortcut_info_,
-                                              *icon_.get());
+                                              primary_icon_);
   }
 
   infobar()->RemoveSelf();
@@ -404,7 +410,7 @@
 }
 
 gfx::Image AppBannerInfoBarDelegateAndroid::GetIcon() const {
-  return gfx::Image::CreateFrom1xBitmap(*icon_.get());
+  return gfx::Image::CreateFrom1xBitmap(primary_icon_);
 }
 
 void AppBannerInfoBarDelegateAndroid::InfoBarDismissed() {
diff --git a/chrome/browser/android/banners/app_banner_infobar_delegate_android.h b/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
index d440cd45..6552a14 100644
--- a/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
+++ b/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
@@ -14,6 +14,7 @@
 #include "base/strings/string16.h"
 #include "chrome/browser/android/webapk/webapk_metrics.h"
 #include "components/infobars/core/confirm_infobar_delegate.h"
+#include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/image/image.h"
 
 namespace content {
@@ -36,14 +37,14 @@
  public:
   // Creates an infobar and delegate for promoting the installation of a web
   // app, and adds the infobar to the InfoBarManager for |web_contents|.
-  static bool Create(
-      content::WebContents* web_contents,
-      base::WeakPtr<AppBannerManager> weak_manager,
-      const base::string16& app_title,
-      std::unique_ptr<ShortcutInfo> info,
-      std::unique_ptr<SkBitmap> icon,
-      int event_request_id,
-      webapk::InstallSource webapk_install_source);
+  static bool Create(content::WebContents* web_contents,
+                     base::WeakPtr<AppBannerManager> weak_manager,
+                     const base::string16& app_title,
+                     std::unique_ptr<ShortcutInfo> info,
+                     const SkBitmap& primary_icon,
+                     const SkBitmap& badge_icon,
+                     int event_request_id,
+                     webapk::InstallSource webapk_install_source);
 
   // Creates an infobar and delegate for promoting the installation of an
   // Android app, and adds the infobar to the InfoBarManager for |web_contents|.
@@ -51,7 +52,7 @@
       content::WebContents* web_contents,
       const base::string16& app_title,
       const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
-      std::unique_ptr<SkBitmap> icon,
+      const SkBitmap& icon,
       const std::string& native_app_package,
       const std::string& referrer,
       int event_request_id);
@@ -94,7 +95,8 @@
       base::WeakPtr<AppBannerManager> weak_manager,
       const base::string16& app_title,
       std::unique_ptr<ShortcutInfo> info,
-      std::unique_ptr<SkBitmap> icon,
+      const SkBitmap& primary_icon,
+      const SkBitmap& badge_icon,
       int event_request_id,
       bool is_webapk,
       webapk::InstallSource webapk_install_source);
@@ -103,7 +105,7 @@
   AppBannerInfoBarDelegateAndroid(
       const base::string16& app_title,
       const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
-      std::unique_ptr<SkBitmap> icon,
+      const SkBitmap& icon,
       const std::string& native_app_package,
       const std::string& referrer,
       int event_request_id);
@@ -148,7 +150,8 @@
 
   base::android::ScopedJavaGlobalRef<jobject> native_app_data_;
 
-  std::unique_ptr<SkBitmap> icon_;
+  const SkBitmap primary_icon_;
+  const SkBitmap badge_icon_;
 
   std::string native_app_package_;
   std::string referrer_;
diff --git a/chrome/browser/android/banners/app_banner_manager_android.cc b/chrome/browser/android/banners/app_banner_manager_android.cc
index 81d5e0ac..2e0c8ab 100644
--- a/chrome/browser/android/banners/app_banner_manager_android.cc
+++ b/chrome/browser/android/banners/app_banner_manager_android.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/android/banners/app_banner_manager_android.h"
 
 #include <memory>
-#include <utility>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
@@ -24,7 +23,6 @@
 #include "content/public/common/frame_navigate_params.h"
 #include "jni/AppBannerManager_jni.h"
 #include "net/base/url_util.h"
-#include "third_party/skia/include/core/SkBitmap.h"
 
 using base::android::ConvertJavaStringToUTF8;
 using base::android::ConvertJavaStringToUTF16;
@@ -39,12 +37,14 @@
 std::unique_ptr<ShortcutInfo> CreateShortcutInfo(
     const GURL& manifest_url,
     const content::Manifest& manifest,
-    const GURL& icon_url) {
+    const GURL& primary_icon_url,
+    const GURL& badge_icon_url) {
   auto shortcut_info = base::MakeUnique<ShortcutInfo>(GURL());
   if (!manifest.IsEmpty()) {
     shortcut_info->UpdateFromManifest(manifest);
     shortcut_info->manifest_url = manifest_url;
-    shortcut_info->best_primary_icon_url = icon_url;
+    shortcut_info->best_primary_icon_url = primary_icon_url;
+    shortcut_info->best_badge_icon_url = badge_icon_url;
     shortcut_info->UpdateSource(ShortcutInfo::SOURCE_APP_BANNER);
   }
 
@@ -210,7 +210,7 @@
     DCHECK(!data.badge_icon_url.is_empty());
 
     badge_icon_url_ = data.badge_icon_url;
-    badge_icon_.reset(new SkBitmap(*data.badge_icon));
+    badge_icon_ = *data.badge_icon;
   }
 
   AppBannerManager::OnDidPerformInstallableCheck(data);
@@ -225,7 +225,7 @@
   if (!is_active())
     return;
 
-  primary_icon_.reset(new SkBitmap(bitmap));
+  primary_icon_ = bitmap;
   SendBannerPromptRequest();
 }
 
@@ -240,11 +240,11 @@
   DCHECK(contents);
 
   if (native_app_data_.is_null()) {
-    // TODO(zpeng): Add badge to WebAPK installation flow.
     if (AppBannerInfoBarDelegateAndroid::Create(
             contents, GetWeakPtr(), app_title_,
-            CreateShortcutInfo(manifest_url_, manifest_, primary_icon_url_),
-            std::move(primary_icon_), event_request_id(),
+            CreateShortcutInfo(manifest_url_, manifest_, primary_icon_url_,
+                               badge_icon_url_),
+            primary_icon_, badge_icon_, event_request_id(),
             webapk::INSTALL_SOURCE_BANNER)) {
       RecordDidShowBanner("AppBanner.WebApp.Shown");
       TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED);
@@ -254,7 +254,7 @@
     }
   } else {
     if (AppBannerInfoBarDelegateAndroid::Create(
-            contents, app_title_, native_app_data_, std::move(primary_icon_),
+            contents, app_title_, native_app_data_, primary_icon_,
             native_app_package_, referrer_, event_request_id())) {
       RecordDidShowBanner("AppBanner.NativeApp.Shown");
       TrackDisplayEvent(DISPLAY_EVENT_NATIVE_APP_BANNER_CREATED);
diff --git a/chrome/browser/android/banners/app_banner_manager_android.h b/chrome/browser/android/banners/app_banner_manager_android.h
index 8eaddb4..d784833 100644
--- a/chrome/browser/android/banners/app_banner_manager_android.h
+++ b/chrome/browser/android/banners/app_banner_manager_android.h
@@ -12,6 +12,7 @@
 #include "base/macros.h"
 #include "chrome/browser/banners/app_banner_manager.h"
 #include "content/public/browser/web_contents_user_data.h"
+#include "third_party/skia/include/core/SkBitmap.h"
 
 namespace banners {
 
@@ -116,7 +117,7 @@
   GURL badge_icon_url_;
 
   // The badge icon object.
-  std::unique_ptr<SkBitmap> badge_icon_;
+  SkBitmap badge_icon_;
 
   // The Java-side AppBannerManager.
   base::android::ScopedJavaGlobalRef<jobject> java_banner_manager_;
diff --git a/chrome/browser/android/devtools_manager_delegate_android.cc b/chrome/browser/android/devtools_manager_delegate_android.cc
index 96f58833..0d84421 100644
--- a/chrome/browser/android/devtools_manager_delegate_android.cc
+++ b/chrome/browser/android/devtools_manager_delegate_android.cc
@@ -186,14 +186,6 @@
       DevToolsAgentHost::kTypeOther;
 }
 
-std::string DevToolsManagerDelegateAndroid::GetTargetTitle(
-    content::RenderFrameHost* host) {
-  content::WebContents* web_contents =
-      content::WebContents::FromRenderFrameHost(host);
-  TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
-  return tab ? base::UTF16ToUTF8(tab->GetTitle()) : "";
-}
-
 bool DevToolsManagerDelegateAndroid::DiscoverTargets(
       const DevToolsAgentHost::DiscoveryCallback& callback) {
 #if defined(OS_ANDROID)
diff --git a/chrome/browser/android/devtools_manager_delegate_android.h b/chrome/browser/android/devtools_manager_delegate_android.h
index 8b9f817..4aa8d17 100644
--- a/chrome/browser/android/devtools_manager_delegate_android.h
+++ b/chrome/browser/android/devtools_manager_delegate_android.h
@@ -27,7 +27,6 @@
       content::DevToolsAgentHost* agent_host,
       base::DictionaryValue* command_dict) override;
   std::string GetTargetType(content::RenderFrameHost* host) override;
-  std::string GetTargetTitle(content::RenderFrameHost* host) override;
   bool DiscoverTargets(
       const content::DevToolsAgentHost::DiscoveryCallback& callback) override;
   scoped_refptr<content::DevToolsAgentHost> CreateNewTarget(
diff --git a/chrome/browser/android/ntp/ntp_snippets_launcher.cc b/chrome/browser/android/ntp/ntp_snippets_launcher.cc
index 819e569e..b2476800 100644
--- a/chrome/browser/android/ntp/ntp_snippets_launcher.cc
+++ b/chrome/browser/android/ntp/ntp_snippets_launcher.cc
@@ -39,6 +39,13 @@
   return Java_SnippetsLauncher_unschedule(env, java_launcher_);
 }
 
+bool NTPSnippetsLauncher::IsOnUnmeteredConnection() {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  JNIEnv* env = base::android::AttachCurrentThread();
+  return Java_SnippetsLauncher_isOnUnmeteredConnection(env, java_launcher_);
+}
+
 NTPSnippetsLauncher::NTPSnippetsLauncher() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
diff --git a/chrome/browser/android/ntp/ntp_snippets_launcher.h b/chrome/browser/android/ntp/ntp_snippets_launcher.h
index 002b6e7..7964ba8 100644
--- a/chrome/browser/android/ntp/ntp_snippets_launcher.h
+++ b/chrome/browser/android/ntp/ntp_snippets_launcher.h
@@ -22,6 +22,7 @@
   bool Schedule(base::TimeDelta period_wifi,
                 base::TimeDelta period_fallback) override;
   bool Unschedule() override;
+  bool IsOnUnmeteredConnection() override;
 
  private:
   friend struct base::LazyInstanceTraitsBase<NTPSnippetsLauncher>;
diff --git a/chrome/browser/android/search_geolocation/search_geolocation_service.cc b/chrome/browser/android/search_geolocation/search_geolocation_service.cc
index 7977997b..59f040a6 100644
--- a/chrome/browser/android/search_geolocation/search_geolocation_service.cc
+++ b/chrome/browser/android/search_geolocation/search_geolocation_service.cc
@@ -7,6 +7,7 @@
 #include "base/callback.h"
 #include "base/feature_list.h"
 #include "base/values.h"
+#include "chrome/browser/android/location_settings_impl.h"
 #include "chrome/browser/android/search_geolocation/search_geolocation_disclosure_tab_helper.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -134,7 +135,8 @@
     : profile_(profile),
       pref_service_(profile_->GetPrefs()),
       host_content_settings_map_(
-          HostContentSettingsMapFactory::GetForProfile(profile_)) {
+          HostContentSettingsMapFactory::GetForProfile(profile_)),
+      location_settings_(new LocationSettingsImpl()) {
   // This class should never be constructed in incognito.
   DCHECK(!profile_->IsOffTheRecord());
 
@@ -171,6 +173,9 @@
     return false;
   }
 
+  if (!location_settings_->HasAndroidLocationPermission())
+    return false;
+
   return true;
 }
 
@@ -319,3 +324,8 @@
   delegate_->SetDSEChangedCallback(base::Bind(
       &SearchGeolocationService::OnDSEChanged, base::Unretained(this)));
 }
+
+void SearchGeolocationService::SetLocationSettingsForTest(
+    std::unique_ptr<LocationSettings> settings) {
+  location_settings_ = std::move(settings);
+}
diff --git a/chrome/browser/android/search_geolocation/search_geolocation_service.h b/chrome/browser/android/search_geolocation/search_geolocation_service.h
index 9671179..ee2ae977 100644
--- a/chrome/browser/android/search_geolocation/search_geolocation_service.h
+++ b/chrome/browser/android/search_geolocation/search_geolocation_service.h
@@ -7,6 +7,7 @@
 
 #include "base/callback_forward.h"
 #include "base/memory/singleton.h"
+#include "chrome/browser/android/location_settings.h"
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
@@ -146,10 +147,13 @@
   void SetSearchEngineDelegateForTest(
       std::unique_ptr<SearchEngineDelegate> delegate);
 
+  void SetLocationSettingsForTest(std::unique_ptr<LocationSettings> settings);
+
   Profile* profile_;
   PrefService* pref_service_;
   HostContentSettingsMap* host_content_settings_map_;
   std::unique_ptr<SearchEngineDelegate> delegate_;
+  std::unique_ptr<LocationSettings> location_settings_;
 };
 
 #endif  // CHROME_BROWSER_ANDROID_SEARCH_GEOLOCATION_SEARCH_GEOLOCATION_SERVICE_H_
diff --git a/chrome/browser/android/search_geolocation/search_geolocation_service_unittest.cc b/chrome/browser/android/search_geolocation/search_geolocation_service_unittest.cc
index a74026e..d46864e 100644
--- a/chrome/browser/android/search_geolocation/search_geolocation_service_unittest.cc
+++ b/chrome/browser/android/search_geolocation/search_geolocation_service_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/memory/ptr_util.h"
 #include "base/test/scoped_feature_list.h"
+#include "chrome/browser/android/mock_location_settings.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
@@ -76,6 +77,12 @@
     auto test_delegate = base::MakeUnique<TestSearchEngineDelegate>();
     test_delegate_ = test_delegate.get();
     GetService()->SetSearchEngineDelegateForTest(std::move(test_delegate));
+
+    auto mock_settings = base::MakeUnique<MockLocationSettings>();
+    mock_settings->SetLocationStatus(
+        true /* has_android_location_permission */,
+        true /* is_system_location_setting_enabled */);
+    GetService()->SetLocationSettingsForTest(std::move(mock_settings));
   }
 
   void TearDown() override {
@@ -148,7 +155,8 @@
   EXPECT_TRUE(GetService()->UseDSEGeolocationSetting(ToOrigin(kGoogleURL)));
   EXPECT_FALSE(GetService()->GetDSEGeolocationSetting());
 
-  // Nothing happens if the pref is already set when the service is initialized.
+  // Nothing happens if the pref is already set when the service is
+  // initialized.
   SetContentSetting(kGoogleURL, CONTENT_SETTING_ASK);
   ReinitializeService(false /* clear_pref */);
   EXPECT_TRUE(GetService()->UseDSEGeolocationSetting(ToOrigin(kGoogleURL)));
diff --git a/chrome/browser/android/shortcut_helper.cc b/chrome/browser/android/shortcut_helper.cc
index 4016277..72b389a6b 100644
--- a/chrome/browser/android/shortcut_helper.cc
+++ b/chrome/browser/android/shortcut_helper.cc
@@ -157,10 +157,11 @@
 void ShortcutHelper::InstallWebApkWithSkBitmap(
     content::WebContents* web_contents,
     const ShortcutInfo& info,
-    const SkBitmap& icon_bitmap,
+    const SkBitmap& primary_icon_bitmap,
+    const SkBitmap& badge_icon_bitmap,
     const WebApkInstallService::FinishCallback& callback) {
   WebApkInstallService::Get(web_contents->GetBrowserContext())
-      ->InstallAsync(info, icon_bitmap, callback);
+      ->InstallAsync(info, primary_icon_bitmap, badge_icon_bitmap, callback);
   webapk::TrackGooglePlayInstallState(GooglePlayInstallState::SUPPORTED);
 }
 
diff --git a/chrome/browser/android/shortcut_helper.h b/chrome/browser/android/shortcut_helper.h
index 331c952..43755d6dd 100644
--- a/chrome/browser/android/shortcut_helper.h
+++ b/chrome/browser/android/shortcut_helper.h
@@ -33,18 +33,17 @@
   static bool RegisterShortcutHelper(JNIEnv* env);
 
   // Adds a shortcut to the launcher using a SkBitmap. The type of shortcut
-  // added depends on the properties in |info|. Calls one of
-  // InstallWebApkInBackgroundWithSkBitmap, AddWebappInBackgroundWithSkBitmap,
-  // or AddShortcutInBackgroundWithSkBitmap.
+  // added depends on the properties in |info|.
   static void AddToLauncherWithSkBitmap(content::WebContents* web_contents,
                                         const ShortcutInfo& info,
                                         const SkBitmap& icon_bitmap);
 
   // Installs WebAPK and adds shortcut to the launcher.
   static void InstallWebApkWithSkBitmap(
-      content::WebContents* web_conetnts,
+      content::WebContents* web_contents,
       const ShortcutInfo& info,
-      const SkBitmap& icon_bitmap,
+      const SkBitmap& primary_icon_bitmap,
+      const SkBitmap& badge_icon_bitmap,
       const WebApkInstallService::FinishCallback& callback);
 
   // Shows toast notifying user that a WebAPK install is already in progress
@@ -70,8 +69,8 @@
 
   // Fetches the splash screen image and stores it inside the WebappDataStorage
   // of the webapp. The WebappDataStorage object *must* have been previously
-  // created by |AddShortcutInBackgroundWithSkBitmap|; this method should be
-  // passed as a closure to that method.
+  // created by AddToLauncherWithSkBitmap(); this method should be passed as a
+  // closure to that method.
   static void FetchSplashScreenImage(content::WebContents* web_contents,
                                      const GURL& image_url,
                                      const int ideal_splash_image_size_in_px,
diff --git a/chrome/browser/android/webapk/webapk_install_service.cc b/chrome/browser/android/webapk/webapk_install_service.cc
index 4319c03..49c7b5d 100644
--- a/chrome/browser/android/webapk/webapk_install_service.cc
+++ b/chrome/browser/android/webapk/webapk_install_service.cc
@@ -27,14 +27,15 @@
 }
 
 void WebApkInstallService::InstallAsync(const ShortcutInfo& shortcut_info,
-                                        const SkBitmap& shortcut_icon,
+                                        const SkBitmap& primary_icon,
+                                        const SkBitmap& badge_icon,
                                         const FinishCallback& finish_callback) {
   DCHECK(!IsInstallInProgress(shortcut_info.manifest_url));
 
   installs_.insert(shortcut_info.manifest_url);
 
   WebApkInstaller::InstallAsync(
-      browser_context_, shortcut_info, shortcut_icon,
+      browser_context_, shortcut_info, primary_icon, badge_icon,
       base::Bind(&WebApkInstallService::OnFinishedInstall,
                  weak_ptr_factory_.GetWeakPtr(), shortcut_info.manifest_url,
                  finish_callback));
diff --git a/chrome/browser/android/webapk/webapk_install_service.h b/chrome/browser/android/webapk/webapk_install_service.h
index 5e5a0f4..5914698 100644
--- a/chrome/browser/android/webapk/webapk_install_service.h
+++ b/chrome/browser/android/webapk/webapk_install_service.h
@@ -58,7 +58,8 @@
   // Google Play to install the downloaded WebAPK. Calls |callback| once the
   // install completed or failed.
   void InstallAsync(const ShortcutInfo& shortcut_info,
-                    const SkBitmap& shortcut_icon,
+                    const SkBitmap& primary_icon,
+                    const SkBitmap& badge_icon,
                     const FinishCallback& finish_callback);
 
   // Talks to the Chrome WebAPK server to update a WebAPK on the server and to
diff --git a/chrome/browser/android/webapk/webapk_installer.cc b/chrome/browser/android/webapk/webapk_installer.cc
index 8e1d019..0f13ea69 100644
--- a/chrome/browser/android/webapk/webapk_installer.cc
+++ b/chrome/browser/android/webapk/webapk_installer.cc
@@ -98,11 +98,19 @@
 #endif
 }
 
+// Populates the webapk::Image::image_data field of |image| with |icon|.
+void SetImageData(webapk::Image* image, const SkBitmap& icon) {
+  std::vector<unsigned char> png_bytes;
+  gfx::PNGCodec::EncodeBGRASkBitmap(icon, false, &png_bytes);
+  image->set_image_data(&png_bytes.front(), png_bytes.size());
+}
+
 // Populates webapk::WebApk and returns it.
 // Must be called on a worker thread because it encodes an SkBitmap.
 std::unique_ptr<webapk::WebApk> BuildWebApkProtoInBackground(
     const ShortcutInfo& shortcut_info,
-    const SkBitmap& shortcut_icon,
+    const SkBitmap& primary_icon,
+    const SkBitmap& badge_icon,
     const std::map<std::string, std::string>& icon_url_to_murmur2_hash,
     bool is_manifest_stale) {
   DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
@@ -130,21 +138,32 @@
   std::string* scope = web_app_manifest->add_scopes();
   scope->assign(GetScope(shortcut_info).spec());
 
-  webapk::Image* best_image = web_app_manifest->add_icons();
-  std::string best_primary_icon_url =
-      shortcut_info.best_primary_icon_url.spec();
-  best_image->set_src(best_primary_icon_url);
-  auto it = icon_url_to_murmur2_hash.find(best_primary_icon_url);
-  if (it != icon_url_to_murmur2_hash.end())
-    best_image->set_hash(it->second);
-  std::vector<unsigned char> png_bytes;
-  gfx::PNGCodec::EncodeBGRASkBitmap(shortcut_icon, false, &png_bytes);
-  best_image->set_image_data(&png_bytes.front(), png_bytes.size());
+  if (shortcut_info.best_primary_icon_url.is_empty()) {
+    // Update when web manifest is no longer available.
+    webapk::Image* best_primary_icon_image = web_app_manifest->add_icons();
+    SetImageData(best_primary_icon_image, primary_icon);
+    best_primary_icon_image->add_usages(webapk::Image::PRIMARY_ICON);
+
+    if (!badge_icon.drawsNothing()) {
+      webapk::Image* best_badge_icon_image = web_app_manifest->add_icons();
+      SetImageData(best_badge_icon_image, badge_icon);
+      best_badge_icon_image->add_usages(webapk::Image::BADGE_ICON);
+    }
+  }
 
   for (const auto& entry : icon_url_to_murmur2_hash) {
-    if (entry.first == shortcut_info.best_primary_icon_url.spec())
-      continue;
     webapk::Image* image = web_app_manifest->add_icons();
+    if (entry.first == shortcut_info.best_primary_icon_url.spec()) {
+      SetImageData(image, primary_icon);
+      image->add_usages(webapk::Image::PRIMARY_ICON);
+    }
+    if (entry.first == shortcut_info.best_badge_icon_url.spec()) {
+      if (shortcut_info.best_badge_icon_url !=
+          shortcut_info.best_primary_icon_url) {
+        SetImageData(image, badge_icon);
+      }
+      image->add_usages(webapk::Image::BADGE_ICON);
+    }
     image->set_src(entry.first);
     image->set_hash(entry.second);
   }
@@ -177,11 +196,12 @@
 // static
 void WebApkInstaller::InstallAsync(content::BrowserContext* context,
                                    const ShortcutInfo& shortcut_info,
-                                   const SkBitmap& shortcut_icon,
+                                   const SkBitmap& primary_icon,
+                                   const SkBitmap& badge_icon,
                                    const FinishCallback& finish_callback) {
   // The installer will delete itself when it is done.
   WebApkInstaller* installer =
-      new WebApkInstaller(context, shortcut_info, shortcut_icon);
+      new WebApkInstaller(context, shortcut_info, primary_icon, badge_icon);
   installer->InstallAsync(finish_callback);
 }
 
@@ -189,15 +209,15 @@
 void WebApkInstaller::UpdateAsync(
     content::BrowserContext* context,
     const ShortcutInfo& shortcut_info,
-    const SkBitmap& shortcut_icon,
+    const SkBitmap& primary_icon,
     const std::string& webapk_package,
     int webapk_version,
     const std::map<std::string, std::string>& icon_url_to_murmur2_hash,
     bool is_manifest_stale,
     const FinishCallback& finish_callback) {
   // The installer will delete itself when it is done.
-  WebApkInstaller* installer =
-      new WebApkInstaller(context, shortcut_info, shortcut_icon);
+  WebApkInstaller* installer = new WebApkInstaller(
+      context, shortcut_info, primary_icon, SkBitmap());
   installer->UpdateAsync(webapk_package, webapk_version,
                          icon_url_to_murmur2_hash, is_manifest_stale,
                          finish_callback);
@@ -240,8 +260,8 @@
     bool is_manifest_stale) {
   base::PostTaskAndReplyWithResult(
       GetBackgroundTaskRunner().get(), FROM_HERE,
-      base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, shortcut_icon_,
-                 icon_url_to_murmur2_hash, is_manifest_stale),
+      base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, primary_icon_,
+                 badge_icon_, icon_url_to_murmur2_hash, is_manifest_stale),
       base::Bind(&OnWebApkProtoBuilt, callback));
 }
 
@@ -299,11 +319,13 @@
 
 WebApkInstaller::WebApkInstaller(content::BrowserContext* browser_context,
                                  const ShortcutInfo& shortcut_info,
-                                 const SkBitmap& shortcut_icon)
+                                 const SkBitmap& primary_icon,
+                                 const SkBitmap& badge_icon)
     : request_context_getter_(
           Profile::FromBrowserContext(browser_context)->GetRequestContext()),
       shortcut_info_(shortcut_info),
-      shortcut_icon_(shortcut_icon),
+      primary_icon_(primary_icon),
+      badge_icon_(badge_icon),
       server_url_(GetServerUrl()),
       webapk_server_timeout_ms_(kWebApkDownloadUrlTimeoutMs),
       relax_updates_(false),
@@ -334,7 +356,7 @@
   // should be fast because the icon should be in the HTTP cache.
   WebApkIconHasher::DownloadAndComputeMurmur2Hash(
       request_context_getter_, shortcut_info_.best_primary_icon_url,
-      base::Bind(&WebApkInstaller::OnGotIconMurmur2Hash,
+      base::Bind(&WebApkInstaller::OnGotPrimaryIconMurmur2Hash,
                  weak_ptr_factory_.GetWeakPtr()));
 }
 
@@ -350,8 +372,8 @@
 
   base::PostTaskAndReplyWithResult(
       GetBackgroundTaskRunner().get(), FROM_HERE,
-      base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, shortcut_icon_,
-                 icon_url_to_murmur2_hash, is_manifest_stale),
+      base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, primary_icon_,
+                 badge_icon_, icon_url_to_murmur2_hash, is_manifest_stale),
       base::Bind(&WebApkInstaller::SendUpdateWebApkRequest,
                  weak_ptr_factory_.GetWeakPtr(), webapk_version));
 }
@@ -402,26 +424,52 @@
   InstallOrUpdateWebApk(response->package_name(), version, response->token());
 }
 
-void WebApkInstaller::OnGotIconMurmur2Hash(
-    const std::string& icon_murmur2_hash) {
-  // An empty hash indicates that |icon_hasher_| encountered an error.
-  if (icon_murmur2_hash.empty()) {
+void WebApkInstaller::OnGotPrimaryIconMurmur2Hash(
+    const std::string& primary_icon_hash) {
+  // An empty hash indicates an error during hash calculation.
+  if (primary_icon_hash.empty()) {
     OnResult(WebApkInstallResult::FAILURE);
     return;
   }
 
+  if (!shortcut_info_.best_badge_icon_url.is_empty() &&
+      shortcut_info_.best_badge_icon_url !=
+          shortcut_info_.best_primary_icon_url) {
+    WebApkIconHasher::DownloadAndComputeMurmur2Hash(
+        request_context_getter_, shortcut_info_.best_badge_icon_url,
+        base::Bind(&WebApkInstaller::OnGotBadgeIconMurmur2Hash,
+                   weak_ptr_factory_.GetWeakPtr(), true, primary_icon_hash));
+  } else {
+    OnGotBadgeIconMurmur2Hash(false, primary_icon_hash, "");
+  }
+}
+
+void WebApkInstaller::OnGotBadgeIconMurmur2Hash(
+    bool did_fetch_badge_icon,
+    const std::string& primary_icon_hash,
+    const std::string& badge_icon_hash) {
+  // An empty hash indicates an error during hash calculation.
+  if (did_fetch_badge_icon && badge_icon_hash.empty()) {
+    OnResult(WebApkInstallResult::FAILURE);
+    return;
+  }
+
+  // Maps icon URLs to Murmur2 hashes.
   std::map<std::string, std::string> icon_url_to_murmur2_hash;
   for (const std::string& icon_url : shortcut_info_.icon_urls) {
-    if (icon_url != shortcut_info_.best_primary_icon_url.spec())
-      icon_url_to_murmur2_hash[icon_url] = "";
+    if (icon_url == shortcut_info_.best_primary_icon_url.spec())
+      icon_url_to_murmur2_hash[icon_url] = primary_icon_hash;
+    else if (icon_url == shortcut_info_.best_badge_icon_url.spec())
+      icon_url_to_murmur2_hash[icon_url] = badge_icon_hash;
     else
-      icon_url_to_murmur2_hash[icon_url] = icon_murmur2_hash;
+      icon_url_to_murmur2_hash[icon_url] = "";
   }
 
   base::PostTaskAndReplyWithResult(
       GetBackgroundTaskRunner().get(), FROM_HERE,
-      base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, shortcut_icon_,
-                 icon_url_to_murmur2_hash, false /* is_manifest_stale */),
+      base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, primary_icon_,
+                 badge_icon_, icon_url_to_murmur2_hash,
+                 false /* is_manifest_stale */),
       base::Bind(&WebApkInstaller::SendCreateWebApkRequest,
                  weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/chrome/browser/android/webapk/webapk_installer.h b/chrome/browser/android/webapk/webapk_installer.h
index be39742..1b7cd4e 100644
--- a/chrome/browser/android/webapk/webapk_installer.h
+++ b/chrome/browser/android/webapk/webapk_installer.h
@@ -46,16 +46,18 @@
   // APK to be installed. Calls |callback| once the install completed or failed.
   static void InstallAsync(content::BrowserContext* context,
                            const ShortcutInfo& shortcut_info,
-                           const SkBitmap& shortcut_icon,
+                           const SkBitmap& primary_icon,
+                           const SkBitmap& badge_icon,
                            const FinishCallback& finish_callback);
 
+  // TODO(zpeng): Add badge icon to WebAPK update route.
   // Creates a self-owned WebApkInstaller instance and talks to the Chrome
   // WebAPK server to update a WebAPK on the server and locally requests the
   // APK to be installed. Calls |callback| once the install completed or failed.
   static void UpdateAsync(
       content::BrowserContext* context,
       const ShortcutInfo& shortcut_info,
-      const SkBitmap& shortcut_icon,
+      const SkBitmap& primary_icon,
       const std::string& webapk_package,
       int webapk_version,
       const std::map<std::string, std::string>& icon_url_to_murmur2_hash,
@@ -98,7 +100,8 @@
  protected:
   WebApkInstaller(content::BrowserContext* browser_context,
                   const ShortcutInfo& shortcut_info,
-                  const SkBitmap& shortcut_icon);
+                  const SkBitmap& primary_icon,
+                  const SkBitmap& badge_icon);
 
   // Returns whether the device supports installing WebAPKs.
   virtual bool CanInstallWebApks();
@@ -140,8 +143,15 @@
   // net::URLFetcherDelegate:
   void OnURLFetchComplete(const net::URLFetcher* source) override;
 
-  // Called with the computed Murmur2 hash for the app icon.
-  void OnGotIconMurmur2Hash(const std::string& icon_murmur2_hash);
+  // Called with the computed Murmur2 hash for the primary icon.
+  void OnGotPrimaryIconMurmur2Hash(const std::string& primary_icon_hash);
+
+  // Called with the computed Murmur2 hash for the badge icon, and
+  // |did_fetch_badge_icon| to indicate whether there was an attempt to fetch
+  // badge icon.
+  void OnGotBadgeIconMurmur2Hash(bool did_fetch_badge_icon,
+                                 const std::string& primary_icon_hash,
+                                 const std::string& badge_icon_hash);
 
   // Sends request to WebAPK server to create WebAPK. During a successful
   // request the WebAPK server responds with the URL of the generated WebAPK.
@@ -178,8 +188,11 @@
   // Web Manifest info.
   const ShortcutInfo shortcut_info_;
 
-  // WebAPK app icon.
-  const SkBitmap shortcut_icon_;
+  // WebAPK primary icon.
+  const SkBitmap primary_icon_;
+
+  // WebAPK badge icon.
+  const SkBitmap badge_icon_;
 
   // WebAPK server URL.
   GURL server_url_;
diff --git a/chrome/browser/android/webapk/webapk_installer_unittest.cc b/chrome/browser/android/webapk/webapk_installer_unittest.cc
index cad8103..bd885d49 100644
--- a/chrome/browser/android/webapk/webapk_installer_unittest.cc
+++ b/chrome/browser/android/webapk/webapk_installer_unittest.cc
@@ -28,6 +28,7 @@
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
 #include "net/url_request/url_request_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "url/gurl.h"
@@ -40,10 +41,11 @@
 // URL of mock WebAPK server.
 const char* kServerUrl = "/webapkserver/";
 
-// The best primary icon URL from Web Manifest. We use a random file in the test
+// The URLs of best icons from Web Manifest. We use a random file in the test
 // data directory. Since WebApkInstaller does not try to decode the file as an
 // image it is OK that the file is not an image.
 const char* kBestPrimaryIconUrl = "/simple.html";
+const char* kBestBadgeIconUrl = "/nostore.html";
 
 // URL of file to download from the WebAPK server. We use a random file in the
 // test data directory.
@@ -61,9 +63,13 @@
  public:
   TestWebApkInstaller(content::BrowserContext* browser_context,
                       const ShortcutInfo& shortcut_info,
-                      const SkBitmap& shortcut_icon,
+                      const SkBitmap& primary_icon,
+                      const SkBitmap& badge_icon,
                       bool can_install_webapks)
-      : WebApkInstaller(browser_context, shortcut_info, shortcut_icon),
+      : WebApkInstaller(browser_context,
+                        shortcut_info,
+                        primary_icon,
+                        badge_icon),
         can_install_webapks_(can_install_webapks) {}
 
   bool CanInstallWebApks() override { return can_install_webapks_; }
@@ -93,9 +99,11 @@
 class WebApkInstallerRunner {
  public:
   WebApkInstallerRunner(content::BrowserContext* browser_context,
-                        const GURL& best_primary_icon_url)
+                        const GURL& best_primary_icon_url,
+                        const GURL& best_badge_icon_url)
       : browser_context_(browser_context),
         best_primary_icon_url_(best_primary_icon_url),
+        best_badge_icon_url_(best_badge_icon_url),
         can_install_webapks_(true) {}
 
   ~WebApkInstallerRunner() {}
@@ -115,7 +123,8 @@
     const int kWebApkVersion = 1;
 
     std::map<std::string, std::string> icon_url_to_murmur2_hash{
-        {best_primary_icon_url_.spec(), "0"}};
+        {best_primary_icon_url_.spec(), "0"},
+        {best_badge_icon_url_.spec(), "0"}};
 
     WebApkInstaller::UpdateAsyncForTesting(
         CreateWebApkInstaller(), kDownloadedWebApkPackageName, kWebApkVersion,
@@ -128,10 +137,11 @@
   WebApkInstaller* CreateWebApkInstaller() {
     ShortcutInfo info(GURL::EmptyGURL());
     info.best_primary_icon_url = best_primary_icon_url_;
+    info.best_badge_icon_url = best_badge_icon_url_;
 
     // WebApkInstaller owns itself.
     WebApkInstaller* installer = new TestWebApkInstaller(
-        browser_context_, info, SkBitmap(), can_install_webapks_);
+        browser_context_, info, SkBitmap(), SkBitmap(), can_install_webapks_);
     installer->SetTimeoutMs(100);
     return installer;
   }
@@ -154,8 +164,9 @@
 
   content::BrowserContext* browser_context_;
 
-  // The Web Manifest's icon URL.
+  // The Web Manifest's icon URLs.
   const GURL best_primary_icon_url_;
+  const GURL best_badge_icon_url_;
 
   // Called after the installation process has succeeded or failed.
   base::Closure on_completed_callback_;
@@ -197,14 +208,16 @@
 
   void BuildSync(
       const GURL& best_primary_icon_url,
+      const GURL& best_badge_icon_url,
       const std::map<std::string, std::string>& icon_url_to_murmur2_hash,
       bool is_manifest_stale) {
     ShortcutInfo info(GURL::EmptyGURL());
     info.best_primary_icon_url = best_primary_icon_url;
+    info.best_badge_icon_url = best_badge_icon_url;
 
     // WebApkInstaller owns itself.
-    WebApkInstaller* installer =
-        new TestWebApkInstaller(browser_context_, info, SkBitmap(), false);
+    WebApkInstaller* installer = new TestWebApkInstaller(
+        browser_context_, info, SkBitmap(), SkBitmap(), false);
     installer->BuildWebApkProtoInBackgroundForTesting(
         base::Bind(&BuildProtoRunner::OnBuiltWebApkProto,
                    base::Unretained(this)),
@@ -267,6 +280,11 @@
     best_primary_icon_url_ = best_primary_icon_url;
   }
 
+  // Sets the best Web Manifest's badge icon URL.
+  void SetBestBadgeIconUrl(const GURL& best_badge_icon_url) {
+    best_badge_icon_url_ = best_badge_icon_url;
+  }
+
   // Sets the URL to send the webapk::CreateWebApkRequest to. WebApkInstaller
   // should fail if the URL is not |kServerUrl|.
   void SetWebApkServerUrl(const GURL& server_url) {
@@ -281,8 +299,8 @@
   }
 
   std::unique_ptr<WebApkInstallerRunner> CreateWebApkInstallerRunner() {
-    return std::unique_ptr<WebApkInstallerRunner>(
-        new WebApkInstallerRunner(profile_.get(), best_primary_icon_url_));
+    return std::unique_ptr<WebApkInstallerRunner>(new WebApkInstallerRunner(
+        profile_.get(), best_primary_icon_url_, best_badge_icon_url_));
   }
 
   std::unique_ptr<BuildProtoRunner> CreateBuildProtoRunner() {
@@ -295,13 +313,11 @@
  private:
   // Sets default configuration for running WebApkInstaller.
   void SetDefaults() {
-    GURL best_primary_icon_url = test_server_.GetURL(kBestPrimaryIconUrl);
-    SetBestPrimaryIconUrl(best_primary_icon_url);
-    GURL server_url = test_server_.GetURL(kServerUrl);
-    SetWebApkServerUrl(server_url);
-    GURL download_url = test_server_.GetURL(kDownloadUrl);
-    SetWebApkResponseBuilder(
-        base::Bind(&BuildValidWebApkResponse, download_url));
+    SetBestPrimaryIconUrl(test_server_.GetURL(kBestPrimaryIconUrl));
+    SetBestBadgeIconUrl(test_server_.GetURL(kBestBadgeIconUrl));
+    SetWebApkServerUrl(test_server_.GetURL(kServerUrl));
+    SetWebApkResponseBuilder(base::Bind(&BuildValidWebApkResponse,
+                                        test_server_.GetURL(kDownloadUrl)));
   }
 
   std::unique_ptr<net::test_server::HttpResponse> HandleWebApkRequest(
@@ -315,8 +331,9 @@
   content::TestBrowserThreadBundle thread_bundle_;
   net::EmbeddedTestServer test_server_;
 
-  // Web Manifest's icon URL.
+  // Web Manifest's icon URLs.
   GURL best_primary_icon_url_;
+  GURL best_badge_icon_url_;
 
   // Builds response to the WebAPK creation request.
   WebApkResponseBuilder webapk_response_builder_;
@@ -335,8 +352,18 @@
 // URL times out. In a perfect world the fetch would never time out because the
 // bitmap at the best primary icon URL should be in the HTTP cache.
 TEST_F(WebApkInstallerTest, BestPrimaryIconUrlDownloadTimesOut) {
-  GURL best_primary_icon_url = test_server()->GetURL("/slow?1000");
-  SetBestPrimaryIconUrl(best_primary_icon_url);
+  SetBestPrimaryIconUrl(test_server()->GetURL("/slow?1000"));
+
+  std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner();
+  runner->RunInstallWebApk();
+  EXPECT_EQ(WebApkInstallResult::FAILURE, runner->result());
+}
+
+// Test that installation fails if fetching the bitmap at the best badge icon
+// URL times out. In a perfect world the fetch would never time out because the
+// bitmap at the best badge icon URL should be in the HTTP cache.
+TEST_F(WebApkInstallerTest, BestBadgeIconUrlDownloadTimesOut) {
+  SetBestBadgeIconUrl(test_server()->GetURL("/slow?1000"));
 
   std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner();
   runner->RunInstallWebApk();
@@ -345,8 +372,7 @@
 
 // Test that installation fails if the WebAPK creation request times out.
 TEST_F(WebApkInstallerTest, CreateWebApkRequestTimesOut) {
-  GURL server_url = test_server()->GetURL("/slow?1000");
-  SetWebApkServerUrl(server_url);
+  SetWebApkServerUrl(test_server()->GetURL("/slow?1000"));
 
   std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner();
   runner->RunInstallWebApk();
@@ -403,16 +429,14 @@
 // |best_primary_icon_url| is used to build a WebApk update request. Tests the
 // request can be built properly.
 TEST_F(WebApkInstallerTest, BuildWebApkProtoWhenManifestIsObsolete) {
-  GURL icon_url_1 = test_server()->GetURL("/icon1.png");
-  GURL icon_url_2 = test_server()->GetURL("/icon2.png");
-  std::string icon_murmur2_hash_1 = "1";
-  std::string icon_murmur2_hash_2 = "2";
+  std::string icon_url_1 = test_server()->GetURL("/icon1.png").spec();
+  std::string icon_url_2 = test_server()->GetURL("/icon2.png").spec();
   std::map<std::string, std::string> icon_url_to_murmur2_hash;
-  icon_url_to_murmur2_hash[icon_url_1.spec()] = icon_murmur2_hash_1;
-  icon_url_to_murmur2_hash[icon_url_2.spec()] = icon_murmur2_hash_2;
+  icon_url_to_murmur2_hash[icon_url_1] = "1";
+  icon_url_to_murmur2_hash[icon_url_2] = "2";
 
   std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner();
-  runner->BuildSync(GURL(""), icon_url_to_murmur2_hash,
+  runner->BuildSync(GURL(), GURL(), icon_url_to_murmur2_hash,
                     true /* is_manifest_stale*/);
   webapk::WebApk* webapk_request = runner->GetWebApkRequest();
   ASSERT_NE(nullptr, webapk_request);
@@ -428,30 +452,75 @@
   EXPECT_FALSE(icons[0].has_hash());
   EXPECT_TRUE(icons[0].has_image_data());
 
-  EXPECT_EQ(icon_url_1.spec(), icons[1].src());
-  EXPECT_EQ(icon_murmur2_hash_1, icons[1].hash());
+  EXPECT_EQ(icon_url_1, icons[1].src());
+  EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_1], icons[1].hash());
   EXPECT_FALSE(icons[1].has_image_data());
 
-  EXPECT_EQ(icon_url_2.spec(), icons[2].src());
-  EXPECT_EQ(icon_murmur2_hash_2, icons[2].hash());
+  EXPECT_EQ(icon_url_2, icons[2].src());
+  EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_2], icons[2].hash());
   EXPECT_FALSE(icons[2].has_image_data());
 }
 
 // Tests a WebApk install or update request is built properly when the Chrome
 // knows the best icon URL of a site after fetching its Web Manifest.
 TEST_F(WebApkInstallerTest, BuildWebApkProtoWhenManifestIsAvailable) {
-  GURL icon_url_1 = test_server()->GetURL("/icon.png");
-  GURL best_primary_icon_url = test_server()->GetURL(kBestPrimaryIconUrl);
-  std::string icon_murmur2_hash_1 = "1";
-  std::string best_primary_icon_murmur2_hash = "0";
+  std::string icon_url_1 = test_server()->GetURL("/icon.png").spec();
+  std::string best_primary_icon_url =
+      test_server()->GetURL(kBestPrimaryIconUrl).spec();
+  std::string best_badge_icon_url =
+      test_server()->GetURL(kBestBadgeIconUrl).spec();
   std::map<std::string, std::string> icon_url_to_murmur2_hash;
-  icon_url_to_murmur2_hash[icon_url_1.spec()] = icon_murmur2_hash_1;
-  icon_url_to_murmur2_hash[best_primary_icon_url.spec()] =
-      best_primary_icon_murmur2_hash;
+  icon_url_to_murmur2_hash[icon_url_1] = "0";
+  icon_url_to_murmur2_hash[best_primary_icon_url] = "1";
+  icon_url_to_murmur2_hash[best_badge_icon_url] = "2";
 
   std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner();
-  runner->BuildSync(best_primary_icon_url, icon_url_to_murmur2_hash,
-                    false /* is_manifest_stale*/);
+  runner->BuildSync(GURL(best_primary_icon_url), GURL(best_badge_icon_url),
+                    icon_url_to_murmur2_hash, false /* is_manifest_stale*/);
+  webapk::WebApk* webapk_request = runner->GetWebApkRequest();
+  ASSERT_NE(nullptr, webapk_request);
+
+  webapk::WebAppManifest manifest = webapk_request->manifest();
+  ASSERT_EQ(3, manifest.icons_size());
+
+  webapk::Image icons[3];
+  for (int i = 0; i < 3; ++i)
+    icons[i] = manifest.icons(i);
+
+  // Check protobuf fields for /icon.png.
+  EXPECT_EQ(icon_url_1, icons[0].src());
+  EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_1], icons[0].hash());
+  EXPECT_EQ(0, icons[0].usages_size());
+  EXPECT_FALSE(icons[0].has_image_data());
+
+  // Check protobuf fields for kBestBadgeIconUrl.
+  EXPECT_EQ(best_badge_icon_url, icons[1].src());
+  EXPECT_EQ(icon_url_to_murmur2_hash[best_badge_icon_url], icons[1].hash());
+  EXPECT_THAT(icons[1].usages(),
+              testing::ElementsAre(webapk::Image::BADGE_ICON));
+  EXPECT_TRUE(icons[1].has_image_data());
+
+  // Check protobuf fields for kBestPrimaryIconUrl.
+  EXPECT_EQ(best_primary_icon_url, icons[2].src());
+  EXPECT_EQ(icon_url_to_murmur2_hash[best_primary_icon_url], icons[2].hash());
+  EXPECT_THAT(icons[2].usages(),
+              testing::ElementsAre(webapk::Image::PRIMARY_ICON));
+  EXPECT_TRUE(icons[2].has_image_data());
+}
+
+// Tests a WebApk install or update request is built properly when the Chrome
+// knows the best icon URL of a site after fetching its Web Manifest, and
+// primary icon and badge icon share the same URL.
+TEST_F(WebApkInstallerTest, BuildWebApkProtoPrimaryIconAndBadgeIconSameUrl) {
+  std::string icon_url_1 = test_server()->GetURL("/icon.png").spec();
+  std::string best_icon_url = test_server()->GetURL(kBestPrimaryIconUrl).spec();
+  std::map<std::string, std::string> icon_url_to_murmur2_hash;
+  icon_url_to_murmur2_hash[icon_url_1] = "1";
+  icon_url_to_murmur2_hash[best_icon_url] = "0";
+
+  std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner();
+  runner->BuildSync(GURL(best_icon_url), GURL(best_icon_url),
+                    icon_url_to_murmur2_hash, false /* is_manifest_stale*/);
   webapk::WebApk* webapk_request = runner->GetWebApkRequest();
   ASSERT_NE(nullptr, webapk_request);
 
@@ -462,13 +531,19 @@
   for (int i = 0; i < 2; ++i)
     icons[i] = manifest.icons(i);
 
-  EXPECT_EQ(best_primary_icon_url.spec(), icons[0].src());
-  EXPECT_EQ(best_primary_icon_murmur2_hash, icons[0].hash());
-  EXPECT_TRUE(icons[0].has_image_data());
+  // Check protobuf fields for /icon.png.
+  EXPECT_EQ(icon_url_1, icons[0].src());
+  EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_1], icons[0].hash());
+  EXPECT_EQ(0, icons[0].usages_size());
+  EXPECT_FALSE(icons[0].has_image_data());
 
-  EXPECT_EQ(icon_url_1.spec(), icons[1].src());
-  EXPECT_EQ(icon_murmur2_hash_1, icons[1].hash());
-  EXPECT_FALSE(icons[1].has_image_data());
+  // Check protobuf fields for kBestPrimaryIconUrl.
+  EXPECT_EQ(best_icon_url, icons[1].src());
+  EXPECT_EQ(icon_url_to_murmur2_hash[best_icon_url], icons[1].hash());
+  EXPECT_THAT(icons[1].usages(),
+              testing::ElementsAre(webapk::Image::PRIMARY_ICON,
+                                   webapk::Image::BADGE_ICON));
+  EXPECT_TRUE(icons[1].has_image_data());
 }
 
 TEST_F(WebApkInstallerTest, FailsWhenInstallDisabled) {
diff --git a/chrome/browser/android/webapps/add_to_homescreen_manager.cc b/chrome/browser/android/webapps/add_to_homescreen_manager.cc
index c892d5c..65ab26320 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_manager.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_manager.cc
@@ -163,14 +163,13 @@
                                              const SkBitmap& primary_icon,
                                              const SkBitmap& badge_icon) {
   if (is_webapk_compatible_) {
-    // TODO(zpeng): Add badge to WebAPK installation flow.
     WebApkInstallService* install_service =
         WebApkInstallService::Get(
             data_fetcher_->web_contents()->GetBrowserContext());
     if (install_service->IsInstallInProgress(info.manifest_url))
       ShortcutHelper::ShowWebApkInstallInProgressToast();
     else
-      CreateInfoBarForWebApk(info, primary_icon);
+      CreateInfoBarForWebApk(info, primary_icon, badge_icon);
 
     JNIEnv* env = base::android::AttachCurrentThread();
     Java_AddToHomescreenManager_onFinished(env, java_ref_);
@@ -188,11 +187,13 @@
     AddShortcut(info, primary_icon);
 }
 
-void AddToHomescreenManager::CreateInfoBarForWebApk(const ShortcutInfo& info,
-                                                    const SkBitmap& icon) {
+void AddToHomescreenManager::CreateInfoBarForWebApk(
+    const ShortcutInfo& info,
+    const SkBitmap& primary_icon,
+    const SkBitmap& badge_icon) {
   banners::AppBannerInfoBarDelegateAndroid::Create(
       data_fetcher_->web_contents(), nullptr, info.user_title,
-      base::MakeUnique<ShortcutInfo>(info), base::MakeUnique<SkBitmap>(icon),
+      base::MakeUnique<ShortcutInfo>(info), primary_icon, badge_icon,
       -1 /* event_request_id */, webapk::INSTALL_SOURCE_MENU);
 }
 
diff --git a/chrome/browser/android/webapps/add_to_homescreen_manager.h b/chrome/browser/android/webapps/add_to_homescreen_manager.h
index 1db089bab..36de2b12 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_manager.h
+++ b/chrome/browser/android/webapps/add_to_homescreen_manager.h
@@ -52,7 +52,9 @@
 
   // Called only when the AddToHomescreenDataFetcher has retrieved all of the
   // data needed to install a WebAPK.
-  void CreateInfoBarForWebApk(const ShortcutInfo& info, const SkBitmap& icon);
+  void CreateInfoBarForWebApk(const ShortcutInfo& info,
+                              const SkBitmap& primary_icon,
+                              const SkBitmap& badge_icon);
 
   void RecordAddToHomescreen();
 
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc
index e95d61e..3d5c9ff 100644
--- a/chrome/browser/apps/guest_view/web_view_browsertest.cc
+++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -1433,17 +1433,10 @@
   TestHelper("testExecuteScript", "web_view/shim", NO_TEST_SERVER);
 }
 
-// Flaky on Linux. See https://crbug.com/703727.
-#if defined(OS_LINUX)
-#define MAYBE_Shim_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged \
-  DISABLED_Shim_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged
-#else
-#define MAYBE_Shim_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged \
-  Shim_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged
-#endif
+// Flaky and likely not testing the right assertion. https://crbug.com/703727
 IN_PROC_BROWSER_TEST_P(
     WebViewTest,
-    MAYBE_Shim_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged) {
+    DISABLED_Shim_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged) {
   TestHelper("testExecuteScriptIsAbortedWhenWebViewSourceIsChanged",
              "web_view/shim",
              NO_TEST_SERVER);
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index 06cc3734..bfbde45 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -1275,8 +1275,14 @@
   TryBasicFormFill();
 }
 
+// https://crbug.com/708861 tracks test flakiness.
+#if defined(OS_CHROMEOS)
+#define MAYBE_AutofillAfterReload DISABLED_AutofillAfterReload
+#else
+#define MAYBE_AutofillAfterReload AutofillAfterReload
+#endif
 // Test that form filling works after reloading the current page.
-IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterReload) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, MAYBE_AutofillAfterReload) {
   CreateTestProfile();
 
   // Load the test page.
diff --git a/chrome/browser/banners/app_banner_manager.cc b/chrome/browser/banners/app_banner_manager.cc
index 7016833..3c2bf84 100644
--- a/chrome/browser/banners/app_banner_manager.cc
+++ b/chrome/browser/banners/app_banner_manager.cc
@@ -267,7 +267,7 @@
   DCHECK(data.primary_icon);
 
   primary_icon_url_ = data.primary_icon_url;
-  primary_icon_.reset(new SkBitmap(*data.primary_icon));
+  primary_icon_ = *data.primary_icon;
 
   // If we triggered the installability check on page load, then it's possible
   // we don't have enough engagement yet. If that's the case, return here but
@@ -540,7 +540,7 @@
   DCHECK(!manifest_url_.is_empty());
   DCHECK(!manifest_.IsEmpty());
   DCHECK(!primary_icon_url_.is_empty());
-  DCHECK(primary_icon_.get());
+  DCHECK(!primary_icon_.drawsNothing());
 
   TrackBeforeInstallEvent(BEFORE_INSTALL_EVENT_COMPLETE);
   ShowBanner();
diff --git a/chrome/browser/banners/app_banner_manager.h b/chrome/browser/banners/app_banner_manager.h
index 20d16a2..487592f 100644
--- a/chrome/browser/banners/app_banner_manager.h
+++ b/chrome/browser/banners/app_banner_manager.h
@@ -5,7 +5,6 @@
 #ifndef CHROME_BROWSER_BANNERS_APP_BANNER_MANAGER_H_
 #define CHROME_BROWSER_BANNERS_APP_BANNER_MANAGER_H_
 
-#include <memory>
 #include <vector>
 
 #include "base/macros.h"
@@ -243,7 +242,7 @@
   GURL primary_icon_url_;
 
   // The primary icon object.
-  std::unique_ptr<SkBitmap> primary_icon_;
+  SkBitmap primary_icon_;
 
   // The referrer string (if any) specified in the app URL. Used only for native
   // app banners.
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 767ef96..3ed6678 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -504,8 +504,7 @@
       public mash::mojom::Launchable,
       public service_manager::InterfaceFactory<mash::mojom::Launchable> {
  public:
-  ChromeServiceChromeOS()
-      : interfaces_(service_manager::mojom::kServiceManager_ConnectorSpec) {
+  ChromeServiceChromeOS() {
     interfaces_.AddInterface<mash::mojom::Launchable>(this);
   }
   ~ChromeServiceChromeOS() override {}
@@ -525,7 +524,7 @@
   void OnBindInterface(const service_manager::ServiceInfo& remote_info,
                        const std::string& name,
                        mojo::ScopedMessagePipeHandle handle) override {
-    interfaces_.BindInterface(name, std::move(handle));
+    interfaces_.BindInterface(remote_info.identity, name, std::move(handle));
   }
 
   // mash::mojom::Launchable:
@@ -552,7 +551,7 @@
     bindings_.AddBinding(this, std::move(request));
   }
 
-  service_manager::InterfaceRegistry interfaces_;
+  service_manager::BinderRegistry interfaces_;
   mojo::BindingSet<mash::mojom::Launchable> bindings_;
 
   DISALLOW_COPY_AND_ASSIGN(ChromeServiceChromeOS);
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
index df35212..46b5422 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -45,6 +45,7 @@
 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/chromeos/system/input_device_settings.h"
 #include "chrome/browser/chromeos/ui/accessibility_focus_ring_controller.h"
 #include "chrome/browser/extensions/api/braille_display_private/stub_braille_controller.h"
 #include "chrome/browser/extensions/extension_service.h"
@@ -236,6 +237,7 @@
 AccessibilityManager::AccessibilityManager()
     : profile_(NULL),
       large_cursor_pref_handler_(prefs::kAccessibilityLargeCursorEnabled),
+      sticky_keys_pref_handler_(prefs::kAccessibilityStickyKeysEnabled),
       spoken_feedback_pref_handler_(prefs::kAccessibilitySpokenFeedbackEnabled),
       high_contrast_pref_handler_(prefs::kAccessibilityHighContrastEnabled),
       autoclick_pref_handler_(prefs::kAccessibilityAutoclickEnabled),
@@ -247,6 +249,7 @@
       cursor_highlight_pref_handler_(
           prefs::kAccessibilityCursorHighlightEnabled),
       focus_highlight_pref_handler_(prefs::kAccessibilityFocusHighlightEnabled),
+      tap_dragging_pref_handler_(prefs::kTapDraggingEnabled),
       select_to_speak_pref_handler_(prefs::kAccessibilitySelectToSpeakEnabled),
       switch_access_pref_handler_(prefs::kAccessibilitySwitchAccessEnabled),
       large_cursor_enabled_(false),
@@ -261,6 +264,7 @@
       caret_highlight_enabled_(false),
       cursor_highlight_enabled_(false),
       focus_highlight_enabled_(false),
+      tap_dragging_enabled_(false),
       select_to_speak_enabled_(false),
       switch_access_enabled_(false),
       spoken_feedback_notification_(ash::A11Y_NOTIFICATION_NONE),
@@ -359,7 +363,8 @@
         pref_service->GetBoolean(prefs::kAccessibilityMonoAudioEnabled) ||
         pref_service->GetBoolean(prefs::kAccessibilityCaretHighlightEnabled) ||
         pref_service->GetBoolean(prefs::kAccessibilityCursorHighlightEnabled) ||
-        pref_service->GetBoolean(prefs::kAccessibilityFocusHighlightEnabled))
+        pref_service->GetBoolean(prefs::kAccessibilityFocusHighlightEnabled) ||
+        pref_service->GetBoolean(prefs::kTapDraggingEnabled))
       return true;
   }
   return false;
@@ -457,6 +462,10 @@
     return;
 
   sticky_keys_enabled_ = enabled;
+
+  AccessibilityStatusEventDetails details(ACCESSIBILITY_TOGGLE_STICKY_KEYS,
+                                          enabled, ash::A11Y_NOTIFICATION_NONE);
+  NotifyAccessibilityStatusChanged(details);
   ash::Shell::Get()->sticky_keys_controller()->Enable(enabled);
 }
 
@@ -902,6 +911,38 @@
   UpdateAccessibilityHighlightingFromPrefs();
 }
 
+void AccessibilityManager::EnableTapDragging(bool enabled) {
+  if (!profile_)
+    return;
+
+  PrefService* pref_service = profile_->GetPrefs();
+  pref_service->SetBoolean(prefs::kTapDraggingEnabled, enabled);
+  pref_service->CommitPendingWrite();
+}
+
+bool AccessibilityManager::IsTapDraggingEnabled() {
+  return tap_dragging_enabled_;
+}
+
+void AccessibilityManager::UpdateTapDraggingFromPref() {
+  if (!profile_)
+    return;
+
+  const bool enabled =
+      profile_->GetPrefs()->GetBoolean(prefs::kTapDraggingEnabled);
+
+  if (tap_dragging_enabled_ == enabled)
+    return;
+  tap_dragging_enabled_ = enabled;
+
+  AccessibilityStatusEventDetails details(ACCESSIBILITY_TOGGLE_TAP_DRAGGING,
+                                          enabled, ash::A11Y_NOTIFICATION_NONE);
+  NotifyAccessibilityStatusChanged(details);
+
+  system::TouchpadSettings touchpad_settings;
+  touchpad_settings.SetTapDragging(enabled);
+}
+
 void AccessibilityManager::SetSelectToSpeakEnabled(bool enabled) {
   if (!profile_)
     return;
@@ -1125,6 +1166,10 @@
         base::Bind(&AccessibilityManager::UpdateFocusHighlightFromPref,
                    base::Unretained(this)));
     pref_change_registrar_->Add(
+        prefs::kTapDraggingEnabled,
+        base::Bind(&AccessibilityManager::UpdateTapDraggingFromPref,
+                   base::Unretained(this)));
+    pref_change_registrar_->Add(
         prefs::kAccessibilitySelectToSpeakEnabled,
         base::Bind(&AccessibilityManager::UpdateSelectToSpeakFromPref,
                    base::Unretained(this)));
@@ -1154,6 +1199,7 @@
   large_cursor_pref_handler_.HandleProfileChanged(profile_, profile);
   spoken_feedback_pref_handler_.HandleProfileChanged(profile_, profile);
   high_contrast_pref_handler_.HandleProfileChanged(profile_, profile);
+  sticky_keys_pref_handler_.HandleProfileChanged(profile_, profile);
   autoclick_pref_handler_.HandleProfileChanged(profile_, profile);
   autoclick_delay_pref_handler_.HandleProfileChanged(profile_, profile);
   virtual_keyboard_pref_handler_.HandleProfileChanged(profile_, profile);
@@ -1161,6 +1207,7 @@
   caret_highlight_pref_handler_.HandleProfileChanged(profile_, profile);
   cursor_highlight_pref_handler_.HandleProfileChanged(profile_, profile);
   focus_highlight_pref_handler_.HandleProfileChanged(profile_, profile);
+  tap_dragging_pref_handler_.HandleProfileChanged(profile_, profile);
   select_to_speak_pref_handler_.HandleProfileChanged(profile_, profile);
   switch_access_pref_handler_.HandleProfileChanged(profile_, profile);
 
@@ -1182,6 +1229,7 @@
   UpdateCaretHighlightFromPref();
   UpdateCursorHighlightFromPref();
   UpdateFocusHighlightFromPref();
+  UpdateTapDraggingFromPref();
   UpdateSelectToSpeakFromPref();
   UpdateSwitchAccessFromPref();
 
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.h b/chrome/browser/chromeos/accessibility/accessibility_manager.h
index 6371945c..0c7aedd 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_manager.h
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager.h
@@ -44,6 +44,7 @@
   ACCESSIBILITY_MANAGER_SHUTDOWN,
   ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE,
   ACCESSIBILITY_TOGGLE_LARGE_CURSOR,
+  ACCESSIBILITY_TOGGLE_STICKY_KEYS,
   ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER,
   ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK,
   ACCESSIBILITY_TOGGLE_VIRTUAL_KEYBOARD,
@@ -51,6 +52,7 @@
   ACCESSIBILITY_TOGGLE_CARET_HIGHLIGHT,
   ACCESSIBILITY_TOGGLE_CURSOR_HIGHLIGHT,
   ACCESSIBILITY_TOGGLE_FOCUS_HIGHLIGHT,
+  ACCESSIBILITY_TOGGLE_TAP_DRAGGING,
   ACCESSIBILITY_BRAILLE_DISPLAY_CONNECTION_STATE_CHANGED
 };
 
@@ -206,6 +208,12 @@
   // Returns if focus highlighting is enabled.
   bool IsFocusHighlightEnabled() const;
 
+  // Enables or disables tap dragging.
+  void EnableTapDragging(bool enabled);
+
+  // Returns true if the tap dragging is enabled, or false if not.
+  bool IsTapDraggingEnabled();
+
   // Invoked to enable or disable select-to-speak.
   void SetSelectToSpeakEnabled(bool enabled);
 
@@ -316,6 +324,7 @@
   void UpdateCaretHighlightFromPref();
   void UpdateCursorHighlightFromPref();
   void UpdateFocusHighlightFromPref();
+  void UpdateTapDraggingFromPref();
   void UpdateSelectToSpeakFromPref();
   void UpdateSwitchAccessFromPref();
   void UpdateAccessibilityHighlightingFromPrefs();
@@ -368,6 +377,7 @@
       session_state_observer_;
 
   PrefHandler large_cursor_pref_handler_;
+  PrefHandler sticky_keys_pref_handler_;
   PrefHandler spoken_feedback_pref_handler_;
   PrefHandler high_contrast_pref_handler_;
   PrefHandler autoclick_pref_handler_;
@@ -377,6 +387,7 @@
   PrefHandler caret_highlight_pref_handler_;
   PrefHandler cursor_highlight_pref_handler_;
   PrefHandler focus_highlight_pref_handler_;
+  PrefHandler tap_dragging_pref_handler_;
   PrefHandler select_to_speak_pref_handler_;
   PrefHandler switch_access_pref_handler_;
 
@@ -392,6 +403,7 @@
   bool caret_highlight_enabled_;
   bool cursor_highlight_enabled_;
   bool focus_highlight_enabled_;
+  bool tap_dragging_enabled_;
   bool select_to_speak_enabled_;
   bool switch_access_enabled_;
 
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
index 1ef51b2..6e74700 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -581,7 +581,7 @@
 
   // Enable/disable native CUPS integration
   printing::PrintBackend::SetNativeCupsEnabled(
-      parsed_command_line().HasSwitch(::switches::kEnableNativeCups));
+      !parsed_command_line().HasSwitch(::switches::kDisableNativeCups));
 
   power_prefs_.reset(new PowerPrefs(PowerPolicyController::Get()));
 
diff --git a/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc b/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc
index c21807d..cddc9ce 100644
--- a/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc
+++ b/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc
@@ -13,6 +13,9 @@
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h"
 #include "chromeos/chromeos_switches.h"
+#include "chromeos/dbus/cryptohome/rpc.pb.h"
+#include "chromeos/dbus/cryptohome_client.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/system/statistics_provider.h"
 #include "components/policy/core/common/cloud/device_management_service.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -132,10 +135,7 @@
   return MODE_NONE;
 }
 
-AutoEnrollmentController::AutoEnrollmentController()
-    : state_(policy::AUTO_ENROLLMENT_STATE_IDLE),
-      safeguard_timer_(false, false),
-      client_start_weak_factory_(this) {}
+AutoEnrollmentController::AutoEnrollmentController() {}
 
 AutoEnrollmentController::~AutoEnrollmentController() {}
 
@@ -178,9 +178,10 @@
   }
 
   // Arm the belts-and-suspenders timer to avoid hangs.
-  safeguard_timer_.Start(
-      FROM_HERE, base::TimeDelta::FromSeconds(kSafeguardTimeoutSeconds),
-      base::Bind(&AutoEnrollmentController::Timeout, base::Unretained(this)));
+  safeguard_timer_.Start(FROM_HERE,
+                         base::TimeDelta::FromSeconds(kSafeguardTimeoutSeconds),
+                         base::Bind(&AutoEnrollmentController::Timeout,
+                                    weak_ptr_factory_.GetWeakPtr()));
 
   // Start by checking if the device has already been owned.
   UpdateState(policy::AUTO_ENROLLMENT_STATE_PENDING);
@@ -269,15 +270,12 @@
     power_initial = power_limit;
   }
 
-  client_.reset(new policy::AutoEnrollmentClient(
+  client_ = base::MakeUnique<policy::AutoEnrollmentClient>(
       base::Bind(&AutoEnrollmentController::UpdateState,
-                 base::Unretained(this)),
-      service,
-      g_browser_process->local_state(),
-      g_browser_process->system_request_context(),
-      state_keys.front(),
-      power_initial,
-      power_limit));
+                 weak_ptr_factory_.GetWeakPtr()),
+      service, g_browser_process->local_state(),
+      g_browser_process->system_request_context(), state_keys.front(),
+      power_initial, power_limit);
 
   VLOG(1) << "Starting auto-enrollment client.";
   client_->Start();
@@ -301,6 +299,35 @@
       break;
   }
 
+  if (state_ == policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT) {
+    StartRemoveFirmwareManagementParameters();
+  } else {
+    progress_callbacks_.Notify(state_);
+  }
+}
+
+void AutoEnrollmentController::StartRemoveFirmwareManagementParameters() {
+  DCHECK_EQ(policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_);
+
+  cryptohome::RemoveFirmwareManagementParametersRequest request;
+  chromeos::DBusThreadManager::Get()
+      ->GetCryptohomeClient()
+      ->RemoveFirmwareManagementParametersFromTpm(
+          request,
+          base::Bind(
+              &AutoEnrollmentController::OnFirmwareManagementParametersRemoved,
+              weak_ptr_factory_.GetWeakPtr()));
+}
+
+void AutoEnrollmentController::OnFirmwareManagementParametersRemoved(
+    chromeos::DBusMethodCallStatus call_status,
+    bool result,
+    const cryptohome::BaseReply& reply) {
+  if (!result) {
+    LOG(ERROR) << "Failed to remove firmware management parameters, error: "
+               << reply.error();
+  }
+
   progress_callbacks_.Notify(state_);
 }
 
diff --git a/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h b/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h
index 5dfada5..1da39ec 100644
--- a/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h
+++ b/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h
@@ -16,6 +16,10 @@
 #include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
 #include "chrome/browser/chromeos/settings/device_settings_service.h"
 
+namespace cryptohome {
+class BaseReply;
+}  // namespace cryptohome
+
 namespace chromeos {
 
 // Drives the forced re-enrollment check (for historical reasons called
@@ -86,10 +90,28 @@
   // Sets |state_| and notifies |progress_callbacks_|.
   void UpdateState(policy::AutoEnrollmentState state);
 
+  // Makes a D-Bus call to cryptohome to remove the firmware management
+  // parameters (FWMP) from TPM. Stops the |safeguard_timer_| and notifies the
+  // |progress_callbacks_| after update is done if the timer is still running.
+  // The notifications have to be sent only after the FWMP is cleared, because
+  // the user might try to switch to devmode. In this case, if block_devmode is
+  // in FWMP and the clear operation didn't finish, the switch would be denied.
+  // Also the safeguard timer has to be active until the FWMP is cleared to
+  // avoid the risk of blocked flow.
+  void StartRemoveFirmwareManagementParameters();
+
+  // Callback for RemoveFirmwareManagementParameters(). If an error is received
+  // here, it is logged only, without changing the flow after that, because
+  // the FWMP is used only for newer devices.
+  void OnFirmwareManagementParametersRemoved(
+      chromeos::DBusMethodCallStatus call_status,
+      bool result,
+      const cryptohome::BaseReply& reply);
+
   // Handles timeout of the safeguard timer and stops waiting for a result.
   void Timeout();
 
-  policy::AutoEnrollmentState state_;
+  policy::AutoEnrollmentState state_ = policy::AUTO_ENROLLMENT_STATE_IDLE;
   ProgressCallbackList progress_callbacks_;
 
   std::unique_ptr<policy::AutoEnrollmentClient> client_;
@@ -102,12 +124,15 @@
   // something goes wrong, the timer will ensure that a decision gets made
   // eventually, which is crucial to not block OOBE forever. See
   // http://crbug.com/433634 for background.
-  base::Timer safeguard_timer_;
+  base::Timer safeguard_timer_{false, false};
 
   // Whether the forced re-enrollment check has to be applied.
   FRERequirement fre_requirement_ = REQUIRED;
 
-  base::WeakPtrFactory<AutoEnrollmentController> client_start_weak_factory_;
+  // TODO(igorcov): Merge the two weak_ptr factories in one.
+  base::WeakPtrFactory<AutoEnrollmentController> client_start_weak_factory_{
+      this};
+  base::WeakPtrFactory<AutoEnrollmentController> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AutoEnrollmentController);
 };
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc
index 17a9b9e..e8da5c9 100644
--- a/chrome/browser/chromeos/login/wizard_controller.cc
+++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -429,10 +429,7 @@
 
 void WizardController::ShowNetworkScreen() {
   VLOG(1) << "Showing network screen.";
-  // Hide the status area initially; it only appears after OOBE first animates
-  // in. Keep it visible if the user goes back to the existing network screen.
-  SetStatusAreaVisible(
-      screen_manager_->HasScreen(OobeScreen::SCREEN_OOBE_NETWORK));
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_OOBE_NETWORK);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_OOBE_NETWORK));
 
   // There are two possible screens where we listen to the incoming Bluetooth
@@ -457,7 +454,7 @@
     UMA_HISTOGRAM_MEDIUM_TIMES("OOBE.EULAToSignInTime", delta);
   }
   VLOG(1) << "Showing login screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_SPECIAL_LOGIN);
   host_->StartSignInScreen(context);
   smooth_show_timer_.Stop();
   login_screen_started_ = true;
@@ -465,7 +462,7 @@
 
 void WizardController::ShowUpdateScreen() {
   VLOG(1) << "Showing update screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_OOBE_UPDATE);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_OOBE_UPDATE));
 }
 
@@ -486,14 +483,14 @@
   // Status area has been already shown at sign in screen so it
   // doesn't make sense to hide it here and then show again at user session as
   // this produces undesired UX transitions.
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_USER_IMAGE_PICKER);
 
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_USER_IMAGE_PICKER));
 }
 
 void WizardController::ShowEulaScreen() {
   VLOG(1) << "Showing EULA screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_OOBE_EULA);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_OOBE_EULA));
 }
 
@@ -507,25 +504,25 @@
 
 void WizardController::ShowResetScreen() {
   VLOG(1) << "Showing reset screen.";
-  SetStatusAreaVisible(false);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_OOBE_RESET);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_OOBE_RESET));
 }
 
 void WizardController::ShowKioskEnableScreen() {
   VLOG(1) << "Showing kiosk enable screen.";
-  SetStatusAreaVisible(false);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_KIOSK_ENABLE);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_KIOSK_ENABLE));
 }
 
 void WizardController::ShowKioskAutolaunchScreen() {
   VLOG(1) << "Showing kiosk autolaunch screen.";
-  SetStatusAreaVisible(false);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_KIOSK_AUTOLAUNCH);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_KIOSK_AUTOLAUNCH));
 }
 
 void WizardController::ShowEnableDebuggingScreen() {
   VLOG(1) << "Showing enable developer features screen.";
-  SetStatusAreaVisible(false);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_OOBE_ENABLE_DEBUGGING);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_OOBE_ENABLE_DEBUGGING));
 }
 
@@ -541,7 +538,7 @@
   }
 
   VLOG(1) << "Showing Terms of Service screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_TERMS_OF_SERVICE);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_TERMS_OF_SERVICE));
 }
 
@@ -568,7 +565,8 @@
 
   if (show_arc_terms) {
     VLOG(1) << "Showing ARC Terms of Service screen.";
-    SetStatusAreaVisible(true);
+    UpdateStatusAreaVisibilityForScreen(
+        OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE);
     SetCurrentScreen(GetScreen(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
   } else {
     ShowUserImageScreen();
@@ -577,13 +575,13 @@
 
 void WizardController::ShowWrongHWIDScreen() {
   VLOG(1) << "Showing wrong HWID screen.";
-  SetStatusAreaVisible(false);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_WRONG_HWID);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_WRONG_HWID));
 }
 
 void WizardController::ShowAutoEnrollmentCheckScreen() {
   VLOG(1) << "Showing Auto-enrollment check screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_AUTO_ENROLLMENT_CHECK);
   AutoEnrollmentCheckScreen* screen =
       AutoEnrollmentCheckScreen::Get(screen_manager());
   if (retry_auto_enrollment_check_)
@@ -594,19 +592,20 @@
 
 void WizardController::ShowSupervisedUserCreationScreen() {
   VLOG(1) << "Showing Locally managed user creation screen screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(
+      OobeScreen::SCREEN_CREATE_SUPERVISED_USER_FLOW);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_CREATE_SUPERVISED_USER_FLOW));
 }
 
 void WizardController::ShowArcKioskSplashScreen() {
   VLOG(1) << "Showing ARC kiosk splash screen.";
-  SetStatusAreaVisible(false);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_ARC_KIOSK_SPLASH);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_ARC_KIOSK_SPLASH));
 }
 
 void WizardController::ShowHIDDetectionScreen() {
   VLOG(1) << "Showing HID discovery screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_OOBE_HID_DETECTION);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_OOBE_HID_DETECTION));
   // In HID detection screen, puts the Bluetooth in discoverable mode and waits
   // for the incoming Bluetooth connection request. See the comments in
@@ -616,25 +615,26 @@
 
 void WizardController::ShowControllerPairingScreen() {
   VLOG(1) << "Showing controller pairing screen.";
-  SetStatusAreaVisible(false);
+  UpdateStatusAreaVisibilityForScreen(
+      OobeScreen::SCREEN_OOBE_CONTROLLER_PAIRING);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_OOBE_CONTROLLER_PAIRING));
 }
 
 void WizardController::ShowHostPairingScreen() {
   VLOG(1) << "Showing host pairing screen.";
-  SetStatusAreaVisible(false);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_OOBE_HOST_PAIRING);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_OOBE_HOST_PAIRING));
 }
 
 void WizardController::ShowDeviceDisabledScreen() {
   VLOG(1) << "Showing device disabled screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_DEVICE_DISABLED);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_DEVICE_DISABLED));
 }
 
 void WizardController::ShowEncryptionMigrationScreen() {
   VLOG(1) << "Showing encryption migration screen.";
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_ENCRYPTION_MIGRATION);
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_ENCRYPTION_MIGRATION));
 }
 
@@ -971,6 +971,7 @@
 
   smooth_show_timer_.Stop();
 
+  UpdateStatusAreaVisibilityForScreen(current_screen_->screen_id());
   current_screen_->Show();
 }
 
@@ -1006,8 +1007,24 @@
   }
 }
 
-void WizardController::SetStatusAreaVisible(bool visible) {
-  host_->SetStatusAreaVisible(visible);
+void WizardController::UpdateStatusAreaVisibilityForScreen(OobeScreen screen) {
+  if (screen == OobeScreen::SCREEN_OOBE_NETWORK) {
+    // Hide the status area initially; it only appears after OOBE first animates
+    // in. Keep it visible if the user goes back to the existing network screen.
+    host_->SetStatusAreaVisible(
+        screen_manager_->HasScreen(OobeScreen::SCREEN_OOBE_NETWORK));
+  } else if (screen == OobeScreen::SCREEN_OOBE_RESET ||
+             screen == OobeScreen::SCREEN_KIOSK_ENABLE ||
+             screen == OobeScreen::SCREEN_KIOSK_AUTOLAUNCH ||
+             screen == OobeScreen::SCREEN_OOBE_ENABLE_DEBUGGING ||
+             screen == OobeScreen::SCREEN_WRONG_HWID ||
+             screen == OobeScreen::SCREEN_ARC_KIOSK_SPLASH ||
+             screen == OobeScreen::SCREEN_OOBE_CONTROLLER_PAIRING ||
+             screen == OobeScreen::SCREEN_OOBE_HOST_PAIRING) {
+    host_->SetStatusAreaVisible(false);
+  } else {
+    host_->SetStatusAreaVisible(true);
+  }
 }
 
 void WizardController::SetShowMdOobe(bool show) {
@@ -1310,7 +1327,7 @@
     // If the |cros_settings_| are permanently untrusted, show an error message
     // and refuse to auto-launch the kiosk app.
     GetErrorScreen()->SetUIState(NetworkError::UI_STATE_LOCAL_STATE_ERROR);
-    SetStatusAreaVisible(false);
+    host_->SetStatusAreaVisible(false);
     ShowErrorScreen();
     return;
   }
@@ -1362,7 +1379,7 @@
     return;
   }
   GetErrorScreen()->SetUIState(NetworkError::UI_STATE_LOCAL_STATE_ERROR);
-  SetStatusAreaVisible(false);
+  host_->SetStatusAreaVisible(false);
   ShowErrorScreen();
 }
 
@@ -1518,7 +1535,7 @@
 
   EnrollmentScreen* screen = EnrollmentScreen::Get(screen_manager());
   screen->SetParameters(effective_config, shark_controller_.get());
-  SetStatusAreaVisible(true);
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_OOBE_ENROLLMENT);
   SetCurrentScreen(screen);
 }
 
diff --git a/chrome/browser/chromeos/login/wizard_controller.h b/chrome/browser/chromeos/login/wizard_controller.h
index 6b10bfb8..e78b2c5 100644
--- a/chrome/browser/chromeos/login/wizard_controller.h
+++ b/chrome/browser/chromeos/login/wizard_controller.h
@@ -241,8 +241,8 @@
   // ShowCurrentScreen directly forces screen to be shown immediately.
   void SetCurrentScreenSmooth(BaseScreen* screen, bool use_smoothing);
 
-  // Changes status area visibility.
-  void SetStatusAreaVisible(bool visible);
+  // Update the status area visibility for |screen|.
+  void UpdateStatusAreaVisibilityForScreen(OobeScreen screen);
 
   // Changes whether to show the Material Design OOBE or not.
   void SetShowMdOobe(bool show);
diff --git a/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc b/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc
index c4bcf11..a626d90f 100644
--- a/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc
+++ b/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc
@@ -29,6 +29,7 @@
 #include "chromeos/attestation/attestation_flow.h"
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/dbus/auth_policy_client.h"
+#include "chromeos/dbus/cryptohome/rpc.pb.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/upstart_client.h"
 #include "components/version_info/version_info.h"
@@ -76,6 +77,33 @@
   return em::DeviceRegisterRequest::FLAVOR_ENROLLMENT_MANUAL;
 }
 
+// Returns whether block_devmode is set.
+bool GetBlockdevmodeFromPolicy(
+    const enterprise_management::PolicyFetchResponse* policy) {
+  DCHECK(policy);
+  em::PolicyData policy_data;
+  if (!policy_data.ParseFromString(policy->policy_data())) {
+    LOG(ERROR) << "Failed to parse policy data";
+    return false;
+  }
+
+  em::ChromeDeviceSettingsProto payload;
+  if (!payload.ParseFromString(policy_data.policy_value())) {
+    LOG(ERROR) << "Failed to parse policy value";
+    return false;
+  }
+
+  bool block_devmode = false;
+  if (payload.has_system_settings()) {
+    const em::SystemSettingsProto& container = payload.system_settings();
+    if (container.has_block_devmode()) {
+      block_devmode = container.block_devmode();
+    }
+  }
+
+  return block_devmode;
+}
+
 }  // namespace
 
 EnrollmentHandlerChromeOS::EnrollmentHandlerChromeOS(
@@ -397,6 +425,40 @@
   StartJoinAdDomain();
 }
 
+void EnrollmentHandlerChromeOS::SetFirmwareManagementParametersData() {
+  DCHECK_EQ(STEP_SET_FWMP_DATA, enrollment_step_);
+
+  // In case of reenrollment, the device has the TPM locked and nothing has to
+  // change in install attributes. No need to update firmware parameters in this
+  // case.
+  if (install_attributes_->IsDeviceLocked()) {
+    SetStep(STEP_LOCK_DEVICE);
+    StartLockDevice();
+    return;
+  }
+
+  install_attributes_->SetBlockDevmodeInTpm(
+      GetBlockdevmodeFromPolicy(policy_.get()),
+      base::Bind(
+          &EnrollmentHandlerChromeOS::OnFirmwareManagementParametersDataSet,
+          weak_ptr_factory_.GetWeakPtr()));
+}
+
+void EnrollmentHandlerChromeOS::OnFirmwareManagementParametersDataSet(
+    chromeos::DBusMethodCallStatus call_status,
+    bool result,
+    const cryptohome::BaseReply& reply) {
+  DCHECK_EQ(STEP_SET_FWMP_DATA, enrollment_step_);
+  if (!result) {
+    LOG(ERROR)
+        << "Failed to update firmware management parameters in TPM, error: "
+        << reply.error();
+  }
+
+  SetStep(STEP_LOCK_DEVICE);
+  StartLockDevice();
+}
+
 // GaiaOAuthClient::Delegate
 void EnrollmentHandlerChromeOS::OnRefreshTokenResponse(
     const std::string& access_token,
@@ -427,8 +489,8 @@
 void EnrollmentHandlerChromeOS::StartJoinAdDomain() {
   DCHECK_EQ(STEP_AD_DOMAIN_JOIN, enrollment_step_);
   if (device_mode_ != DEVICE_MODE_ENTERPRISE_AD) {
-    SetStep(STEP_LOCK_DEVICE);
-    StartLockDevice();
+    SetStep(STEP_SET_FWMP_DATA);
+    SetFirmwareManagementParametersData();
     return;
   }
   DCHECK(ad_join_delegate_);
@@ -441,8 +503,8 @@
   DCHECK_EQ(STEP_AD_DOMAIN_JOIN, enrollment_step_);
   CHECK(!realm.empty());
   realm_ = realm;
-  SetStep(STEP_LOCK_DEVICE);
-  StartLockDevice();
+  SetStep(STEP_SET_FWMP_DATA);
+  SetFirmwareManagementParametersData();
 }
 
 void EnrollmentHandlerChromeOS::StartLockDevice() {
diff --git a/chrome/browser/chromeos/policy/enrollment_handler_chromeos.h b/chrome/browser/chromeos/policy/enrollment_handler_chromeos.h
index a2162975..73b5b62 100644
--- a/chrome/browser/chromeos/policy/enrollment_handler_chromeos.h
+++ b/chrome/browser/chromeos/policy/enrollment_handler_chromeos.h
@@ -116,12 +116,13 @@
     STEP_ROBOT_AUTH_FETCH = 6,    // Fetching device API auth code.
     STEP_ROBOT_AUTH_REFRESH = 7,  // Fetching device API refresh token.
     STEP_AD_DOMAIN_JOIN = 8,      // Joining Active Directory domain.
-    STEP_LOCK_DEVICE = 9,         // Writing installation-time attributes.
-    STEP_STORE_TOKEN = 10,        // Encrypting and storing DM token.
-    STEP_STORE_ROBOT_AUTH = 11,   // Encrypting & writing robot refresh token.
-    STEP_STORE_POLICY = 12,       // Storing policy and API refresh token. For
+    STEP_SET_FWMP_DATA = 9,       // Setting the firmware management parameters.
+    STEP_LOCK_DEVICE = 10,        // Writing installation-time attributes.
+    STEP_STORE_TOKEN = 11,        // Encrypting and storing DM token.
+    STEP_STORE_ROBOT_AUTH = 12,   // Encrypting & writing robot refresh token.
+    STEP_STORE_POLICY = 13,       // Storing policy and API refresh token. For
                                   // AD, includes policy fetch via authpolicyd.
-    STEP_FINISHED = 13,           // Enrollment process done, no further action.
+    STEP_FINISHED = 14,           // Enrollment process done, no further action.
   };
 
   // Handles the response to a request for server-backed state keys.
@@ -149,6 +150,17 @@
   // Handles successful Active Directory domain join.
   void OnAdDomainJoined(const std::string& realm);
 
+  // Updates the firmware management partition from TPM, setting the flags
+  // according to enum FirmwareManagementParametersFlags from rpc.proto if
+  // devmode is blocked.
+  void SetFirmwareManagementParametersData();
+
+  // Invoked after the firmware management partition in TPM is updated.
+  void OnFirmwareManagementParametersDataSet(
+      chromeos::DBusMethodCallStatus call_status,
+      bool result,
+      const cryptohome::BaseReply& reply);
+
   // Calls InstallAttributes::LockDevice() for enterprise enrollment and
   // DeviceSettingsService::SetManagementSettings() for consumer
   // enrollment.
diff --git a/chrome/browser/chromeos/printer_detector/printer_detector_factory.cc b/chrome/browser/chromeos/printer_detector/printer_detector_factory.cc
index 4008a07e..49c02a6 100644
--- a/chrome/browser/chromeos/printer_detector/printer_detector_factory.cc
+++ b/chrome/browser/chromeos/printer_detector/printer_detector_factory.cc
@@ -46,13 +46,13 @@
 KeyedService* PrinterDetectorFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          ::switches::kEnableNativeCups)) {
-    return PrinterDetector::CreateCups(Profile::FromBrowserContext(context))
-        .release();
-  } else {
+          ::switches::kDisableNativeCups)) {
     return PrinterDetector::CreateLegacy(Profile::FromBrowserContext(context))
         .release();
   }
+
+  return PrinterDetector::CreateCups(Profile::FromBrowserContext(context))
+      .release();
 }
 
 bool PrinterDetectorFactory::ServiceIsCreatedWithBrowserContext() const {
diff --git a/chrome/browser/chromeos/resource_reporter/resource_reporter.cc b/chrome/browser/chromeos/resource_reporter/resource_reporter.cc
index de550210..15331c7 100644
--- a/chrome/browser/chromeos/resource_reporter/resource_reporter.cc
+++ b/chrome/browser/chromeos/resource_reporter/resource_reporter.cc
@@ -72,14 +72,7 @@
 constexpr base::TimeDelta kMinimumTimeBetweenReports =
     base::TimeDelta::FromDays(1);
 
-// Gets the memory usage threshold of a process beyond which the process is
-// considered memory-intensive on the current device it's running on.
-int64_t GetMemoryThresholdForDeviceInBytes() {
-  const int64_t bytes_per_cpu = base::SysInfo::AmountOfPhysicalMemory() /
-                                base::SysInfo::NumberOfProcessors();
-
-  return bytes_per_cpu * 0.6;
-}
+constexpr double kTaskCpuThresholdForReporting = 70.0;
 
 }  // namespace
 
@@ -175,8 +168,8 @@
 
       default:
         // Other tasks types will be reported using Rappor.
-        if (memory_usage < kTaskMemoryThresholdForReporting &&
-            cpu_usage < kTaskCpuThresholdForReporting) {
+        if (memory_usage < GetTaskMemoryThresholdForReporting() &&
+            cpu_usage < GetTaskCpuThresholdForReporting()) {
           // We only care about CPU and memory intensive tasks.
           break;
         }
@@ -205,13 +198,6 @@
       base::Bind(&ResourceReporter::ReportSamples, base::Unretained(this)));
 }
 
-// static
-const double ResourceReporter::kTaskCpuThresholdForReporting = 70.0;
-
-// static
-const int64_t ResourceReporter::kTaskMemoryThresholdForReporting =
-    GetMemoryThresholdForDeviceInBytes();
-
 ResourceReporter::ResourceReporter()
     : TaskManagerObserver(base::TimeDelta::FromSeconds(kRefreshIntervalSeconds),
                           task_manager::REFRESH_TYPE_CPU |
@@ -226,6 +212,19 @@
       is_monitoring_(false) {}
 
 // static
+double ResourceReporter::GetTaskCpuThresholdForReporting() {
+  return kTaskCpuThresholdForReporting;
+}
+
+// static
+int64_t ResourceReporter::GetTaskMemoryThresholdForReporting() {
+  static const int64_t threshold = 0.6 *
+                                   base::SysInfo::AmountOfPhysicalMemory() /
+                                   base::SysInfo::NumberOfProcessors();
+  return threshold;
+}
+
+// static
 std::unique_ptr<rappor::Sample> ResourceReporter::CreateRapporSample(
     rappor::RapporServiceImpl* rappor_service,
     const ResourceReporter::TaskRecord& task_record) {
diff --git a/chrome/browser/chromeos/resource_reporter/resource_reporter.h b/chrome/browser/chromeos/resource_reporter/resource_reporter.h
index cfa2bc8..e33992a 100644
--- a/chrome/browser/chromeos/resource_reporter/resource_reporter.h
+++ b/chrome/browser/chromeos/resource_reporter/resource_reporter.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -132,12 +133,12 @@
     NUM_RANGES            = 7,
   };
 
-  // The CPU and memory thresholds beyond which the tasks will be reported.
-  static const double kTaskCpuThresholdForReporting;
-  static const int64_t kTaskMemoryThresholdForReporting;
-
   ResourceReporter();
 
+  // The CPU and memory thresholds beyond which the tasks will be reported.
+  static double GetTaskCpuThresholdForReporting();
+  static int64_t GetTaskMemoryThresholdForReporting();
+
   // Creates a Rappor sample for the given |task_record|.
   static std::unique_ptr<rappor::Sample> CreateRapporSample(
       rappor::RapporServiceImpl* rappor_service,
diff --git a/chrome/browser/chromeos/resource_reporter/resource_reporter_unittest.cc b/chrome/browser/chromeos/resource_reporter/resource_reporter_unittest.cc
index 82c6954f..5711382 100644
--- a/chrome/browser/chromeos/resource_reporter/resource_reporter_unittest.cc
+++ b/chrome/browser/chromeos/resource_reporter/resource_reporter_unittest.cc
@@ -282,9 +282,9 @@
   ASSERT_FALSE(resource_reporter()->task_records_.empty());
   for (const auto& task_record : resource_reporter()->task_records_) {
     EXPECT_TRUE(task_record.cpu_percent >=
-                    ResourceReporter::kTaskCpuThresholdForReporting ||
+                    ResourceReporter::GetTaskCpuThresholdForReporting() ||
                 task_record.memory_bytes >=
-                    ResourceReporter::kTaskMemoryThresholdForReporting);
+                    ResourceReporter::GetTaskMemoryThresholdForReporting());
   }
 
   // Make sure you have the right info about the Browser and GPU process.
diff --git a/chrome/browser/chromeos/settings/install_attributes.cc b/chrome/browser/chromeos/settings/install_attributes.cc
index 710cb2e..f893661 100644
--- a/chrome/browser/chromeos/settings/install_attributes.cc
+++ b/chrome/browser/chromeos/settings/install_attributes.cc
@@ -20,8 +20,10 @@
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/policy/proto/install_attributes.pb.h"
 #include "chromeos/cryptohome/cryptohome_util.h"
+#include "chromeos/dbus/cryptohome/rpc.pb.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "google_apis/gaia/gaia_auth_util.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
 
 namespace chromeos {
 
@@ -186,6 +188,24 @@
   callback.Run();
 }
 
+void InstallAttributes::SetBlockDevmodeInTpm(
+    bool block_devmode,
+    const CryptohomeClient::ProtobufMethodCallback& callback) {
+  DCHECK(!callback.is_null());
+  DCHECK(!device_locked_);
+
+  cryptohome::SetFirmwareManagementParametersRequest request;
+  // Set the flags, according to enum FirmwareManagementParametersFlags from
+  // rpc.proto if devmode is blocked.
+  if (block_devmode) {
+    request.set_flags(
+        cryptohome::DEVELOPER_DISABLE_BOOT |
+        cryptohome::DEVELOPER_DISABLE_CASE_CLOSED_DEBUGGING_UNLOCK);
+  }
+
+  cryptohome_client_->SetFirmwareManagementParametersInTpm(request, callback);
+}
+
 void InstallAttributes::LockDevice(policy::DeviceMode device_mode,
                                    const std::string& domain,
                                    const std::string& realm,
diff --git a/chrome/browser/chromeos/settings/install_attributes.h b/chrome/browser/chromeos/settings/install_attributes.h
index 53615df..618c718d1 100644
--- a/chrome/browser/chromeos/settings/install_attributes.h
+++ b/chrome/browser/chromeos/settings/install_attributes.h
@@ -70,6 +70,13 @@
   // ReadAttributesIfReady().
   void ReadImmutableAttributes(const base::Closure& callback);
 
+  // Updates the firmware management parameters from TPM, storing the devmode
+  // flag according to |block_devmode|. Invokes |callback| when done. Must be
+  // called before LockDevice is done. Used to update TPM on enrollment.
+  void SetBlockDevmodeInTpm(
+      bool block_devmode,
+      const CryptohomeClient::ProtobufMethodCallback& callback);
+
   // Locks the device into |device_mode|.  Depending on |device_mode|, a
   // specific subset of |domain|, |realm| and |device_id| must be set.  Can also
   // be called after the lock has already been taken, in which case it checks
@@ -111,6 +118,9 @@
   // device id was not stored in the lockbox (prior to R19).
   std::string GetDeviceId() const { return registration_device_id_; }
 
+  // Return whether TPM is locked.
+  bool IsDeviceLocked() const { return device_locked_; }
+
  protected:
   // True if install attributes have been read successfully.  False if read
   // failed or no read attempt was made.
diff --git a/chrome/browser/chromeos/settings/install_attributes_unittest.cc b/chrome/browser/chromeos/settings/install_attributes_unittest.cc
index 2b5e452..9b61b32 100644
--- a/chrome/browser/chromeos/settings/install_attributes_unittest.cc
+++ b/chrome/browser/chromeos/settings/install_attributes_unittest.cc
@@ -32,6 +32,13 @@
   loop->Quit();
 }
 
+void OnSetBlockDevmode(chromeos::DBusMethodCallStatus* out_status,
+                       chromeos::DBusMethodCallStatus call_status,
+                       bool result,
+                       const cryptohome::BaseReply& reply) {
+  *out_status = call_status;
+}
+
 }  // namespace
 
 static const char kTestDomain[] = "example.com";
@@ -295,4 +302,14 @@
   EXPECT_EQ(std::string(), install_attributes_->GetDeviceId());
 }
 
+TEST_F(InstallAttributesTest, CheckSetBlockDevmodeInTpm) {
+  chromeos::DBusMethodCallStatus status =
+      chromeos::DBusMethodCallStatus::DBUS_METHOD_CALL_FAILURE;
+  install_attributes_->SetBlockDevmodeInTpm(
+      true, base::Bind(&OnSetBlockDevmode, &status));
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(chromeos::DBusMethodCallStatus::DBUS_METHOD_CALL_SUCCESS, status);
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
index a00fd5fd..32876c5 100644
--- a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
+++ b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
@@ -222,6 +222,18 @@
     tray()->detailed_menu_->OnViewClicked(button);
   }
 
+  void ClickStickyKeysOnDetailMenu() {
+    views::View* button = tray()->detailed_menu_->sticky_keys_view_;
+    ASSERT_TRUE(button);
+    tray()->detailed_menu_->OnViewClicked(button);
+  }
+
+  void ClickTapDraggingOnDetailMenu() {
+    views::View* button = tray()->detailed_menu_->tap_dragging_view_;
+    ASSERT_TRUE(button);
+    tray()->detailed_menu_->OnViewClicked(button);
+  }
+
   bool IsSpokenFeedbackEnabledOnDetailMenu() const {
     return tray()->detailed_menu_->spoken_feedback_enabled_;
   }
@@ -262,6 +274,14 @@
     return tray()->detailed_menu_->highlight_keyboard_focus_enabled_;
   }
 
+  bool IsStickyKeysEnabledOnDetailMenu() const {
+    return tray()->detailed_menu_->sticky_keys_enabled_;
+  }
+
+  bool IsTapDraggingEnabledOnDetailMenu() const {
+    return tray()->detailed_menu_->tap_dragging_enabled_;
+  }
+
   bool IsSpokenFeedbackMenuShownOnDetailMenu() const {
     return tray()->detailed_menu_->spoken_feedback_view_;
   }
@@ -302,6 +322,14 @@
     return tray()->detailed_menu_->highlight_keyboard_focus_view_;
   }
 
+  bool IsStickyKeysMenuShownOnDetailMenu() const {
+    return tray()->detailed_menu_->sticky_keys_view_;
+  }
+
+  bool IsTapDraggingMenuShownOnDetailMenu() const {
+    return tray()->detailed_menu_->tap_dragging_view_;
+  }
+
   // In material design we show the help button but theme it as disabled if
   // it is not possible to load the help page.
   bool IsHelpAvailableOnDetailMenu() const {
@@ -426,6 +454,18 @@
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
   EXPECT_FALSE(IsTrayIconVisible());
 
+  // Toggling the sticky keys changes the visibility of the icon.
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(IsTrayIconVisible());
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_FALSE(IsTrayIconVisible());
+
+  // Toggling the tap dragging changes the visibility of the icon.
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(IsTrayIconVisible());
+  AccessibilityManager::Get()->EnableTapDragging(false);
+  EXPECT_FALSE(IsTrayIconVisible());
+
   // Enabling all accessibility features.
   SetMagnifierEnabled(true);
   EXPECT_TRUE(IsTrayIconVisible());
@@ -446,6 +486,10 @@
   EXPECT_TRUE(IsTrayIconVisible());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(true);
   EXPECT_TRUE(IsTrayIconVisible());
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(IsTrayIconVisible());
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(IsTrayIconVisible());
   AccessibilityManager::Get()->EnableSpokenFeedback(
       false, ash::A11Y_NOTIFICATION_NONE);
   EXPECT_TRUE(IsTrayIconVisible());
@@ -464,6 +508,10 @@
   AccessibilityManager::Get()->SetCursorHighlightEnabled(false);
   EXPECT_TRUE(IsTrayIconVisible());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
+  EXPECT_TRUE(IsTrayIconVisible());
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_TRUE(IsTrayIconVisible());
+  AccessibilityManager::Get()->EnableTapDragging(false);
   EXPECT_FALSE(IsTrayIconVisible());
 
   // Confirms that prefs::kShouldAlwaysShowAccessibilityMenu doesn't affect
@@ -550,6 +598,18 @@
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
   EXPECT_FALSE(CanCreateMenuItem());
 
+  // Toggling sticky keys changes the visibility of the menu.
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_FALSE(CanCreateMenuItem());
+
+  // Toggling tap dragging changes the visibility of the menu.
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(false);
+  EXPECT_FALSE(CanCreateMenuItem());
+
   // Enabling all accessibility features.
   SetMagnifierEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
@@ -572,6 +632,10 @@
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableVirtualKeyboard(false);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableAutoclick(false);
@@ -592,6 +656,10 @@
   AccessibilityManager::Get()->SetCursorHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(false);
   EXPECT_FALSE(CanCreateMenuItem());
 }
 
@@ -640,36 +708,48 @@
   AccessibilityManager::Get()->EnableVirtualKeyboard(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling large mouse cursor.
+  // The menu remains visible regardless of toggling large mouse cursor.
   AccessibilityManager::Get()->EnableLargeCursor(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableLargeCursor(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling mono audio.
+  // The menu remains visible regardless of toggling mono audio.
   AccessibilityManager::Get()->EnableMonoAudio(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableMonoAudio(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling caret highlight.
+  // The menu remains visible regardless of toggling caret highlight.
   AccessibilityManager::Get()->SetCaretHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetCaretHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling highlight mouse cursor.
+  // The menu remains visible regardless of toggling highlight mouse cursor.
   AccessibilityManager::Get()->SetCursorHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetCursorHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling highlight keyboard focus.
+  // The menu remains visible regardless of toggling highlight keyboard focus.
   AccessibilityManager::Get()->SetFocusHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
+  // The menu remains visible regardless of the toggling sticky keys.
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_TRUE(CanCreateMenuItem());
+
+  // The menu remains visible regardless of the toggling tap dragging.
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(false);
+  EXPECT_TRUE(CanCreateMenuItem());
+
   // Enabling all accessibility features.
   SetMagnifierEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
@@ -692,6 +772,10 @@
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableVirtualKeyboard(false);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableAutoclick(false);
@@ -713,6 +797,10 @@
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(false);
+  EXPECT_TRUE(CanCreateMenuItem());
 
   SetShowAccessibilityOptionsInSystemTrayMenu(false);
 
@@ -752,36 +840,48 @@
   AccessibilityManager::Get()->EnableVirtualKeyboard(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling large mouse cursor.
+  // The menu remains visible regardless of toggling large mouse cursor.
   AccessibilityManager::Get()->EnableLargeCursor(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableLargeCursor(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling mono audio.
+  // The menu remains visible regardless of toggling mono audio.
   AccessibilityManager::Get()->EnableMonoAudio(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableMonoAudio(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling caret highlight.
+  // The menu remains visible regardless of toggling caret highlight.
   AccessibilityManager::Get()->SetCaretHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetCaretHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling highlight mouse cursor.
+  // The menu remains visible regardless of toggling highlight mouse cursor.
   AccessibilityManager::Get()->SetCursorHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetCursorHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
-  // The menu remains visibile regardless of toggling highlight keyboard focus.
+  // The menu remains visible regardless of toggling highlight keyboard focus.
   AccessibilityManager::Get()->SetFocusHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
 
+  // The menu remains visible regardless of toggling sticky keys.
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_TRUE(CanCreateMenuItem());
+
+  // The menu remains visible regardless of toggling tap dragging.
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(false);
+  EXPECT_TRUE(CanCreateMenuItem());
+
   // Enabling all accessibility features.
   SetMagnifierEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
@@ -802,6 +902,10 @@
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(true);
   EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableVirtualKeyboard(false);
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->EnableSpokenFeedback(
@@ -821,6 +925,10 @@
   EXPECT_TRUE(CanCreateMenuItem());
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
   EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_TRUE(CanCreateMenuItem());
+  AccessibilityManager::Get()->EnableTapDragging(false);
+  EXPECT_TRUE(CanCreateMenuItem());
 
   SetShowAccessibilityOptionsInSystemTrayMenu(true);
 
@@ -999,6 +1107,28 @@
   EXPECT_TRUE(CreateDetailedMenu());
   ClickHighlishtKeyboardFocusOnDetailMenu();
   EXPECT_FALSE(AccessibilityManager::Get()->IsFocusHighlightEnabled());
+
+  // Confirms that the check item toggles sticky keys.
+  EXPECT_FALSE(AccessibilityManager::Get()->IsStickyKeysEnabled());
+
+  EXPECT_TRUE(CreateDetailedMenu());
+  ClickStickyKeysOnDetailMenu();
+  EXPECT_TRUE(AccessibilityManager::Get()->IsStickyKeysEnabled());
+
+  EXPECT_TRUE(CreateDetailedMenu());
+  ClickStickyKeysOnDetailMenu();
+  EXPECT_FALSE(AccessibilityManager::Get()->IsStickyKeysEnabled());
+
+  // Confirms that the check item toggles tap dragging.
+  EXPECT_FALSE(AccessibilityManager::Get()->IsTapDraggingEnabled());
+
+  EXPECT_TRUE(CreateDetailedMenu());
+  ClickTapDraggingOnDetailMenu();
+  EXPECT_TRUE(AccessibilityManager::Get()->IsTapDraggingEnabled());
+
+  EXPECT_TRUE(CreateDetailedMenu());
+  ClickTapDraggingOnDetailMenu();
+  EXPECT_FALSE(AccessibilityManager::Get()->IsTapDraggingEnabled());
 }
 
 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
@@ -1016,6 +1146,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling spoken feedback.
@@ -1032,6 +1164,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling spoken feedback.
@@ -1048,6 +1182,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling high contrast.
@@ -1063,6 +1199,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling high contrast.
@@ -1078,6 +1216,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling full screen magnifier.
@@ -1093,6 +1233,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling screen magnifier.
@@ -1108,6 +1250,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling large cursor.
@@ -1123,6 +1267,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling large cursor.
@@ -1138,6 +1284,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enable on-screen keyboard.
@@ -1153,6 +1301,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disable on-screen keyboard.
@@ -1168,6 +1318,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling mono audio.
@@ -1183,6 +1335,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling mono audio.
@@ -1198,6 +1352,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling caret highlight.
@@ -1213,6 +1369,8 @@
   EXPECT_TRUE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling caret highlight.
@@ -1228,6 +1386,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling highlight mouse cursor.
@@ -1243,6 +1403,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_TRUE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling highlight mouse cursor.
@@ -1258,6 +1420,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling highlight keyboard focus.
@@ -1273,6 +1437,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling highlight keyboard focus.
@@ -1288,6 +1454,76 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Enabling sticky keys.
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  EXPECT_TRUE(CreateDetailedMenu());
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_TRUE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Disabling sticky keys.
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  EXPECT_TRUE(CreateDetailedMenu());
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Enabling tap dragging.
+  AccessibilityManager::Get()->EnableTapDragging(true);
+  EXPECT_TRUE(CreateDetailedMenu());
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_TRUE(IsTapDraggingEnabledOnDetailMenu());
+  CloseDetailMenu();
+
+  // Disabling tap dragging.
+  AccessibilityManager::Get()->EnableTapDragging(false);
+  EXPECT_TRUE(CreateDetailedMenu());
+  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
+  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
+  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
+  EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
+  EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu());
+  EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
+  EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling all of the a11y features.
@@ -1302,6 +1538,8 @@
   AccessibilityManager::Get()->SetCaretHighlightEnabled(true);
   AccessibilityManager::Get()->SetCursorHighlightEnabled(true);
   AccessibilityManager::Get()->SetFocusHighlightEnabled(true);
+  AccessibilityManager::Get()->EnableStickyKeys(true);
+  AccessibilityManager::Get()->EnableTapDragging(true);
   EXPECT_TRUE(CreateDetailedMenu());
   EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
@@ -1314,6 +1552,8 @@
   EXPECT_TRUE(IsHighlightMouseCursorEnabledOnDetailMenu());
   // Focus highlighting can't be on when spoken feedback is on
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_TRUE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_TRUE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling all of the a11y features.
@@ -1328,6 +1568,8 @@
   AccessibilityManager::Get()->SetCaretHighlightEnabled(false);
   AccessibilityManager::Get()->SetCursorHighlightEnabled(false);
   AccessibilityManager::Get()->SetFocusHighlightEnabled(false);
+  AccessibilityManager::Get()->EnableStickyKeys(false);
+  AccessibilityManager::Get()->EnableTapDragging(false);
   EXPECT_TRUE(CreateDetailedMenu());
   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
@@ -1339,6 +1581,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Enabling autoclick.
@@ -1354,6 +1598,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 
   // Disabling autoclick.
@@ -1369,6 +1615,8 @@
   EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu());
   EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu());
+  EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu());
+  EXPECT_FALSE(IsTapDraggingEnabledOnDetailMenu());
   CloseDetailMenu();
 }
 
@@ -1389,6 +1637,8 @@
   EXPECT_TRUE(IsCaretHighlightMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsTapDraggingMenuShownOnDetailMenu());
   CloseDetailMenu();
 
   SetLoginStatus(ash::LoginStatus::USER);
@@ -1405,6 +1655,8 @@
   EXPECT_TRUE(IsCaretHighlightMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsTapDraggingMenuShownOnDetailMenu());
   CloseDetailMenu();
 
   SetLoginStatus(ash::LoginStatus::LOCKED);
@@ -1421,6 +1673,8 @@
   EXPECT_TRUE(IsCaretHighlightMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsTapDraggingMenuShownOnDetailMenu());
   CloseDetailMenu();
 
   session_manager::SessionManager::Get()->SetSessionState(
@@ -1441,6 +1695,8 @@
   EXPECT_TRUE(IsCaretHighlightMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu());
   EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu());
+  EXPECT_TRUE(IsTapDraggingMenuShownOnDetailMenu());
   CloseDetailMenu();
 }
 
diff --git a/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc b/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
index e653439d..9c9dae1d 100644
--- a/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
+++ b/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
@@ -211,7 +211,9 @@
                             subresource_filter::kActivationScopeNoSites);
   std::unique_ptr<SubresourceFilterMockComponentUpdateService>
       component_updater(new SubresourceFilterMockComponentUpdateService());
-  EXPECT_CALL(*component_updater, RegisterComponent(testing::_)).Times(1);
+  EXPECT_CALL(*component_updater, RegisterComponent(testing::_))
+      .Times(1)
+      .WillOnce(testing::Return(true));
   RegisterSubresourceFilterComponent(component_updater.get());
   base::RunLoop().RunUntilIdle();
 }
diff --git a/chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc b/chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc
index be8d445..618ec4e6 100644
--- a/chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc
+++ b/chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc
@@ -28,6 +28,7 @@
 #include "content/public/test/test_browser_thread.h"
 #include "content/public/test/test_renderer_host.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -41,8 +42,8 @@
     net::URLRequestJobFactory* interceptor) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   net::URLRequestContext context;
-  std::unique_ptr<net::URLRequest> request(
-      context.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr));
+  std::unique_ptr<net::URLRequest> request(context.CreateRequest(
+      url, net::DEFAULT_PRIORITY, nullptr, TRAFFIC_ANNOTATION_FOR_TESTS));
   std::unique_ptr<net::URLRequestJob> job(
       interceptor->MaybeCreateJobWithProtocolHandler(
           url.scheme(), request.get(), context.network_delegate()));
diff --git a/chrome/browser/data_usage/tab_id_annotator_unittest.cc b/chrome/browser/data_usage/tab_id_annotator_unittest.cc
index 822213b..347fae0 100644
--- a/chrome/browser/data_usage/tab_id_annotator_unittest.cc
+++ b/chrome/browser/data_usage/tab_id_annotator_unittest.cc
@@ -27,6 +27,7 @@
 #include "content/public/common/previews_state.h"
 #include "net/base/network_change_notifier.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -99,7 +100,8 @@
   net::TestURLRequestContext context;
   net::TestDelegate test_delegate;
   std::unique_ptr<net::URLRequest> request =
-      context.CreateRequest(GURL("http://foo.com"), net::IDLE, &test_delegate);
+      context.CreateRequest(GURL("http://foo.com"), net::IDLE, &test_delegate,
+                            TRAFFIC_ANNOTATION_FOR_TESTS);
 
   if (render_process_id != -1 && render_frame_id != -1) {
     // The only args that matter here for the ResourceRequestInfo are the
diff --git a/chrome/browser/data_use_measurement/chrome_data_use_ascriber_unittest.cc b/chrome/browser/data_use_measurement/chrome_data_use_ascriber_unittest.cc
index 4274579..d034b76 100644
--- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber_unittest.cc
+++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber_unittest.cc
@@ -16,6 +16,7 @@
 #include "content/public/common/process_type.h"
 #include "content/public/test/mock_resource_context.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -54,8 +55,8 @@
                                                     int request_id,
                                                     int render_process_id,
                                                     int render_frame_id) {
-    std::unique_ptr<net::URLRequest> request =
-        context()->CreateRequest(GURL(url), net::IDLE, nullptr);
+    std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
+        GURL(url), net::IDLE, nullptr, TRAFFIC_ANNOTATION_FOR_TESTS);
     // TODO(kundaji): Allow request_id to be specified in AllocateForTesting.
     content::ResourceRequestInfo::AllocateForTesting(
         request.get(), content::RESOURCE_TYPE_MAIN_FRAME, resource_context(),
diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
index 101d544..d2008b54 100644
--- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
+++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
@@ -34,10 +34,45 @@
 char ChromeDevToolsManagerDelegate::kTypeBackgroundPage[] = "background_page";
 char ChromeDevToolsManagerDelegate::kTypeWebView[] = "webview";
 
+namespace {
+
 char kLocationsParam[] = "locations";
 char kHostParam[] = "host";
 char kPortParam[] = "port";
 
+bool GetExtensionInfo(content::RenderFrameHost* host,
+                      std::string* name,
+                      std::string* type) {
+  content::WebContents* wc = content::WebContents::FromRenderFrameHost(host);
+  if (!wc)
+    return false;
+  Profile* profile = Profile::FromBrowserContext(wc->GetBrowserContext());
+  if (!profile)
+    return false;
+  const extensions::Extension* extension =
+      extensions::ProcessManager::Get(profile)->GetExtensionForRenderFrameHost(
+          host);
+  if (!extension)
+    return false;
+  extensions::ExtensionHost* extension_host =
+      extensions::ProcessManager::Get(profile)->GetBackgroundHostForExtension(
+          extension->id());
+  if (extension_host && extension_host->host_contents() == wc) {
+    *name = extension->name();
+    *type = ChromeDevToolsManagerDelegate::kTypeBackgroundPage;
+    return true;
+  } else if (extension->is_hosted_app() ||
+             extension->is_legacy_packaged_app() ||
+             extension->is_platform_app()) {
+    *name = extension->name();
+    *type = ChromeDevToolsManagerDelegate::kTypeApp;
+    return true;
+  }
+  return false;
+}
+
+}  // namespace
+
 class ChromeDevToolsManagerDelegate::HostData {
  public:
   HostData() {}
@@ -103,47 +138,20 @@
       return DevToolsAgentHost::kTypePage;
   }
 
-  const extensions::Extension* extension = extensions::ExtensionRegistry::Get(
-      web_contents->GetBrowserContext())->enabled_extensions().GetByID(
-          host->GetLastCommittedURL().host());
-  if (!extension)
+  std::string extension_name;
+  std::string extension_type;
+  if (!GetExtensionInfo(host, &extension_name, &extension_type))
     return DevToolsAgentHost::kTypeOther;
-
-  Profile* profile =
-      Profile::FromBrowserContext(web_contents->GetBrowserContext());
-  if (!profile)
-    return DevToolsAgentHost::kTypeOther;
-
-  extensions::ExtensionHost* extension_host =
-      extensions::ProcessManager::Get(profile)
-          ->GetBackgroundHostForExtension(extension->id());
-  if (extension_host &&
-      extension_host->host_contents() == web_contents) {
-    return kTypeBackgroundPage;
-  } else if (extension->is_hosted_app()
-             || extension->is_legacy_packaged_app()
-             || extension->is_platform_app()) {
-    return kTypeApp;
-  }
-  return DevToolsAgentHost::kTypeOther;
+  return extension_type;
 }
 
 std::string ChromeDevToolsManagerDelegate::GetTargetTitle(
     content::RenderFrameHost* host) {
-  content::WebContents* web_contents =
-      content::WebContents::FromRenderFrameHost(host);
-  if (host->GetParent())
-    return host->GetLastCommittedURL().spec();
-  for (TabContentsIterator it; !it.done(); it.Next()) {
-    if (*it == web_contents)
-      return base::UTF16ToUTF8(web_contents->GetTitle());
-  }
-  const extensions::Extension* extension = extensions::ExtensionRegistry::Get(
-    web_contents->GetBrowserContext())->enabled_extensions().GetByID(
-          host->GetLastCommittedURL().host());
-  if (extension)
-    return extension->name();
-  return "";
+  std::string extension_name;
+  std::string extension_type;
+  if (!GetExtensionInfo(host, &extension_name, &extension_type))
+    return std::string();
+  return extension_name;
 }
 
 scoped_refptr<DevToolsAgentHost>
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index 7191ac6..246800c 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -2208,6 +2208,7 @@
       DownloadUrlParameters::CreateForWebContentsMainFrame(
           web_contents, url));
   params->set_file_path(target_file_full_path);
+  params->set_transient(true);
   DownloadManagerForBrowser(browser())->DownloadUrl(std::move(params));
   observer->WaitForFinished();
   EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE));
@@ -2225,6 +2226,7 @@
   ASSERT_EQ(1u, downloads.size());
   content::DownloadUpdatedObserver(
       downloads[0], base::Bind(&WasAutoOpened)).WaitForEvent();
+  ASSERT_TRUE(downloads[0]->IsTransient());
 }
 
 IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaGet) {
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action_unittest.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action_unittest.cc
index 348d2c8..396d22bc 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action_unittest.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action_unittest.cc
@@ -28,6 +28,7 @@
 #include "extensions/common/extension.h"
 #include "net/base/request_priority.h"
 #include "net/http/http_response_headers.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -146,7 +147,8 @@
     const WebRequestActionSet* action_set,
     RequestStage stage) {
   std::unique_ptr<net::URLRequest> regular_request(
-      context_.CreateRequest(GURL(url_string), net::DEFAULT_PRIORITY, NULL));
+      context_.CreateRequest(GURL(url_string), net::DEFAULT_PRIORITY, NULL,
+                             TRAFFIC_ANNOTATION_FOR_TESTS));
   std::list<LinkedPtrEventResponseDelta> deltas;
   scoped_refptr<net::HttpResponseHeaders> headers(
       new net::HttpResponseHeaders(""));
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
index 474367a..88dbe55f 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
@@ -25,6 +25,7 @@
 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
 #include "extensions/browser/api/web_request/web_request_api_helpers.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -279,8 +280,8 @@
 
   GURL http_url("http://www.example.com");
   net::TestURLRequestContext context;
-  std::unique_ptr<net::URLRequest> http_request(
-      context.CreateRequest(http_url, net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> http_request(context.CreateRequest(
+      http_url, net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
   WebRequestData request_data(http_request.get(), ON_BEFORE_REQUEST);
   matches = registry->GetMatches(request_data);
   EXPECT_EQ(2u, matches.size());
@@ -295,8 +296,8 @@
       base::ContainsKey(matches_ids, std::make_pair(kExtensionId, kRuleId2)));
 
   GURL foobar_url("http://www.foobar.com");
-  std::unique_ptr<net::URLRequest> foobar_request(
-      context.CreateRequest(foobar_url, net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> foobar_request(context.CreateRequest(
+      foobar_url, net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
   request_data.request = foobar_request.get();
   matches = registry->GetMatches(request_data);
   EXPECT_EQ(1u, matches.size());
@@ -422,8 +423,8 @@
 
   GURL url("http://www.google.com");
   net::TestURLRequestContext context;
-  std::unique_ptr<net::URLRequest> request(
-      context.CreateRequest(url, net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> request(context.CreateRequest(
+      url, net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
   WebRequestData request_data(request.get(), ON_BEFORE_REQUEST);
   std::list<LinkedPtrEventResponseDelta> deltas =
       registry->CreateDeltas(NULL, request_data, false);
@@ -471,8 +472,8 @@
 
   GURL url("http://www.google.com/index.html");
   net::TestURLRequestContext context;
-  std::unique_ptr<net::URLRequest> request(
-      context.CreateRequest(url, net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> request(context.CreateRequest(
+      url, net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
   WebRequestData request_data(request.get(), ON_BEFORE_REQUEST);
   std::list<LinkedPtrEventResponseDelta> deltas =
       registry->CreateDeltas(NULL, request_data, false);
@@ -545,8 +546,8 @@
 
   GURL url("http://www.foo.com/test");
   net::TestURLRequestContext context;
-  std::unique_ptr<net::URLRequest> request(
-      context.CreateRequest(url, net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> request(context.CreateRequest(
+      url, net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
   WebRequestData request_data(request.get(), ON_BEFORE_REQUEST);
   std::list<LinkedPtrEventResponseDelta> deltas =
       registry->CreateDeltas(NULL, request_data, false);
@@ -595,8 +596,8 @@
 
   GURL http_url("http://www.example.com");
   net::TestURLRequestContext context;
-  std::unique_ptr<net::URLRequest> http_request(
-      context.CreateRequest(http_url, net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> http_request(context.CreateRequest(
+      http_url, net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
   WebRequestData request_data(http_request.get(), ON_BEFORE_REQUEST);
   matches = registry->GetMatches(request_data);
   EXPECT_EQ(1u, matches.size());
@@ -654,8 +655,8 @@
 
   for (size_t i = 0; i < arraysize(matchingRuleIds); ++i) {
     // Construct the inputs.
-    std::unique_ptr<net::URLRequest> http_request(
-        context.CreateRequest(urls[i], net::DEFAULT_PRIORITY, NULL));
+    std::unique_ptr<net::URLRequest> http_request(context.CreateRequest(
+        urls[i], net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
     WebRequestData request_data(http_request.get(), ON_BEFORE_REQUEST);
     http_request->set_first_party_for_cookies(firstPartyUrls[i]);
     // Now run both rules on the input.
@@ -803,16 +804,16 @@
 
   // No match because match is in the query parameter.
   GURL url1("http://bar.com/index.html?foo.com");
-  std::unique_ptr<net::URLRequest> request1(
-      context.CreateRequest(url1, net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> request1(context.CreateRequest(
+      url1, net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
   WebRequestData request_data1(request1.get(), ON_BEFORE_REQUEST);
   deltas = registry->CreateDeltas(NULL, request_data1, false);
   EXPECT_EQ(0u, deltas.size());
 
   // This is a correct match.
   GURL url2("http://foo.com/index.html");
-  std::unique_ptr<net::URLRequest> request2(
-      context.CreateRequest(url2, net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> request2(context.CreateRequest(
+      url2, net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
   WebRequestData request_data2(request2.get(), ON_BEFORE_REQUEST);
   deltas = registry->CreateDeltas(NULL, request_data2, false);
   EXPECT_EQ(1u, deltas.size());
diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
index 044a7e5f..ba11fc85 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
@@ -56,6 +56,7 @@
 #include "net/dns/mock_host_resolver.h"
 #include "net/log/net_log_with_source.h"
 #include "net/log/test_net_log.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request_job_factory_impl.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest-message.h"
@@ -249,8 +250,9 @@
   GURL redirect_url("about:redirected");
   GURL not_chosen_redirect_url("about:not_chosen");
 
-  std::unique_ptr<net::URLRequest> request(context_->CreateRequest(
-      GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_));
+  std::unique_ptr<net::URLRequest> request(
+      context_->CreateRequest(GURL("about:blank"), net::DEFAULT_PRIORITY,
+                              &delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
   {
     // onBeforeRequest will be dispatched twice initially. The second response -
     // the redirect - should win, since it has a later |install_time|. The
@@ -303,8 +305,9 @@
   }
 
   // Now test the same thing but the extensions answer in reverse order.
-  std::unique_ptr<net::URLRequest> request2(context_->CreateRequest(
-      GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_));
+  std::unique_ptr<net::URLRequest> request2(
+      context_->CreateRequest(GURL("about:blank"), net::DEFAULT_PRIORITY,
+                              &delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
   {
     ExtensionWebRequestEventRouter::EventResponse* response = NULL;
 
@@ -381,7 +384,8 @@
 
   GURL request_url("about:blank");
   std::unique_ptr<net::URLRequest> request(
-      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
+      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_,
+                              TRAFFIC_ANNOTATION_FOR_TESTS));
 
   // onBeforeRequest will be dispatched twice. The second response -
   // the redirect - would win, since it has a later |install_time|, but
@@ -452,7 +456,8 @@
 
   GURL request_url("about:blank");
   std::unique_ptr<net::URLRequest> request(
-      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
+      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_,
+                              TRAFFIC_ANNOTATION_FOR_TESTS));
 
   ExtensionWebRequestEventRouter::EventResponse* response = NULL;
 
@@ -520,7 +525,8 @@
   // The request URL can be arbitrary but must have an HTTP or HTTPS scheme.
   GURL request_url("http://www.example.com");
   std::unique_ptr<net::URLRequest> request(
-      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
+      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_,
+                              TRAFFIC_ANNOTATION_FOR_TESTS));
   request->set_method(method);
   if (content_type != NULL) {
     request->SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType,
@@ -823,8 +829,9 @@
   const GURL request_url("http://www.example.com");
 
   for (size_t i = 0; i < arraysize(kMethods); ++i) {
-    std::unique_ptr<net::URLRequest> request(context_->CreateRequest(
-        request_url, net::DEFAULT_PRIORITY, &delegate_));
+    std::unique_ptr<net::URLRequest> request(
+        context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_,
+                                TRAFFIC_ANNOTATION_FOR_TESTS));
     request->set_method(kMethods[i]);
     ipc_sender_.PushTask(base::Bind(&base::DoNothing));
     request->Start();
@@ -920,7 +927,8 @@
   // Send a request. It should block. Wait for the run loop to become idle.
   GURL request_url("about:blank");
   std::unique_ptr<net::URLRequest> request(
-      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
+      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_,
+                              TRAFFIC_ANNOTATION_FOR_TESTS));
   // Extension response for OnErrorOccurred: Terminate the message loop.
   {
     base::RunLoop run_loop;
@@ -1053,7 +1061,8 @@
 
   GURL request_url("http://doesnotexist/does_not_exist.html");
   std::unique_ptr<net::URLRequest> request(
-      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
+      context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_,
+                              TRAFFIC_ANNOTATION_FOR_TESTS));
 
   // Initialize headers available before extensions are notified of the
   // onBeforeSendHeaders event.
diff --git a/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc
index 3682c62..af3259e 100644
--- a/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc
@@ -19,6 +19,7 @@
 #include "extensions/common/permissions/permissions_data.h"
 #include "ipc/ipc_message.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -122,7 +123,8 @@
   for (size_t i = 0; i < arraysize(sensitive_urls); ++i) {
     GURL sensitive_url(sensitive_urls[i]);
     std::unique_ptr<net::URLRequest> request(
-        context.CreateRequest(sensitive_url, net::DEFAULT_PRIORITY, NULL));
+        context.CreateRequest(sensitive_url, net::DEFAULT_PRIORITY, NULL,
+                              TRAFFIC_ANNOTATION_FOR_TESTS));
     EXPECT_TRUE(WebRequestPermissions::HideRequest(
         extension_info_map_.get(), request.get(), nullptr)) <<
         sensitive_urls[i];
@@ -131,7 +133,8 @@
   for (size_t i = 0; i < arraysize(non_sensitive_urls); ++i) {
     GURL non_sensitive_url(non_sensitive_urls[i]);
     std::unique_ptr<net::URLRequest> request(
-        context.CreateRequest(non_sensitive_url, net::DEFAULT_PRIORITY, NULL));
+        context.CreateRequest(non_sensitive_url, net::DEFAULT_PRIORITY, NULL,
+                              TRAFFIC_ANNOTATION_FOR_TESTS));
     EXPECT_FALSE(WebRequestPermissions::HideRequest(
         extension_info_map_.get(), request.get(), nullptr)) <<
         non_sensitive_urls[i];
@@ -142,7 +145,8 @@
   // Normally this request is not protected:
   GURL non_sensitive_url("http://www.google.com/test.js");
   std::unique_ptr<net::URLRequest> non_sensitive_request(
-      context.CreateRequest(non_sensitive_url, net::DEFAULT_PRIORITY, NULL));
+      context.CreateRequest(non_sensitive_url, net::DEFAULT_PRIORITY, NULL,
+                            TRAFFIC_ANNOTATION_FOR_TESTS));
   EXPECT_FALSE(WebRequestPermissions::HideRequest(
       extension_info_map_.get(), non_sensitive_request.get(), nullptr));
   // If the origin is labeled by the WebStoreAppId, it becomes protected.
@@ -151,7 +155,8 @@
     int site_instance_id = 23;
     int view_id = 17;
     std::unique_ptr<net::URLRequest> sensitive_request(
-        context.CreateRequest(non_sensitive_url, net::DEFAULT_PRIORITY, NULL));
+        context.CreateRequest(non_sensitive_url, net::DEFAULT_PRIORITY, NULL,
+                              TRAFFIC_ANNOTATION_FOR_TESTS));
     ResourceRequestInfo::AllocateForTesting(
         sensitive_request.get(), content::RESOURCE_TYPE_SCRIPT, NULL,
         process_id, view_id, MSG_ROUTING_NONE,
@@ -168,8 +173,9 @@
 
 TEST_F(ExtensionWebRequestHelpersTestWithThreadsTest,
        TestCanExtensionAccessURL_HostPermissions) {
-  std::unique_ptr<net::URLRequest> request(context.CreateRequest(
-      GURL("http://example.com"), net::DEFAULT_PRIORITY, NULL));
+  std::unique_ptr<net::URLRequest> request(
+      context.CreateRequest(GURL("http://example.com"), net::DEFAULT_PRIORITY,
+                            NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
 
   EXPECT_EQ(PermissionsData::ACCESS_ALLOWED,
             WebRequestPermissions::CanExtensionAccessURL(
@@ -237,8 +243,9 @@
                 WebRequestPermissions::REQUIRE_ALL_URLS));
 
   // Make sure that chrome:// URLs cannot be accessed.
-  std::unique_ptr<net::URLRequest> chrome_request(context.CreateRequest(
-    GURL("chrome://version/"), net::DEFAULT_PRIORITY, nullptr));
+  std::unique_ptr<net::URLRequest> chrome_request(
+      context.CreateRequest(GURL("chrome://version/"), net::DEFAULT_PRIORITY,
+                            nullptr, TRAFFIC_ANNOTATION_FOR_TESTS));
 
   EXPECT_EQ(PermissionsData::ACCESS_DENIED,
             WebRequestPermissions::CanExtensionAccessURL(
diff --git a/chrome/browser/extensions/extension_protocols_unittest.cc b/chrome/browser/extensions/extension_protocols_unittest.cc
index 34b5cfd5..ae5afc90 100644
--- a/chrome/browser/extensions/extension_protocols_unittest.cc
+++ b/chrome/browser/extensions/extension_protocols_unittest.cc
@@ -34,6 +34,7 @@
 #include "extensions/common/extension_builder.h"
 #include "extensions/common/file_util.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_job_factory_impl.h"
 #include "net/url_request/url_request_status.h"
@@ -246,7 +247,7 @@
     std::unique_ptr<net::URLRequest> request(
         resource_context_.GetRequestContext()->CreateRequest(
             extension.GetResourceURL(relative_path), net::DEFAULT_PRIORITY,
-            &test_delegate_));
+            &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
     StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME);
     return test_delegate_.request_status();
   }
@@ -301,7 +302,7 @@
       std::unique_ptr<net::URLRequest> request(
           resource_context_.GetRequestContext()->CreateRequest(
               extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY,
-              &test_delegate_));
+              &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
       StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME);
 
       if (cases[i].should_allow_main_frame_load) {
@@ -323,7 +324,7 @@
         std::unique_ptr<net::URLRequest> request(
             resource_context_.GetRequestContext()->CreateRequest(
                 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY,
-                &test_delegate_));
+                &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
         StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME);
 
         if (cases[i].should_allow_sub_frame_load) {
@@ -365,7 +366,8 @@
     std::unique_ptr<net::URLRequest> request(
         resource_context_.GetRequestContext()->CreateRequest(
             extension->GetResourceURL("webstore_icon_16.png"),
-            net::DEFAULT_PRIORITY, &test_delegate_));
+            net::DEFAULT_PRIORITY, &test_delegate_,
+            TRAFFIC_ANNOTATION_FOR_TESTS));
     StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
     EXPECT_EQ(net::OK, test_delegate_.request_status());
     CheckForContentLengthHeader(request.get());
@@ -378,7 +380,8 @@
     std::unique_ptr<net::URLRequest> request(
         resource_context_.GetRequestContext()->CreateRequest(
             extension->GetResourceURL("webstore_icon_16.png"),
-            net::DEFAULT_PRIORITY, &test_delegate_));
+            net::DEFAULT_PRIORITY, &test_delegate_,
+            TRAFFIC_ANNOTATION_FOR_TESTS));
     StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
     EXPECT_EQ(net::OK, test_delegate_.request_status());
     CheckForContentLengthHeader(request.get());
@@ -401,7 +404,7 @@
     std::unique_ptr<net::URLRequest> request(
         resource_context_.GetRequestContext()->CreateRequest(
             extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY,
-            &test_delegate_));
+            &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
     StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
     EXPECT_EQ(net::OK, test_delegate_.request_status());
 
@@ -442,7 +445,7 @@
     std::unique_ptr<net::URLRequest> request(
         resource_context_.GetRequestContext()->CreateRequest(
             extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY,
-            &test_delegate_));
+            &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
     StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME);
     EXPECT_EQ(net::OK, test_delegate_.request_status());
   }
@@ -455,7 +458,7 @@
       std::unique_ptr<net::URLRequest> request(
           resource_context_.GetRequestContext()->CreateRequest(
               extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY,
-              &test_delegate_));
+              &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
       StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME);
       EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status());
     }
@@ -466,7 +469,7 @@
     std::unique_ptr<net::URLRequest> request(
         resource_context_.GetRequestContext()->CreateRequest(
             extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY,
-            &test_delegate_));
+            &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
     StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
     EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status());
   }
diff --git a/chrome/browser/extensions/user_script_listener_unittest.cc b/chrome/browser/extensions/user_script_listener_unittest.cc
index 3614c119..ec0f8111 100644
--- a/chrome/browser/extensions/user_script_listener_unittest.cc
+++ b/chrome/browser/extensions/user_script_listener_unittest.cc
@@ -25,6 +25,7 @@
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "extensions/browser/extension_registry.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_filter.h"
 #include "net/url_request/url_request_interceptor.h"
@@ -175,8 +176,8 @@
       const std::string& url_string,
       net::TestURLRequestContext* context) {
     GURL url(url_string);
-    std::unique_ptr<net::URLRequest> request(
-        context->CreateRequest(url, net::DEFAULT_PRIORITY, delegate));
+    std::unique_ptr<net::URLRequest> request(context->CreateRequest(
+        url, net::DEFAULT_PRIORITY, delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
 
     ResourceThrottle* throttle = listener_->CreateResourceThrottle(
         url, content::RESOURCE_TYPE_MAIN_FRAME);
@@ -351,8 +352,8 @@
   net::TestDelegate delegate;
   net::TestURLRequestContext context;
   GURL url(kMatchingUrl);
-  std::unique_ptr<net::URLRequest> request(
-      context.CreateRequest(url, net::DEFAULT_PRIORITY, &delegate));
+  std::unique_ptr<net::URLRequest> request(context.CreateRequest(
+      url, net::DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
 
   ResourceThrottle* throttle =
       listener_->CreateResourceThrottle(url, content::RESOURCE_TYPE_MAIN_FRAME);
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 2980249f..d3e7af50 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2262,10 +2262,10 @@
 
 #if defined(OS_CHROMEOS)
 
-const char kEnableNativeCupsName[] = "Native CUPS";
+const char kDisableNativeCupsName[] = "Native CUPS";
 
-const char kEnableNativeCupsDescription[] =
-    "Enables the use of the native CUPS printing backend.";
+const char kDisableNativeCupsDescription[] =
+    "Disable the use of the native CUPS printing backend.";
 
 const char kEnableAndroidWallpapersAppName[] = "Android Wallpapers App";
 
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index e3b32b4..b83249b 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2461,10 +2461,10 @@
 #if defined(OS_CHROMEOS)
 
 // Name of the native cups flag.
-extern const char kEnableNativeCupsName[];
+extern const char kDisableNativeCupsName[];
 
 // Description of the native CUPS flag
-extern const char kEnableNativeCupsDescription[];
+extern const char kDisableNativeCupsDescription[];
 
 // Name of the Android Wallpapers App flag.
 extern const char kEnableAndroidWallpapersAppName[];
diff --git a/chrome/browser/geolocation/geolocation_permission_context_unittest.cc b/chrome/browser/geolocation/geolocation_permission_context_unittest.cc
index 7ce6e59..d2b6389 100644
--- a/chrome/browser/geolocation/geolocation_permission_context_unittest.cc
+++ b/chrome/browser/geolocation/geolocation_permission_context_unittest.cc
@@ -1340,6 +1340,8 @@
       SearchGeolocationService::Factory::GetForBrowserContext(profile());
   geo_service->SetSearchEngineDelegateForTest(
       base::MakeUnique<TestSearchEngineDelegate>());
+  geo_service->SetLocationSettingsForTest(
+      base::MakeUnique<MockLocationSettings>());
 
   Profile* otr_profile = profile()->GetOffTheRecordProfile();
 
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc
index 313f5f4c..b43dc63 100644
--- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc
+++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc
@@ -14,6 +14,7 @@
 #include "content/public/browser/navigation_data.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -37,8 +38,9 @@
 TEST_F(ChromeResourceDispatcherHostDelegateTest,
        GetNavigationDataWithDataReductionProxyData) {
   std::unique_ptr<net::URLRequestContext> context(new net::URLRequestContext());
-  std::unique_ptr<net::URLRequest> fake_request(context->CreateRequest(
-      GURL("google.com"), net::RequestPriority::IDLE, nullptr));
+  std::unique_ptr<net::URLRequest> fake_request(
+      context->CreateRequest(GURL("google.com"), net::RequestPriority::IDLE,
+                             nullptr, TRAFFIC_ANNOTATION_FOR_TESTS));
   // Add DataReductionProxyData to URLRequest
   data_reduction_proxy::DataReductionProxyData* data_reduction_proxy_data =
       data_reduction_proxy::DataReductionProxyData::GetDataAndCreateIfNecessary(
@@ -63,8 +65,9 @@
 TEST_F(ChromeResourceDispatcherHostDelegateTest,
        GetNavigationDataWithoutDataReductionProxyData) {
   std::unique_ptr<net::URLRequestContext> context(new net::URLRequestContext());
-  std::unique_ptr<net::URLRequest> fake_request(context->CreateRequest(
-      GURL("google.com"), net::RequestPriority::IDLE, nullptr));
+  std::unique_ptr<net::URLRequest> fake_request(
+      context->CreateRequest(GURL("google.com"), net::RequestPriority::IDLE,
+                             nullptr, TRAFFIC_ANNOTATION_FOR_TESTS));
   std::unique_ptr<ChromeResourceDispatcherHostDelegate> delegate(
       new ChromeResourceDispatcherHostDelegate());
   ChromeNavigationData* chrome_navigation_data =
diff --git a/chrome/browser/media/android/router/media_router_dialog_controller_android.cc b/chrome/browser/media/android/router/media_router_dialog_controller_android.cc
index cfd8ee04..394ec70 100644
--- a/chrome/browser/media/android/router/media_router_dialog_controller_android.cc
+++ b/chrome/browser/media/android/router/media_router_dialog_controller_android.cc
@@ -87,6 +87,18 @@
   CancelPresentationRequest();
 }
 
+void MediaRouterDialogControllerAndroid::OnMediaSourceNotSupported(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& obj) {
+  std::unique_ptr<CreatePresentationConnectionRequest> request =
+      TakeCreateConnectionRequest();
+  if (!request)
+    return;
+
+  request->InvokeErrorCallback(content::PresentationError(
+      content::PRESENTATION_ERROR_NO_AVAILABLE_SCREENS, "No screens found."));
+}
+
 void MediaRouterDialogControllerAndroid::CancelPresentationRequest() {
   std::unique_ptr<CreatePresentationConnectionRequest> request =
       TakeCreateConnectionRequest();
diff --git a/chrome/browser/media/android/router/media_router_dialog_controller_android.h b/chrome/browser/media/android/router/media_router_dialog_controller_android.h
index 1d74b1e9..ffb9c4c 100644
--- a/chrome/browser/media/android/router/media_router_dialog_controller_android.h
+++ b/chrome/browser/media/android/router/media_router_dialog_controller_android.h
@@ -43,6 +43,11 @@
   // taking any action (e.g. closing the route or selecting a sink).
   void OnDialogCancelled(JNIEnv* env,
                          const base::android::JavaParamRef<jobject>& obj);
+  // Notifies the controller the media source URN is not supported so it could
+  // properly reject the request.
+  void OnMediaSourceNotSupported(
+      JNIEnv* env,
+      const base::android::JavaParamRef<jobject>& obj);
 
  private:
   friend class content::WebContentsUserData<MediaRouterDialogControllerAndroid>;
diff --git a/chrome/browser/net/chrome_network_delegate_unittest.cc b/chrome/browser/net/chrome_network_delegate_unittest.cc
index 8a08c72..5020876 100644
--- a/chrome/browser/net/chrome_network_delegate_unittest.cc
+++ b/chrome/browser/net/chrome_network_delegate_unittest.cc
@@ -39,6 +39,7 @@
 #include "net/base/request_priority.h"
 #include "net/http/http_request_headers.h"
 #include "net/socket/socket_test_util.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -73,8 +74,9 @@
   socket_factory->AddSocketDataProvider(&response_socket_data_provider);
   net::TestDelegate test_delegate;
   test_delegate.set_quit_on_complete(true);
-  std::unique_ptr<net::URLRequest> request(context->CreateRequest(
-      GURL("http://example.com"), net::DEFAULT_PRIORITY, &test_delegate));
+  std::unique_ptr<net::URLRequest> request(
+      context->CreateRequest(GURL("http://example.com"), net::DEFAULT_PRIORITY,
+                             &test_delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
 
   content::ResourceRequestInfo::AllocateForTesting(
       request.get(), content::RESOURCE_TYPE_MAIN_FRAME, nullptr, -2, -2, -2,
@@ -262,8 +264,9 @@
     base::HistogramTester histograms;
 
     net::TestDelegate test_delegate;
-    std::unique_ptr<net::URLRequest> request(context()->CreateRequest(
-        test.url, net::DEFAULT_PRIORITY, &test_delegate));
+    std::unique_ptr<net::URLRequest> request(
+        context()->CreateRequest(test.url, net::DEFAULT_PRIORITY,
+                                 &test_delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
     if (test.is_main_frame) {
       request->SetLoadFlags(request->load_flags() |
                             net::LOAD_MAIN_FRAME_DEPRECATED);
@@ -350,8 +353,9 @@
     safe_search_util::ClearForceGoogleSafeSearchCountForTesting();
     safe_search_util::ClearForceYouTubeRestrictCountForTesting();
 
-    std::unique_ptr<net::URLRequest> request(context_.CreateRequest(
-        GURL("http://anyurl.com"), net::DEFAULT_PRIORITY, &delegate_));
+    std::unique_ptr<net::URLRequest> request(
+        context_.CreateRequest(GURL("http://anyurl.com"), net::DEFAULT_PRIORITY,
+                               &delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
 
     request->Start();
     base::RunLoop().RunUntilIdle();
@@ -421,7 +425,7 @@
     allowed_domains_for_apps_.SetValue(allowed);
 
     std::unique_ptr<net::URLRequest> request(context_.CreateRequest(
-        url, net::DEFAULT_PRIORITY, &delegate_));
+        url, net::DEFAULT_PRIORITY, &delegate_, TRAFFIC_ANNOTATION_FOR_TESTS));
 
     request->Start();
     base::RunLoop().RunUntilIdle();
diff --git a/chrome/browser/net/safe_search_util_unittest.cc b/chrome/browser/net/safe_search_util_unittest.cc
index b0d9722..d52f14d7 100644
--- a/chrome/browser/net/safe_search_util_unittest.cc
+++ b/chrome/browser/net/safe_search_util_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/strings/string_piece.h"
 #include "chrome/common/url_constants.h"
 #include "net/http/http_request_headers.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -18,7 +19,8 @@
   ~SafeSearchUtilTest() override {}
 
   std::unique_ptr<net::URLRequest> CreateRequest(const std::string& url) {
-    return context_.CreateRequest(GURL(url), net::DEFAULT_PRIORITY, NULL);
+    return context_.CreateRequest(GURL(url), net::DEFAULT_PRIORITY, NULL,
+                                  TRAFFIC_ANNOTATION_FOR_TESTS);
   }
 
   std::unique_ptr<net::URLRequest> CreateYoutubeRequest() {
diff --git a/chrome/browser/net/spdyproxy/chrome_data_use_group_provider_unittest.cc b/chrome/browser/net/spdyproxy/chrome_data_use_group_provider_unittest.cc
index 22a7a7a..8a36b1f 100644
--- a/chrome/browser/net/spdyproxy/chrome_data_use_group_provider_unittest.cc
+++ b/chrome/browser/net/spdyproxy/chrome_data_use_group_provider_unittest.cc
@@ -11,6 +11,7 @@
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/common/previews_state.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -24,8 +25,9 @@
 
   std::unique_ptr<net::URLRequest> CreateRequestForFrame(int render_process_id,
                                                          int render_frame_id) {
-    std::unique_ptr<net::URLRequest> request = context_.CreateRequest(
-        GURL("http://foo.com/"), net::IDLE, &test_delegate_);
+    std::unique_ptr<net::URLRequest> request =
+        context_.CreateRequest(GURL("http://foo.com/"), net::IDLE,
+                               &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS);
 
     content::ResourceRequestInfo::AllocateForTesting(
         request.get(), content::RESOURCE_TYPE_MAIN_FRAME,
diff --git a/chrome/browser/net/spdyproxy/chrome_data_use_group_unittest.cc b/chrome/browser/net/spdyproxy/chrome_data_use_group_unittest.cc
index b215f61..af86885 100644
--- a/chrome/browser/net/spdyproxy/chrome_data_use_group_unittest.cc
+++ b/chrome/browser/net/spdyproxy/chrome_data_use_group_unittest.cc
@@ -10,6 +10,7 @@
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/common/previews_state.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -18,8 +19,9 @@
 class ChromeDataUseGroupTest : public testing::Test {
  protected:
   void SetUp() override {
-    std::unique_ptr<net::URLRequest> request = context_.CreateRequest(
-        GURL("http://foo.com/index.html"), net::IDLE, &test_delegate_);
+    std::unique_ptr<net::URLRequest> request =
+        context_.CreateRequest(GURL("http://foo.com/index.html"), net::IDLE,
+                               &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS);
 
     content::ResourceRequestInfo::AllocateForTesting(
         request.get(), content::RESOURCE_TYPE_MAIN_FRAME, nullptr,
diff --git a/chrome/browser/notifications/notification_common.h b/chrome/browser/notifications/notification_common.h
index 280c84d..9a6e678c 100644
--- a/chrome/browser/notifications/notification_common.h
+++ b/chrome/browser/notifications/notification_common.h
@@ -24,7 +24,8 @@
   enum Type {
     PERSISTENT = 0,
     NON_PERSISTENT = 1,
-    TYPE_MAX = NON_PERSISTENT
+    EXTENSION = 2,
+    TYPE_MAX = EXTENSION
   };
 
   // Open the Notification settings screen when clicking the right button.
diff --git a/chrome/browser/notifications/notification_platform_bridge_linux.cc b/chrome/browser/notifications/notification_platform_bridge_linux.cc
index b591f4f..36ab6d65 100644
--- a/chrome/browser/notifications/notification_platform_bridge_linux.cc
+++ b/chrome/browser/notifications/notification_platform_bridge_linux.cc
@@ -8,15 +8,26 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/stl_util.h"
+#include "base/strings/nullable_string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/notifications/native_notification_display_service.h"
 #include "chrome/browser/notifications/notification.h"
+#include "chrome/browser/notifications/notification_display_service_factory.h"
+#include "chrome/browser/profiles/profile_manager.h"
 
 namespace {
 
 const char kFreedesktopNotificationsName[] = "org.freedesktop.Notifications";
 const char kFreedesktopNotificationsPath[] = "/org/freedesktop/Notifications";
 
+void AddActionToNotification(GVariantBuilder* actions_builder,
+                             const char* action_id,
+                             const char* button_label) {
+  g_variant_builder_add(actions_builder, "s", action_id);
+  g_variant_builder_add(actions_builder, "s", button_label);
+}
+
 // Callback used by GLib when the "Notify" message completes for the
 // first time.
 void NotifyCompleteReceiver(GObject* source_object,
@@ -34,6 +45,26 @@
   platform_bridge_linux->NotifyCompleteInternal(user_data, value);
 }
 
+// Runs once the profile has been loaded in order to perform a given
+// |operation| on a notification.
+void ProfileLoadedCallback(NotificationCommon::Operation operation,
+                           NotificationCommon::Type notification_type,
+                           const std::string& origin,
+                           const std::string& notification_id,
+                           int action_index,
+                           const base::NullableString16& reply,
+                           Profile* profile) {
+  if (!profile)
+    return;
+
+  NotificationDisplayService* display_service =
+      NotificationDisplayServiceFactory::GetForProfile(profile);
+
+  static_cast<NativeNotificationDisplayService*>(display_service)
+      ->ProcessNotificationOperation(operation, notification_type, origin,
+                                     notification_id, action_index, reply);
+}
+
 }  // namespace
 
 // static
@@ -41,7 +72,6 @@
   GDBusProxy* notification_proxy = g_dbus_proxy_new_for_bus_sync(
       G_BUS_TYPE_SESSION,
       static_cast<GDBusProxyFlags>(G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
-                                   G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS |
                                    G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START),
       nullptr, kFreedesktopNotificationsName, kFreedesktopNotificationsPath,
       kFreedesktopNotificationsName, nullptr, nullptr);
@@ -51,12 +81,16 @@
 }
 
 struct NotificationPlatformBridgeLinux::NotificationData {
-  NotificationData(const std::string& notification_id,
+  NotificationData(NotificationCommon::Type notification_type,
+                   const std::string& notification_id,
                    const std::string& profile_id,
-                   bool is_incognito)
-      : notification_id(notification_id),
+                   bool is_incognito,
+                   const GURL& origin_url)
+      : notification_type(notification_type),
+        notification_id(notification_id),
         profile_id(profile_id),
-        is_incognito(is_incognito) {}
+        is_incognito(is_incognito),
+        origin_url(origin_url) {}
 
   ~NotificationData() {
     if (cancellable)
@@ -68,10 +102,16 @@
   uint32_t dbus_id = 0;
 
   // Same parameters used by NotificationPlatformBridge::Display().
+  const NotificationCommon::Type notification_type;
   const std::string notification_id;
   const std::string profile_id;
   const bool is_incognito;
 
+  // A copy of the origin_url from the underlying
+  // message_center::Notification.  Used to pass back to
+  // NativeNotificationDisplayService.
+  const GURL origin_url;
+
   // Used to cancel the initial "Notify" message so we don't call
   // NotificationPlatformBridgeLinux::NotifyCompleteInternal() with a
   // destroyed Notification.
@@ -80,7 +120,6 @@
   // If not null, the data to update the notification with once
   // |dbus_id| becomes available.
   std::unique_ptr<Notification> update_data;
-  NotificationCommon::Type update_type = NotificationCommon::TYPE_MAX;
 
   // If true, indicates the notification should be closed once
   // |dbus_id| becomes available.
@@ -89,9 +128,15 @@
 
 NotificationPlatformBridgeLinux::NotificationPlatformBridgeLinux(
     GDBusProxy* notification_proxy)
-    : notification_proxy_(notification_proxy) {}
+    : notification_proxy_(notification_proxy) {
+  proxy_signal_handler_ = g_signal_connect(
+      notification_proxy_, "g-signal", G_CALLBACK(GSignalReceiverThunk), this);
+}
 
-NotificationPlatformBridgeLinux::~NotificationPlatformBridgeLinux() {}
+NotificationPlatformBridgeLinux::~NotificationPlatformBridgeLinux() {
+  if (proxy_signal_handler_)
+    g_signal_handler_disconnect(notification_proxy_, proxy_signal_handler_);
+}
 
 void NotificationPlatformBridgeLinux::Display(
     NotificationCommon::Type notification_type,
@@ -99,19 +144,21 @@
     const std::string& profile_id,
     bool is_incognito,
     const Notification& notification) {
-  NotificationData* data = FindNotificationData(notification_id, profile_id);
+  NotificationData* data =
+      FindNotificationData(notification_id, profile_id, is_incognito);
   if (data) {
     // Update an existing notification.
+    DCHECK_EQ(data->notification_type, notification_type);
     if (data->dbus_id) {
       NotifyNow(data->dbus_id, notification_type, notification, nullptr,
                 nullptr, nullptr);
     } else {
-      data->update_type = notification_type;
       data->update_data = base::MakeUnique<Notification>(notification);
     }
   } else {
     // Send the notification for the first time.
-    data = new NotificationData(notification_id, profile_id, is_incognito);
+    data = new NotificationData(notification_type, notification_id, profile_id,
+                                is_incognito, notification.origin_url());
     data->cancellable.reset(g_cancellable_new());
     notifications_.emplace(data, base::WrapUnique(data));
     NotifyNow(0, notification_type, notification, data->cancellable,
@@ -122,15 +169,21 @@
 void NotificationPlatformBridgeLinux::Close(
     const std::string& profile_id,
     const std::string& notification_id) {
-  NotificationData* data = FindNotificationData(notification_id, profile_id);
-  if (!data)
-    return;
-  if (data->dbus_id) {
-    CloseNow(data->dbus_id);
-    notifications_.erase(data);
-  } else {
-    data->should_close = true;
+  std::vector<NotificationData*> to_erase;
+  for (const auto& pair : notifications_) {
+    NotificationData* data = pair.first;
+    if (data->notification_id == notification_id &&
+        data->profile_id == profile_id) {
+      if (data->dbus_id) {
+        CloseNow(data->dbus_id);
+        to_erase.push_back(data);
+      } else {
+        data->should_close = true;
+      }
+    }
   }
+  for (NotificationData* data : to_erase)
+    notifications_.erase(data);
 }
 
 void NotificationPlatformBridgeLinux::GetDisplayed(
@@ -157,8 +210,8 @@
     CloseNow(data->dbus_id);
     notifications_.erase(data);
   } else if (data->update_data) {
-    NotifyNow(data->dbus_id, data->update_type, *data->update_data, nullptr,
-              nullptr, nullptr);
+    NotifyNow(data->dbus_id, data->notification_type, *data->update_data,
+              nullptr, nullptr, nullptr);
     data->update_data.reset();
   }
 }
@@ -171,11 +224,25 @@
     GAsyncReadyCallback callback,
     gpointer user_data) {
   // TODO(thomasanderson): Add a complete implementation.
+
+  GVariantBuilder actions_builder;
+  // Even-indexed elements in this array are action IDs passed back to
+  // us in GSignalReceiver.  Odd-indexed ones contain the button text.
+  g_variant_builder_init(&actions_builder, G_VARIANT_TYPE("as"));
+  if (notification.clickable()) {
+    // Special case: the pair ("default", "") will not add a button,
+    // but instead makes the entire notification clickable.
+    AddActionToNotification(&actions_builder, "default", "");
+  }
+  // Always add a settings button.
+  AddActionToNotification(&actions_builder, "settings", "Settings");
+
   const std::string title = base::UTF16ToUTF8(notification.title());
   const std::string message = base::UTF16ToUTF8(notification.message());
+
   GVariant* parameters =
       g_variant_new("(susssasa{sv}i)", "", dbus_id, "", title.c_str(),
-                    message.c_str(), nullptr, nullptr, -1);
+                    message.c_str(), &actions_builder, nullptr, -1);
   g_dbus_proxy_call(notification_proxy_, "Notify", parameters,
                     G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback,
                     user_data);
@@ -190,14 +257,76 @@
 NotificationPlatformBridgeLinux::NotificationData*
 NotificationPlatformBridgeLinux::FindNotificationData(
     const std::string& notification_id,
-    const std::string& profile_id) {
+    const std::string& profile_id,
+    bool is_incognito) {
   for (const auto& pair : notifications_) {
     NotificationData* data = pair.first;
     if (data->notification_id == notification_id &&
-        data->profile_id == profile_id) {
+        data->profile_id == profile_id && data->is_incognito == is_incognito) {
       return data;
     }
   }
 
   return nullptr;
 }
+
+NotificationPlatformBridgeLinux::NotificationData*
+NotificationPlatformBridgeLinux::FindNotificationData(uint32_t dbus_id) {
+  for (const auto& pair : notifications_) {
+    NotificationData* data = pair.first;
+    if (data->dbus_id == dbus_id)
+      return data;
+  }
+
+  return nullptr;
+}
+
+void NotificationPlatformBridgeLinux::ForwardNotificationOperation(
+    uint32_t dbus_id,
+    NotificationCommon::Operation operation,
+    int action_index) {
+  NotificationData* data = FindNotificationData(dbus_id);
+  if (!data) {
+    // This notification either belongs to a different app or we
+    // already removed the NotificationData after sending a
+    // "CloseNotification" message.
+    return;
+  }
+
+  ProfileManager* profile_manager = g_browser_process->profile_manager();
+  DCHECK(profile_manager);
+
+  profile_manager->LoadProfile(
+      data->profile_id, data->is_incognito,
+      base::Bind(&ProfileLoadedCallback, operation, data->notification_type,
+                 data->origin_url.spec(), data->notification_id, action_index,
+                 base::NullableString16()));
+}
+
+void NotificationPlatformBridgeLinux::GSignalReceiver(GDBusProxy* proxy,
+                                                      const char* sender_name,
+                                                      const char* sender_signal,
+                                                      GVariant* parameters) {
+  uint32_t dbus_id = 0;
+  if (strcmp("NotificationClosed", sender_signal) == 0 &&
+      g_variant_is_of_type(parameters, G_VARIANT_TYPE("(uu)"))) {
+    uint32_t reason;
+    g_variant_get(parameters, "(uu)", &dbus_id, &reason);
+    ForwardNotificationOperation(dbus_id, NotificationCommon::CLOSE, -1);
+    // std::unordered_map::erase(nullptr) is safe here.
+    notifications_.erase(FindNotificationData(dbus_id));
+  } else if (strcmp("ActionInvoked", sender_signal) == 0 &&
+             g_variant_is_of_type(parameters, G_VARIANT_TYPE("(us)"))) {
+    const gchar* action = nullptr;
+    g_variant_get(parameters, "(u&s)", &dbus_id, &action);
+    DCHECK(action);
+
+    if (strcmp(action, "default") == 0) {
+      ForwardNotificationOperation(dbus_id, NotificationCommon::CLICK, 0);
+    } else if (strcmp(action, "settings") == 0) {
+      ForwardNotificationOperation(dbus_id, NotificationCommon::SETTINGS, -1);
+    } else {
+      NOTIMPLEMENTED() << "No custom buttons just yet!";
+    }
+  }
+}
diff --git a/chrome/browser/notifications/notification_platform_bridge_linux.h b/chrome/browser/notifications/notification_platform_bridge_linux.h
index c84676a..30a95b2 100644
--- a/chrome/browser/notifications/notification_platform_bridge_linux.h
+++ b/chrome/browser/notifications/notification_platform_bridge_linux.h
@@ -11,6 +11,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/notifications/notification_platform_bridge.h"
+#include "ui/base/glib/glib_signal.h"
 #include "ui/base/glib/scoped_gobject.h"
 
 class NotificationPlatformBridgeLinux : public NotificationPlatformBridge {
@@ -40,6 +41,9 @@
 
   ScopedGObject<GDBusProxy> notification_proxy_;
 
+  // Used to disconnect from "g-signal" during destruction.
+  gulong proxy_signal_handler_ = 0;
+
   // A std::set<std::unique_ptr<T>> doesn't work well because
   // eg. std::set::erase(T) would require a std::unique_ptr<T>
   // argument, so the data would get double-destructed.
@@ -59,8 +63,25 @@
   // Makes the "CloseNotification" call to D-Bus.
   void CloseNow(uint32_t dbus_id);
 
+  void ForwardNotificationOperation(uint32_t dbus_id,
+                                    NotificationCommon::Operation operation,
+                                    int action_index);
+
+  // GSignalReceiver: The function that GLib calls into for
+  // ActionInvoked and NotificationClosed signals.
+  CHROMEG_CALLBACK_3(NotificationPlatformBridgeLinux,
+                     void,
+                     GSignalReceiver,
+                     GDBusProxy*,
+                     const char*,
+                     const char*,
+                     GVariant*);
+
   NotificationData* FindNotificationData(const std::string& notification_id,
-                                         const std::string& profile_id);
+                                         const std::string& profile_id,
+                                         bool is_incognito);
+
+  NotificationData* FindNotificationData(uint32_t dbus_id);
 
   DISALLOW_COPY_AND_ASSIGN(NotificationPlatformBridgeLinux);
 };
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.mm b/chrome/browser/notifications/notification_platform_bridge_mac.mm
index 50a54b6..16220a75 100644
--- a/chrome/browser/notifications/notification_platform_bridge_mac.mm
+++ b/chrome/browser/notifications/notification_platform_bridge_mac.mm
@@ -172,8 +172,12 @@
   [builder setTitle:base::SysUTF16ToNSString(notification.title())];
   [builder setContextMessage:base::SysUTF16ToNSString(notification.message())];
 
+  bool requires_attribution =
+      notification.context_message().empty() &&
+      notification_type != NotificationCommon::EXTENSION;
+
   base::string16 subtitle =
-      notification.context_message().empty()
+      requires_attribution
           ? url_formatter::FormatOriginForSecurityDisplay(
                 url::Origin(notification.origin_url()),
                 url_formatter::SchemeDisplay::OMIT_HTTP_AND_HTTPS)
@@ -184,6 +188,8 @@
     [builder setIcon:notification.icon().ToNSImage()];
   }
 
+  [builder setShowSettingsButton:(notification_type !=
+                                  NotificationCommon::EXTENSION)];
   std::vector<message_center::ButtonInfo> buttons = notification.buttons();
   if (!buttons.empty()) {
     DCHECK_LE(buttons.size(), blink::kWebNotificationMaxActions);
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm b/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
index e633c457..e1a819f 100644
--- a/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
+++ b/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
@@ -54,6 +54,7 @@
     [builder setProfileId:@"profile_id"];
     [builder setIncognito:false];
     [builder setNotificationType:@(NotificationCommon::PERSISTENT)];
+    [builder setShowSettingsButton:true];
 
     return [builder buildUserNotification];
   }
diff --git a/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc b/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc
index b454f6d..dae163b3 100644
--- a/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc
+++ b/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc
@@ -351,9 +351,11 @@
   EXPECT_EQ("Title", base::UTF16ToUTF8(all_options_notification.title()));
   EXPECT_EQ("Contents", base::UTF16ToUTF8(all_options_notification.message()));
   EXPECT_EQ("replace-id", all_options_notification.tag());
+#if !defined(OS_MACOSX)
   EXPECT_FALSE(all_options_notification.image().IsEmpty());
   EXPECT_EQ(kIconWidth, all_options_notification.image().Width());
   EXPECT_EQ(kIconHeight, all_options_notification.image().Height());
+#endif
   EXPECT_FALSE(all_options_notification.icon().IsEmpty());
   EXPECT_EQ(kIconWidth, all_options_notification.icon().Width());
   EXPECT_EQ(kIconHeight, all_options_notification.icon().Height());
diff --git a/chrome/browser/prefs/active_profile_pref_service.cc b/chrome/browser/prefs/active_profile_pref_service.cc
index bafda8e..36f795f0 100644
--- a/chrome/browser/prefs/active_profile_pref_service.cc
+++ b/chrome/browser/prefs/active_profile_pref_service.cc
@@ -8,9 +8,10 @@
 #include "content/public/browser/browser_context.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "services/service_manager/public/cpp/connector.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 
-ActiveProfilePrefService::ActiveProfilePrefService() = default;
+ActiveProfilePrefService::ActiveProfilePrefService() {
+  registry_.AddInterface<prefs::mojom::PrefStoreConnector>(this);
+}
 
 ActiveProfilePrefService::~ActiveProfilePrefService() = default;
 
@@ -19,7 +20,7 @@
     const std::vector<PrefValueStore::PrefStoreType>& already_connected_types,
     const ConnectCallback& callback) {
   auto* connector = content::BrowserContext::GetConnectorFor(
-      ProfileManager::GetActiveUserProfile());
+      ProfileManager::GetActiveUserProfile()->GetOriginalProfile());
   connector->BindInterface(prefs::mojom::kServiceName, &connector_ptr_);
   connector_ptr_.set_connection_error_handler(base::Bind(
       &ActiveProfilePrefService::OnConnectError, base::Unretained(this)));
@@ -35,21 +36,23 @@
 
 void ActiveProfilePrefService::OnStart() {}
 
-bool ActiveProfilePrefService::OnConnect(
-    const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
+void ActiveProfilePrefService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
   // N.B. This check is important as not doing it would allow one user to read
   // another user's prefs.
-  if (remote_info.identity.user_id() != service_manager::mojom::kRootUserID) {
+  // TODO(beng): This should be obsoleted by Service Manager user id routing.
+  if (source_info.identity.user_id() != service_manager::mojom::kRootUserID) {
     LOG(WARNING) << "Blocked service instance="
-                 << remote_info.identity.instance()
-                 << ", name=" << remote_info.identity.name()
-                 << ", user_id=" << remote_info.identity.user_id()
+                 << source_info.identity.instance()
+                 << ", name=" << source_info.identity.name()
+                 << ", user_id=" << source_info.identity.user_id()
                  << " from connecting to the active profile's pref service.";
-    return false;
+    return;
   }
-  registry->AddInterface<prefs::mojom::PrefStoreConnector>(this);
-  return true;
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void ActiveProfilePrefService::OnConnectError() {
diff --git a/chrome/browser/prefs/active_profile_pref_service.h b/chrome/browser/prefs/active_profile_pref_service.h
index 7c661b4..1937da0 100644
--- a/chrome/browser/prefs/active_profile_pref_service.h
+++ b/chrome/browser/prefs/active_profile_pref_service.h
@@ -11,6 +11,7 @@
 #include "components/prefs/pref_value_store.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/preferences/public/interfaces/preferences.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 
@@ -41,14 +42,16 @@
 
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // Called if forwarding the connection request to the per-profile service
   // instance failed.
   void OnConnectError();
 
   prefs::mojom::PrefStoreConnectorPtr connector_ptr_;
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<prefs::mojom::PrefStoreConnector> connector_bindings_;
 
   DISALLOW_COPY_AND_ASSIGN(ActiveProfilePrefService);
diff --git a/chrome/browser/prerender/prerender_resource_throttle_unittest.cc b/chrome/browser/prerender/prerender_resource_throttle_unittest.cc
index e9b5872d..7726902 100644
--- a/chrome/browser/prerender/prerender_resource_throttle_unittest.cc
+++ b/chrome/browser/prerender/prerender_resource_throttle_unittest.cc
@@ -23,6 +23,7 @@
 #include "ipc/ipc_message.h"
 #include "net/base/request_priority.h"
 #include "net/test/url_request/url_request_mock_http_job.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/redirect_info.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
@@ -211,7 +212,7 @@
   DeferredRedirectDelegate delegate;
   std::unique_ptr<net::URLRequest> request(url_request_context.CreateRequest(
       net::URLRequestMockHTTPJob::GetMockUrl("prerender/image-deferred.png"),
-      net::DEFAULT_PRIORITY, &delegate));
+      net::DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
   content::ResourceRequestInfo::AllocateForTesting(
       request.get(), content::RESOURCE_TYPE_IMAGE, NULL, kDefaultChildId,
       kDefaultRouteId, MSG_ROUTING_NONE,
diff --git a/chrome/browser/profile_resetter/profile_resetter.cc b/chrome/browser/profile_resetter/profile_resetter.cc
index d9ef5a1..b23f2d4 100644
--- a/chrome/browser/profile_resetter/profile_resetter.cc
+++ b/chrome/browser/profile_resetter/profile_resetter.cc
@@ -18,7 +18,6 @@
 #include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/google/google_url_tracker_factory.h"
 #include "chrome/browser/profile_resetter/brandcoded_default_settings.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
@@ -32,7 +31,6 @@
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/browser/website_settings_info.h"
 #include "components/content_settings/core/browser/website_settings_registry.h"
-#include "components/google/core/browser/google_url_tracker.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/scoped_user_pref_update.h"
 #include "components/search_engines/search_engines_pref_names.h"
@@ -183,18 +181,6 @@
 
     template_url_service_->RepairPrepopulatedSearchEngines();
 
-    // Reset Google search URL.
-    const TemplateURL* default_search_provider =
-        template_url_service_->GetDefaultSearchProvider();
-    if (default_search_provider &&
-        default_search_provider->HasGoogleBaseURLs(
-            template_url_service_->search_terms_data())) {
-      GoogleURLTracker* tracker =
-          GoogleURLTrackerFactory::GetForProfile(profile_);
-      if (tracker)
-        tracker->RequestServerCheck(true);
-    }
-
     MarkAsDone(DEFAULT_SEARCH_ENGINE);
   } else {
     template_url_service_sub_ =
diff --git a/chrome/browser/resources/device_log_ui/device_log_ui.css b/chrome/browser/resources/device_log_ui/device_log_ui.css
index d89cc7a8..e4dc5da 100644
--- a/chrome/browser/resources/device_log_ui/device_log_ui.css
+++ b/chrome/browser/resources/device_log_ui/device_log_ui.css
@@ -97,7 +97,7 @@
   height: 14px;
   margin-top: 2px;
   padding: 0 4px 2px 4px;
-  width: 50px;
+  width: 65px;
 }
 
 .log-type-login {
diff --git a/chrome/browser/resources/device_log_ui/device_log_ui.html b/chrome/browser/resources/device_log_ui/device_log_ui.html
index fbf99df..17635af 100644
--- a/chrome/browser/resources/device_log_ui/device_log_ui.html
+++ b/chrome/browser/resources/device_log_ui/device_log_ui.html
@@ -46,6 +46,10 @@
       <span i18n-content="logTypePowerText"></span>
     </label>
     <label>
+      <input id="log-type-bluetooth" type="checkbox">
+      <span i18n-content="logTypeBluetoothText"></span>
+    </label>
+    <label>
       <input id="log-type-usb" type="checkbox">
       <span i18n-content="logTypeUsbText"></span>
     </label>
diff --git a/chrome/browser/resources/options/browser_options.js b/chrome/browser/resources/options/browser_options.js
index 92d5a88..2266bdbe 100644
--- a/chrome/browser/resources/options/browser_options.js
+++ b/chrome/browser/resources/options/browser_options.js
@@ -724,7 +724,7 @@
 
       // CUPS Print section (CrOS only).
       if (cr.isChromeOS) {
-        if (loadTimeData.getBoolean('cupsPrintEnabled')) {
+        if (!loadTimeData.getBoolean('cupsPrintDisabled')) {
           $('cups-printers-section').hidden = false;
           $('cupsPrintersManageButton').onclick = function() {
             chrome.send('showCupsPrintDevicesPage');
diff --git a/chrome/browser/resources/settings/a11y_page/a11y_page.html b/chrome/browser/resources/settings/a11y_page/a11y_page.html
index cd50d93f..c37925e 100644
--- a/chrome/browser/resources/settings/a11y_page/a11y_page.html
+++ b/chrome/browser/resources/settings/a11y_page/a11y_page.html
@@ -18,13 +18,10 @@
     <settings-animated-pages id="pages" current-route="{{currentRoute}}"
         section="a11y">
       <neon-animatable route-path="default">
-        <div class="settings-box first">
-          <div id="optionsInMenuLabel" class="start">
-            $i18n{optionsInMenuLabel}
-          </div>
+        <div class="settings-box">
           <settings-toggle-button id="optionsInMenuToggle"
-              pref="{{prefs.settings.a11y.enable_menu}}"
-              aria-labelledby="optionsInMenuLabel">
+              label="$i18n{optionsInMenuLabel}"
+              pref="{{prefs.settings.a11y.enable_menu}}">
           </settings-toggle-button>
         </div>
         <div id="subpage-trigger" class="settings-box two-line"
diff --git a/chrome/browser/resources/settings/people_page/people_page.html b/chrome/browser/resources/settings/people_page/people_page.html
index 8cc134f..30ce4b1b 100644
--- a/chrome/browser/resources/settings/people_page/people_page.html
+++ b/chrome/browser/resources/settings/people_page/people_page.html
@@ -84,18 +84,6 @@
         width: 40px;
       }
 
-      /* Avoid orphaned english text (as requested by bettes@) */
-      #activity-controls .secondary {
-        max-width: 90%;
-      }
-
-      #googleg-logo {
-        background-image: url(../../../../../ui/webui/resources/images/200-logo_googleg.png);
-        background-size: cover;
-        height: 16px;
-        width: 16px;
-      }
-
       #disconnectDialog .footer .settings-box {
         --settings-box-row-padding: 0;
       }
@@ -205,23 +193,6 @@
           </div>
         </template>
 
-        <div class="settings-box three-line" id="activity-controls"
-            on-tap="onActivityControlsTap_" actionable
-            hidden="[[!syncStatus.signedIn]]">
-          <div class="icon-container">
-            <div id="googleg-logo"></div>
-          </div>
-          <div class="middle">
-            $i18n{personalizeGoogleServicesTitle}
-            <div class="secondary" id="personalizeGoogleServicesSecondary">
-              $i18n{personalizeGoogleServicesText}
-            </div>
-          </div>
-          <button class="icon-external" is="paper-icon-button-light"
-              aria-label="$i18n{personalizeGoogleServicesTitle}"
-              aria-describedby="personalizeGoogleServicesSecondary"></button>
-        </div>
-
 <if expr="chromeos">
         <template is="dom-if" if="[[!quickUnlockEnabled_]]">
           <div class="settings-box">
@@ -310,14 +281,9 @@
 </if>
 
         <template is="dom-if" if="[[profileManagesSupervisedUsers_]]">
-          <div id="manageSupervisedUsersContainer" class="settings-box two-line"
+          <div id="manageSupervisedUsersContainer" class="settings-box"
               on-tap="onManageSupervisedUsers_" actionable>
-            <div class="start">
-              $i18n{manageSupervisedUsers}
-              <div class="secondary" id="manageSupervisedUsersSecondary">
-                $i18n{manageSupervisedUsersDescription}
-              </div>
-            </div>
+            <div class="start">$i18n{manageSupervisedUsers}</div>
             <button class="icon-external" is="paper-icon-button-light"
                 aria-label="$i18n{manageSupervisedUsers}"
                 aria-describedby="manageSupervisedUsersSecondary"></button>
diff --git a/chrome/browser/resources/settings/people_page/people_page.js b/chrome/browser/resources/settings/people_page/people_page.js
index 79aab13b..c53125e2 100644
--- a/chrome/browser/resources/settings/people_page/people_page.js
+++ b/chrome/browser/resources/settings/people_page/people_page.js
@@ -296,11 +296,6 @@
 // </if>
 
   /** @private */
-  onActivityControlsTap_: function() {
-    this.syncBrowserProxy_.openActivityControlsUrl();
-  },
-
-  /** @private */
   onSigninTap_: function() {
     this.syncBrowserProxy_.startSignIn();
   },
diff --git a/chrome/browser/resources/settings/people_page/sync_page.html b/chrome/browser/resources/settings/people_page/sync_page.html
index a194e435..ac93a34 100644
--- a/chrome/browser/resources/settings/people_page/sync_page.html
+++ b/chrome/browser/resources/settings/people_page/sync_page.html
@@ -250,6 +250,19 @@
       </div>
 
       <div class="settings-box two-line" actionable
+          on-tap="onActivityControlsTap_">
+        <div class="start">
+          $i18n{personalizeGoogleServicesTitle}
+          <div class="secondary" id="activityControlsSecondary">
+            $i18n{personalizeGoogleServicesText}
+          </div>
+        </div>
+        <button class="icon-external" is="paper-icon-button-light"
+            aria-label="$i18n{personalizeGoogleServicesTitle}"
+            aria-describedby="activityControlsSecondary"></button>
+      </div>
+
+      <div class="settings-box two-line" actionable
           on-tap="onManageSyncedDataTap_">
         <div class="start">
           $i18n{manageSyncedDataTitle}
diff --git a/chrome/browser/resources/settings/people_page/sync_page.js b/chrome/browser/resources/settings/people_page/sync_page.js
index 3b65c2c..3473acdc 100644
--- a/chrome/browser/resources/settings/people_page/sync_page.js
+++ b/chrome/browser/resources/settings/people_page/sync_page.js
@@ -270,6 +270,11 @@
   },
 
   /** @private */
+  onActivityControlsTap_: function() {
+    this.browserProxy_.openActivityControlsUrl();
+  },
+
+  /** @private */
   onManageSyncedDataTap_: function() {
     window.open(loadTimeData.getString('syncDashboardUrl'));
   },
diff --git a/chrome/browser/resources/settings/settings_ui/settings_ui.html b/chrome/browser/resources/settings/settings_ui/settings_ui.html
index 40ceb14..7160876 100644
--- a/chrome/browser/resources/settings/settings_ui/settings_ui.html
+++ b/chrome/browser/resources/settings/settings_ui/settings_ui.html
@@ -105,11 +105,10 @@
       </div>
     </dialog>
     <div id="dropShadow"></div>
-    <div id="container">
+    <div id="container" class="no-outline" tabindex="-1">
       <!-- Used by IntersectionObserver, has a 0px height intentionally -->
       <div id="intersectionProbe"></div>
-      <settings-main id="main" prefs="{{prefs}}" tabindex="-1"
-          class="no-outline"
+      <settings-main id="main" prefs="{{prefs}}"
           toolbar-spinner-active="{{toolbarSpinnerActive_}}"
           page-visibility="[[pageVisibility_]]"
           show-android-apps="[[showAndroidApps_]]"
diff --git a/chrome/browser/resources/settings/settings_ui/settings_ui.js b/chrome/browser/resources/settings/settings_ui/settings_ui.js
index 9a6240e..f0d6c15 100644
--- a/chrome/browser/resources/settings/settings_ui/settings_ui.js
+++ b/chrome/browser/resources/settings/settings_ui/settings_ui.js
@@ -268,7 +268,7 @@
 
   /** @private */
   onMenuClosed_: function() {
-    this.$$('settings-main').focus();
+    this.$.container.focus();
   },
 
   /** @private */
diff --git a/chrome/browser/resources/signin/sync_confirmation/sync_confirmation.html b/chrome/browser/resources/signin/sync_confirmation/sync_confirmation.html
index 582a25a..2d03697 100644
--- a/chrome/browser/resources/signin/sync_confirmation/sync_confirmation.html
+++ b/chrome/browser/resources/signin/sync_confirmation/sync_confirmation.html
@@ -21,7 +21,7 @@
       paper-checkbox {
         --paper-checkbox-checked-color: var(--google-blue-500);
         --paper-checkbox-label-color: inherit;
-        --paper-checkbox-label-spacing: 18px;
+        --paper-checkbox-label-spacing: 22px;
         --paper-checkbox-size: 16px;
         --paper-checkbox-unchecked-color: var(--paper-grey-600);
         -webkit-margin-start: 2px;
diff --git a/chrome/browser/safe_browsing/incident_reporting/resource_request_detector_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/resource_request_detector_unittest.cc
index 90802044..0232f03 100644
--- a/chrome/browser/safe_browsing/incident_reporting/resource_request_detector_unittest.cc
+++ b/chrome/browser/safe_browsing/incident_reporting/resource_request_detector_unittest.cc
@@ -21,6 +21,7 @@
 #include "crypto/sha2.h"
 #include "ipc/ipc_message.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -86,8 +87,8 @@
   std::unique_ptr<net::URLRequest> GetTestURLRequest(
       const std::string& url,
       content::ResourceType resource_type) const {
-    std::unique_ptr<net::URLRequest> url_request(
-        context_.CreateRequest(GURL(url), net::DEFAULT_PRIORITY, NULL));
+    std::unique_ptr<net::URLRequest> url_request(context_.CreateRequest(
+        GURL(url), net::DEFAULT_PRIORITY, NULL, TRAFFIC_ANNOTATION_FOR_TESTS));
 
     content::ResourceRequestInfo::AllocateForTesting(
         url_request.get(), resource_type,
diff --git a/chrome/browser/search/iframe_source_unittest.cc b/chrome/browser/search/iframe_source_unittest.cc
index c2d14270..909d300 100644
--- a/chrome/browser/search/iframe_source_unittest.cc
+++ b/chrome/browser/search/iframe_source_unittest.cc
@@ -18,6 +18,7 @@
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "ipc/ipc_message.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_context.h"
 #include "net/url_request/url_request_test_util.h"
@@ -92,7 +93,8 @@
                                                int render_process_id) {
     std::unique_ptr<net::URLRequest> request(
         resource_context_.GetRequestContext()->CreateRequest(
-            GURL(url), net::DEFAULT_PRIORITY, NULL));
+            GURL(url), net::DEFAULT_PRIORITY, NULL,
+            TRAFFIC_ANNOTATION_FOR_TESTS));
     content::ResourceRequestInfo::AllocateForTesting(
         request.get(), content::RESOURCE_TYPE_SUB_FRAME, &resource_context_,
         render_process_id, MSG_ROUTING_NONE, MSG_ROUTING_NONE,
diff --git a/chrome/browser/sessions/better_session_restore_browsertest.cc b/chrome/browser/sessions/better_session_restore_browsertest.cc
index 381333c..d1bb334 100644
--- a/chrome/browser/sessions/better_session_restore_browsertest.cc
+++ b/chrome/browser/sessions/better_session_restore_browsertest.cc
@@ -594,9 +594,16 @@
   CheckFormRestored(new_browser, false, false);
 }
 
+// Flaky on Mac: https://crbug.com/709504
+#if defined(OS_MACOSX)
+#define MAYBE_SessionCookiesCloseAllBrowsers \
+  DISABLED_SessionCookiesCloseAllBrowsers
+#else
+#define MAYBE_SessionCookiesCloseAllBrowsers SessionCookiesCloseAllBrowsers
+#endif
 // Check that session cookies are cleared on a wrench menu quit.
 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest,
-                       SessionCookiesCloseAllBrowsers) {
+                       MAYBE_SessionCookiesCloseAllBrowsers) {
   // Set the startup preference to "continue where I left off" and visit a page
   // which stores a session cookie.
   StoreDataWithPage("session_cookies.html");
diff --git a/chrome/browser/ssl/ssl_client_certificate_selector_test.cc b/chrome/browser/ssl/ssl_client_certificate_selector_test.cc
index b069cc0f..7e247e7 100644
--- a/chrome/browser/ssl/ssl_client_certificate_selector_test.cc
+++ b/chrome/browser/ssl/ssl_client_certificate_selector_test.cc
@@ -18,6 +18,7 @@
 #include "net/ssl/ssl_cert_request_info.h"
 #include "net/test/cert_test_util.h"
 #include "net/test/test_data_directory.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_context.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -99,6 +100,7 @@
     net::URLRequestContextGetter* context_getter) {
   std::unique_ptr<net::URLRequest> request =
       context_getter->GetURLRequestContext()->CreateRequest(
-          GURL("https://example"), net::DEFAULT_PRIORITY, NULL);
+          GURL("https://example"), net::DEFAULT_PRIORITY, NULL,
+          TRAFFIC_ANNOTATION_FOR_TESTS);
   return request;
 }
diff --git a/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc b/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc
index 7ddd650465..2a49412 100644
--- a/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc
@@ -86,6 +86,12 @@
     return true;
   }
 
+  void AwaitQuiescenceAndInstallAppsPendingForSync() {
+    ASSERT_TRUE(AwaitQuiescence());
+    InstallAppsPendingForSync(GetProfile(0));
+    InstallAppsPendingForSync(GetProfile(1));
+  }
+
  private:
   void WaitForExtensionServicesToLoad() {
     for (int i = 0; i < num_clients(); ++i)
@@ -156,10 +162,7 @@
 
   ASSERT_TRUE(SetupSync());
 
-  ASSERT_TRUE(AwaitQuiescence());
-
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
   // Verify the app lists, but ignore absolute position values, checking only
   // relative positions (see note in app_list_syncable_service.h).
@@ -194,10 +197,7 @@
     std::string id = InstallApp(GetProfile(1), i);
   }
 
-  ASSERT_TRUE(AwaitQuiescence());
-
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
   // Verify the app lists, but ignore absolute position values, checking only
   // relative positions (see note in app_list_syncable_service.h).
@@ -209,10 +209,8 @@
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   InstallApp(GetProfile(0), 0);
-  ASSERT_TRUE(AwaitQuiescence());
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 }
 
@@ -221,10 +219,8 @@
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   InstallApp(GetProfile(0), 0);
-  ASSERT_TRUE(AwaitQuiescence());
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   UninstallApp(GetProfile(0), 0);
@@ -241,10 +237,8 @@
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   InstallApp(GetProfile(0), 0);
-  ASSERT_TRUE(AwaitQuiescence());
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   UninstallApp(GetProfile(0), 0);
@@ -252,9 +246,8 @@
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   InstallApp(GetProfile(0), 1);
-  ASSERT_TRUE(AwaitQuiescence());
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
+  AwaitQuiescenceAndInstallAppsPendingForSync();
+
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 }
 
@@ -273,10 +266,8 @@
   InstallApp(GetProfile(1), 2);
 
   InstallApp(GetProfile(1), 3);
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
-  ASSERT_TRUE(AwaitQuiescence());
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 }
 
@@ -344,10 +335,8 @@
 
   // Enable APP_LIST by enabling APPS since APP_LIST is in APPS groups.
   ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::APPS));
-  ASSERT_TRUE(AwaitQuiescence());
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 }
 
@@ -364,22 +353,14 @@
   ASSERT_FALSE(AllProfilesHaveSameAppList());
 
   ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
-  ASSERT_TRUE(AwaitQuiescence());
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 }
 
 // Install some apps on both clients, then sync. Move an app on one client
 // and sync. Both clients should have the updated position for the app.
-// crbug.com/689662
-#if defined(OS_CHROMEOS)
-#define MAYBE_Move DISABLED_Move
-#else
-#define MAYBE_Move Move
-#endif
-IN_PROC_BROWSER_TEST_F(TwoClientAppListSyncTest, MAYBE_Move) {
+IN_PROC_BROWSER_TEST_F(TwoClientAppListSyncTest, Move) {
   ASSERT_TRUE(SetupSync());
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
@@ -387,7 +368,8 @@
   for (int i = 0; i < kNumApps; ++i)
     InstallApp(GetProfile(1), i);
 
-  ASSERT_TRUE(AwaitQuiescence());
+  AwaitQuiescenceAndInstallAppsPendingForSync();
+
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   size_t first = kNumDefaultApps;
@@ -395,6 +377,7 @@
       GetProfile(0), first + 1, first + 2);
 
   ASSERT_TRUE(AwaitQuiescence());
+
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 }
 
@@ -412,10 +395,8 @@
   // Install a default app in Profile 0 only.
   const int default_app_index = 1;
   std::string default_app_id = InstallApp(GetProfile(0), default_app_index);
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
-  ASSERT_TRUE(AwaitQuiescence());
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   // Flag Default app in Profile 1.
@@ -441,10 +422,8 @@
   EXPECT_EQ(default_app_id, app_id2);
   sync_item = GetSyncItem(GetProfile(0), app_id2);
   EXPECT_EQ(sync_pb::AppListSpecifics::TYPE_APP, sync_item->item_type);
+  AwaitQuiescenceAndInstallAppsPendingForSync();
 
-  ASSERT_TRUE(AwaitQuiescence());
-  InstallAppsPendingForSync(GetProfile(0));
-  InstallAppsPendingForSync(GetProfile(1));
   ASSERT_TRUE(AllProfilesHaveSameAppList());
 
   // Ensure that the REMOVE_DEFAULT_APP SyncItem entry in Profile 1 is replaced
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index c37e7c1..81f24e8 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1518,8 +1518,8 @@
       "views/page_info/chosen_object_row_observer.h",
       "views/page_info/non_accessible_image_view.cc",
       "views/page_info/non_accessible_image_view.h",
-      "views/page_info/page_info_popup_view.cc",
-      "views/page_info/page_info_popup_view.h",
+      "views/page_info/page_info_bubble_view.cc",
+      "views/page_info/page_info_bubble_view.h",
       "views/page_info/permission_selector_row.cc",
       "views/page_info/permission_selector_row.h",
       "views/page_info/permission_selector_row_observer.h",
@@ -2113,7 +2113,7 @@
       "views/desktop_capture/desktop_media_source_view.cc",
       "views/desktop_capture/desktop_media_source_view.h",
       "views/dropdown_bar_host_aura.cc",
-      "views/frame/browser_non_client_frame_view_factory_views.cc",
+      "views/frame/browser_non_client_frame_view_factory_chromeos.cc",
       "views/ime/ime_window_frame_view.cc",
       "views/ime/ime_window_frame_view.h",
       "views/ime/ime_window_view.cc",
@@ -2137,6 +2137,7 @@
     ]
     if (!is_chromeos) {
       sources += [
+        "views/frame/browser_non_client_frame_view_factory_views.cc",
         "views/frame/desktop_browser_frame_aura.cc",
         "views/frame/desktop_browser_frame_aura.h",
         "views/message_center/message_center_frame_view.cc",
diff --git a/chrome/browser/ui/android/context_menu_helper.cc b/chrome/browser/ui/android/context_menu_helper.cc
index 3f237be..8c74369 100644
--- a/chrome/browser/ui/android/context_menu_helper.cc
+++ b/chrome/browser/ui/android/context_menu_helper.cc
@@ -8,10 +8,10 @@
 
 #include <vector>
 
-#include "base/android/jni_android.h"
-#include "base/android/jni_array.h"
+#include "base/android/callback_android.h"
 #include "base/android/jni_string.h"
 #include "base/bind_helpers.h"
+#include "base/callback.h"
 #include "chrome/browser/android/download/download_controller_base.h"
 #include "chrome/browser/ui/tab_contents/core_tab_helper.h"
 #include "chrome/common/thumbnail_capturer.mojom.h"
@@ -24,8 +24,8 @@
 #include "jni/ContextMenuParams_jni.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 #include "third_party/WebKit/public/web/WebContextMenuData.h"
-#include "ui/android/window_android.h"
 #include "ui/gfx/geometry/point.h"
+#include "ui/gfx/geometry/size.h"
 
 using base::android::ConvertJavaStringToUTF8;
 using base::android::ConvertUTF8ToJavaString;
@@ -34,14 +34,22 @@
 
 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ContextMenuHelper);
 
-const int kShareImageMaxWidth = 2048;
-const int kShareImageMaxHeight = 2048;
-
 const char kDataReductionProxyPassthroughHeader[] =
     "Chrome-Proxy: pass-through\r\n";
 
+namespace {
+
+void OnRetrieveImage(chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
+                     const base::android::JavaRef<jobject>& jcallback,
+                     const std::vector<uint8_t>& thumbnail_data,
+                     const gfx::Size& original_size) {
+  base::android::RunCallbackAndroid(jcallback, thumbnail_data);
+}
+
+}  // namespace
+
 ContextMenuHelper::ContextMenuHelper(content::WebContents* web_contents)
-    : web_contents_(web_contents), weak_factory_(this) {
+    : web_contents_(web_contents) {
   JNIEnv* env = base::android::AttachCurrentThread();
   java_obj_.Reset(
       env,
@@ -120,6 +128,12 @@
   return jmenu_info;
 }
 
+base::android::ScopedJavaLocalRef<jobject>
+ContextMenuHelper::GetJavaWebContents(JNIEnv* env,
+                                      const JavaParamRef<jobject>& obj) {
+  return web_contents_->GetJavaWebContents();
+}
+
 void ContextMenuHelper::OnStartDownload(
     JNIEnv* env,
     const JavaParamRef<jobject>& obj,
@@ -147,8 +161,10 @@
       render_frame_host, context_menu_params_.src_url);
 }
 
-void ContextMenuHelper::ShareImage(JNIEnv* env,
-                                   const JavaParamRef<jobject>& obj) {
+void ContextMenuHelper::RetrieveImage(JNIEnv* env,
+                                      const JavaParamRef<jobject>& obj,
+                                      const JavaParamRef<jobject>& jcallback,
+                                      jint max_dimen_px) {
   content::RenderFrameHost* render_frame_host =
       content::RenderFrameHost::FromID(render_process_id_, render_frame_id_);
   if (!render_frame_host)
@@ -160,78 +176,9 @@
   // there's either a connection error or a response.
   auto* thumbnail_capturer_proxy = thumbnail_capturer.get();
   thumbnail_capturer_proxy->RequestThumbnailForContextNode(
-      0, gfx::Size(kShareImageMaxWidth, kShareImageMaxHeight),
-      base::Bind(&ContextMenuHelper::OnShareImage, weak_factory_.GetWeakPtr(),
-                 base::Passed(&thumbnail_capturer)));
-}
-
-void ContextMenuHelper::OnShareImage(
-    chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
-    const std::vector<uint8_t>& thumbnail_data,
-    const gfx::Size& original_size) {
-  content::ContentViewCore* content_view_core =
-      content::ContentViewCore::FromWebContents(web_contents_);
-  if (!content_view_core)
-    return;
-
-  base::android::ScopedJavaLocalRef<jobject> jwindow_android(
-      content_view_core->GetWindowAndroid()->GetJavaObject());
-
-  if (jwindow_android.is_null())
-    return;
-
-  JNIEnv* env = base::android::AttachCurrentThread();
-  base::android::ScopedJavaLocalRef<jbyteArray> j_bytes =
-      base::android::ToJavaByteArray(env, thumbnail_data);
-
-  Java_ContextMenuHelper_onShareImageReceived(env, java_obj_, jwindow_android,
-                                              j_bytes);
-}
-
-// TODO(tedchoc): Unify RetrieveHeaderThumbnail and ShareImage.
-void ContextMenuHelper::RetrieveHeaderThumbnail(
-    JNIEnv* env,
-    const JavaParamRef<jobject>& obj,
-    jint j_max_size_px) {
-  content::RenderFrameHost* render_frame_host =
-      content::RenderFrameHost::FromID(render_process_id_, render_frame_id_);
-
-  if (!render_frame_host)
-    return;
-
-  chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer;
-  render_frame_host->GetRemoteInterfaces()->GetInterface(&thumbnail_capturer);
-  // Bind the InterfacePtr into the callback so that it's kept alive until
-  // there's either a connection error or a response.
-  auto* thumbnail_capturer_proxy = thumbnail_capturer.get();
-  thumbnail_capturer_proxy->RequestThumbnailForContextNode(
-      0, gfx::Size(j_max_size_px, j_max_size_px),
-      base::Bind(&ContextMenuHelper::OnHeaderThumbnailReceived,
-                 weak_factory_.GetWeakPtr(),
-                 base::Passed(&thumbnail_capturer)));
-}
-
-void ContextMenuHelper::OnHeaderThumbnailReceived(
-    chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
-    const std::vector<uint8_t>& thumbnail_data,
-    const gfx::Size& original_size) {
-  content::ContentViewCore* content_view_core =
-      content::ContentViewCore::FromWebContents(web_contents_);
-  if (!content_view_core)
-    return;
-
-  base::android::ScopedJavaLocalRef<jobject> jwindow_android(
-      content_view_core->GetWindowAndroid()->GetJavaObject());
-
-  if (jwindow_android.is_null())
-    return;
-
-  JNIEnv* env = base::android::AttachCurrentThread();
-  base::android::ScopedJavaLocalRef<jbyteArray> j_bytes =
-      base::android::ToJavaByteArray(env, thumbnail_data);
-
-  Java_ContextMenuHelper_onHeaderThumbnailReceived(env, java_obj_,
-                                                   jwindow_android, j_bytes);
+      0, gfx::Size(max_dimen_px, max_dimen_px),
+      base::Bind(&OnRetrieveImage, base::Passed(&thumbnail_capturer),
+                 base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
 }
 
 bool RegisterContextMenuHelper(JNIEnv* env) {
diff --git a/chrome/browser/ui/android/context_menu_helper.h b/chrome/browser/ui/android/context_menu_helper.h
index 70c15b3..040e5bd 100644
--- a/chrome/browser/ui/android/context_menu_helper.h
+++ b/chrome/browser/ui/android/context_menu_helper.h
@@ -10,12 +10,10 @@
 #include <vector>
 
 #include "base/android/jni_android.h"
-#include "base/callback.h"
+#include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "chrome/common/thumbnail_capturer.mojom.h"
 #include "content/public/browser/web_contents_user_data.h"
 #include "content/public/common/context_menu_params.h"
-#include "ui/gfx/geometry/size.h"
 
 namespace content {
 struct ContextMenuParams;
@@ -37,17 +35,19 @@
   void SetPopulator(jobject jpopulator);
 
   // Methods called from Java via JNI ------------------------------------------
+  base::android::ScopedJavaLocalRef<jobject> GetJavaWebContents(
+      JNIEnv* env,
+      const base::android::JavaParamRef<jobject>& obj);
   void OnStartDownload(JNIEnv* env,
                        const base::android::JavaParamRef<jobject>& obj,
                        jboolean jis_link,
                        jboolean jis_data_reduction_proxy_enabled);
+  void RetrieveImage(JNIEnv* env,
+                     const base::android::JavaParamRef<jobject>& obj,
+                     const base::android::JavaParamRef<jobject>& jcallback,
+                     jint max_dimen_px);
   void SearchForImage(JNIEnv* env,
                       const base::android::JavaParamRef<jobject>& obj);
-  void ShareImage(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
-
-  void RetrieveHeaderThumbnail(JNIEnv* env,
-                               const base::android::JavaParamRef<jobject>& obj,
-                               jint j_max_size_px);
 
  private:
   explicit ContextMenuHelper(content::WebContents* web_contents);
@@ -56,15 +56,6 @@
   static base::android::ScopedJavaLocalRef<jobject> CreateJavaContextMenuParams(
       const content::ContextMenuParams& params);
 
-  void OnShareImage(chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
-                    const std::vector<uint8_t>& thumbnail_data,
-                    const gfx::Size& original_size);
-
-  void OnHeaderThumbnailReceived(
-      chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
-      const std::vector<uint8_t>& thumbnail_data,
-      const gfx::Size& original_size);
-
   base::android::ScopedJavaGlobalRef<jobject> java_obj_;
   content::WebContents* web_contents_;
 
@@ -72,8 +63,6 @@
   int render_frame_id_;
   int render_process_id_;
 
-  base::WeakPtrFactory<ContextMenuHelper> weak_factory_;
-
   DISALLOW_COPY_AND_ASSIGN(ContextMenuHelper);
 };
 
diff --git a/chrome/browser/ui/ash/ash_util.cc b/chrome/browser/ui/ash/ash_util.cc
index 6feb006..eafb6e9 100644
--- a/chrome/browser/ui/ash/ash_util.cc
+++ b/chrome/browser/ui/ash/ash_util.cc
@@ -15,8 +15,9 @@
 #include "chrome/browser/chromeos/ash_config.h"
 #include "chrome/browser/ui/ash/ash_init.h"
 #include "content/public/common/service_names.mojom.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
+#include "services/service_manager/public/cpp/service_info.h"
 #include "services/service_manager/public/interfaces/interface_provider_spec.mojom.h"
 #include "ui/aura/window_event_dispatcher.h"
 
@@ -28,8 +29,7 @@
  public:
   explicit EmbeddedAshService(
       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
-      : task_runner_(task_runner),
-        interfaces_(service_manager::mojom::kServiceManager_ConnectorSpec) {}
+      : task_runner_(task_runner) {}
   ~EmbeddedAshService() override {}
 
   // service_manager::Service:
@@ -40,12 +40,13 @@
   void OnBindInterface(const service_manager::ServiceInfo& remote_info,
                        const std::string& interface_name,
                        mojo::ScopedMessagePipeHandle handle) override {
-    interfaces_.BindInterface(interface_name, std::move(handle));
+    interfaces_.BindInterface(remote_info.identity, interface_name,
+                              std::move(handle));
   }
 
  private:
   const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-  service_manager::InterfaceRegistry interfaces_;
+  service_manager::BinderRegistry interfaces_;
 
   DISALLOW_COPY_AND_ASSIGN(EmbeddedAshService);
 };
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc
index 210e48a..d189ae6 100644
--- a/chrome/browser/ui/ash/chrome_shell_delegate.cc
+++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -221,6 +221,26 @@
     return AccessibilityManager::Get()->IsFocusHighlightEnabled();
   }
 
+  void SetStickyKeysEnabled(bool enabled) override {
+    DCHECK(AccessibilityManager::Get());
+    return AccessibilityManager::Get()->EnableStickyKeys(enabled);
+  }
+
+  bool IsStickyKeysEnabled() const override {
+    DCHECK(AccessibilityManager::Get());
+    return AccessibilityManager::Get()->IsStickyKeysEnabled();
+  }
+
+  void SetTapDraggingEnabled(bool enabled) override {
+    DCHECK(AccessibilityManager::Get());
+    return AccessibilityManager::Get()->EnableTapDragging(enabled);
+  }
+
+  bool IsTapDraggingEnabled() const override {
+    DCHECK(AccessibilityManager::Get());
+    return AccessibilityManager::Get()->IsTapDraggingEnabled();
+  }
+
   void SetSelectToSpeakEnabled(bool enabled) override {
     DCHECK(AccessibilityManager::Get());
     AccessibilityManager::Get()->SetSelectToSpeakEnabled(enabled);
diff --git a/chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.cc b/chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.cc
index 9b78269..a956eae6 100644
--- a/chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/ui/ash/launcher/arc_app_deferred_launcher_controller.h"
 
+#include "ash/common/shelf/shelf_model.h"
+#include "ash/shell.h"
 #include "base/memory/ptr_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/chromeos/arc/arc_util.h"
@@ -111,8 +113,9 @@
     return;
 
   const ash::ShelfID shelf_id = owner_->GetShelfIDForAppID(shelf_app_id);
+  ash::ShelfModel* shelf_model = ash::Shell::Get()->shelf_model();
   const bool need_close_item =
-      it->second == owner_->GetShelfItemDelegate(shelf_id);
+      it->second == shelf_model->GetShelfItemDelegate(shelf_id);
   app_controller_map_.erase(it);
   if (need_close_item)
     owner_->CloseLauncherItem(shelf_id);
@@ -210,7 +213,8 @@
   if (shelf_id == 0) {
     owner_->CreateAppLauncherItem(std::move(controller), ash::STATUS_RUNNING);
   } else {
-    owner_->SetShelfItemDelegate(shelf_id, std::move(controller));
+    ash::ShelfModel* shelf_model = ash::Shell::Get()->shelf_model();
+    shelf_model->SetShelfItemDelegate(shelf_id, std::move(controller));
     owner_->SetItemStatus(shelf_id, ash::STATUS_RUNNING);
   }
 
diff --git a/chrome/browser/ui/ash/launcher/arc_app_launcher_browsertest.cc b/chrome/browser/ui/ash/launcher/arc_app_launcher_browsertest.cc
index b2bf0b83..8798149 100644
--- a/chrome/browser/ui/ash/launcher/arc_app_launcher_browsertest.cc
+++ b/chrome/browser/ui/ash/launcher/arc_app_launcher_browsertest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "ash/common/shelf/shelf_delegate.h"
+#include "ash/common/shelf/shelf_model.h"
 #include "ash/public/cpp/shelf_item_delegate.h"
 #include "ash/shell.h"
 #include "ash/wm/window_util.h"
@@ -259,9 +260,7 @@
 
   ash::ShelfItemDelegate* GetAppItemController(const std::string& id) {
     const ash::ShelfID shelf_id = shelf_delegate()->GetShelfIDForAppID(id);
-    if (!shelf_id)
-      return nullptr;
-    return chrome_controller()->GetShelfItemDelegate(shelf_id);
+    return ash::Shell::Get()->shelf_model()->GetShelfItemDelegate(shelf_id);
   }
 
   ArcAppListPrefs* app_prefs() { return ArcAppListPrefs::Get(profile()); }
diff --git a/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.cc
index d6e8f2e..ccee5f4 100644
--- a/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.cc
@@ -6,6 +6,7 @@
 #include <string>
 
 #include "ash/common/shelf/shelf_delegate.h"
+#include "ash/common/shelf/shelf_model.h"
 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h"
 #include "ash/common/wm/window_state.h"
 #include "ash/common/wm_window.h"
@@ -659,7 +660,8 @@
   if (!shelf_id) {
     owner()->CreateAppLauncherItem(std::move(controller), ash::STATUS_RUNNING);
   } else {
-    owner()->SetShelfItemDelegate(shelf_id, std::move(controller));
+    ash::ShelfModel* shelf_model = ash::Shell::Get()->shelf_model();
+    shelf_model->SetShelfItemDelegate(shelf_id, std::move(controller));
     owner()->SetItemStatus(shelf_id, ash::STATUS_RUNNING);
   }
   item_controller->AddTaskId(task_id);
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h
index 5e84748f4..d23b354e 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h
@@ -89,11 +89,6 @@
   // browsers shelf item if needed.
   virtual void SetItemStatus(ash::ShelfID id, ash::ShelfItemStatus status) = 0;
 
-  // Updates the delegate associated with id (which should be a shortcut).
-  virtual void SetShelfItemDelegate(
-      ash::ShelfID id,
-      std::unique_ptr<ash::ShelfItemDelegate> item_delegate) = 0;
-
   // Closes or unpins the shelf item.
   virtual void CloseLauncherItem(ash::ShelfID id) = 0;
 
@@ -202,9 +197,6 @@
   virtual BrowserShortcutLauncherItemController*
   GetBrowserShortcutLauncherItemController() = 0;
 
-  virtual ash::ShelfItemDelegate* GetShelfItemDelegate(
-      const ash::ShelfID id) = 0;
-
   // Check if the shelf visibility (location, visibility) will change with a new
   // user profile or not. However, since the full visibility calculation of the
   // shelf cannot be performed here, this is only a probability used for
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
index e3036fa..edf788e 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
@@ -90,6 +90,7 @@
 #include "ui/wm/core/window_animations.h"
 
 using extensions::Extension;
+using extension_misc::kChromeAppId;
 using extension_misc::kGmailAppId;
 using content::WebContents;
 
@@ -274,14 +275,6 @@
   model_->RemoveObserver(this);
   if (ash::Shell::HasInstance())
     ash::Shell::Get()->window_tree_host_manager()->RemoveObserver(this);
-  for (const auto& pair : id_to_item_controller_map_) {
-    int index = model_->ItemIndexByID(pair.first);
-    // A "browser proxy" is not known to the model and this removal does
-    // therefore not need to be propagated to the model.
-    if (index != -1 &&
-        model_->items()[index].type != ash::TYPE_BROWSER_SHORTCUT)
-      model_->RemoveItemAt(index);
-  }
 
   // Release all profile dependent resources.
   ReleaseProfile();
@@ -325,26 +318,15 @@
   }
 }
 
-void ChromeLauncherControllerImpl::SetShelfItemDelegate(
-    ash::ShelfID id,
-    std::unique_ptr<ash::ShelfItemDelegate> item_delegate) {
-  CHECK(item_delegate);
-  IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id);
-  CHECK(iter != id_to_item_controller_map_.end());
-  item_delegate->set_shelf_id(id);
-  iter->second = item_delegate.get();
-  model_->SetShelfItemDelegate(id, std::move(item_delegate));
-}
-
 void ChromeLauncherControllerImpl::CloseLauncherItem(ash::ShelfID id) {
   CHECK(id);
   if (IsPinned(id)) {
     // Create a new shortcut delegate.
     SetItemStatus(id, ash::STATUS_CLOSED);
-    SetShelfItemDelegate(id, AppShortcutLauncherItemController::Create(
-                                 GetItem(id)->app_launch_id));
+    model_->SetShelfItemDelegate(id, AppShortcutLauncherItemController::Create(
+                                         GetItem(id)->app_launch_id));
   } else {
-    LauncherItemClosed(id);
+    RemoveShelfItem(id);
   }
 }
 
@@ -353,7 +335,7 @@
   if (item && item->status != ash::STATUS_CLOSED)
     UnpinRunningAppInternal(model_->ItemIndexByID(id));
   else
-    LauncherItemClosed(id);
+    RemoveShelfItem(id);
 }
 
 bool ChromeLauncherControllerImpl::IsPinned(ash::ShelfID id) {
@@ -367,7 +349,7 @@
   const ash::ShelfItem* item = GetItem(id);
   if (item) {
     if (!IsPinned(id) && status == ash::STATUS_CLOSED)
-      LauncherItemClosed(id);
+      RemoveShelfItem(id);
     else
       SetItemStatus(id, status);
   } else if (status != ash::STATUS_CLOSED && !app_id.empty()) {
@@ -378,7 +360,7 @@
 }
 
 void ChromeLauncherControllerImpl::Launch(ash::ShelfID id, int event_flags) {
-  ash::ShelfItemDelegate* delegate = GetShelfItemDelegate(id);
+  ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(id);
   if (!delegate)
     return;  // In case invoked from menu and item closed while menu up.
 
@@ -481,21 +463,13 @@
 
 ash::ShelfID ChromeLauncherControllerImpl::GetShelfIDForWebContents(
     content::WebContents* contents) {
-  DCHECK(contents);
-
   std::string app_id = launcher_controller_helper()->GetAppID(contents);
-
   if (app_id.empty() && ContentCanBeHandledByGmailApp(contents))
     app_id = kGmailAppId;
 
   ash::ShelfID id = GetShelfIDForAppID(app_id);
-
-  if (app_id.empty() || !id) {
-    int browser_index = model_->GetItemIndexForType(ash::TYPE_BROWSER_SHORTCUT);
-    return model_->items()[browser_index].id;
-  }
-
-  return id;
+  // If there is no dedicated app item, use the browser shortcut item.
+  return id == ash::kInvalidShelfID ? GetShelfIDForAppID(kChromeAppId) : id;
 }
 
 void ChromeLauncherControllerImpl::SetRefocusURLPatternForTest(
@@ -504,9 +478,9 @@
   const ash::ShelfItem* item = GetItem(id);
   if (item && !IsPlatformApp(id) &&
       (item->type == ash::TYPE_PINNED_APP || item->type == ash::TYPE_APP)) {
-    ash::ShelfItemDelegate* item_delegate = GetShelfItemDelegate(id);
+    ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(id);
     AppShortcutLauncherItemController* item_controller =
-        static_cast<AppShortcutLauncherItemController*>(item_delegate);
+        static_cast<AppShortcutLauncherItemController*>(delegate);
     item_controller->set_refocus_url(url);
   } else {
     NOTREACHED() << "Invalid launcher item or type";
@@ -583,9 +557,9 @@
 
 ash::MenuItemList ChromeLauncherControllerImpl::GetAppMenuItemsForTesting(
     const ash::ShelfItem& item) {
-  ash::ShelfItemDelegate* item_delegate = GetShelfItemDelegate(item.id);
-  return item_delegate ? item_delegate->GetAppMenuItems(ui::EF_NONE)
-                       : ash::MenuItemList();
+  ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(item.id);
+  return delegate ? delegate->GetAppMenuItems(ui::EF_NONE)
+                  : ash::MenuItemList();
 }
 
 std::vector<content::WebContents*>
@@ -595,9 +569,9 @@
   // If there is no such item pinned to the launcher, no menu gets created.
   if (!item || item->type != ash::TYPE_PINNED_APP)
     return std::vector<content::WebContents*>();
-  ash::ShelfItemDelegate* item_delegate = GetShelfItemDelegate(item->id);
+  ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(item->id);
   AppShortcutLauncherItemController* item_controller =
-      static_cast<AppShortcutLauncherItemController*>(item_delegate);
+      static_cast<AppShortcutLauncherItemController*>(delegate);
   return item_controller->GetRunningApplications();
 }
 
@@ -606,9 +580,9 @@
   const ash::ShelfItem* item = GetItem(GetShelfIDForAppID(app_id));
   if (item &&
       (item->type == ash::TYPE_APP || item->type == ash::TYPE_PINNED_APP)) {
-    ash::ShelfItemDelegate* item_delegate = GetShelfItemDelegate(item->id);
+    ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(item->id);
     AppWindowLauncherItemController* item_controller =
-        item_delegate->AsAppWindowLauncherItemController();
+        delegate->AsAppWindowLauncherItemController();
     item_controller->ActivateIndexedApp(window_index);
   }
 }
@@ -672,20 +646,10 @@
 
 BrowserShortcutLauncherItemController*
 ChromeLauncherControllerImpl::GetBrowserShortcutLauncherItemController() {
-  for (const auto& pair : id_to_item_controller_map_) {
-    const ash::ShelfItem* item = GetItem(pair.first);
-    if (item && item->type == ash::TYPE_BROWSER_SHORTCUT)
-      return static_cast<BrowserShortcutLauncherItemController*>(pair.second);
-  }
-  NOTREACHED()
-      << "There should be always be a BrowserShortcutLauncherItemController.";
-  return nullptr;
-}
-
-ash::ShelfItemDelegate* ChromeLauncherControllerImpl::GetShelfItemDelegate(
-    const ash::ShelfID id) {
-  IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id);
-  return iter == id_to_item_controller_map_.end() ? nullptr : iter->second;
+  ash::ShelfID id = GetShelfIDForAppID(kChromeAppId);
+  ash::mojom::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(id);
+  DCHECK(delegate) << "There should be always be a browser shortcut item.";
+  return static_cast<BrowserShortcutLauncherItemController*>(delegate);
 }
 
 bool ChromeLauncherControllerImpl::ShelfBoundsChangesProbablyWithUser(
@@ -726,7 +690,7 @@
 
 const std::string& ChromeLauncherControllerImpl::GetLaunchIDForShelfID(
     ash::ShelfID id) {
-  ash::ShelfItemDelegate* delegate = GetShelfItemDelegate(id);
+  ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(id);
   return delegate ? delegate->launch_id() : base::EmptyString();
 }
 
@@ -798,6 +762,8 @@
   // TODO(khmel): Fix this Arc application id mapping. See http://b/31703859
   const std::string shelf_app_id =
       ArcAppWindowLauncherController::GetShelfAppIdFromArcAppId(app_id);
+  if (shelf_app_id.empty())
+    return ash::kInvalidShelfID;
 
   for (const ash::ShelfItem& item : model_->items()) {
     // Ash's ShelfWindowWatcher handles app panel windows separately.
@@ -971,16 +937,12 @@
   }
 }
 
-void ChromeLauncherControllerImpl::LauncherItemClosed(ash::ShelfID id) {
-  IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id);
-  CHECK(iter != id_to_item_controller_map_.end());
-  CHECK(iter->second);
-  const std::string& app_id = iter->second->app_id();
+void ChromeLauncherControllerImpl::RemoveShelfItem(ash::ShelfID id) {
+  const std::string& app_id = GetAppIDForShelfID(id);
   AppIconLoader* app_icon_loader = GetAppIconLoaderForApp(app_id);
   if (app_icon_loader)
     app_icon_loader->ClearImage(app_id);
-  id_to_item_controller_map_.erase(iter);
-  int index = model_->ItemIndexByID(id);
+  const int index = model_->ItemIndexByID(id);
   // A "browser proxy" is not known to the model and this removal does
   // therefore not need to be propagated to the model.
   if (index != -1)
@@ -1100,19 +1062,15 @@
     int app_index = index;
     for (; app_index < model_->item_count(); ++app_index) {
       const ash::ShelfItem& item = model_->items()[app_index];
-      const IDToItemControllerMap::iterator it =
-          id_to_item_controller_map_.find(item.id);
-      if (it != id_to_item_controller_map_.end() &&
-          it->second->app_id() == app_id &&
-          it->second->launch_id() == pref_app_launch_id.launch_id()) {
+      if (item.app_launch_id.app_id() == app_id &&
+          item.app_launch_id.launch_id() == pref_app_launch_id.launch_id()) {
         break;
       }
     }
     if (app_index < model_->item_count()) {
       // Found existing pin or running app.
       const ash::ShelfItem item = model_->items()[app_index];
-      if (item.type == ash::TYPE_PINNED_APP ||
-          item.type == ash::TYPE_BROWSER_SHORTCUT) {
+      if (ItemTypeIsPinned(item)) {
         // Just move to required position or keep it inplace.
         model_->Move(app_index, index);
       } else {
@@ -1121,7 +1079,7 @@
       DCHECK_EQ(model_->ItemIndexByID(item.id), index);
     } else {
       // This is fresh pin. Create new one.
-      DCHECK_NE(app_id, extension_misc::kChromeAppId);
+      DCHECK_NE(app_id, kChromeAppId);
       CreateAppShortcutLauncherItem(pref_app_launch_id, index);
     }
     ++index;
@@ -1205,8 +1163,6 @@
   CHECK(item_delegate);
   // Ash's ShelfWindowWatcher handles app panel windows separately.
   DCHECK_NE(ash::TYPE_APP_PANEL, shelf_item_type);
-  id_to_item_controller_map_[id] = item_delegate.get();
-  item_delegate->set_shelf_id(id);
 
   ash::ShelfItem item;
   item.type = shelf_item_type;
@@ -1244,15 +1200,12 @@
   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
   browser_shortcut.image = *rb.GetImageSkiaNamed(IDR_PRODUCT_LOGO_32);
   browser_shortcut.title = l10n_util::GetStringUTF16(IDS_PRODUCT_NAME);
-  browser_shortcut.app_launch_id =
-      ash::AppLaunchId(extension_misc::kChromeAppId);
+  browser_shortcut.app_launch_id = ash::AppLaunchId(kChromeAppId);
   ash::ShelfID id = model_->next_id();
   model_->AddAt(0, browser_shortcut);
   std::unique_ptr<BrowserShortcutLauncherItemController> item_delegate =
       base::MakeUnique<BrowserShortcutLauncherItemController>(model_);
   BrowserShortcutLauncherItemController* item_controller = item_delegate.get();
-  item_controller->set_shelf_id(id);
-  id_to_item_controller_map_[id] = item_controller;
   model_->SetShelfItemDelegate(id, std::move(item_delegate));
   item_controller->UpdateBrowserItemState();
 }
@@ -1266,11 +1219,8 @@
 }
 
 int ChromeLauncherControllerImpl::FindInsertionPoint() {
-  DCHECK_GT(model_->item_count(), 0);
   for (int i = model_->item_count() - 1; i > 0; --i) {
-    ash::ShelfItemType type = model_->items()[i].type;
-    DCHECK_NE(ash::TYPE_APP_LIST, type);
-    if (type == ash::TYPE_PINNED_APP || type == ash::TYPE_BROWSER_SHORTCUT)
+    if (ItemTypeIsPinned(model_->items()[i]))
       return i;
   }
   return 0;
@@ -1344,11 +1294,6 @@
                                    old_item.app_launch_id.launch_id());
     ash::launcher::RemovePinPosition(profile(), app_launch_id);
   }
-
-  // TODO(skuhne): This fixes crbug.com/429870, but it does not answer why we
-  // get into this state in the first place.
-  if (id_to_item_controller_map_.count(old_item.id) > 0)
-    id_to_item_controller_map_.erase(old_item.id);
 }
 
 void ChromeLauncherControllerImpl::ShelfItemMoved(int start_index,
@@ -1382,18 +1327,6 @@
   }
 }
 
-void ChromeLauncherControllerImpl::OnSetShelfItemDelegate(
-    ash::ShelfID id,
-    ash::ShelfItemDelegate* item_delegate) {
-  // TODO(skuhne): This fixes crbug.com/429870, but it does not answer why we
-  // get into this state in the first place.
-  IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id);
-  if (iter == id_to_item_controller_map_.end() || item_delegate == iter->second)
-    return;
-  LOG(ERROR) << "Unexpected change of shelf item delegate, id: " << id;
-  id_to_item_controller_map_.erase(iter);
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 // ash::WindowTreeHostManager::Observer:
 
@@ -1430,19 +1363,20 @@
 // AppIconLoaderDelegate:
 
 void ChromeLauncherControllerImpl::OnAppImageUpdated(
-    const std::string& id,
+    const std::string& app_id,
     const gfx::ImageSkia& image) {
   // TODO: need to get this working for shortcuts.
   for (int index = 0; index < model_->item_count(); ++index) {
     ash::ShelfItem item = model_->items()[index];
-    if (GetAppIDForShelfID(item.id) != id)
+    ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(item.id);
+    if (item.type == ash::TYPE_APP_PANEL || !delegate ||
+        delegate->image_set_by_controller() ||
+        item.app_launch_id.app_id() != app_id) {
       continue;
-    ash::ShelfItemDelegate* delegate = GetShelfItemDelegate(item.id);
-    if (!delegate || delegate->image_set_by_controller())
-      continue;
+    }
     item.image = image;
     if (arc_deferred_launcher_)
-      arc_deferred_launcher_->MaybeApplySpinningEffect(id, &item.image);
+      arc_deferred_launcher_->MaybeApplySpinningEffect(app_id, &item.image);
     model_->Set(index, item);
     // It's possible we're waiting on more than one item, so don't break.
   }
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h
index c2e9b3c..1e3de66 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h
@@ -67,9 +67,6 @@
   const ash::ShelfItem* GetItem(ash::ShelfID id) const override;
   void SetItemType(ash::ShelfID id, ash::ShelfItemType type) override;
   void SetItemStatus(ash::ShelfID id, ash::ShelfItemStatus status) override;
-  void SetShelfItemDelegate(
-      ash::ShelfID id,
-      std::unique_ptr<ash::ShelfItemDelegate> item_delegate) override;
   void CloseLauncherItem(ash::ShelfID id) override;
   bool IsPinned(ash::ShelfID id) override;
   void SetV1AppStatus(const std::string& app_id,
@@ -107,7 +104,6 @@
       content::WebContents* web_contents) const override;
   BrowserShortcutLauncherItemController*
   GetBrowserShortcutLauncherItemController() override;
-  ash::ShelfItemDelegate* GetShelfItemDelegate(const ash::ShelfID id) override;
   bool ShelfBoundsChangesProbablyWithUser(
       ash::WmShelf* shelf,
       const AccountId& account_id) const override;
@@ -161,7 +157,6 @@
   friend class TestChromeLauncherControllerImpl;
   FRIEND_TEST_ALL_PREFIXES(ChromeLauncherControllerImplTest, AppPanels);
 
-  typedef std::map<ash::ShelfID, ash::ShelfItemDelegate*> IDToItemControllerMap;
   typedef std::map<content::WebContents*, std::string> WebContentsToAppIDMap;
 
   // Remembers / restores list of running applications.
@@ -171,7 +166,7 @@
   void RestoreUnpinnedRunningApplicationOrder(const std::string& user_id);
 
   // Invoked when the associated browser or app is closed.
-  void LauncherItemClosed(ash::ShelfID id);
+  void RemoveShelfItem(ash::ShelfID id);
 
   // Internal helpers for pinning and unpinning that handle both
   // client-triggered and internal pinning operations.
@@ -237,8 +232,6 @@
   void ShelfItemRemoved(int index, const ash::ShelfItem& old_item) override;
   void ShelfItemMoved(int start_index, int target_index) override;
   void ShelfItemChanged(int index, const ash::ShelfItem& old_item) override;
-  void OnSetShelfItemDelegate(ash::ShelfID id,
-                              ash::ShelfItemDelegate* item_delegate) override;
 
   // ash::WindowTreeHostManager::Observer:
   void OnDisplayConfigurationChanged() override;
@@ -261,9 +254,6 @@
 
   ash::ShelfModel* model_;
 
-  // Controller items in this map are owned by |ShelfModel|.
-  IDToItemControllerMap id_to_item_controller_map_;
-
   // Direct access to app_id for a web contents.
   WebContentsToAppIDMap web_contents_to_app_id_;
 
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc
index 9efd0ce0..d792aa2 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_browsertest.cc
@@ -254,7 +254,7 @@
   }
 
   ash::ShelfItemDelegate* GetShelfItemDelegate(ash::ShelfID id) {
-    return controller_->GetShelfItemDelegate(id);
+    return shelf_model()->GetShelfItemDelegate(id);
   }
 
   ChromeLauncherControllerImpl* controller_;
@@ -788,9 +788,7 @@
   const ash::ShelfItem& item1 = GetLastLauncherPanelItem();
   EXPECT_EQ(ash::TYPE_APP_PANEL, item1.type);
   EXPECT_EQ(ash::STATUS_RUNNING, item1.status);
-  EXPECT_EQ(nullptr, GetShelfItemDelegate(item1.id));
-  ash::ShelfItemDelegate* item1_delegate =
-      shelf_model()->GetShelfItemDelegate(item1.id);
+  ash::ShelfItemDelegate* item1_delegate = GetShelfItemDelegate(item1.id);
   EXPECT_EQ(ash::TYPE_APP_PANEL,
             panel->GetNativeWindow()->GetProperty(ash::kShelfItemTypeKey));
   // Click the item and confirm that the panel is activated.
@@ -828,9 +826,7 @@
   const ash::ShelfItem& item1 = GetLastLauncherPanelItem();
   EXPECT_EQ(ash::TYPE_APP_PANEL, item1.type);
   EXPECT_EQ(ash::STATUS_RUNNING, item1.status);
-  EXPECT_EQ(nullptr, GetShelfItemDelegate(item1.id));
-  ash::ShelfItemDelegate* item1_delegate =
-      shelf_model()->GetShelfItemDelegate(item1.id);
+  ash::ShelfItemDelegate* item1_delegate = GetShelfItemDelegate(item1.id);
   EXPECT_EQ(ash::TYPE_APP_PANEL,
             panel->GetNativeWindow()->GetProperty(ash::kShelfItemTypeKey));
   // Click the item and confirm that the panel is activated.
@@ -910,8 +906,6 @@
   ASSERT_TRUE(app_custom_icon_item_delegate);
   EXPECT_TRUE(app_custom_icon_item_delegate->image_set_by_controller());
 
-  // Panels are handled by ShelfWindowWatcher, not ChromeLauncherController.
-  EXPECT_EQ(nullptr, GetShelfItemDelegate(panel_item.id));
   // Ensure icon heights are correct (see test.js in app_icon/ test directory)
   EXPECT_EQ(extension_misc::EXTENSION_ICON_SMALL, app_item.image.height());
   EXPECT_EQ(extension_misc::EXTENSION_ICON_LARGE,
@@ -1546,10 +1540,7 @@
   EXPECT_FALSE(panel->GetBaseWindow()->IsActive());
   // Confirm that a shelf item was created and is the correct state.
   const ash::ShelfItem& item = GetLastLauncherPanelItem();
-  // Panels are handled by ShelfWindowWatcher, not ChromeLauncherController.
-  EXPECT_EQ(nullptr, GetShelfItemDelegate(item.id));
-  ash::ShelfItemDelegate* shelf_item_delegate =
-      shelf_model()->GetShelfItemDelegate(item.id);
+  ash::ShelfItemDelegate* shelf_item_delegate = GetShelfItemDelegate(item.id);
   EXPECT_NE(nullptr, shelf_item_delegate);
   EXPECT_EQ(ash::TYPE_APP_PANEL, item.type);
   EXPECT_EQ(ash::STATUS_RUNNING, item.status);
@@ -1774,7 +1765,7 @@
 
   // Now request to either activate an existing app or create a new one.
   ash::ShelfItemDelegate* item_delegate =
-      controller_->GetShelfItemDelegate(shortcut_id);
+      model_->GetShelfItemDelegate(shortcut_id);
   SelectItem(item_delegate, ui::ET_KEY_RELEASED);
 
   // Check that we have set focus on the existing application and nothing new
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc
index 1984510f..af15a50 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc
@@ -161,9 +161,6 @@
     last_index_ = target_index;
   }
 
-  void OnSetShelfItemDelegate(ash::ShelfID id,
-                              ash::ShelfItemDelegate* item_delegate) override {}
-
   void clear_counts() {
     added_ = 0;
     removed_ = 0;
@@ -277,48 +274,6 @@
   DISALLOW_COPY_AND_ASSIGN(TestV2AppLauncherItemController);
 };
 
-// Proxies to ShelfDelegate invocation to the given
-// ChromeLauncherControllerImpl instance. Because of ownership management,
-// ChromeLauncherControllerImpl instance cannot be injected to WmShell.
-// This wraps the instance, so that it can be injected.
-class ProxyShelfDelegate : public ash::ShelfDelegate {
- public:
-  explicit ProxyShelfDelegate(ChromeLauncherControllerImpl* controller)
-      : controller_(controller) {}
-  ~ProxyShelfDelegate() override = default;
-
-  ash::ShelfID GetShelfIDForAppID(const std::string& app_id) override {
-    return controller_->GetShelfIDForAppID(app_id);
-  };
-
-  ash::ShelfID GetShelfIDForAppIDAndLaunchID(
-      const std::string& app_id,
-      const std::string& launch_id) override {
-    return controller_->GetShelfIDForAppIDAndLaunchID(app_id, launch_id);
-  }
-
-  const std::string& GetAppIDForShelfID(ash::ShelfID id) override {
-    return controller_->GetAppIDForShelfID(id);
-  }
-
-  void PinAppWithID(const std::string& app_id) override {
-    return controller_->PinAppWithID(app_id);
-  }
-
-  bool IsAppPinned(const std::string& app_id) override {
-    return controller_->IsAppPinned(app_id);
-  }
-
-  void UnpinAppWithID(const std::string& app_id) override {
-    return controller_->UnpinAppWithID(app_id);
-  }
-
- private:
-  ChromeLauncherControllerImpl* const controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(ProxyShelfDelegate);
-};
-
 // A callback that does nothing after shelf item selection handling.
 void NoopCallback(ash::ShelfAction action, base::Optional<ash::MenuItemList>) {}
 
@@ -508,7 +463,7 @@
     arc_test_.TearDown();
     model_->RemoveObserver(model_observer_.get());
     model_observer_.reset();
-    launcher_controller_.reset();
+    launcher_controller_ = nullptr;
     BrowserWithTestWindowTest::TearDown();
   }
 
@@ -530,34 +485,47 @@
     model_->Add(app_list);
   }
 
-  void InitLauncherController() {
-    launcher_controller_.reset(
-        new ChromeLauncherControllerImpl(profile(), model_));
-    launcher_controller_->Init();
+  // Create a launcher controller instance and register it as the ShelfDelegate.
+  // Returns a pointer to the uninitialized controller, which is owned by Shell.
+  ChromeLauncherControllerImpl* CreateLauncherController() {
+    // Shell owns ChromeLauncherController as its ShelfDelegate. The lifetime
+    // of this instance should match production behavior as closely as possible.
+    DCHECK(!ChromeLauncherController::instance());
+    std::unique_ptr<ChromeLauncherControllerImpl> launcher_controller =
+        base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_);
+    launcher_controller_ = launcher_controller.get();
+    ash::test::ShellTestApi().SetShelfDelegate(std::move(launcher_controller));
+    return launcher_controller_;
   }
 
+  // Create and initialize the controller.
+  // Returns a pointer to the initialized controller, which is owned by Shell.
+  void InitLauncherController() { CreateLauncherController()->Init(); }
+
+  // Create and initialize the controller; create a tab and show the browser.
   void InitLauncherControllerWithBrowser() {
     InitLauncherController();
     chrome::NewTab(browser());
     browser()->window()->Show();
   }
 
-  void RecreateChromeLauncher() {
-    // Destroy controller first if it exists.
-    launcher_controller_.reset();
+  // Destroy Shell's controller instance and clear the local pointer.
+  void ResetLauncherController() {
+    launcher_controller_ = nullptr;
+    ash::test::ShellTestApi().SetShelfDelegate(nullptr);
+  }
+
+  // Destroy and recreate the controller; clear and reinitialize the ShelfModel.
+  // Returns a pointer to the uninitialized controller, which is owned by Shell.
+  // TODO(msw): This does not accurately represent ChromeLauncherControllerImpl
+  // lifetime or usage in production, and does not accurately simulate restarts.
+  ChromeLauncherControllerImpl* RecreateLauncherController() {
+    // Destroy any existing controller first; only one may exist at a time.
+    ResetLauncherController();
     while (model_->item_count() > 0)
       model_->RemoveItemAt(0);
     AddAppListLauncherItem();
-    launcher_controller_ =
-        base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_);
-    launcher_controller_->Init();
-  }
-
-  // This needs to be called after InitLaunchController(), or its family.
-  // It is not supported to recreate the instance.
-  void SetShelfDelegate() {
-    ash::test::ShellTestApi().SetShelfDelegate(
-        base::MakeUnique<ProxyShelfDelegate>(launcher_controller_.get()));
+    return CreateLauncherController();
   }
 
   void StartAppSyncService(const syncer::SyncDataList& init_sync_list) {
@@ -745,18 +713,13 @@
     app_service_->ProcessSyncChanges(FROM_HERE, sync_list);
   }
 
-  // Gets the currently configured app launchers from the controller.
-  void GetAppLaunchers(ChromeLauncherControllerImpl* controller,
-                       std::vector<std::string>* launchers) {
-    launchers->clear();
-    for (ash::ShelfItems::const_iterator iter(model_->items().begin());
-         iter != model_->items().end(); ++iter) {
-      ChromeLauncherControllerImpl::IDToItemControllerMap::const_iterator entry(
-          controller->id_to_item_controller_map_.find(iter->id));
-      if (iter->type == ash::TYPE_PINNED_APP &&
-          entry != controller->id_to_item_controller_map_.end()) {
-        launchers->push_back(entry->second->app_id());
-      }
+  // Gets the IDs of the currently pinned app items.
+  void GetPinnedAppIds(ChromeLauncherControllerImpl* controller,
+                       std::vector<std::string>* app_ids) {
+    app_ids->clear();
+    for (const auto& item : model_->items()) {
+      if (item.type == ash::TYPE_PINNED_APP)
+        app_ids->push_back(item.app_launch_id.app_id());
     }
   }
 
@@ -975,7 +938,7 @@
 
   ArcAppTest arc_test_;
   bool auto_start_arc_test_ = false;
-  std::unique_ptr<ChromeLauncherControllerImpl> launcher_controller_;
+  ChromeLauncherControllerImpl* launcher_controller_ = nullptr;
   std::unique_ptr<TestShelfModelObserver> model_observer_;
   ash::ShelfModel* model_ = nullptr;
   std::unique_ptr<TestingProfileManager> profile_manager_;
@@ -1345,14 +1308,14 @@
   syncer::SyncDataList copy_sync_list =
       app_service_->GetAllSyncData(syncer::APP_LIST);
 
-  launcher_controller_.reset();
+  ResetLauncherController();
   SendPinChanges(syncer::SyncChangeList(), true);
   StopAppSyncService();
   EXPECT_EQ(0U, app_service_->sync_items().size());
 
   // Move to ARC enabled platform, restart syncing with stored data.
   StartAppSyncService(copy_sync_list);
-  RecreateChromeLauncher();
+  RecreateLauncherController()->Init();
 
   // Pins must be automatically updated.
   SendListOfArcApps();
@@ -1376,7 +1339,7 @@
 
   copy_sync_list = app_service_->GetAllSyncData(syncer::APP_LIST);
 
-  launcher_controller_.reset();
+  ResetLauncherController();
   ResetPinModel();
 
   SendPinChanges(syncer::SyncChangeList(), true);
@@ -1389,7 +1352,7 @@
     return;
   EnablePlayStore(false);
   StartAppSyncService(copy_sync_list);
-  RecreateChromeLauncher();
+  RecreateLauncherController()->Init();
 
   EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id()));
   EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id1));
@@ -1856,7 +1819,7 @@
 }
 
 TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunch) {
-  RecreateChromeLauncher();
+  InitLauncherController();
 
   const arc::mojom::AppInfo& app1 = arc_test_.fake_apps()[0];
   const arc::mojom::AppInfo& app2 = arc_test_.fake_apps()[1];
@@ -1903,7 +1866,7 @@
   // We activated arc_app_id1 twice but expect one close for item controller
   // stops launching request.
   ash::ShelfItemDelegate* item_delegate =
-      launcher_controller_->GetShelfItemDelegate(shelf_id_app_1);
+      model_->GetShelfItemDelegate(shelf_id_app_1);
   ASSERT_NE(nullptr, item_delegate);
   item_delegate->Close();
   base::RunLoop().RunUntilIdle();
@@ -1946,7 +1909,7 @@
 // Ensure the deferred controller does not override the active app controller
 // (crbug.com/701152).
 TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunchForActiveApp) {
-  RecreateChromeLauncher();
+  InitLauncherController();
   SendListOfArcApps();
   arc_test_.StopArcInstance();
 
@@ -1967,7 +1930,7 @@
 
   // Play Store app is ARC app that might be represented by native Chrome
   // platform app.
-  launcher_controller_->SetShelfItemDelegate(
+  model_->SetShelfItemDelegate(
       shelf_id, base::MakeUnique<ExtensionAppWindowLauncherItemController>(
                     ash::AppLaunchId(app_id)));
   launcher_controller_->SetItemStatus(shelf_id, ash::STATUS_RUNNING);
@@ -2445,9 +2408,8 @@
       multi_user_util::GetAccountIdFromProfile(profile());
 
   // Create a browser window with a native window for the current user.
-  Browser::CreateParams params(profile(), true);
   std::unique_ptr<Browser> browser(
-      chrome::CreateBrowserWithAuraTestWindowForParams(nullptr, &params));
+      CreateBrowserWithTestWindowForProfile(profile()));
   BrowserWindow* browser_window = browser->window();
   aura::Window* window = browser_window->GetNativeWindow();
   manager->SetWindowOwner(window, current_user);
@@ -2723,10 +2685,10 @@
   InsertAddPinChange(&sync_list, 10, extension_misc::kChromeAppId);
   SendPinChanges(sync_list, true);
 
-  std::vector<std::string> expected_launchers;
-  std::vector<std::string> actual_launchers;
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  std::vector<std::string> expected_pinned_apps;
+  std::vector<std::string> actual_pinned_apps;
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 
   // Unavailable extensions don't create launcher items.
   sync_list.clear();
@@ -2735,48 +2697,49 @@
   InsertAddPinChange(&sync_list, 3, extension4_->id());
   SendPinChanges(sync_list, false);
 
-  expected_launchers.push_back(extension2_->id());
-  expected_launchers.push_back(extension4_->id());
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  expected_pinned_apps.push_back(extension2_->id());
+  expected_pinned_apps.push_back(extension4_->id());
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 
   sync_list.clear();
   InsertAddPinChange(&sync_list, 2, extension3_->id());
   SendPinChanges(sync_list, false);
-  expected_launchers.insert(expected_launchers.begin() + 1, extension3_->id());
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  expected_pinned_apps.insert(expected_pinned_apps.begin() + 1,
+                              extension3_->id());
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 
   sync_list.clear();
   InsertUpdatePinChange(&sync_list, 0, extension4_->id());
   InsertUpdatePinChange(&sync_list, 1, extension3_->id());
   InsertUpdatePinChange(&sync_list, 2, extension2_->id());
   SendPinChanges(sync_list, false);
-  std::reverse(expected_launchers.begin(), expected_launchers.end());
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  std::reverse(expected_pinned_apps.begin(), expected_pinned_apps.end());
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 
   // Sending legacy sync change without pin info should not affect pin model.
   sync_list.clear();
   InsertLegacyPinChange(&sync_list, extension4_->id());
   SendPinChanges(sync_list, false);
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 
   sync_list.clear();
   InsertRemovePinChange(&sync_list, extension4_->id());
   SendPinChanges(sync_list, false);
-  expected_launchers.erase(expected_launchers.begin());
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  expected_pinned_apps.erase(expected_pinned_apps.begin());
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 
   sync_list.clear();
   InsertRemovePinChange(&sync_list, extension3_->id());
   InsertRemovePinChange(&sync_list, extension2_->id());
   SendPinChanges(sync_list, false);
-  expected_launchers.clear();
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  expected_pinned_apps.clear();
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 }
 
 TEST_F(ChromeLauncherControllerImplTest, ImportLegacyPin) {
@@ -2820,7 +2783,7 @@
   EXPECT_EQ("AppList, Chrome, App4, App2, App5", GetPinnedAppStatus());
 
   // Next Chrome start should preserve pins.
-  RecreateChromeLauncher();
+  RecreateLauncherController()->Init();
   StopPrefSyncService();
   StartPrefSyncService(syncer::SyncDataList());
   EXPECT_EQ("AppList, Chrome, App4, App2, App5", GetPinnedAppStatus());
@@ -2838,19 +2801,20 @@
   InsertAddPinChange(&sync_list, 2, extension3_->id());
   SendPinChanges(sync_list, true);
 
-  std::vector<std::string> expected_launchers;
-  expected_launchers.push_back(extension1_->id());
-  expected_launchers.push_back(extension3_->id());
-  std::vector<std::string> actual_launchers;
+  std::vector<std::string> expected_pinned_apps;
+  expected_pinned_apps.push_back(extension1_->id());
+  expected_pinned_apps.push_back(extension3_->id());
+  std::vector<std::string> actual_pinned_apps;
 
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 
   // Install |extension2| and verify it shows up between the other two.
   extension_service_->AddExtension(extension2_.get());
-  expected_launchers.insert(expected_launchers.begin() + 1, extension2_->id());
-  GetAppLaunchers(launcher_controller_.get(), &actual_launchers);
-  EXPECT_EQ(expected_launchers, actual_launchers);
+  expected_pinned_apps.insert(expected_pinned_apps.begin() + 1,
+                              extension2_->id());
+  GetPinnedAppIds(launcher_controller_, &actual_pinned_apps);
+  EXPECT_EQ(expected_pinned_apps, actual_pinned_apps);
 }
 
 // Ensure |controller| creates the expected menu items for the given shelf item.
@@ -2876,7 +2840,7 @@
   item_browser.type = ash::TYPE_BROWSER_SHORTCUT;
   item_browser.id =
       launcher_controller_->GetShelfIDForAppID(extension_misc::kChromeAppId);
-  CheckAppMenu(launcher_controller_.get(), item_browser, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_browser, 0, nullptr);
 
   // Now make the created browser() visible by showing its browser window.
   browser()->window()->Show();
@@ -2884,7 +2848,7 @@
   NavigateAndCommitActiveTabWithTitle(browser(), GURL("http://test1"), title1);
   base::string16 one_menu_item[] = { title1 };
 
-  CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item);
+  CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item);
 
   // Create one more browser/window and check that one more was added.
   std::unique_ptr<Browser> browser2(
@@ -2898,7 +2862,7 @@
   // Check that the list contains now two entries - make furthermore sure that
   // the active item is the first entry.
   base::string16 two_menu_items[] = {title1, title2};
-  CheckAppMenu(launcher_controller_.get(), item_browser, 2, two_menu_items);
+  CheckAppMenu(launcher_controller_, item_browser, 2, two_menu_items);
 
   // Apparently we have to close all tabs we have.
   chrome::CloseTab(browser2.get());
@@ -2917,14 +2881,14 @@
 
   // Check that the menu is empty.
   chrome::NewTab(browser());
-  CheckAppMenu(launcher_controller_.get(), item_browser, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_browser, 0, nullptr);
 
   // Show the created |browser()| by showing its window.
   browser()->window()->Show();
   base::string16 title1 = ASCIIToUTF16("Test1");
   NavigateAndCommitActiveTabWithTitle(browser(), GURL("http://test1"), title1);
   base::string16 one_menu_item1[] = { title1 };
-  CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item1);
+  CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item1);
 
   // Create a browser for another user and check that it is not included in the
   // users running browser list.
@@ -2935,17 +2899,17 @@
   std::unique_ptr<Browser> browser2(
       CreateBrowserAndTabWithProfile(profile2, user2, "http://test2"));
   base::string16 one_menu_item2[] = { ASCIIToUTF16(user2) };
-  CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item1);
+  CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item1);
 
   // Switch to the other user and make sure that only that browser window gets
   // shown.
   SwitchActiveUser(account_id2);
-  CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item2);
+  CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item2);
 
   // Transferred browsers of other users should not show up in the list.
   chrome::MultiUserWindowManager::GetInstance()->ShowWindowForUser(
       browser()->window()->GetNativeWindow(), account_id2);
-  CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item2);
+  CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item2);
 
   chrome::CloseTab(browser2.get());
 }
@@ -2982,14 +2946,14 @@
   ash::ShelfItem item_gmail;
   item_gmail.type = ash::TYPE_PINNED_APP;
   item_gmail.id = gmail_id;
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr);
 
   // Set the gmail URL to a new tab.
   base::string16 title1 = ASCIIToUTF16("Test1");
   NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1);
 
   base::string16 one_menu_item[] = { title1 };
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 1, one_menu_item);
+  CheckAppMenu(launcher_controller_, item_gmail, 1, one_menu_item);
 
   // Create one empty tab.
   chrome::NewTab(browser());
@@ -3004,20 +2968,20 @@
   base::string16 title3 = ASCIIToUTF16("Test3");
   NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title3);
   base::string16 two_menu_items[] = {title1, title3};
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 2, two_menu_items);
+  CheckAppMenu(launcher_controller_, item_gmail, 2, two_menu_items);
 
   // Even though the item is in the V1 app list, it should also be in the
   // browser list.
   base::string16 browser_menu_item[] = {title3};
-  CheckAppMenu(launcher_controller_.get(), item_browser, 1, browser_menu_item);
+  CheckAppMenu(launcher_controller_, item_browser, 1, browser_menu_item);
 
   // Test that closing of (all) the item(s) does work (and all menus get
   // updated properly).
   launcher_controller_->Close(item_gmail.id);
 
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr);
   base::string16 browser_menu_item2[] = { title2 };
-  CheckAppMenu(launcher_controller_.get(), item_browser, 1, browser_menu_item2);
+  CheckAppMenu(launcher_controller_, item_browser, 1, browser_menu_item2);
 }
 
 // Check the multi profile case where only user related apps should show up.
@@ -3045,14 +3009,14 @@
   ash::ShelfItem item_gmail;
   item_gmail.type = ash::TYPE_PINNED_APP;
   item_gmail.id = gmail_id;
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr);
 
   // Set the gmail URL to a new tab.
   base::string16 title1 = ASCIIToUTF16("Test1");
   NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1);
 
   base::string16 one_menu_item[] = { title1 };
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 1, one_menu_item);
+  CheckAppMenu(launcher_controller_, item_gmail, 1, one_menu_item);
 
   // Create a second profile and switch to that user.
   std::string user2 = "user2";
@@ -3062,15 +3026,15 @@
   SwitchActiveUser(account_id2);
 
   // No item should have content yet.
-  CheckAppMenu(launcher_controller_.get(), item_browser, 0, nullptr);
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_browser, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr);
 
   // Transfer the browser of the first user - it should still not show up.
   chrome::MultiUserWindowManager::GetInstance()->ShowWindowForUser(
       browser()->window()->GetNativeWindow(), account_id2);
 
-  CheckAppMenu(launcher_controller_.get(), item_browser, 0, nullptr);
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_browser, 0, nullptr);
+  CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr);
 }
 
 // Check that V2 applications are creating items properly in the launcher when
@@ -3308,9 +3272,9 @@
   item_gmail.type = ash::TYPE_PINNED_APP;
   item_gmail.id = gmail_id;
   base::string16 two_menu_items[] = {title1, title2};
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 2, two_menu_items);
+  CheckAppMenu(launcher_controller_, item_gmail, 2, two_menu_items);
   ash::ShelfItemDelegate* item_delegate =
-      launcher_controller_->GetShelfItemDelegate(gmail_id);
+      model_->GetShelfItemDelegate(gmail_id);
   ASSERT_TRUE(item_delegate);
   EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
   // Execute the second item in the menu, after the title and two separators,
@@ -3356,10 +3320,10 @@
   item_gmail.type = ash::TYPE_PINNED_APP;
   item_gmail.id = gmail_id;
   base::string16 two_menu_items[] = {title1, title2};
-  CheckAppMenu(launcher_controller_.get(), item_gmail, 2, two_menu_items);
+  CheckAppMenu(launcher_controller_, item_gmail, 2, two_menu_items);
 
   ash::ShelfItemDelegate* item_delegate =
-      launcher_controller_->GetShelfItemDelegate(gmail_id);
+      model_->GetShelfItemDelegate(gmail_id);
   ASSERT_TRUE(item_delegate);
   int tabs = browser()->tab_strip_model()->count();
   // Activate the proper tab through the menu item.
@@ -3516,13 +3480,7 @@
   EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type);
   EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_->items()[3].type);
 
-  launcher_controller_.reset();
-  while (!model_->items().empty())
-    model_->RemoveItemAt(0);
-
-  AddAppListLauncherItem();
-  launcher_controller_ =
-      base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_);
+  RecreateLauncherController();
   helper = new TestLauncherControllerHelper(profile());
   helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1");
   helper->SetAppID(tab_strip_model->GetWebContentsAt(1), "2");
@@ -3563,13 +3521,7 @@
   EXPECT_FALSE(launcher_controller_->IsAppPinned("0"));
   EXPECT_EQ(initial_size + 1, model_->items().size());
 
-  launcher_controller_.reset();
-  while (!model_->items().empty())
-    model_->RemoveItemAt(0);
-
-  AddAppListLauncherItem();
-  launcher_controller_ =
-      base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_);
+  RecreateLauncherController();
   helper = new TestLauncherControllerHelper(profile());
   helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1");
   SetLauncherControllerHelper(helper);
@@ -3684,10 +3636,6 @@
   // Initially pins are imported from legacy pref based model.
   StartPrefSyncService(syncer::SyncDataList());
 
-  // Inject |launcher_controller_| as ShelfDelegate to verify the behavior
-  // of removing pinned icon in ArcSessionManager::OnOptInPreferenceChanged().
-  SetShelfDelegate();
-
   // Initial run, ARC is not managed and disabled, Play Store pin should be
   // available.
   ValidateArcState(false, false, arc::ArcSessionManager::State::STOPPED,
@@ -3760,7 +3708,7 @@
   const ash::ShelfID shelf_id =
       launcher_controller_->GetShelfIDForAppID(app_id);
   ash::ShelfItemDelegate* item_delegate =
-      launcher_controller_->GetShelfItemDelegate(shelf_id);
+      model_->GetShelfItemDelegate(shelf_id);
   ASSERT_TRUE(item_delegate);
 
   // Selecting the item will show its application menu. It does not change the
@@ -4048,7 +3996,9 @@
 TEST_P(ChromeLauncherControllerArcDefaultAppsTest, DefaultApps) {
   arc_test_.SetUp(profile());
   InitLauncherController();
-  ChromeLauncherController::set_instance_for_test(launcher_controller_.get());
+  // TODO(crbug.com/709297): Fix this workaround to prevent a TearDown crash.
+  std::vector<std::unique_ptr<AppIconLoader>> no_loaders;
+  launcher_controller_->SetAppIconLoadersForTest(no_loaders);
 
   ArcAppListPrefs* const prefs = arc_test_.arc_app_list_prefs();
   EnablePlayStore(false);
@@ -4104,9 +4054,8 @@
       arc::kPlayStoreAppId));
 
   // Simulate click. This should schedule Play Store for deferred launch.
-  ash::ShelfItemDelegate* item_delegate =
-      launcher_controller_->GetShelfItemDelegate(
-          launcher_controller_->GetShelfIDForAppID(arc::kPlayStoreAppId));
+  ash::ShelfItemDelegate* item_delegate = model_->GetShelfItemDelegate(
+      launcher_controller_->GetShelfIDForAppID(arc::kPlayStoreAppId));
   EXPECT_TRUE(item_delegate);
   SelectItem(item_delegate);
   EXPECT_TRUE(launcher_controller_->IsAppPinned(arc::kPlayStoreAppId));
@@ -4184,7 +4133,7 @@
       app_service_->GetAllSyncData(syncer::APP_LIST);
 
   app_service_->StopSyncing(syncer::APP_LIST);
-  RecreateChromeLauncher();
+  RecreateLauncherController()->Init();
 
   // Pinned state should not change.
   EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus());
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_mus.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_mus.cc
index 0bcb2992..b213808 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_mus.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_mus.cc
@@ -43,12 +43,6 @@
   NOTIMPLEMENTED();
 }
 
-void ChromeLauncherControllerMus::SetShelfItemDelegate(
-    ash::ShelfID id,
-    std::unique_ptr<ash::ShelfItemDelegate> item_delegate) {
-  NOTIMPLEMENTED();
-}
-
 void ChromeLauncherControllerMus::CloseLauncherItem(ash::ShelfID id) {
   NOTIMPLEMENTED();
 }
@@ -175,12 +169,6 @@
   return nullptr;
 }
 
-ash::ShelfItemDelegate* ChromeLauncherControllerMus::GetShelfItemDelegate(
-    const ash::ShelfID id) {
-  NOTIMPLEMENTED();
-  return nullptr;
-}
-
 bool ChromeLauncherControllerMus::ShelfBoundsChangesProbablyWithUser(
     ash::WmShelf* shelf,
     const AccountId& account_id) const {
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_mus.h b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_mus.h
index e506604..51babed9 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_mus.h
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_mus.h
@@ -22,9 +22,6 @@
   const ash::ShelfItem* GetItem(ash::ShelfID id) const override;
   void SetItemType(ash::ShelfID id, ash::ShelfItemType type) override;
   void SetItemStatus(ash::ShelfID id, ash::ShelfItemStatus status) override;
-  void SetShelfItemDelegate(
-      ash::ShelfID id,
-      std::unique_ptr<ash::ShelfItemDelegate> item_delegate) override;
   void CloseLauncherItem(ash::ShelfID id) override;
   bool IsPinned(ash::ShelfID id) override;
   void SetV1AppStatus(const std::string& app_id,
@@ -62,7 +59,6 @@
       content::WebContents* web_contents) const override;
   BrowserShortcutLauncherItemController*
   GetBrowserShortcutLauncherItemController() override;
-  ash::ShelfItemDelegate* GetShelfItemDelegate(const ash::ShelfID id) override;
   bool ShelfBoundsChangesProbablyWithUser(
       ash::WmShelf* shelf,
       const AccountId& account_id) const override;
diff --git a/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
index 7b1ed43..5e4528c3 100644
--- a/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.h"
 
 #include "ash/common/shelf/shelf_delegate.h"
+#include "ash/common/shelf/shelf_model.h"
 #include "ash/common/wm_window.h"
 #include "ash/shell.h"
 #include "ash/wm/window_properties.h"
@@ -194,7 +195,8 @@
         item_controller->set_image_set_by_controller(true);
       }
     } else {
-      owner()->SetShelfItemDelegate(shelf_id, std::move(controller));
+      ash::ShelfModel* shelf_model = ash::Shell::Get()->shelf_model();
+      shelf_model->SetShelfItemDelegate(shelf_id, std::move(controller));
     }
 
     // We need to change the controller associated with app_shelf_id.
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
index 38d517a..ae5774e2 100644
--- a/chrome/browser/ui/browser_command_controller.cc
+++ b/chrome/browser/ui/browser_command_controller.cc
@@ -187,8 +187,27 @@
   }
 #endif
 
-  if (window()->IsFullscreen() && command_id == IDC_FULLSCREEN)
-    return true;
+  if (window()->IsFullscreen()) {
+    // In fullscreen, all commands except for IDC_FULLSCREEN and IDC_EXIT should
+    // be delivered to the web page. The intent to implement and ship can be
+    // found in http://crbug.com/680809.
+    const bool is_exit_fullscreen =
+        (command_id == IDC_EXIT || command_id == IDC_FULLSCREEN);
+#if defined(OS_MACOSX)
+    // This behavior is different on Mac OS, which has a unique user-initiated
+    // full-screen mode. According to the discussion in http://crbug.com/702251,
+    // the commands should be reserved for browser-side handling if the browser
+    // window's toolbar is visible.
+    if (window()->IsToolbarShowing()) {
+      if (command_id == IDC_FULLSCREEN)
+        return true;
+    } else {
+      return is_exit_fullscreen;
+    }
+#else
+    return is_exit_fullscreen;
+#endif
+  }
 
 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
   // If this key was registered by the user as a content editing hotkey, then
diff --git a/chrome/browser/ui/browser_command_controller_unittest.cc b/chrome/browser/ui/browser_command_controller_unittest.cc
index 8fa33d20..5dd6fc5 100644
--- a/chrome/browser/ui/browser_command_controller_unittest.cc
+++ b/chrome/browser/ui/browser_command_controller_unittest.cc
@@ -252,7 +252,9 @@
  public:
   FullscreenTestBrowserWindow(
       BrowserCommandControllerFullscreenTest* test_browser)
-      : fullscreen_(false), test_browser_(test_browser) {}
+      : fullscreen_(false),
+        toolbar_showing_(false),
+        test_browser_(test_browser) {}
 
   ~FullscreenTestBrowserWindow() override {}
 
@@ -264,6 +266,7 @@
     fullscreen_ = true;
   }
   void ExitFullscreen() override { fullscreen_ = false; }
+  bool IsToolbarShowing() const override { return toolbar_showing_; }
 
   ExclusiveAccessContext* GetExclusiveAccessContext() override { return this; }
 
@@ -277,8 +280,11 @@
       ExclusiveAccessBubbleType bubble_type) override {}
   void OnExclusiveAccessUserInput() override {}
 
+  void set_toolbar_showing(bool showing) { toolbar_showing_ = showing; }
+
  private:
   bool fullscreen_;
+  bool toolbar_showing_;
   BrowserCommandControllerFullscreenTest* test_browser_;
 
   DISALLOW_COPY_AND_ASSIGN(FullscreenTestBrowserWindow);
@@ -312,129 +318,115 @@
 
 TEST_F(BrowserCommandControllerFullscreenTest,
        UpdateCommandsForFullscreenMode) {
-  // Defaults for a tabbed browser.
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
+  struct {
+    int command_id;
+    // Whether the command is enabled in tab mode.
+    bool enabled_in_tab;
+    // Whether the keyboard shortcut is reserved in tab mode.
+    bool reserved_in_tab;
+    // Whether the command is enabled in fullscreen mode.
+    bool enabled_in_fullscreen;
+    // Whether the keyboard shortcut is reserved in fullscreen mode.
+    bool reserved_in_fullscreen;
+  } commands[] = {
+    // 1. Most commands are disabled in fullscreen.
+    // 2. In fullscreen, only the exit fullscreen commands are reserved. All
+    // other shortcuts should be delivered to the web page. See
+    // http://crbug.com/680809.
+
+    //         Command ID        |      tab mode      |      fullscreen     |
+    //                           | enabled | reserved | enabled  | reserved |
+    { IDC_OPEN_CURRENT_URL,        true,     false,     false,     false    },
+    { IDC_FOCUS_TOOLBAR,           true,     false,     false,     false    },
+    { IDC_FOCUS_LOCATION,          true,     false,     false,     false    },
+    { IDC_FOCUS_SEARCH,            true,     false,     false,     false    },
+    { IDC_FOCUS_MENU_BAR,          true,     false,     false,     false    },
+    { IDC_FOCUS_NEXT_PANE,         true,     false,     false,     false    },
+    { IDC_FOCUS_PREVIOUS_PANE,     true,     false,     false,     false    },
+    { IDC_FOCUS_BOOKMARKS,         true,     false,     false,     false    },
+    { IDC_DEVELOPER_MENU,          true,     false,     false,     false    },
 #if defined(GOOGLE_CHROME_BUILD)
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
+    { IDC_FEEDBACK,                true,     false,     false,     false    },
 #endif
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
+    { IDC_OPTIONS,                 true,     false,     false,     false    },
+    { IDC_IMPORT_SETTINGS,         true,     false,     false,     false    },
+    { IDC_EDIT_SEARCH_ENGINES,     true,     false,     false,     false    },
+    { IDC_VIEW_PASSWORDS,          true,     false,     false,     false    },
+    { IDC_ABOUT,                   true,     false,     false,     false    },
+    { IDC_SHOW_APP_MENU,           true,     false,     false,     false    },
+    { IDC_FULLSCREEN,              true,     false,     true,      true     },
+    { IDC_CLOSE_TAB,               true,     true,      true,      false    },
+    { IDC_CLOSE_WINDOW,            true,     true,      true,      false    },
+    { IDC_NEW_INCOGNITO_WINDOW,    true,     true,      true,      false    },
+    { IDC_NEW_TAB,                 true,     true,      true,      false    },
+    { IDC_NEW_WINDOW,              true,     true,      true,      false    },
+    { IDC_SELECT_NEXT_TAB,         true,     true,      true,      false    },
+    { IDC_SELECT_PREVIOUS_TAB,     true,     true,      true,      false    },
+    { IDC_EXIT,                    true,     true,      true,      true     },
+    { IDC_SHOW_AS_TAB,             false,    false,     false,     false    },
+  };
+  const content::NativeWebKeyboardEvent key_event(
+      blink::WebInputEvent::TypeFirst, 0, 0);
+  // Defaults for a tabbed browser.
+  for (size_t i = 0; i < arraysize(commands); i++) {
+    SCOPED_TRACE(commands[i].command_id);
+    EXPECT_EQ(chrome::IsCommandEnabled(browser(), commands[i].command_id),
+              commands[i].enabled_in_tab);
+    EXPECT_EQ(browser()->command_controller()->IsReservedCommandOrKey(
+                  commands[i].command_id, key_event),
+              commands[i].reserved_in_tab);
+  }
 
   // Simulate going fullscreen.
   chrome::ToggleFullscreenMode(browser());
   ASSERT_TRUE(browser()->window()->IsFullscreen());
   browser()->command_controller()->FullscreenStateChanged();
 
-  // Most commands are disabled in fullscreen.
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
-#if defined(GOOGLE_CHROME_BUILD)
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
-#endif
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
+  // By default, in fullscreen mode, the toolbar should be hidden; and all
+  // platforms behave similarly.
+  EXPECT_FALSE(window()->IsToolbarShowing());
+  for (size_t i = 0; i < arraysize(commands); i++) {
+    SCOPED_TRACE(commands[i].command_id);
+    EXPECT_EQ(chrome::IsCommandEnabled(browser(), commands[i].command_id),
+              commands[i].enabled_in_fullscreen);
+    EXPECT_EQ(browser()->command_controller()->IsReservedCommandOrKey(
+                  commands[i].command_id, key_event),
+              commands[i].reserved_in_fullscreen);
+  }
 
+#if defined(OS_MACOSX)
+  // When the toolbar is showing, commands should be reserved as if the content
+  // were in a tab; IDC_FULLSCREEN should also be reserved.
+  static_cast<FullscreenTestBrowserWindow*>(window())->set_toolbar_showing(
+      true);
   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_CLOSE_TAB,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_CLOSE_WINDOW,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_NEW_INCOGNITO_WINDOW,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_NEW_TAB,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_NEW_WINDOW,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_SELECT_NEXT_TAB,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_SELECT_PREVIOUS_TAB,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_EXIT,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
+      IDC_FULLSCREEN, key_event));
+  for (size_t i = 0; i < arraysize(commands); i++) {
+    if (commands[i].command_id != IDC_FULLSCREEN) {
+      SCOPED_TRACE(commands[i].command_id);
+      EXPECT_EQ(browser()->command_controller()->IsReservedCommandOrKey(
+                    commands[i].command_id, key_event),
+                commands[i].reserved_in_tab);
+    }
+  }
+  // Return to default state.
+  static_cast<FullscreenTestBrowserWindow*>(window())->set_toolbar_showing(
+      false);
+#endif
 
   // Exit fullscreen.
   chrome::ToggleFullscreenMode(browser());
   ASSERT_FALSE(browser()->window()->IsFullscreen());
   browser()->command_controller()->FullscreenStateChanged();
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
-  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
-#if defined(GOOGLE_CHROME_BUILD)
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
-#endif
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
-  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
 
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_CLOSE_TAB,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_CLOSE_WINDOW,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_NEW_INCOGNITO_WINDOW,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_NEW_TAB,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_NEW_WINDOW,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_SELECT_NEXT_TAB,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_SELECT_PREVIOUS_TAB,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
-  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
-      IDC_EXIT,
-      content::NativeWebKeyboardEvent(blink::WebInputEvent::TypeFirst, 0, 0)));
+  for (size_t i = 0; i < arraysize(commands); i++) {
+    SCOPED_TRACE(commands[i].command_id);
+    EXPECT_EQ(chrome::IsCommandEnabled(browser(), commands[i].command_id),
+              commands[i].enabled_in_tab);
+    EXPECT_EQ(browser()->command_controller()->IsReservedCommandOrKey(
+                  commands[i].command_id, key_event),
+              commands[i].reserved_in_tab);
+  }
 
   // Guest Profiles disallow some options.
   TestingProfile* testprofile = browser()->profile()->AsTestingProfile();
diff --git a/chrome/browser/ui/browser_window.h b/chrome/browser/ui/browser_window.h
index 25ded91..d01dd7e1 100644
--- a/chrome/browser/ui/browser_window.h
+++ b/chrome/browser/ui/browser_window.h
@@ -220,9 +220,19 @@
   // Returns whether the tab strip is editable (for extensions).
   virtual bool IsTabStripEditable() const = 0;
 
-  // Returns whether the tool bar is visible or not.
+  // Returns whether the toolbar is available or not. It's called "Visible()"
+  // to follow the name convention. But it does not indicate the visibility of
+  // the toolbar, i.e. toolbar may be hidden, and only visible when the mouse
+  // cursor is at a certain place.
+  // TODO(zijiehe): Rename Visible() functions into Available() to match their
+  // original meaning.
   virtual bool IsToolbarVisible() const = 0;
 
+  // Returns whether the toolbar is showing up on the screen.
+  // TODO(zijiehe): Rename this function into IsToolbarVisible() once other
+  // Visible() functions are renamed to Available().
+  virtual bool IsToolbarShowing() const = 0;
+
   // Shows the Update Recommended dialog box.
   virtual void ShowUpdateChromeDialog() = 0;
 
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.h b/chrome/browser/ui/cocoa/browser_window_cocoa.h
index f92d625..b9df782 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.h
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.h
@@ -102,6 +102,7 @@
   bool IsBookmarkBarAnimating() const override;
   bool IsTabStripEditable() const override;
   bool IsToolbarVisible() const override;
+  bool IsToolbarShowing() const override;
   void ShowUpdateChromeDialog() override;
   void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) override;
   void ShowBookmarkAppBubble(
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.mm b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
index 2838580..219721c 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
@@ -322,6 +322,16 @@
       browser_->GetWindowTitleForCurrentTab(include_app_name));
 }
 
+bool BrowserWindowCocoa::IsToolbarShowing() const {
+  if (!IsFullscreen())
+    return true;
+
+  // TODO(zijiehe): Retrieve the visibility of toolbar from
+  // FullscreenToolbarController. See http://crbug.com/702251 and
+  // http://crbug.com/680809.
+  return true;
+}
+
 void BrowserWindowCocoa::BookmarkBarStateChanged(
     BookmarkBar::AnimateChangeType change_type) {
   [[controller_ bookmarkBarController]
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.h b/chrome/browser/ui/cocoa/browser_window_controller.h
index 5281cbf..cdbe2d1 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller.h
+++ b/chrome/browser/ui/cocoa/browser_window_controller.h
@@ -519,9 +519,6 @@
 // |bubbleType|.
 - (void)updateFullscreenExitBubble;
 
-// Returns YES if the browser window is in or entering any fullscreen mode.
-- (BOOL)isInAnyFullscreenMode;
-
 // Returns YES if the browser window is currently in or entering fullscreen via
 // the built-in immersive mechanism.
 - (BOOL)isInImmersiveFullscreen;
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm
index 4d7ac82..2fd4f20f 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
@@ -1899,10 +1899,6 @@
   return NO;
 }
 
-- (BOOL)isInAnyFullscreenMode {
-  return [self isInImmersiveFullscreen] || [self isInAppKitFullscreen];
-}
-
 - (BOOL)isInImmersiveFullscreen {
   return fullscreenWindow_.get() != nil || enteringImmersiveFullscreen_;
 }
@@ -1914,6 +1910,10 @@
           enteringAppKitFullscreen_);
 }
 
+- (BOOL)isInAnyFullscreenMode {
+  return [self isInImmersiveFullscreen] || [self isInAppKitFullscreen];
+}
+
 - (NSView*)avatarView {
   return [avatarButtonController_ view];
 }
diff --git a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
index 06d7c2e1..a840011 100644
--- a/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
+++ b/chrome/browser/ui/cocoa/browser_window_touch_bar.mm
@@ -25,8 +25,10 @@
 #include "components/omnibox/browser/vector_icons.h"
 #include "components/prefs/pref_member.h"
 #include "components/search_engines/util.h"
+#include "components/strings/grit/components_strings.h"
 #include "components/toolbar/vector_icons.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/l10n/l10n_util_mac.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/color_utils.h"
 #include "ui/gfx/image/image.h"
@@ -89,12 +91,14 @@
 NSButton* CreateTouchBarButton(const gfx::VectorIcon& icon,
                                BrowserWindowTouchBar* owner,
                                int command,
+                               int tooltip_id,
                                SkColor color = kTouchBarDefaultIconColor) {
   NSButton* button =
       [NSButton buttonWithImage:CreateNSImageFromIcon(icon, color)
                          target:owner
                          action:@selector(executeCommand:)];
   button.tag = command;
+  [button setAccessibilityLabel:l10n_util::GetNSString(tooltip_id)];
   return button;
 }
 
@@ -234,21 +238,25 @@
   } else if ([identifier isEqualTo:kReloadOrStopTouchId]) {
     const gfx::VectorIcon& icon =
         isPageLoading_ ? kNavigateStopIcon : kNavigateReloadIcon;
-    int command_id = isPageLoading_ ? IDC_STOP : IDC_RELOAD;
-    [touchBarItem setView:CreateTouchBarButton(icon, self, command_id)];
-  } else if ([identifier isEqualTo:kHomeTouchId]) {
+    int commandId = isPageLoading_ ? IDC_STOP : IDC_RELOAD;
+    int tooltipId = isPageLoading_ ? IDS_TOOLTIP_STOP : IDS_TOOLTIP_RELOAD;
     [touchBarItem
-        setView:CreateTouchBarButton(kNavigateHomeIcon, self, IDC_HOME)];
+        setView:CreateTouchBarButton(icon, self, commandId, tooltipId)];
+  } else if ([identifier isEqualTo:kHomeTouchId]) {
+    [touchBarItem setView:CreateTouchBarButton(kNavigateHomeIcon, self,
+                                               IDC_HOME, IDS_TOOLTIP_HOME)];
   } else if ([identifier isEqualTo:kNewTabTouchId]) {
-    [touchBarItem setView:CreateTouchBarButton(kNewTabMacTouchbarIcon, self,
-                                               IDC_NEW_TAB)];
+    [touchBarItem
+        setView:CreateTouchBarButton(kNewTabMacTouchbarIcon, self, IDC_NEW_TAB,
+                                     IDS_TOOLTIP_NEW_TAB)];
   } else if ([identifier isEqualTo:kStarTouchId]) {
     const gfx::VectorIcon& icon =
         isStarred_ ? toolbar::kStarActiveIcon : toolbar::kStarIcon;
     SkColor iconColor =
         isStarred_ ? kTouchBarStarActiveColor : kTouchBarDefaultIconColor;
-    [touchBarItem
-        setView:CreateTouchBarButton(icon, self, IDC_BOOKMARK_PAGE, iconColor)];
+    int tooltipId = isStarred_ ? IDS_TOOLTIP_STARRED : IDS_TOOLTIP_STAR;
+    [touchBarItem setView:CreateTouchBarButton(icon, self, IDC_BOOKMARK_PAGE,
+                                               tooltipId, iconColor)];
   } else if ([identifier isEqualTo:kSearchTouchId]) {
     [touchBarItem setView:[self searchTouchBarView]];
   }
@@ -272,6 +280,21 @@
            forSegment:kBackSegmentIndex];
   [control setEnabled:commandUpdater_->IsCommandEnabled(IDC_FORWARD)
            forSegment:kForwardSegmentIndex];
+
+  // Use the accessibility protocol to get the children.
+  // Use NSAccessibilityUnignoredDescendant to be sure we start with the correct
+  // object.
+  id segmentElement = NSAccessibilityUnignoredDescendant(control);
+  NSArray* segments = [segmentElement
+      accessibilityAttributeValue:NSAccessibilityChildrenAttribute];
+  NSEnumerator* e = [segments objectEnumerator];
+  [[e nextObject] accessibilitySetOverrideValue:l10n_util::GetNSString(
+                                                    IDS_TOOLTIP_TOUCH_BAR_BACK)
+                                   forAttribute:NSAccessibilityTitleAttribute];
+  [[e nextObject]
+      accessibilitySetOverrideValue:l10n_util::GetNSString(
+                                        IDS_TOOLTIP_TOUCH_BAR_FORWARD)
+                       forAttribute:NSAccessibilityTitleAttribute];
   return control;
 }
 
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h
index 3f9291f8..ec55064 100644
--- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h
+++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h
@@ -59,6 +59,7 @@
 - (void)setProfileId:(NSString*)profileId;
 - (void)setIncognito:(BOOL)incognito;
 - (void)setNotificationType:(NSNumber*)notificationType;
+- (void)setShowSettingsButton:(BOOL)showSettingsButton;
 
 // Returns a notification ready to be displayed out of the provided
 // |notificationData|.
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm
index e1c8a258..ae04950 100644
--- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm
+++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm
@@ -26,6 +26,7 @@
 NSString* const kNotificationCloseButtonTag = @"closeButton";
 NSString* const kNotificationOptionsButtonTag = @"optionsButton";
 NSString* const kNotificationSettingsButtonTag = @"settingsButton";
+
 }  // namespace
 
 @implementation NotificationBuilder {
@@ -122,6 +123,12 @@
                         forKey:notification_constants::kNotificationType];
 }
 
+- (void)setShowSettingsButton:(BOOL)showSettingsButton {
+  [notificationData_
+      setObject:[NSNumber numberWithBool:showSettingsButton]
+         forKey:notification_constants::kNotificationHasSettingsButton];
+}
+
 - (NSUserNotification*)buildUserNotification {
   base::scoped_nsobject<NSUserNotification> toast(
       [[NSUserNotification alloc] init]);
@@ -142,11 +149,23 @@
     }
   }
 
+  // Type (needed to define the buttons)
+  NSNumber* type = [notificationData_
+      objectForKey:notification_constants::kNotificationType];
+
+  // Extensions don't have a settings button.
+  NSNumber* showSettingsButton = [notificationData_
+      objectForKey:notification_constants::kNotificationHasSettingsButton];
+
   // Buttons
   if ([toast respondsToSelector:@selector(_showsButtons)]) {
     DCHECK([notificationData_ objectForKey:kNotificationCloseButtonTag]);
     DCHECK([notificationData_ objectForKey:kNotificationSettingsButtonTag]);
     DCHECK([notificationData_ objectForKey:kNotificationOptionsButtonTag]);
+    DCHECK([notificationData_
+        objectForKey:notification_constants::kNotificationHasSettingsButton]);
+
+    BOOL settingsButton = [showSettingsButton boolValue];
 
     [toast setValue:@YES forKey:@"_showsButtons"];
     // A default close button label is provided by the platform but we
@@ -158,15 +177,19 @@
     // Display the Settings button as the action button if there are either no
     // developer-provided action buttons, or the alternate action menu is not
     // available on this Mac version. This avoids needlessly showing the menu.
-    // TODO(miguelg): Extensions should not have a settings button.
     if (![notificationData_ objectForKey:kNotificationButtonOne] ||
         ![toast respondsToSelector:@selector(_alwaysShowAlternateActionMenu)]) {
-      [toast
-          setActionButtonTitle:
-              [notificationData_ objectForKey:kNotificationSettingsButtonTag]];
+      if (settingsButton) {
+        [toast setActionButtonTitle:
+                   [notificationData_
+                       objectForKey:kNotificationSettingsButtonTag]];
+      } else {
+        [toast setHasActionButton:NO];
+      }
+
     } else {
       // Otherwise show the alternate menu, then show the developer actions and
-      // finally the settings one.
+      // finally the settings one if needed.
       DCHECK(
           [toast respondsToSelector:@selector(_alwaysShowAlternateActionMenu)]);
       DCHECK(
@@ -183,8 +206,11 @@
         [buttons
             addObject:[notificationData_ objectForKey:kNotificationButtonTwo]];
       }
-      [buttons addObject:[notificationData_
-                             objectForKey:kNotificationSettingsButtonTag]];
+      if (settingsButton) {
+        [buttons addObject:[notificationData_
+                               objectForKey:kNotificationSettingsButtonTag]];
+      }
+
       [toast setValue:buttons forKey:@"_alternateActionButtonTitles"];
     }
   }
@@ -216,8 +242,6 @@
       objectForKey:notification_constants::kNotificationIncognito]);
   NSNumber* incognito = [notificationData_
       objectForKey:notification_constants::kNotificationIncognito];
-  NSNumber* type = [notificationData_
-      objectForKey:notification_constants::kNotificationType];
 
   toast.get().userInfo = @{
     notification_constants::kNotificationOrigin : origin,
@@ -225,6 +249,7 @@
     notification_constants::kNotificationProfileId : profileId,
     notification_constants::kNotificationIncognito : incognito,
     notification_constants::kNotificationType : type,
+    notification_constants::kNotificationHasSettingsButton : showSettingsButton,
   };
 
   return toast.autorelease();
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_mac_unittest.mm b/chrome/browser/ui/cocoa/notifications/notification_builder_mac_unittest.mm
index ee12b3dc..0c4babb 100644
--- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac_unittest.mm
+++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac_unittest.mm
@@ -27,6 +27,7 @@
   [builder setIncognito:false];
   [builder setNotificationType:
                [NSNumber numberWithInt:NotificationCommon::NON_PERSISTENT]];
+  [builder setShowSettingsButton:true];
 
   NSUserNotification* notification = [builder buildUserNotification];
   EXPECT_EQ("Title", base::SysNSStringToUTF8([notification title]));
@@ -57,6 +58,7 @@
   [builder
       setNotificationType:[NSNumber
                               numberWithInt:NotificationCommon::PERSISTENT]];
+  [builder setShowSettingsButton:true];
 
   NSUserNotification* notification = [builder buildUserNotification];
 
@@ -93,6 +95,7 @@
   [builder
       setNotificationType:[NSNumber
                               numberWithInt:NotificationCommon::PERSISTENT]];
+  [builder setShowSettingsButton:true];
 
   NSUserNotification* notification = [builder buildUserNotification];
 
@@ -115,6 +118,55 @@
   EXPECT_EQ("Settings", base::SysNSStringToUTF8([buttons objectAtIndex:2]));
 }
 
+TEST(NotificationBuilderMacTest, TestNotificationExtensionNoButtons) {
+  base::scoped_nsobject<NotificationBuilder> builder(
+      [[NotificationBuilder alloc] initWithCloseLabel:@"Close"
+                                         optionsLabel:@"Options"
+                                        settingsLabel:@"Settings"]);
+  [builder setTitle:@"Title"];
+  [builder setSubTitle:@"https://www.miguel.com"];
+  [builder setContextMessage:@"SubTitle"];
+  [builder setNotificationId:@"notificationId"];
+  [builder setProfileId:@"profileId"];
+  [builder setIncognito:false];
+  [builder
+      setNotificationType:[NSNumber
+                              numberWithInt:NotificationCommon::EXTENSION]];
+  [builder setShowSettingsButton:false];
+
+  NSUserNotification* notification = [builder buildUserNotification];
+
+  EXPECT_FALSE(notification.hasActionButton);
+  EXPECT_EQ("Close", base::SysNSStringToUTF8([notification otherButtonTitle]));
+}
+
+TEST(NotificationBuilderMacTest, TestNotificationExtensionButtons) {
+  base::scoped_nsobject<NotificationBuilder> builder(
+      [[NotificationBuilder alloc] initWithCloseLabel:@"Close"
+                                         optionsLabel:@"Options"
+                                        settingsLabel:@"Settings"]);
+  [builder setTitle:@"Title"];
+  [builder setSubTitle:@"https://www.miguel.com"];
+  [builder setContextMessage:@"SubTitle"];
+  [builder setButtons:@"Button1" secondaryButton:@"Button2"];
+  [builder setNotificationId:@"notificationId"];
+  [builder setProfileId:@"profileId"];
+  [builder setIncognito:false];
+  [builder
+      setNotificationType:[NSNumber
+                              numberWithInt:NotificationCommon::EXTENSION]];
+  [builder setShowSettingsButton:false];
+
+  NSUserNotification* notification = [builder buildUserNotification];
+
+  NSArray* buttons = [notification valueForKey:@"_alternateActionButtonTitles"];
+
+  // No settings button
+  ASSERT_EQ(2u, buttons.count);
+  EXPECT_EQ("Button1", base::SysNSStringToUTF8([buttons objectAtIndex:0]));
+  EXPECT_EQ("Button2", base::SysNSStringToUTF8([buttons objectAtIndex:1]));
+}
+
 TEST(NotificationBuilderMacTest, TestUserInfo) {
   base::scoped_nsobject<NotificationBuilder> builder(
       [[NotificationBuilder alloc] initWithCloseLabel:@"Close"
@@ -128,6 +180,7 @@
   [builder
       setNotificationType:[NSNumber
                               numberWithInt:NotificationCommon::PERSISTENT]];
+  [builder setShowSettingsButton:true];
 
   NSUserNotification* notification = [builder buildUserNotification];
   EXPECT_EQ("Title", base::SysNSStringToUTF8([notification title]));
@@ -163,6 +216,7 @@
     [sourceBuilder
         setNotificationType:
             [NSNumber numberWithInt:NotificationCommon::NON_PERSISTENT]];
+    [sourceBuilder setShowSettingsButton:true];
 
     notificationData = [sourceBuilder buildDictionary];
   }
diff --git a/chrome/browser/ui/cocoa/notifications/notification_constants_mac.h b/chrome/browser/ui/cocoa/notifications/notification_constants_mac.h
index c3d2d78..349115f 100644
--- a/chrome/browser/ui/cocoa/notifications/notification_constants_mac.h
+++ b/chrome/browser/ui/cocoa/notifications/notification_constants_mac.h
@@ -16,6 +16,7 @@
 extern NSString* const kNotificationType;
 extern NSString* const kNotificationOperation;
 extern NSString* const kNotificationButtonIndex;
+extern NSString* const kNotificationHasSettingsButton;
 
 extern NSString* const kAlertXPCServiceName;
 
diff --git a/chrome/browser/ui/cocoa/notifications/notification_constants_mac.mm b/chrome/browser/ui/cocoa/notifications/notification_constants_mac.mm
index f4b007c..5820264 100644
--- a/chrome/browser/ui/cocoa/notifications/notification_constants_mac.mm
+++ b/chrome/browser/ui/cocoa/notifications/notification_constants_mac.mm
@@ -12,6 +12,8 @@
 NSString* const kNotificationProfileId = @"notificationProfileId";
 NSString* const kNotificationIncognito = @"notificationIncognito";
 NSString* const kNotificationType = @"notificationType";
+NSString* const kNotificationHasSettingsButton =
+    @"notificationHasSettingsButton";
 
 // Only applicable to the NotificationResponseBuilder
 NSString* const kNotificationOperation = @"notificationOperation";
diff --git a/chrome/browser/ui/cocoa/notifications/notification_response_builder_mac.mm b/chrome/browser/ui/cocoa/notifications/notification_response_builder_mac.mm
index fd582a93..4564d11 100644
--- a/chrome/browser/ui/cocoa/notifications/notification_response_builder_mac.mm
+++ b/chrome/browser/ui/cocoa/notifications/notification_response_builder_mac.mm
@@ -45,6 +45,8 @@
       objectForKey:notification_constants::kNotificationIncognito];
   NSNumber* notificationType = [[notification userInfo]
       objectForKey:notification_constants::kNotificationType];
+  NSNumber* hasSettingsButton = [[notification userInfo]
+      objectForKey:notification_constants::kNotificationHasSettingsButton];
 
   // Closed notifications are not activated.
   NotificationOperation operation =
@@ -54,7 +56,7 @@
   int buttonIndex = -1;
 
   // Determine whether the user clicked on a button, and if they did, whether it
-  // was a developer-provided button or the mandatory Settings button.
+  // was a developer-provided button or the  Settings button.
   if (notification.activationType ==
       NSUserNotificationActivationTypeActionButtonClicked) {
     NSArray* alternateButtons = @[];
@@ -64,26 +66,29 @@
           [notification valueForKey:@"_alternateActionButtonTitles"];
     }
 
-    bool multipleButtons = (alternateButtons.count > 0);
+    BOOL settingsButtonRequired = [hasSettingsButton boolValue];
+    BOOL multipleButtons = (alternateButtons.count > 0);
 
     // No developer actions, just the settings button.
     if (!multipleButtons) {
+      DCHECK(settingsButtonRequired);
       operation = NOTIFICATION_SETTINGS;
       buttonIndex = -1;
     } else {
       // 0 based array containing.
       // Button 1
       // Button 2 (optional)
-      // Settings
+      // Settings (if required)
       NSNumber* actionIndex =
           [notification valueForKey:@"_alternateActionIndex"];
-      operation = (actionIndex.unsignedLongValue == alternateButtons.count - 1)
+      operation = settingsButtonRequired && (actionIndex.unsignedLongValue ==
+                                             alternateButtons.count - 1)
                       ? NOTIFICATION_SETTINGS
                       : NOTIFICATION_CLICK;
-      buttonIndex =
-          (actionIndex.unsignedLongValue == alternateButtons.count - 1)
-              ? -1
-              : actionIndex.intValue;
+      buttonIndex = settingsButtonRequired && (actionIndex.unsignedLongValue ==
+                                               alternateButtons.count - 1)
+                        ? -1
+                        : actionIndex.intValue;
     }
   }
 
diff --git a/chrome/browser/ui/cocoa/notifications/notification_response_builder_mac_unittest.mm b/chrome/browser/ui/cocoa/notifications/notification_response_builder_mac_unittest.mm
index 14be1ae..9c0db2a 100644
--- a/chrome/browser/ui/cocoa/notifications/notification_response_builder_mac_unittest.mm
+++ b/chrome/browser/ui/cocoa/notifications/notification_response_builder_mac_unittest.mm
@@ -13,7 +13,8 @@
 
 class NotificationResponseBuilderMacTest : public testing::Test {
  protected:
-  base::scoped_nsobject<NotificationBuilder> NewTestBuilder() {
+  base::scoped_nsobject<NotificationBuilder> NewTestBuilder(
+      NotificationCommon::Type type) {
     base::scoped_nsobject<NotificationBuilder> builder(
         [[NotificationBuilder alloc] initWithCloseLabel:@"Close"
                                            optionsLabel:@"Options"
@@ -26,13 +27,15 @@
     [builder setNotificationId:@"notificationId"];
     [builder setProfileId:@"profileId"];
     [builder setIncognito:false];
-    [builder setNotificationType:@(NotificationCommon::PERSISTENT)];
+    [builder setNotificationType:@(type)];
+    [builder setShowSettingsButton:(type != NotificationCommon::EXTENSION)];
     return builder;
   }
 };
 
 TEST_F(NotificationResponseBuilderMacTest, TestNotificationClick) {
-  base::scoped_nsobject<NotificationBuilder> builder = NewTestBuilder();
+  base::scoped_nsobject<NotificationBuilder> builder =
+      NewTestBuilder(NotificationCommon::PERSISTENT);
   NSUserNotification* notification = [builder buildUserNotification];
   // This will be set by the notification center to indicate the notification
   // was clicked.
@@ -46,12 +49,14 @@
       [response objectForKey:notification_constants::kNotificationOperation];
   NSNumber* buttonIndex =
       [response objectForKey:notification_constants::kNotificationButtonIndex];
+
   EXPECT_EQ(0 /* NOTIFICATION_CLICK */, operation.intValue);
   EXPECT_EQ(-1, buttonIndex.intValue);
 }
 
 TEST_F(NotificationResponseBuilderMacTest, TestNotificationSettingsClick) {
-  base::scoped_nsobject<NotificationBuilder> builder = NewTestBuilder();
+  base::scoped_nsobject<NotificationBuilder> builder =
+      NewTestBuilder(NotificationCommon::PERSISTENT);
   NSUserNotification* notification = [builder buildUserNotification];
 
   // This will be set by the notification center to indicate the only available
@@ -65,12 +70,14 @@
       [response objectForKey:notification_constants::kNotificationOperation];
   NSNumber* buttonIndex =
       [response objectForKey:notification_constants::kNotificationButtonIndex];
+
   EXPECT_EQ(2 /* NOTIFICATION_SETTINGS */, operation.intValue);
   EXPECT_EQ(-1, buttonIndex.intValue);
 }
 
 TEST_F(NotificationResponseBuilderMacTest, TestNotificationOneActionClick) {
-  base::scoped_nsobject<NotificationBuilder> builder = NewTestBuilder();
+  base::scoped_nsobject<NotificationBuilder> builder =
+      NewTestBuilder(NotificationCommon::PERSISTENT);
   [builder setButtons:@"Button1" secondaryButton:@""];
 
   NSUserNotification* notification = [builder buildUserNotification];
@@ -93,7 +100,8 @@
 }
 
 TEST_F(NotificationResponseBuilderMacTest, TestNotificationTwoActionClick) {
-  base::scoped_nsobject<NotificationBuilder> builder = NewTestBuilder();
+  base::scoped_nsobject<NotificationBuilder> builder =
+      NewTestBuilder(NotificationCommon::PERSISTENT);
   [builder setButtons:@"Button1" secondaryButton:@"Button2"];
 
   NSUserNotification* notification = [builder buildUserNotification];
@@ -118,7 +126,8 @@
 
 TEST_F(NotificationResponseBuilderMacTest,
        TestNotificationTwoActionSettingsClick) {
-  base::scoped_nsobject<NotificationBuilder> builder = NewTestBuilder();
+  base::scoped_nsobject<NotificationBuilder> builder =
+      NewTestBuilder(NotificationCommon::PERSISTENT);
   [builder setButtons:@"Button1" secondaryButton:@"Button2"];
   NSUserNotification* notification = [builder buildUserNotification];
 
@@ -144,7 +153,8 @@
 }
 
 TEST_F(NotificationResponseBuilderMacTest, TestNotificationClose) {
-  base::scoped_nsobject<NotificationBuilder> builder = NewTestBuilder();
+  base::scoped_nsobject<NotificationBuilder> builder =
+      NewTestBuilder(NotificationCommon::PERSISTENT);
   NSUserNotification* notification = [builder buildUserNotification];
 
   // None is what the NSUserNotification center emits when closing since it
@@ -162,3 +172,29 @@
   EXPECT_EQ(1 /* NOTIFICATION_CLOSE */, operation.intValue);
   EXPECT_EQ(-1, buttonIndex.intValue);
 }
+
+TEST_F(NotificationResponseBuilderMacTest, TestNotificationExtension) {
+  base::scoped_nsobject<NotificationBuilder> builder =
+      NewTestBuilder(NotificationCommon::EXTENSION);
+  [builder setButtons:@"Button1" secondaryButton:@"Button2"];
+  NSUserNotification* notification = [builder buildUserNotification];
+  // These values will be set by the notification center to indicate that button
+  // 1 was clicked.
+  [notification
+      setValue:
+          [NSNumber
+              numberWithInt:NSUserNotificationActivationTypeActionButtonClicked]
+        forKey:@"_activationType"];
+  [notification setValue:[NSNumber numberWithInt:1]
+                  forKey:@"_alternateActionIndex"];
+
+  NSDictionary* response =
+      [NotificationResponseBuilder buildDictionary:notification];
+
+  NSNumber* operation =
+      [response objectForKey:notification_constants::kNotificationOperation];
+  NSNumber* buttonIndex =
+      [response objectForKey:notification_constants::kNotificationButtonIndex];
+  EXPECT_EQ(0 /* NOTIFICATION_CLICK */, operation.intValue);
+  EXPECT_EQ(1, buttonIndex.intValue);
+}
diff --git a/chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm b/chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm
index 6a34ae10..405e6d4f 100644
--- a/chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm
@@ -115,9 +115,9 @@
 // -----------------------------------------------------------------------------
 
 // NOTE: This assumes that there will never be more than one page info
-// popup shown, and that the one that is shown is associated with the current
-// window. This matches the behaviour in views: see PageInfoPopupView.
-bool g_is_popup_showing = false;
+// bubble shown, and that the one that is shown is associated with the current
+// window. This matches the behaviour in Views: see PageInfoBubbleView.
+bool g_is_bubble_showing = false;
 
 // Takes in the parent window, which should be a BrowserWindow, and gets the
 // proper anchor point for the bubble. The returned point is in screen
@@ -1145,13 +1145,13 @@
     : content::WebContentsObserver(web_contents),
       web_contents_(web_contents),
       bubble_controller_(nil) {
-  DCHECK(!g_is_popup_showing);
-  g_is_popup_showing = true;
+  DCHECK(!g_is_bubble_showing);
+  g_is_bubble_showing = true;
 }
 
 PageInfoUIBridge::~PageInfoUIBridge() {
-  DCHECK(g_is_popup_showing);
-  g_is_popup_showing = false;
+  DCHECK(g_is_bubble_showing);
+  g_is_bubble_showing = false;
 }
 
 void PageInfoUIBridge::set_bubble_controller(
@@ -1171,17 +1171,17 @@
     return;
   }
 
-  // Don't show the popup if it's already being shown. Since this method is
-  // called each time the location icon is clicked, each click toggles the popup
-  // in and out.
-  if (g_is_popup_showing)
+  // Don't show the bubble if it's already being shown. Since this method is
+  // called each time the location icon is clicked, each click toggles the
+  // bubble in and out.
+  if (g_is_bubble_showing)
     return;
 
   // Create the bridge. This will be owned by the bubble controller.
   PageInfoUIBridge* bridge = new PageInfoUIBridge(web_contents);
 
   // Create the bubble controller. It will dealloc itself when it closes,
-  // resetting |g_is_popup_showing|.
+  // resetting |g_is_bubble_showing|.
   PageInfoBubbleController* bubble_controller =
       [[PageInfoBubbleController alloc] initWithParentWindow:parent
                                             pageInfoUIBridge:bridge
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm
index 2e6e3378..a46fe9f4 100644
--- a/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm
@@ -352,9 +352,11 @@
   // See http://crbug.com/687647.
   NSPoint origin = sourceWindowFrame_.origin;
   origin.x += (thisPoint.x - dragOrigin_.x);
-  origin.y +=
-      (thisPoint.y - dragOrigin_.y) +
-      ([sourceController_ menubarOffset] + [sourceController_ menubarHeight]);
+  origin.y += (thisPoint.y - dragOrigin_.y);
+  if ([sourceController_ isInAnyFullscreenMode]) {
+    origin.y +=
+        [sourceController_ menubarOffset] + [sourceController_ menubarHeight];
+  }
 
   if (tearProgress < 1) {
     // If the tear animation is not complete, call back to ourself with the
diff --git a/chrome/browser/ui/cocoa/tabs/tab_window_controller.h b/chrome/browser/ui/cocoa/tabs/tab_window_controller.h
index 23f0fcc..afa1e44 100644
--- a/chrome/browser/ui/cocoa/tabs/tab_window_controller.h
+++ b/chrome/browser/ui/cocoa/tabs/tab_window_controller.h
@@ -166,6 +166,9 @@
 // The height of the menubar.
 - (CGFloat)menubarHeight;
 
+// Returns YES if the browser window is in or entering any fullscreen mode.
+- (BOOL)isInAnyFullscreenMode;
+
 // Returns the view of the avatar button.
 - (NSView*)avatarView;
 
diff --git a/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm
index 716cb70c..d244942 100644
--- a/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm
+++ b/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm
@@ -378,6 +378,12 @@
   return kMenubarHeight;
 }
 
+- (BOOL)isInAnyFullscreenMode {
+  // Subclass must implement.
+  NOTIMPLEMENTED();
+  return NO;
+}
+
 - (NSView*)avatarView {
   return nil;
 }
diff --git a/chrome/browser/ui/navigation_correction_tab_observer.cc b/chrome/browser/ui/navigation_correction_tab_observer.cc
index ad27f82..96adf845 100644
--- a/chrome/browser/ui/navigation_correction_tab_observer.cc
+++ b/chrome/browser/ui/navigation_correction_tab_observer.cc
@@ -42,7 +42,7 @@
     if (google_util::IsGoogleDomainUrl(GetNavigationCorrectionURL(),
                                        google_util::ALLOW_SUBDOMAIN,
                                        google_util::ALLOW_NON_STANDARD_PORTS))
-      google_url_tracker->RequestServerCheck(false);
+      google_url_tracker->RequestServerCheck();
     google_url_updated_subscription_ = google_url_tracker->RegisterCallback(
         base::Bind(&NavigationCorrectionTabObserver::OnGoogleURLUpdated,
                    base::Unretained(this)));
diff --git a/chrome/browser/ui/page_info/page_info.cc b/chrome/browser/ui/page_info/page_info.cc
index 05f6f8e..26b3aa4c 100644
--- a/chrome/browser/ui/page_info/page_info.cc
+++ b/chrome/browser/ui/page_info/page_info.cc
@@ -337,7 +337,7 @@
 
   // This is technically redundant given the histogram above, but putting the
   // total count of permission changes in another histogram makes it easier to
-  // compare it against other kinds of actions in PageInfo[PopupView].
+  // compare it against other kinds of actions in Page Info.
   RecordPageInfoAction(PAGE_INFO_CHANGED_PERMISSION);
 
   PermissionUtil::ScopedRevocationReporter scoped_revocation_reporter(
@@ -407,7 +407,7 @@
                     const security_state::SecurityInfo& security_info) {
 #if !defined(OS_ANDROID) && !defined(OS_IOS)
   // On desktop, internal URLs aren't handled by this class. Instead, a
-  // custom and simpler popup is shown.
+  // custom and simpler bubble is shown.
   DCHECK(!url.SchemeIs(content::kChromeUIScheme) &&
          !url.SchemeIs(content::kChromeDevToolsScheme) &&
          !url.SchemeIs(content::kViewSourceScheme) &&
diff --git a/chrome/browser/ui/page_info/page_info_unittest.cc b/chrome/browser/ui/page_info/page_info_unittest.cc
index 6946c287..3eb25dd 100644
--- a/chrome/browser/ui/page_info/page_info_unittest.cc
+++ b/chrome/browser/ui/page_info/page_info_unittest.cc
@@ -677,7 +677,7 @@
 }
 
 // On desktop, internal URLs aren't handled by PageInfo class. Instead, a
-// custom and simpler popup is shown, so no need to test.
+// custom and simpler bubble is shown, so no need to test.
 #if defined(OS_ANDROID) || defined(OS_IOS)
 TEST_F(PageInfoTest, InternalPage) {
   SetURL("chrome://bookmarks");
diff --git a/chrome/browser/ui/toolbar/app_menu_model_unittest.cc b/chrome/browser/ui/toolbar/app_menu_model_unittest.cc
index 5a3731c..af9e915 100644
--- a/chrome/browser/ui/toolbar/app_menu_model_unittest.cc
+++ b/chrome/browser/ui/toolbar/app_menu_model_unittest.cc
@@ -78,7 +78,6 @@
     BrowserWithTestWindowTest::TearDown();
     testing_io_thread_state_.reset();
     TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
-    DestroyBrowserAndProfile();
   }
 
  private:
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_views_unittest.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_views_unittest.cc
index 0a158f95..11380bc 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_views_unittest.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_views_unittest.cc
@@ -196,13 +196,21 @@
 // Tests that the dialog closes when the current profile is destroyed.
 TEST_F(AppInfoDialogViewsTest, DestroyedProfileClosesDialog) {
   ShowAppInfo(kTestExtensionId);
+
   // First delete the test browser window. This ensures the test harness isn't
   // surprised by it being closed in response to the profile deletion below.
-  // Note the base class doesn't own the profile, so that part is skipped.
-  DestroyBrowserAndProfile();
+  std::unique_ptr<Browser> browser(release_browser());
+  browser->tab_strip_model()->CloseAllTabs();
+  browser.reset();
+  std::unique_ptr<BrowserWindow> browser_window(release_browser_window());
+  browser_window->Close();
+  browser_window.reset();
+
+  // This does not actually destroy the profile; see DestroyProfile above.
+  DestroyProfile(profile());
 
   // The following does nothing: it just ensures the Widget close is being
-  // triggered by the DeleteProfile() call rather than the line above.
+  // triggered by the DeleteProfile() call rather than the code above.
   base::RunLoop().RunUntilIdle();
 
   ASSERT_TRUE(widget_);
diff --git a/chrome/browser/ui/views/browser_dialogs_views_mac.cc b/chrome/browser/ui/views/browser_dialogs_views_mac.cc
index ea4ab31d..b86f9855 100644
--- a/chrome/browser/ui/views/browser_dialogs_views_mac.cc
+++ b/chrome/browser/ui/views/browser_dialogs_views_mac.cc
@@ -9,7 +9,7 @@
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h"
 #include "chrome/browser/ui/views/content_setting_bubble_contents.h"
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 #include "chrome/browser/ui/views/task_manager_view.h"
 #include "chrome/browser/ui/views/update_recommended_message_box.h"
 
@@ -30,17 +30,18 @@
   // Don't show the bubble again if it's already showing. A second click on the
   // location icon in the omnibox will dismiss an open bubble. This behaviour is
   // consistent with the non-Mac views implementation.
-  // Note that when the browser is toolkit-views, IsPopupShowing() is checked
-  // earlier because the popup is shown on mouse release (but dismissed on
+  // Note that when the browser is toolkit-views, IsBubbleShowing() is checked
+  // earlier because the bubble is shown on mouse release (but dismissed on
   // mouse pressed). A Cocoa browser does both on mouse pressed, so a check
   // when showing is sufficient.
-  if (PageInfoPopupView::GetShownPopupType() != PageInfoPopupView::POPUP_NONE) {
+  if (PageInfoBubbleView::GetShownBubbleType() !=
+      PageInfoBubbleView::BUBBLE_NONE) {
     return;
   }
 
-  PageInfoPopupView::ShowPopup(nullptr, gfx::Rect(anchor_point, gfx::Size()),
-                               profile, web_contents, virtual_url,
-                               security_info);
+  PageInfoBubbleView::ShowBubble(nullptr, gfx::Rect(anchor_point, gfx::Size()),
+                                 profile, web_contents, virtual_url,
+                                 security_info);
 }
 
 void ShowBookmarkBubbleViewsAtPoint(const gfx::Point& anchor_point,
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_chromeos.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_chromeos.cc
new file mode 100644
index 0000000..cbbb0cbf
--- /dev/null
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_chromeos.cc
@@ -0,0 +1,29 @@
+// 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 "ash/public/cpp/config.h"
+#include "build/build_config.h"
+#include "chrome/browser/chromeos/ash_config.h"
+#include "chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h"
+#include "chrome/browser/ui/views/frame/browser_non_client_frame_view_mus.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+
+namespace chrome {
+
+BrowserNonClientFrameView* CreateBrowserNonClientFrameView(
+    BrowserFrame* frame,
+    BrowserView* browser_view) {
+  if (chromeos::GetAshConfig() == ash::Config::MASH) {
+    BrowserNonClientFrameViewMus* frame_view =
+        new BrowserNonClientFrameViewMus(frame, browser_view);
+    frame_view->Init();
+    return frame_view;
+  }
+  BrowserNonClientFrameViewAsh* frame_view =
+      new BrowserNonClientFrameViewAsh(frame, browser_view);
+  frame_view->Init();
+  return frame_view;
+}
+
+}  // namespace chrome
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc
index 0a2535e4..3a41eac 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc
@@ -4,24 +4,17 @@
 
 #include "build/build_config.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
 
 #if defined(USE_AURA)
 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view_mus.h"
 #include "services/service_manager/runner/common/client_util.h"
 #endif
 
-#if !defined(OS_CHROMEOS)
-#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
-#endif
-
 #if defined(OS_WIN)
 #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
 #endif
 
-#if defined(USE_ASH)
-#include "chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h"
-#endif
-
 namespace chrome {
 
 BrowserNonClientFrameView* CreateBrowserNonClientFrameView(
@@ -35,18 +28,11 @@
     return frame_view;
   }
 #endif
-#if defined(USE_ASH)
-  BrowserNonClientFrameViewAsh* frame_view =
-      new BrowserNonClientFrameViewAsh(frame, browser_view);
-  frame_view->Init();
-  return frame_view;
-#else
 #if defined(OS_WIN)
   if (frame->ShouldUseNativeFrame())
     return new GlassBrowserFrameView(frame, browser_view);
 #endif
   return new OpaqueBrowserFrameView(frame, browser_view);
-#endif  // USE_ASH
 }
 
 }  // namespace chrome
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index b3eaf6b..488eda49 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -81,7 +81,7 @@
 #include "chrome/browser/ui/views/location_bar/zoom_bubble_view.h"
 #include "chrome/browser/ui/views/new_back_shortcut_bubble.h"
 #include "chrome/browser/ui/views/omnibox/omnibox_view_views.h"
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 #include "chrome/browser/ui/views/profiles/profile_indicator_icon.h"
 #include "chrome/browser/ui/views/status_bubble_views.h"
 #include "chrome/browser/ui/views/tabs/browser_tab_strip_controller.h"
@@ -1191,6 +1191,10 @@
          toolbar_;
 }
 
+bool BrowserView::IsToolbarShowing() const {
+  return IsToolbarVisible();
+}
+
 void BrowserView::ShowUpdateChromeDialog() {
   UpdateRecommendedMessageBox::Show(GetNativeWindow());
 }
@@ -1291,7 +1295,7 @@
     content::WebContents* web_contents,
     const GURL& virtual_url,
     const security_state::SecurityInfo& security_info) {
-  PageInfoPopupView::ShowPopup(
+  PageInfoBubbleView::ShowBubble(
       GetLocationBarView()->GetSecurityBubbleAnchorView(), gfx::Rect(), profile,
       web_contents, virtual_url, security_info);
 }
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index 5605d075..e0f70e8 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -311,6 +311,7 @@
   bool IsBookmarkBarAnimating() const override;
   bool IsTabStripEditable() const override;
   bool IsToolbarVisible() const override;
+  bool IsToolbarShowing() const override;
   void ShowUpdateChromeDialog() override;
   void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) override;
   void ShowBookmarkAppBubble(
diff --git a/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.cc b/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.cc
index a74e7bf..991f1e6 100644
--- a/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.cc
+++ b/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.cc
@@ -37,10 +37,7 @@
     input_method_chromeos_->DispatchKeyEvent(
         key_event, base::MakeUnique<base::Callback<void(bool)>>(callback));
   } else {
-    // On Linux (include ChromeOS), the mus emulates the WM_CHAR generation
-    // behaviour of Windows. But for ChromeOS, we don't expect those char
-    // events, so we filter them out.
-    const bool handled = true;
+    const bool handled = false;
     callback.Run(handled);
   }
 }
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.cc b/chrome/browser/ui/views/location_bar/location_icon_view.cc
index 5eec8bc..d54f57d 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_icon_view.cc
@@ -6,7 +6,7 @@
 
 #include "chrome/browser/ui/view_ids.h"
 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/theme_resources.h"
 #include "components/grit/components_scaled_resources.h"
@@ -54,8 +54,8 @@
       model->PasteAndGo(text);
   }
 
-  suppress_mouse_released_action_ =
-      PageInfoPopupView::GetShownPopupType() != PageInfoPopupView::POPUP_NONE;
+  suppress_mouse_released_action_ = PageInfoBubbleView::GetShownBubbleType() !=
+                                    PageInfoBubbleView::BUBBLE_NONE;
   return true;
 }
 
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc b/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
index 2ab9073..5207f82 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
+++ b/chrome/browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc
@@ -6,7 +6,7 @@
 
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/interactive_test_utils.h"
@@ -32,8 +32,8 @@
       runner1->QuitClosure());
   runner1->Run();
 
-  EXPECT_EQ(PageInfoPopupView::POPUP_PAGE_INFO,
-            PageInfoPopupView::GetShownPopupType());
+  EXPECT_EQ(PageInfoBubbleView::BUBBLE_PAGE_INFO,
+            PageInfoBubbleView::GetShownBubbleType());
 
   // Verify that clicking again doesn't reshow it.
   scoped_refptr<content::MessageLoopRunner> runner2 =
@@ -45,8 +45,8 @@
       runner2->QuitClosure());
   runner2->Run();
 
-  EXPECT_EQ(PageInfoPopupView::POPUP_NONE,
-            PageInfoPopupView::GetShownPopupType());
+  EXPECT_EQ(PageInfoBubbleView::BUBBLE_NONE,
+            PageInfoBubbleView::GetShownBubbleType());
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/page_info/chosen_object_row.cc b/chrome/browser/ui/views/page_info/chosen_object_row.cc
index 21bd16c..e3cc3c6c 100644
--- a/chrome/browser/ui/views/page_info/chosen_object_row.cc
+++ b/chrome/browser/ui/views/page_info/chosen_object_row.cc
@@ -5,7 +5,7 @@
 #include "chrome/browser/ui/views/page_info/chosen_object_row.h"
 
 #include "chrome/browser/ui/views/page_info/chosen_object_row_observer.h"
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/resources/grit/ui_resources.h"
diff --git a/chrome/browser/ui/views/page_info/page_info_popup_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
similarity index 84%
rename from chrome/browser/ui/views/page_info/page_info_popup_view.cc
rename to chrome/browser/ui/views/page_info/page_info_bubble_view.cc
index c1b73ff4..193734a 100644
--- a/chrome/browser/ui/views/page_info/page_info_popup_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 
 #include <stddef.h>
 
@@ -63,22 +63,24 @@
 namespace {
 
 // NOTE(jdonnelly): This use of this process-wide variable assumes that there's
-// never more than one page info popup shown and that it's associated
+// never more than one page info bubble shown and that it's associated
 // with the current window. If this assumption fails in the future, we'll need
-// to return a weak pointer from ShowPopup so callers can associate it with the
-// current window (or other context) and check if the popup they care about is
+// to return a weak pointer from ShowBubble so callers can associate it with the
+// current window (or other context) and check if the bubble they care about is
 // showing.
-PageInfoPopupView::PopupType g_shown_popup_type = PageInfoPopupView::POPUP_NONE;
+PageInfoBubbleView::BubbleType g_shown_bubble_type =
+    PageInfoBubbleView::BUBBLE_NONE;
 
 // General constants -----------------------------------------------------------
 
-// Popup width constraints.
-const int kMinPopupWidth = 320;
-const int kMaxPopupWidth = 1000;
+// Bubble width constraints.
+const int kMinBubbleWidth = 320;
+const int kMaxBubbleWidth = 1000;
 
-// Security Section (PopupHeaderView) ------------------------------------------
+// Security Section (BubbleHeaderView)
+// ------------------------------------------
 
-// Margin and padding values for the |PopupHeaderView|.
+// Margin and padding values for the |BubbleHeaderView|.
 const int kHeaderMarginBottom = 10;
 const int kHeaderPaddingBottom = 13;
 
@@ -122,15 +124,15 @@
 
 }  // namespace
 
-// |PopupHeaderView| is the UI element (view) that represents the header of the
-// |PageInfoPopupView|. The header shows the status of the site's
+// |BubbleHeaderView| is the UI element (view) that represents the header of the
+// |PageInfoBubbleView|. The header shows the status of the site's
 // identity check and the name of the site's identity.
-class PopupHeaderView : public views::View {
+class BubbleHeaderView : public views::View {
  public:
-  PopupHeaderView(views::ButtonListener* button_listener,
-                  views::StyledLabelListener* styled_label_listener,
-                  int side_margin);
-  ~PopupHeaderView() override;
+  BubbleHeaderView(views::ButtonListener* button_listener,
+                   views::StyledLabelListener* styled_label_listener,
+                   int side_margin);
+  ~BubbleHeaderView() override;
 
   // Sets the security summary for the current page.
   void SetSummary(const base::string16& summary_text);
@@ -155,39 +157,39 @@
   views::View* reset_decisions_label_container_;
   views::StyledLabel* reset_decisions_label_;
 
-  DISALLOW_COPY_AND_ASSIGN(PopupHeaderView);
+  DISALLOW_COPY_AND_ASSIGN(BubbleHeaderView);
 };
 
-// The regular PageInfoPopupView is not supported for internal Chrome pages and
-// extension pages. Instead of the |PageInfoPopupView|, the
-// |InternalPageInfoPopupView| is displayed.
-class InternalPageInfoPopupView : public views::BubbleDialogDelegateView {
+// The regular PageInfoBubbleView is not supported for internal Chrome pages and
+// extension pages. Instead of the |PageInfoBubbleView|, the
+// |InternalPageInfoBubbleView| is displayed.
+class InternalPageInfoBubbleView : public views::BubbleDialogDelegateView {
  public:
   // If |anchor_view| is nullptr, or has no Widget, |parent_window| may be
   // provided to ensure this bubble is closed when the parent closes.
-  InternalPageInfoPopupView(views::View* anchor_view,
-                            gfx::NativeView parent_window,
-                            const GURL& url);
-  ~InternalPageInfoPopupView() override;
+  InternalPageInfoBubbleView(views::View* anchor_view,
+                             gfx::NativeView parent_window,
+                             const GURL& url);
+  ~InternalPageInfoBubbleView() override;
 
   // views::BubbleDialogDelegateView:
   void OnWidgetDestroying(views::Widget* widget) override;
   int GetDialogButtons() const override;
 
  private:
-  friend class PageInfoPopupView;
+  friend class PageInfoBubbleView;
 
   // Used around icon and inside bubble border.
   static constexpr int kSpacing = 12;
 
-  DISALLOW_COPY_AND_ASSIGN(InternalPageInfoPopupView);
+  DISALLOW_COPY_AND_ASSIGN(InternalPageInfoBubbleView);
 };
 
 ////////////////////////////////////////////////////////////////////////////////
-// Popup Header
+// Bubble Header
 ////////////////////////////////////////////////////////////////////////////////
 
-PopupHeaderView::PopupHeaderView(
+BubbleHeaderView::BubbleHeaderView(
     views::ButtonListener* button_listener,
     views::StyledLabelListener* styled_label_listener,
     int side_margin)
@@ -219,9 +221,9 @@
   layout->AddPaddingRow(1, kHeaderPaddingBottom);
 }
 
-PopupHeaderView::~PopupHeaderView() {}
+BubbleHeaderView::~BubbleHeaderView() {}
 
-void PopupHeaderView::SetDetails(const base::string16& details_text) {
+void BubbleHeaderView::SetDetails(const base::string16& details_text) {
   std::vector<base::string16> subst;
   subst.push_back(details_text);
   subst.push_back(l10n_util::GetStringUTF16(IDS_LEARN_MORE));
@@ -242,7 +244,7 @@
   details_label_->AddStyleRange(details_range, link_style);
 }
 
-void PopupHeaderView::AddResetDecisionsLabel() {
+void BubbleHeaderView::AddResetDecisionsLabel() {
   std::vector<base::string16> subst;
   subst.push_back(
       l10n_util::GetStringUTF16(IDS_PAGEINFO_INVALID_CERTIFICATE_DESCRIPTION));
@@ -276,15 +278,15 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// InternalPageInfoPopupView
+// InternalPageInfoBubbleView
 ////////////////////////////////////////////////////////////////////////////////
 
-InternalPageInfoPopupView::InternalPageInfoPopupView(
+InternalPageInfoBubbleView::InternalPageInfoBubbleView(
     views::View* anchor_view,
     gfx::NativeView parent_window,
     const GURL& url)
     : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_LEFT) {
-  g_shown_popup_type = PageInfoPopupView::POPUP_INTERNAL_PAGE;
+  g_shown_bubble_type = PageInfoBubbleView::BUBBLE_INTERNAL_PAGE;
   set_parent_window(parent_window);
 
   int text = IDS_PAGE_INFO_INTERNAL_PAGE;
@@ -324,24 +326,24 @@
   views::BubbleDialogDelegateView::CreateBubble(this);
 }
 
-InternalPageInfoPopupView::~InternalPageInfoPopupView() {}
+InternalPageInfoBubbleView::~InternalPageInfoBubbleView() {}
 
-void InternalPageInfoPopupView::OnWidgetDestroying(views::Widget* widget) {
-  g_shown_popup_type = PageInfoPopupView::POPUP_NONE;
+void InternalPageInfoBubbleView::OnWidgetDestroying(views::Widget* widget) {
+  g_shown_bubble_type = PageInfoBubbleView::BUBBLE_NONE;
 }
 
-int InternalPageInfoPopupView::GetDialogButtons() const {
+int InternalPageInfoBubbleView::GetDialogButtons() const {
   return ui::DIALOG_BUTTON_NONE;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// PageInfoPopupView
+// PageInfoBubbleView
 ////////////////////////////////////////////////////////////////////////////////
 
-PageInfoPopupView::~PageInfoPopupView() {}
+PageInfoBubbleView::~PageInfoBubbleView() {}
 
 // static
-void PageInfoPopupView::ShowPopup(
+void PageInfoBubbleView::ShowBubble(
     views::View* anchor_view,
     const gfx::Rect& anchor_rect,
     Profile* profile,
@@ -355,26 +357,26 @@
       url.SchemeIs(extensions::kExtensionScheme) ||
       url.SchemeIs(content::kViewSourceScheme)) {
     // Use the concrete type so that |SetAnchorRect| can be called as a friend.
-    InternalPageInfoPopupView* popup =
-        new InternalPageInfoPopupView(anchor_view, parent_window, url);
+    InternalPageInfoBubbleView* bubble =
+        new InternalPageInfoBubbleView(anchor_view, parent_window, url);
     if (!anchor_view)
-      popup->SetAnchorRect(anchor_rect);
-    popup->GetWidget()->Show();
+      bubble->SetAnchorRect(anchor_rect);
+    bubble->GetWidget()->Show();
     return;
   }
-  PageInfoPopupView* popup = new PageInfoPopupView(
+  PageInfoBubbleView* bubble = new PageInfoBubbleView(
       anchor_view, parent_window, profile, web_contents, url, security_info);
   if (!anchor_view)
-    popup->SetAnchorRect(anchor_rect);
-  popup->GetWidget()->Show();
+    bubble->SetAnchorRect(anchor_rect);
+  bubble->GetWidget()->Show();
 }
 
 // static
-PageInfoPopupView::PopupType PageInfoPopupView::GetShownPopupType() {
-  return g_shown_popup_type;
+PageInfoBubbleView::BubbleType PageInfoBubbleView::GetShownBubbleType() {
+  return g_shown_bubble_type;
 }
 
-PageInfoPopupView::PageInfoPopupView(
+PageInfoBubbleView::PageInfoBubbleView(
     views::View* anchor_view,
     gfx::NativeView parent_window,
     Profile* profile,
@@ -391,7 +393,7 @@
       cookie_dialog_link_(nullptr),
       permissions_view_(nullptr),
       weak_factory_(this) {
-  g_shown_popup_type = POPUP_PAGE_INFO;
+  g_shown_bubble_type = BUBBLE_PAGE_INFO;
   set_parent_window(parent_window);
 
   // Compensate for built-in vertical padding in the anchor view's image.
@@ -418,7 +420,7 @@
   column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
                         views::GridLayout::USE_PREF, 0, 0);
 
-  header_ = new PopupHeaderView(this, this, side_margin);
+  header_ = new BubbleHeaderView(this, this, side_margin);
   layout->StartRow(1, content_column);
   layout->AddView(header_);
 
@@ -447,17 +449,17 @@
       web_contents, url, security_info));
 }
 
-void PageInfoPopupView::RenderFrameDeleted(
+void PageInfoBubbleView::RenderFrameDeleted(
     content::RenderFrameHost* render_frame_host) {
   if (render_frame_host == web_contents()->GetMainFrame())
     GetWidget()->Close();
 }
 
-void PageInfoPopupView::WebContentsDestroyed() {
+void PageInfoBubbleView::WebContentsDestroyed() {
   weak_factory_.InvalidateWeakPtrs();
 }
 
-void PageInfoPopupView::OnPermissionChanged(
+void PageInfoBubbleView::OnPermissionChanged(
     const PageInfoUI::PermissionInfo& permission) {
   presenter_->OnSitePermissionChanged(permission.type, permission.setting);
   // The menu buttons for the permissions might have longer strings now, so we
@@ -466,50 +468,50 @@
   SizeToContents();
 }
 
-void PageInfoPopupView::OnChosenObjectDeleted(
+void PageInfoBubbleView::OnChosenObjectDeleted(
     const PageInfoUI::ChosenObjectInfo& info) {
   presenter_->OnSiteChosenObjectDeleted(info.ui_info, *info.object);
 }
 
-base::string16 PageInfoPopupView::GetWindowTitle() const {
+base::string16 PageInfoBubbleView::GetWindowTitle() const {
   return summary_text_;
 }
 
-bool PageInfoPopupView::ShouldShowCloseButton() const {
+bool PageInfoBubbleView::ShouldShowCloseButton() const {
   return true;
 }
 
-void PageInfoPopupView::OnWidgetDestroying(views::Widget* widget) {
-  g_shown_popup_type = POPUP_NONE;
+void PageInfoBubbleView::OnWidgetDestroying(views::Widget* widget) {
+  g_shown_bubble_type = BUBBLE_NONE;
   presenter_->OnUIClosing();
 }
 
-int PageInfoPopupView::GetDialogButtons() const {
+int PageInfoBubbleView::GetDialogButtons() const {
   return ui::DIALOG_BUTTON_NONE;
 }
 
-const gfx::FontList& PageInfoPopupView::GetTitleFontList() const {
+const gfx::FontList& PageInfoBubbleView::GetTitleFontList() const {
   return ui::ResourceBundle::GetSharedInstance().GetFontListWithDelta(
       kSummaryFontSizeDelta);
 }
 
-void PageInfoPopupView::ButtonPressed(views::Button* button,
-                                      const ui::Event& event) {
+void PageInfoBubbleView::ButtonPressed(views::Button* button,
+                                       const ui::Event& event) {
   DCHECK_EQ(BUTTON_CLOSE, button->id());
   GetWidget()->Close();
 }
 
-void PageInfoPopupView::LinkClicked(views::Link* source, int event_flags) {
-  // The popup closes automatically when the collected cookies dialog or the
+void PageInfoBubbleView::LinkClicked(views::Link* source, int event_flags) {
+  // The bubble closes automatically when the collected cookies dialog or the
   // certificate viewer opens. So delay handling of the link clicked to avoid
   // a crash in the base class which needs to complete the mouse event handling.
   content::BrowserThread::PostTask(
       content::BrowserThread::UI, FROM_HERE,
-      base::Bind(&PageInfoPopupView::HandleLinkClickedAsync,
+      base::Bind(&PageInfoBubbleView::HandleLinkClickedAsync,
                  weak_factory_.GetWeakPtr(), source));
 }
 
-gfx::Size PageInfoPopupView::GetPreferredSize() const {
+gfx::Size PageInfoBubbleView::GetPreferredSize() const {
   if (header_ == nullptr && site_settings_view_ == nullptr)
     return views::View::GetPreferredSize();
 
@@ -522,14 +524,14 @@
   if (site_settings_view_)
     height += site_settings_view_->GetPreferredSize().height();
 
-  int width = kMinPopupWidth;
+  int width = kMinBubbleWidth;
   if (site_settings_view_)
     width = std::max(width, site_settings_view_->GetPreferredSize().width());
-  width = std::min(width, kMaxPopupWidth);
+  width = std::min(width, kMaxBubbleWidth);
   return gfx::Size(width, height);
 }
 
-void PageInfoPopupView::SetCookieInfo(const CookieInfoList& cookie_info_list) {
+void PageInfoBubbleView::SetCookieInfo(const CookieInfoList& cookie_info_list) {
   // |cookie_info_list| should only ever have 2 items: first- and third-party
   // cookies.
   DCHECK_EQ(cookie_info_list.size(), 2u);
@@ -596,7 +598,7 @@
   SizeToContents();
 }
 
-void PageInfoPopupView::SetPermissionInfo(
+void PageInfoBubbleView::SetPermissionInfo(
     const PermissionInfoList& permission_info_list,
     ChosenObjectInfoList chosen_object_info_list) {
   // When a permission is changed, PageInfo::OnSitePermissionChanged()
@@ -669,7 +671,7 @@
   SizeToContents();
 }
 
-void PageInfoPopupView::SetIdentityInfo(const IdentityInfo& identity_info) {
+void PageInfoBubbleView::SetIdentityInfo(const IdentityInfo& identity_info) {
   std::unique_ptr<PageInfoUI::SecurityDescription> security_description =
       identity_info.GetSecurityDescription();
 
@@ -689,7 +691,7 @@
   SizeToContents();
 }
 
-views::View* PageInfoPopupView::CreateSiteSettingsView(int side_margin) {
+views::View* PageInfoBubbleView::CreateSiteSettingsView(int side_margin) {
   views::View* site_settings_view = new views::View();
   views::BoxLayout* box_layout =
       new views::BoxLayout(views::BoxLayout::kVertical, side_margin, 0, 0);
@@ -704,7 +706,7 @@
   return site_settings_view;
 }
 
-void PageInfoPopupView::HandleLinkClickedAsync(views::Link* source) {
+void PageInfoBubbleView::HandleLinkClickedAsync(views::Link* source) {
   // Both switch cases require accessing web_contents(), so we check it here.
   if (web_contents() == nullptr || web_contents()->IsBeingDestroyed())
     return;
@@ -732,9 +734,9 @@
   }
 }
 
-void PageInfoPopupView::StyledLabelLinkClicked(views::StyledLabel* label,
-                                               const gfx::Range& range,
-                                               int event_flags) {
+void PageInfoBubbleView::StyledLabelLinkClicked(views::StyledLabel* label,
+                                                const gfx::Range& range,
+                                                int event_flags) {
   switch (label->id()) {
     case STYLED_LABEL_SECURITY_DETAILS:
       web_contents()->OpenURL(content::OpenURLParams(
diff --git a/chrome/browser/ui/views/page_info/page_info_popup_view.h b/chrome/browser/ui/views/page_info/page_info_bubble_view.h
similarity index 72%
rename from chrome/browser/ui/views/page_info/page_info_popup_view.h
rename to chrome/browser/ui/views/page_info/page_info_bubble_view.h
index c884362..2074631 100644
--- a/chrome/browser/ui/views/page_info/page_info_popup_view.h
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PAGE_INFO_POPUP_VIEW_H_
-#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PAGE_INFO_POPUP_VIEW_H_
+#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PAGE_INFO_BUBBLE_VIEW_H_
+#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PAGE_INFO_BUBBLE_VIEW_H_
 
 #include <memory>
 
@@ -22,7 +22,7 @@
 #include "ui/views/controls/styled_label_listener.h"
 
 class GURL;
-class PopupHeaderView;
+class BubbleHeaderView;
 class Profile;
 
 namespace content {
@@ -38,7 +38,7 @@
 }  // namespace security_state
 
 namespace test {
-class PageInfoPopupViewTestApi;
+class PageInfoBubbleViewTestApi;
 }
 
 namespace views {
@@ -54,46 +54,46 @@
 };
 
 // The views implementation of the page info UI.
-class PageInfoPopupView : public content::WebContentsObserver,
-                          public PermissionSelectorRowObserver,
-                          public ChosenObjectRowObserver,
-                          public views::BubbleDialogDelegateView,
-                          public views::ButtonListener,
-                          public views::LinkListener,
-                          public views::StyledLabelListener,
-                          public PageInfoUI {
+class PageInfoBubbleView : public content::WebContentsObserver,
+                           public PermissionSelectorRowObserver,
+                           public ChosenObjectRowObserver,
+                           public views::BubbleDialogDelegateView,
+                           public views::ButtonListener,
+                           public views::LinkListener,
+                           public views::StyledLabelListener,
+                           public PageInfoUI {
  public:
-  ~PageInfoPopupView() override;
+  ~PageInfoBubbleView() override;
 
-  // Type of the popup being displayed.
-  enum PopupType {
-    POPUP_NONE,
+  // Type of the bubble being displayed.
+  enum BubbleType {
+    BUBBLE_NONE,
     // Usual page info bubble for websites.
-    POPUP_PAGE_INFO,
+    BUBBLE_PAGE_INFO,
     // Custom bubble for internal pages like chrome:// and chrome-extensions://.
-    POPUP_INTERNAL_PAGE
+    BUBBLE_INTERNAL_PAGE
   };
 
   // If |anchor_view| is null, |anchor_rect| is used to anchor the bubble.
-  static void ShowPopup(views::View* anchor_view,
-                        const gfx::Rect& anchor_rect,
-                        Profile* profile,
-                        content::WebContents* web_contents,
-                        const GURL& url,
-                        const security_state::SecurityInfo& security_info);
+  static void ShowBubble(views::View* anchor_view,
+                         const gfx::Rect& anchor_rect,
+                         Profile* profile,
+                         content::WebContents* web_contents,
+                         const GURL& url,
+                         const security_state::SecurityInfo& security_info);
 
-  // Returns the type of the popup bubble being shown.
-  static PopupType GetShownPopupType();
+  // Returns the type of the bubble being shown.
+  static BubbleType GetShownBubbleType();
 
  private:
-  friend class test::PageInfoPopupViewTestApi;
+  friend class test::PageInfoBubbleViewTestApi;
 
-  PageInfoPopupView(views::View* anchor_view,
-                    gfx::NativeView parent_window,
-                    Profile* profile,
-                    content::WebContents* web_contents,
-                    const GURL& url,
-                    const security_state::SecurityInfo& security_info);
+  PageInfoBubbleView(views::View* anchor_view,
+                     gfx::NativeView parent_window,
+                     Profile* profile,
+                     content::WebContents* web_contents,
+                     const GURL& url,
+                     const security_state::SecurityInfo& security_info);
 
   // WebContentsObserver implementation.
   void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override;
@@ -151,7 +151,7 @@
   Profile* profile_;
 
   // The header section (containing security-related information).
-  PopupHeaderView* header_;
+  BubbleHeaderView* header_;
 
   // The security summary for the current page.
   base::string16 summary_text_;
@@ -177,9 +177,9 @@
   // |Permission| changes.
   std::vector<std::unique_ptr<PermissionSelectorRow>> selector_rows_;
 
-  base::WeakPtrFactory<PageInfoPopupView> weak_factory_;
+  base::WeakPtrFactory<PageInfoBubbleView> weak_factory_;
 
-  DISALLOW_COPY_AND_ASSIGN(PageInfoPopupView);
+  DISALLOW_COPY_AND_ASSIGN(PageInfoBubbleView);
 };
 
-#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PAGE_INFO_POPUP_VIEW_H_
+#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PAGE_INFO_BUBBLE_VIEW_H_
diff --git a/chrome/browser/ui/views/page_info/page_info_popup_view_interactive_uitest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_interactive_uitest.cc
similarity index 62%
rename from chrome/browser/ui/views/page_info/page_info_popup_view_interactive_uitest.cc
rename to chrome/browser/ui/views/page_info/page_info_bubble_view_interactive_uitest.cc
index a743665..ee22800 100644
--- a/chrome/browser/ui/views/page_info/page_info_popup_view_interactive_uitest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_interactive_uitest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
@@ -14,7 +14,7 @@
 
 namespace {
 
-typedef InProcessBrowserTest PageInfoPopupViewBrowserTest;
+typedef InProcessBrowserTest PageInfoBubbleViewBrowserTest;
 
 // Clicks the location icon to open the page info bubble.
 void ClickAndWait(Browser* browser) {
@@ -31,41 +31,41 @@
   runner->Run();
 }
 
-IN_PROC_BROWSER_TEST_F(PageInfoPopupViewBrowserTest, ShowPopup) {
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, ShowBubble) {
   ClickAndWait(browser());
-  EXPECT_EQ(PageInfoPopupView::POPUP_PAGE_INFO,
-            PageInfoPopupView::GetShownPopupType());
+  EXPECT_EQ(PageInfoBubbleView::BUBBLE_PAGE_INFO,
+            PageInfoBubbleView::GetShownBubbleType());
 }
 
-IN_PROC_BROWSER_TEST_F(PageInfoPopupViewBrowserTest, ChromeURL) {
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, ChromeURL) {
   ui_test_utils::NavigateToURL(browser(), GURL("chrome://settings"));
   ClickAndWait(browser());
-  EXPECT_EQ(PageInfoPopupView::POPUP_INTERNAL_PAGE,
-            PageInfoPopupView::GetShownPopupType());
+  EXPECT_EQ(PageInfoBubbleView::BUBBLE_INTERNAL_PAGE,
+            PageInfoBubbleView::GetShownBubbleType());
 }
 
-IN_PROC_BROWSER_TEST_F(PageInfoPopupViewBrowserTest, ChromeExtensionURL) {
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, ChromeExtensionURL) {
   ui_test_utils::NavigateToURL(
       browser(), GURL("chrome-extension://extension-id/options.html"));
   ClickAndWait(browser());
-  EXPECT_EQ(PageInfoPopupView::POPUP_INTERNAL_PAGE,
-            PageInfoPopupView::GetShownPopupType());
+  EXPECT_EQ(PageInfoBubbleView::BUBBLE_INTERNAL_PAGE,
+            PageInfoBubbleView::GetShownBubbleType());
 }
 
-IN_PROC_BROWSER_TEST_F(PageInfoPopupViewBrowserTest, ChromeDevtoolsURL) {
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, ChromeDevtoolsURL) {
   ui_test_utils::NavigateToURL(
       browser(), GURL("chrome-devtools://devtools/bundled/inspector.html"));
   ClickAndWait(browser());
-  EXPECT_EQ(PageInfoPopupView::POPUP_INTERNAL_PAGE,
-            PageInfoPopupView::GetShownPopupType());
+  EXPECT_EQ(PageInfoBubbleView::BUBBLE_INTERNAL_PAGE,
+            PageInfoBubbleView::GetShownBubbleType());
 }
 
-IN_PROC_BROWSER_TEST_F(PageInfoPopupViewBrowserTest, ViewSourceURL) {
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, ViewSourceURL) {
   ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
   chrome::ViewSelectedSource(browser());
   ClickAndWait(browser());
-  EXPECT_EQ(PageInfoPopupView::POPUP_INTERNAL_PAGE,
-            PageInfoPopupView::GetShownPopupType());
+  EXPECT_EQ(PageInfoBubbleView::BUBBLE_INTERNAL_PAGE,
+            PageInfoBubbleView::GetShownBubbleType());
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/page_info/page_info_popup_view_unittest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
similarity index 89%
rename from chrome/browser/ui/views/page_info/page_info_popup_view_unittest.cc
rename to chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
index 5a65aa3..0f73de7168 100644
--- a/chrome/browser/ui/views/page_info/page_info_popup_view_unittest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
@@ -29,11 +29,11 @@
 
 namespace test {
 
-class PageInfoPopupViewTestApi {
+class PageInfoBubbleViewTestApi {
  public:
-  PageInfoPopupViewTestApi(gfx::NativeView parent,
-                           Profile* profile,
-                           content::WebContents* web_contents)
+  PageInfoBubbleViewTestApi(gfx::NativeView parent,
+                            Profile* profile,
+                            content::WebContents* web_contents)
       : view_(nullptr),
         parent_(parent),
         profile_(profile),
@@ -47,11 +47,11 @@
 
     security_state::SecurityInfo security_info;
     views::View* anchor_view = nullptr;
-    view_ = new PageInfoPopupView(anchor_view, parent_, profile_, web_contents_,
-                                  GURL(kUrl), security_info);
+    view_ = new PageInfoBubbleView(anchor_view, parent_, profile_,
+                                   web_contents_, GURL(kUrl), security_info);
   }
 
-  PageInfoPopupView* view() { return view_; }
+  PageInfoBubbleView* view() { return view_; }
   views::View* permissions_view() { return view_->permissions_view_; }
 
   PermissionSelectorRow* GetPermissionSelectorAt(int index) {
@@ -83,20 +83,20 @@
 
   // Simulates recreating the dialog with a new PermissionInfoList.
   void SetPermissionInfo(const PermissionInfoList& list) {
-    for (const PageInfoPopupView::PermissionInfo& info : list)
+    for (const PageInfoBubbleView::PermissionInfo& info : list)
       view_->presenter_->OnSitePermissionChanged(info.type, info.setting);
     CreateView();
   }
 
  private:
-  PageInfoPopupView* view_;  // Weak. Owned by its Widget.
+  PageInfoBubbleView* view_;  // Weak. Owned by its Widget.
 
   // For recreating the view.
   gfx::NativeView parent_;
   Profile* profile_;
   content::WebContents* web_contents_;
 
-  DISALLOW_COPY_AND_ASSIGN(PageInfoPopupViewTestApi);
+  DISALLOW_COPY_AND_ASSIGN(PageInfoBubbleViewTestApi);
 };
 
 }  // namespace test
@@ -124,9 +124,9 @@
   DISALLOW_COPY_AND_ASSIGN(ScopedWebContentsTestHelper);
 };
 
-class PageInfoPopupViewTest : public testing::Test {
+class PageInfoBubbleViewTest : public testing::Test {
  public:
-  PageInfoPopupViewTest() {}
+  PageInfoBubbleViewTest() {}
 
   // testing::Test:
   void SetUp() override {
@@ -137,7 +137,7 @@
 
     content::WebContents* web_contents = web_contents_helper_.web_contents();
     TabSpecificContentSettings::CreateForWebContents(web_contents);
-    api_.reset(new test::PageInfoPopupViewTestApi(
+    api_.reset(new test::PageInfoBubbleViewTestApi(
         parent_window_->GetNativeView(), web_contents_helper_.profile(),
         web_contents));
   }
@@ -150,10 +150,10 @@
   views::ScopedViewsTestHelper views_helper_;
 
   views::Widget* parent_window_ = nullptr;  // Weak. Owned by the NativeWidget.
-  std::unique_ptr<test::PageInfoPopupViewTestApi> api_;
+  std::unique_ptr<test::PageInfoBubbleViewTestApi> api_;
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(PageInfoPopupViewTest);
+  DISALLOW_COPY_AND_ASSIGN(PageInfoBubbleViewTest);
 };
 
 }  // namespace
@@ -176,8 +176,8 @@
 constexpr int kViewsPerPermissionRow = 3;
 
 // Test UI construction and reconstruction via
-// PageInfoPopupView::SetPermissionInfo().
-TEST_F(PageInfoPopupViewTest, MAYBE_SetPermissionInfo) {
+// PageInfoBubbleView::SetPermissionInfo().
+TEST_F(PageInfoBubbleViewTest, MAYBE_SetPermissionInfo) {
   PermissionInfoList list(1);
   list.back().type = CONTENT_SETTINGS_TYPE_GEOLOCATION;
   list.back().source = content_settings::SETTING_SOURCE_USER;
@@ -225,7 +225,7 @@
 }
 
 // Test UI construction and reconstruction with USB devices.
-TEST_F(PageInfoPopupViewTest, SetPermissionInfoWithUsbDevice) {
+TEST_F(PageInfoBubbleViewTest, SetPermissionInfoWithUsbDevice) {
   const int kExpectedChildren =
       kViewsPerPermissionRow *
       (ExclusiveAccessManager::IsSimplifiedFullscreenUIEnabled() ? 11 : 13);
diff --git a/chrome/browser/ui/views/page_info/permission_selector_row.cc b/chrome/browser/ui/views/page_info/permission_selector_row.cc
index 5f56e1e..8a30dca 100644
--- a/chrome/browser/ui/views/page_info/permission_selector_row.cc
+++ b/chrome/browser/ui/views/page_info/permission_selector_row.cc
@@ -10,7 +10,7 @@
 #include "chrome/browser/ui/page_info/page_info_ui.h"
 #include "chrome/browser/ui/page_info/permission_menu_model.h"
 #include "chrome/browser/ui/views/page_info/non_accessible_image_view.h"
-#include "chrome/browser/ui/views/page_info/page_info_popup_view.h"
+#include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 #include "chrome/grit/generated_resources.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/material_design/material_design_controller.h"
@@ -347,7 +347,7 @@
         profile_, permission.type, permission.setting,
         permission.default_setting, content_settings::SETTING_SOURCE_USER));
     menu_button_->SizeToPreferredSize();
-    // Re-layout will be done at the |PageInfoPopupView| level, since
+    // Re-layout will be done at the |PageInfoBubbleView| level, since
     // that view may need to resize itself to accomodate the new sizes of its
     // contents.
     menu_button_->InvalidateLayout();
diff --git a/chrome/browser/ui/views/page_info/permission_selector_row.h b/chrome/browser/ui/views/page_info/permission_selector_row.h
index af592a60..cf25398a 100644
--- a/chrome/browser/ui/views/page_info/permission_selector_row.h
+++ b/chrome/browser/ui/views/page_info/permission_selector_row.h
@@ -26,7 +26,7 @@
 }
 
 namespace test {
-class PageInfoPopupViewTestApi;
+class PageInfoBubbleViewTestApi;
 }
 
 namespace views {
@@ -55,7 +55,7 @@
   void PermissionChanged(const PageInfoUI::PermissionInfo& permission);
 
  private:
-  friend class test::PageInfoPopupViewTestApi;
+  friend class test::PageInfoBubbleViewTestApi;
 
   void InitializeMenuButtonView(views::GridLayout* layout,
                                 const PageInfoUI::PermissionInfo& permission);
diff --git a/chrome/browser/ui/webui/device_log_ui.cc b/chrome/browser/ui/webui/device_log_ui.cc
index aead8776..68a260d 100644
--- a/chrome/browser/ui/webui/device_log_ui.cc
+++ b/chrome/browser/ui/webui/device_log_ui.cc
@@ -72,6 +72,8 @@
   html->AddLocalizedString("logTypeLoginText", IDS_DEVICE_LOG_TYPE_LOGIN);
   html->AddLocalizedString("logTypeNetworkText", IDS_DEVICE_LOG_TYPE_NETWORK);
   html->AddLocalizedString("logTypePowerText", IDS_DEVICE_LOG_TYPE_POWER);
+  html->AddLocalizedString("logTypeBluetoothText",
+                           IDS_DEVICE_LOG_TYPE_BLUETOOTH);
   html->AddLocalizedString("logTypeUsbText", IDS_DEVICE_LOG_TYPE_USB);
   html->AddLocalizedString("logTypeHidText", IDS_DEVICE_LOG_TYPE_HID);
 
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc
index 8ee742d..3fa0d8e 100644
--- a/chrome/browser/ui/webui/options/browser_options_handler.cc
+++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -753,9 +753,9 @@
 #endif
 
 #if defined(OS_CHROMEOS)
-  values->SetBoolean("cupsPrintEnabled",
+  values->SetBoolean("cupsPrintDisabled",
                      base::CommandLine::ForCurrentProcess()->HasSwitch(
-                         ::switches::kEnableNativeCups));
+                         ::switches::kDisableNativeCups));
   values->SetString("cupsPrintLearnMoreURL",
                     chrome::kChromeUIMdCupsSettingsURL);
 #endif  // defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/options/options_browsertest.js b/chrome/browser/ui/webui/options/options_browsertest.js
index 5e91447..05dfd8c96b 100644
--- a/chrome/browser/ui/webui/options/options_browsertest.js
+++ b/chrome/browser/ui/webui/options/options_browsertest.js
@@ -95,6 +95,7 @@
       '#privacy-explanation > A',
       '#languages-section > .settings-row > A',
       '#cloudprint-options-mdns > .settings-row > A',
+      '#cups-printers-section > .settings-row > A',
       '#do-not-track-confirm-overlay > .action-area > .hbox.stretch > A',
     ];
 
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
index 264f1af..8eb35ccfd 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -425,8 +425,8 @@
 
 #if defined(OS_CHROMEOS)
   bool cups_and_md_settings_enabled =
-      base::CommandLine::ForCurrentProcess()->HasSwitch(
-          ::switches::kEnableNativeCups);
+      !base::CommandLine::ForCurrentProcess()->HasSwitch(
+          ::switches::kDisableNativeCups);
   source->AddBoolean("showLocalManageButton", cups_and_md_settings_enabled);
 #else
   source->AddBoolean("showLocalManageButton", true);
diff --git a/chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc b/chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc
index 99da78a..0739673 100644
--- a/chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc
+++ b/chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc
@@ -134,8 +134,8 @@
 
     PrinterList printer_list;
 
-    if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kEnableNativeCups)) {
+    if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+            switches::kDisableNativeCups)) {
       AddPrintersToList(prefs_->GetPrinters(), &printer_list);
       AddPrintersToList(prefs_->GetRecommendedPrinters(), &printer_list);
     }
diff --git a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
index 180c2fa..b5a9b44e 100644
--- a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
@@ -1174,8 +1174,6 @@
     {"peoplePageTitle", IDS_SETTINGS_PEOPLE},
     {"manageOtherPeople", IDS_SETTINGS_PEOPLE_MANAGE_OTHER_PEOPLE},
     {"manageSupervisedUsers", IDS_SETTINGS_PEOPLE_MANAGE_SUPERVISED_USERS},
-    {"manageSupervisedUsersDescription",
-     IDS_SETTINGS_PEOPLE_MANAGE_SUPERVISED_USERS_DESCRIPTION},
 #if defined(OS_CHROMEOS)
     {"configureFingerprintTitle", IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_TITLE},
     {"configureFingerprintInstructionLocateScannerStep",
@@ -1466,8 +1464,8 @@
 
 #if defined(OS_CHROMEOS)
   html_source->AddBoolean("showCupsPrintingFeatures",
-                          base::CommandLine::ForCurrentProcess()->HasSwitch(
-                              ::switches::kEnableNativeCups));
+                          !base::CommandLine::ForCurrentProcess()->HasSwitch(
+                              ::switches::kDisableNativeCups));
 #endif
 }
 
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 664dbb8..dee1a0b 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -934,14 +934,14 @@
 #endif  // defined(OS_ANDROID)
 
 #if defined(OS_CHROMEOS)
-// Enables apps on the login screen.
-const char kEnableLoginScreenApps[] = "enable-login-screen-apps";
-
-// Enables native cups integration
-const char kEnableNativeCups[] = "enable-native-cups";
-
 // Custom crosh command.
 const char kCroshCommand[] = "crosh-command";
+
+// Disables native cups integration
+const char kDisableNativeCups[] = "disable-native-cups";
+
+// Enables apps on the login screen.
+const char kEnableLoginScreenApps[] = "enable-login-screen-apps";
 #endif  // defined(OS_CHROMEOS)
 
 #if defined(USE_ASH)
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 6b2a9f5..2a94775 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -274,9 +274,9 @@
 #endif  // defined(OS_ANDROID)
 
 #if defined(OS_CHROMEOS)
-extern const char kEnableLoginScreenApps[];
-extern const char kEnableNativeCups[];
 extern const char kCroshCommand[];
+extern const char kDisableNativeCups[];
+extern const char kEnableLoginScreenApps[];
 #endif  // defined(OS_CHROMEOS)
 
 #if defined(USE_ASH)
diff --git a/chrome/common/ppapi_utils.cc b/chrome/common/ppapi_utils.cc
index 58fe135..3e0563a 100644
--- a/chrome/common/ppapi_utils.cc
+++ b/chrome/common/ppapi_utils.cc
@@ -7,6 +7,7 @@
 
 #include "build/build_config.h"
 #include "ppapi/c/dev/ppb_audio_input_dev.h"
+#include "ppapi/c/dev/ppb_audio_output_dev.h"
 #include "ppapi/c/dev/ppb_buffer_dev.h"
 #include "ppapi/c/dev/ppb_char_set_dev.h"
 #include "ppapi/c/dev/ppb_crypto_dev.h"
diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn
index cac1fdb6f..6c726e4 100644
--- a/chrome/renderer/BUILD.gn
+++ b/chrome/renderer/BUILD.gn
@@ -45,6 +45,8 @@
     "loadtimes_extension_bindings.h",
     "media/chrome_key_systems.cc",
     "media/chrome_key_systems.h",
+    "media/chrome_key_systems_provider.cc",
+    "media/chrome_key_systems_provider.h",
     "net/net_error_helper.cc",
     "net/net_error_helper.h",
     "net/net_error_page_controller.cc",
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 273522e0..b0b115d4 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -44,7 +44,6 @@
 #include "chrome/renderer/chrome_render_view_observer.h"
 #include "chrome/renderer/content_settings_observer.h"
 #include "chrome/renderer/loadtimes_extension_bindings.h"
-#include "chrome/renderer/media/chrome_key_systems.h"
 #include "chrome/renderer/net/net_error_helper.h"
 #include "chrome/renderer/net_benchmarking_extension.h"
 #include "chrome/renderer/page_load_metrics/metrics_render_frame_observer.h"
@@ -1285,7 +1284,11 @@
 
 void ChromeContentRendererClient::AddSupportedKeySystems(
     std::vector<std::unique_ptr<::media::KeySystemProperties>>* key_systems) {
-  AddChromeKeySystems(key_systems);
+  key_systems_provider_.AddSupportedKeySystems(key_systems);
+}
+
+bool ChromeContentRendererClient::IsKeySystemsUpdateNeeded() {
+  return key_systems_provider_.IsKeySystemsUpdateNeeded();
 }
 
 bool ChromeContentRendererClient::ShouldReportDetailedMessageForSource(
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index 65438c8..5b8afbb 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -16,6 +16,7 @@
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/strings/string16.h"
+#include "chrome/renderer/media/chrome_key_systems_provider.h"
 #include "components/rappor/public/interfaces/rappor_recorder.mojom.h"
 #include "components/spellcheck/spellcheck_build_features.h"
 #include "content/public/renderer/content_renderer_client.h"
@@ -162,6 +163,7 @@
   void AddSupportedKeySystems(
       std::vector<std::unique_ptr<::media::KeySystemProperties>>* key_systems)
       override;
+  bool IsKeySystemsUpdateNeeded() override;
   bool IsPluginAllowedToUseDevChannelAPIs() override;
   bool IsPluginAllowedToUseCameraDeviceAPI(const GURL& url) override;
   bool IsPluginAllowedToUseCompositorAPI(const GURL& url) override;
@@ -240,6 +242,8 @@
   std::unique_ptr<network_hints::PrescientNetworkingDispatcher>
       prescient_networking_dispatcher_;
 
+  chrome::ChromeKeySystemsProvider key_systems_provider_;
+
 #if BUILDFLAG(ENABLE_SPELLCHECK)
   std::unique_ptr<SpellCheck> spellcheck_;
 #endif
diff --git a/chrome/renderer/media/chrome_key_systems_provider.cc b/chrome/renderer/media/chrome_key_systems_provider.cc
new file mode 100644
index 0000000..d53bd9d
--- /dev/null
+++ b/chrome/renderer/media/chrome_key_systems_provider.cc
@@ -0,0 +1,83 @@
+// 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 "chrome/renderer/media/chrome_key_systems_provider.h"
+
+#include "base/time/default_tick_clock.h"
+#include "chrome/renderer/media/chrome_key_systems.h"
+
+#include "widevine_cdm_version.h"  // In SHARED_INTERMEDIATE_DIR.
+
+namespace chrome {
+
+ChromeKeySystemsProvider::ChromeKeySystemsProvider()
+    : has_updated_(false),
+      is_update_needed_(true),
+      tick_clock_(new base::DefaultTickClock()) {}
+
+ChromeKeySystemsProvider::~ChromeKeySystemsProvider() {}
+
+void ChromeKeySystemsProvider::AddSupportedKeySystems(
+    std::vector<std::unique_ptr<media::KeySystemProperties>>* key_systems) {
+  DCHECK(key_systems);
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  if (!test_provider_.is_null()) {
+    test_provider_.Run(key_systems);
+  } else {
+    AddChromeKeySystems(key_systems);
+  }
+
+  has_updated_ = true;
+  last_update_time_ticks_ = tick_clock_->NowTicks();
+
+// Check whether all potentially supported key systems are supported. If so,
+// no need to update again.
+#if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
+  for (const auto& properties : *key_systems) {
+    if (properties->GetKeySystemName() == kWidevineKeySystem) {
+      is_update_needed_ = false;
+    }
+  }
+#else
+  is_update_needed_ = false;
+#endif
+}
+
+bool ChromeKeySystemsProvider::IsKeySystemsUpdateNeeded() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  // Always needs update if we have never updated, regardless the
+  // |last_update_time_ticks_|'s initial value.
+  if (!has_updated_) {
+    DCHECK(is_update_needed_);
+    return true;
+  }
+
+  if (!is_update_needed_)
+    return false;
+
+  // The update could be expensive. For example, it could involve a sync IPC to
+  // the browser process. Use a minimum update interval to avoid unnecessarily
+  // frequent update.
+  static const int kMinUpdateIntervalInMilliseconds = 1000;
+  if ((tick_clock_->NowTicks() - last_update_time_ticks_).InMilliseconds() <
+      kMinUpdateIntervalInMilliseconds) {
+    return false;
+  }
+
+  return true;
+}
+
+void ChromeKeySystemsProvider::SetTickClockForTesting(
+    std::unique_ptr<base::TickClock> tick_clock) {
+  tick_clock_.swap(tick_clock);
+}
+
+void ChromeKeySystemsProvider::SetProviderDelegateForTesting(
+    const KeySystemsProviderDelegate& test_provider) {
+  test_provider_ = test_provider;
+}
+
+}  // namespace chrome
diff --git a/chrome/renderer/media/chrome_key_systems_provider.h b/chrome/renderer/media/chrome_key_systems_provider.h
new file mode 100644
index 0000000..3daf0cd
--- /dev/null
+++ b/chrome/renderer/media/chrome_key_systems_provider.h
@@ -0,0 +1,68 @@
+// 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.
+
+#ifndef CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_PROVIDER_H_
+#define CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_PROVIDER_H_
+
+#include <memory>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/threading/thread_checker.h"
+#include "base/time/tick_clock.h"
+#include "base/time/time.h"
+#include "media/base/key_system_properties.h"
+
+namespace chrome {
+
+typedef std::vector<std::unique_ptr<media::KeySystemProperties>>
+    KeySystemPropertiesVector;
+typedef base::Callback<void(KeySystemPropertiesVector*)>
+    KeySystemsProviderDelegate;
+
+class ChromeKeySystemsProvider {
+ public:
+  ChromeKeySystemsProvider();
+  ~ChromeKeySystemsProvider();
+
+  // Adds properties for supported key systems.
+  void AddSupportedKeySystems(KeySystemPropertiesVector* key_systems);
+
+  // Returns whether client key systems properties should be updated.
+  // TODO(chcunningham): Refactor this to a proper change "observer" API that is
+  // less fragile (don't assume AddSupportedKeySystems has just one caller).
+  bool IsKeySystemsUpdateNeeded();
+
+  void SetTickClockForTesting(std::unique_ptr<base::TickClock> tick_clock);
+
+  void SetProviderDelegateForTesting(
+      const KeySystemsProviderDelegate& test_provider);
+
+ private:
+  // Whether AddSupportedKeySystems() has ever been called.
+  bool has_updated_;
+
+  // Whether a future update is needed. For example, when some potentially
+  // supported key systems are NOT supported yet. This could happen when the
+  // required component for a key system is not yet available.
+  bool is_update_needed_;
+
+  // Throttle how often we signal an update is needed to avoid unnecessary high
+  // frequency of expensive IPC calls.
+  base::TimeTicks last_update_time_ticks_;
+  std::unique_ptr<base::TickClock> tick_clock_;
+
+  // Ensure all methods are called from the same (Main) thread.
+  base::ThreadChecker thread_checker_;
+
+  // For unit tests to inject their own key systems. Will bypass adding default
+  // Chrome key systems when set.
+  KeySystemsProviderDelegate test_provider_;
+
+  DISALLOW_COPY_AND_ASSIGN(ChromeKeySystemsProvider);
+};
+
+}  // namespace chrome
+
+#endif  // CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_PROVIDER_H_
diff --git a/chrome/renderer/media/chrome_key_systems_provider_unittest.cc b/chrome/renderer/media/chrome_key_systems_provider_unittest.cc
new file mode 100644
index 0000000..bece62e
--- /dev/null
+++ b/chrome/renderer/media/chrome_key_systems_provider_unittest.cc
@@ -0,0 +1,155 @@
+// 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 "chrome/renderer/media/chrome_key_systems_provider.h"
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+#include "widevine_cdm_version.h"  // In SHARED_INTERMEDIATE_DIR.
+
+namespace chrome {
+
+namespace {
+
+class TestKeySystemProperties : public media::KeySystemProperties {
+ public:
+  explicit TestKeySystemProperties(const std::string& key_system_name)
+      : key_system_name_(key_system_name) {}
+
+  std::string GetKeySystemName() const override { return key_system_name_; }
+  bool IsSupportedInitDataType(
+      media::EmeInitDataType init_data_type) const override {
+    return false;
+  }
+  media::SupportedCodecs GetSupportedCodecs() const override {
+    return media::EME_CODEC_NONE;
+  }
+  media::EmeConfigRule GetRobustnessConfigRule(
+      media::EmeMediaType media_type,
+      const std::string& requested_robustness) const override {
+    return requested_robustness.empty() ? media::EmeConfigRule::SUPPORTED
+                                        : media::EmeConfigRule::NOT_SUPPORTED;
+  }
+  media::EmeSessionTypeSupport GetPersistentLicenseSessionSupport()
+      const override {
+    return media::EmeSessionTypeSupport::NOT_SUPPORTED;
+  }
+  media::EmeSessionTypeSupport GetPersistentReleaseMessageSessionSupport()
+      const override {
+    return media::EmeSessionTypeSupport::NOT_SUPPORTED;
+  }
+  media::EmeFeatureSupport GetPersistentStateSupport() const override {
+    return media::EmeFeatureSupport::NOT_SUPPORTED;
+  }
+  media::EmeFeatureSupport GetDistinctiveIdentifierSupport() const override {
+    return media::EmeFeatureSupport::NOT_SUPPORTED;
+  }
+
+ private:
+  const std::string key_system_name_;
+};
+
+class TestKeySystemsProviderDelegate {
+ public:
+  TestKeySystemsProviderDelegate() : include_widevine_(false) {}
+
+  void AddTestKeySystems(
+      std::vector<std::unique_ptr<media::KeySystemProperties>>* key_systems) {
+    key_systems->emplace_back(
+        new TestKeySystemProperties("com.example.foobar"));
+
+    if (include_widevine_) {
+#if defined(WIDEVINE_CDM_AVAILABLE)
+      key_systems->emplace_back(
+          new TestKeySystemProperties(kWidevineKeySystem));
+#else
+      // Tests should only attempt to include Widevine when it is available.
+      NOTREACHED();
+#endif
+    }
+  }
+
+  void set_include_widevine(bool include_widevine) {
+    include_widevine_ = include_widevine;
+  }
+
+ private:
+  bool include_widevine_;
+};
+
+}  // namespace
+
+TEST(ChromeKeySystemsProviderTest, IsKeySystemsUpdateNeeded) {
+  ChromeKeySystemsProvider key_systems_provider;
+
+  base::SimpleTestTickClock* tick_clock = new base::SimpleTestTickClock();
+  key_systems_provider.SetTickClockForTesting(
+      std::unique_ptr<base::TickClock>(tick_clock));
+
+  std::unique_ptr<TestKeySystemsProviderDelegate> provider_delegate(
+      new TestKeySystemsProviderDelegate());
+  key_systems_provider.SetProviderDelegateForTesting(
+      base::Bind(&TestKeySystemsProviderDelegate::AddTestKeySystems,
+                 base::Unretained(provider_delegate.get())));
+
+  // IsKeySystemsUpdateNeeded() always returns true after construction.
+  EXPECT_TRUE(key_systems_provider.IsKeySystemsUpdateNeeded());
+
+  std::vector<std::unique_ptr<media::KeySystemProperties>> key_systems;
+  key_systems_provider.AddSupportedKeySystems(&key_systems);
+
+  // No update needed immediately after AddSupportedKeySystems() call.
+  EXPECT_FALSE(key_systems_provider.IsKeySystemsUpdateNeeded());
+
+  // Widevine not initially provided.
+  EXPECT_EQ(key_systems.size(), 1U);
+  EXPECT_EQ(key_systems[0]->GetKeySystemName(), "com.example.foobar");
+
+  // This is timing related. The update interval for Widevine is 1000 ms.
+  EXPECT_FALSE(key_systems_provider.IsKeySystemsUpdateNeeded());
+  tick_clock->Advance(base::TimeDelta::FromMilliseconds(990));
+  EXPECT_FALSE(key_systems_provider.IsKeySystemsUpdateNeeded());
+  tick_clock->Advance(base::TimeDelta::FromMilliseconds(10));
+
+#if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
+  // Require update once enough time has passed for builds that install Widevine
+  // as a component.
+  EXPECT_TRUE(key_systems_provider.IsKeySystemsUpdateNeeded());
+
+  // Now add Widevine.
+  provider_delegate->set_include_widevine(true);
+  key_systems.clear();
+  key_systems_provider.AddSupportedKeySystems(&key_systems);
+
+  // Widevine should now be among the list.
+  bool found_widevine = false;
+  for (const auto& key_system_properties : key_systems) {
+    if (key_system_properties->GetKeySystemName() == kWidevineKeySystem) {
+      found_widevine = true;
+      break;
+    }
+  }
+  EXPECT_TRUE(found_widevine);
+
+  // Update not needed now, nor later because Widevine has been described.
+  EXPECT_FALSE(key_systems_provider.IsKeySystemsUpdateNeeded());
+  tick_clock->Advance(base::TimeDelta::FromMilliseconds(1000));
+  EXPECT_FALSE(key_systems_provider.IsKeySystemsUpdateNeeded());
+  tick_clock->Advance(base::TimeDelta::FromMilliseconds(1000));
+  EXPECT_FALSE(key_systems_provider.IsKeySystemsUpdateNeeded());
+#else
+  // No update needed for builds that either don't offer Widevine or do so
+  // as part of Chrome rather than component installer.
+  EXPECT_FALSE(key_systems_provider.IsKeySystemsUpdateNeeded());
+#endif  // defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
+}
+
+}  // namespace chrome
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 4572d20..ed934c26 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -248,14 +248,6 @@
   if (toolkit_views) {
     public_deps += [ "//ui/views:test_support" ]
   }
-
-  if (enable_extensions) {
-    public_deps += [
-      "//apps:test_support",
-      "//chrome/common/extensions/api",
-      "//extensions:test_support",
-    ]
-  }
 }
 
 # TODO(GYP_GONE): Delete this after we've converted everything to GN.
@@ -564,7 +556,7 @@
           "../browser/ui/views/location_bar/location_icon_view_interactive_uitest.cc",
           "../browser/ui/views/location_bar/star_view_browsertest.cc",
           "../browser/ui/views/omnibox/omnibox_view_views_browsertest.cc",
-          "../browser/ui/views/page_info/page_info_popup_view_interactive_uitest.cc",
+          "../browser/ui/views/page_info/page_info_bubble_view_interactive_uitest.cc",
           "../browser/ui/views/passwords/manage_passwords_bubble_view_interactive_uitest.cc",
           "../browser/ui/views/passwords/manage_passwords_icon_view_interactive_uitest.cc",
           "../browser/ui/views/ssl_client_certificate_selector_browsertest.cc",
@@ -3450,6 +3442,7 @@
     "../renderer/chrome_content_renderer_client_unittest.cc",
     "../renderer/content_settings_observer_unittest.cc",
     "../renderer/instant_restricted_id_cache_unittest.cc",
+    "../renderer/media/chrome_key_systems_provider_unittest.cc",
     "../renderer/page_load_metrics/fake_page_timing_metrics_ipc_sender.cc",
     "../renderer/page_load_metrics/fake_page_timing_metrics_ipc_sender.h",
     "../renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc",
@@ -4860,7 +4853,7 @@
       "../browser/ui/views/confirm_bubble_views_unittest.cc",
       "../browser/ui/views/global_error_bubble_view_unittest.cc",
       "../browser/ui/views/harmony/layout_delegate_unittest.cc",
-      "../browser/ui/views/page_info/page_info_popup_view_unittest.cc",
+      "../browser/ui/views/page_info/page_info_bubble_view_unittest.cc",
       "../browser/ui/views/payments/credit_card_editor_view_controller_unittest.cc",
       "../browser/ui/views/payments/payment_request_item_list_unittest.cc",
       "../browser/ui/views/payments/validating_textfield_unittest.cc",
diff --git a/chrome/test/base/browser_with_test_window_test.cc b/chrome/test/base/browser_with_test_window_test.cc
index 08a9dd7..955e36b 100644
--- a/chrome/test/base/browser_with_test_window_test.cc
+++ b/chrome/test/base/browser_with_test_window_test.cc
@@ -87,9 +87,11 @@
   // before the profile can be destroyed and the test safely shut down.
   base::RunLoop().RunUntilIdle();
 
-  // Reset the profile here because some profile keyed services (like the
-  // audio service) depend on test stubs that the helpers below will remove.
-  DestroyBrowserAndProfile();
+  // Close the browser tabs and destroy the browser and window instances.
+  if (browser_)
+    browser_->tab_strip_model()->CloseAllTabs();
+  browser_.reset();
+  window_.reset();
 
   if (content::IsBrowserSideNavigationEnabled())
     content::BrowserSideNavigationTearDown();
@@ -99,15 +101,23 @@
 #endif
 
 #if defined(OS_CHROMEOS)
+  // Destroy the shell before the profile to match production shutdown ordering.
   ash_test_helper_->TearDown();
 #elif defined(TOOLKIT_VIEWS)
   views_test_helper_.reset();
 #endif
 
+  // Destroy the profile here - otherwise, if the profile is freed in the
+  // destructor, and a test subclass owns a resource that the profile depends
+  // on (such as g_browser_process()->local_state()) there's no way for the
+  // subclass to free it after the profile.
+  if (profile_)
+    DestroyProfile(profile_);
+  profile_ = nullptr;
+
   testing::Test::TearDown();
 
-  // A Task is leaked if we don't destroy everything, then run the message
-  // loop.
+  // A Task is leaked if we don't destroy everything, then run the message loop.
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
   base::RunLoop().Run();
@@ -164,23 +174,6 @@
   contents->UpdateTitleForEntry(controller->GetActiveEntry(), title);
 }
 
-void BrowserWithTestWindowTest::DestroyBrowserAndProfile() {
-  if (browser_.get()) {
-    // Make sure we close all tabs, otherwise Browser isn't happy in its
-    // destructor.
-    browser()->tab_strip_model()->CloseAllTabs();
-    browser_.reset(NULL);
-  }
-  window_.reset(NULL);
-  // Destroy the profile here - otherwise, if the profile is freed in the
-  // destructor, and a test subclass owns a resource that the profile depends
-  // on (such as g_browser_process()->local_state()) there's no way for the
-  // subclass to free it after the profile.
-  if (profile_)
-    DestroyProfile(profile_);
-  profile_ = NULL;
-}
-
 TestingProfile* BrowserWithTestWindowTest::CreateProfile() {
   return new TestingProfile();
 }
diff --git a/chrome/test/base/browser_with_test_window_test.h b/chrome/test/base/browser_with_test_window_test.h
index a6d3123..18c5e06 100644
--- a/chrome/test/base/browser_with_test_window_test.h
+++ b/chrome/test/base/browser_with_test_window_test.h
@@ -127,10 +127,6 @@
                                            const GURL& url,
                                            const base::string16& title);
 
-  // Destroys the browser, window, and profile created by this class. This is
-  // invoked from the destructor.
-  void DestroyBrowserAndProfile();
-
   // Creates the profile used by this test. The caller owns the return value.
   virtual TestingProfile* CreateProfile();
 
diff --git a/chrome/test/base/test_browser_window.cc b/chrome/test/base/test_browser_window.cc
index c84cbe9..5d9d730 100644
--- a/chrome/test/base/test_browser_window.cc
+++ b/chrome/test/base/test_browser_window.cc
@@ -143,6 +143,10 @@
   return false;
 }
 
+bool TestBrowserWindow::IsToolbarShowing() const {
+  return false;
+}
+
 ShowTranslateBubbleResult TestBrowserWindow::ShowTranslateBubble(
     content::WebContents* contents,
     translate::TranslateStep step,
diff --git a/chrome/test/base/test_browser_window.h b/chrome/test/base/test_browser_window.h
index b9884db..73e5723 100644
--- a/chrome/test/base/test_browser_window.h
+++ b/chrome/test/base/test_browser_window.h
@@ -88,6 +88,7 @@
   bool IsBookmarkBarAnimating() const override;
   bool IsTabStripEditable() const override;
   bool IsToolbarVisible() const override;
+  bool IsToolbarShowing() const override;
   void ShowUpdateChromeDialog() override {}
   void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) override {}
   void ShowBookmarkAppBubble(
diff --git a/chrome/test/data/android/webvr_instrumentation/html/test_device_capabilities_match_expectations.html b/chrome/test/data/android/webvr_instrumentation/html/test_device_capabilities_match_expectations.html
new file mode 100644
index 0000000..772de82
--- /dev/null
+++ b/chrome/test/data/android/webvr_instrumentation/html/test_device_capabilities_match_expectations.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<!--
+Tests that the reported device capabilities match expectations.
+-->
+<html>
+  <head>
+    <link rel="stylesheet" type="text/css" href="../resources/webvr_e2e.css">
+  </head>
+  <body>
+    <canvas id="webgl-canvas"></canvas>
+    <script src="../../../../../../third_party/WebKit/LayoutTests/resources/testharness.js"></script>
+    <script src="../resources/webvr_e2e.js"></script>
+    <script src="../resources/webvr_boilerplate.js"></script>
+    <script>
+      // All the current test devices have the same expectations, but that will
+      // change with additional device support, especially desktop.
+      var android_expectation = {
+        "isPresenting": false,
+        "capabilities": {
+          "hasPosition": false,
+          "hasExternalDisplay": false,
+          "canPresent": true,
+          "maxLayers": 1,
+        },
+      }
+      var expectations = {
+        "angler": android_expectation,  // Nexus 6P
+        "bullhead": android_expectation,  // Nexus 5X
+        "hammerhead": android_expectation,  // Nexus 5
+        "marlin": android_expectation,  // Pixel XL
+        "sailfish": android_expectation,  // Pixel
+      }
+      var t = async_test("Device capabilities match expectations");
+      function stepCheckDeviceCapabilities(device) {
+        if (!(device in expectations)) {
+          t.step_func_done( () => {
+            assert_unreached("Given device " + device + " not in expectations");
+          })();
+          return;
+        }
+        let expectation = expectations[device];
+        t.step_func_done( () => {
+          assert_equals(vrDisplay["isPresenting"], expectation["isPresenting"]);
+          for (var capability in expectation["capabilities"]) {
+            assert_equals(vrDisplay["capabilities"][capability],
+                          expectation["capabilities"][capability],
+                          capability);
+          }
+        })();
+      }
+    </script>
+  </body>
+</html>
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index b77aff0..5b26a8b 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -1136,7 +1136,13 @@
   runAccessibilityChecks: false,
 };
 
-TEST_F('CrSettingsNonExistentRouteTest', 'All', function() {
+// Failing on ChromiumOS dbg. https://crbug.com/709442
+GEN('#if defined(OS_CHROMEOS) && !defined(NDEBUG)');
+GEN('#define MAYBE_All DISABLED_All');
+GEN('#else');
+GEN('#define MAYBE_All All');
+GEN('#endif');
+TEST_F('CrSettingsNonExistentRouteTest', 'MAYBE_All', function() {
   suite('NonExistentRoutes', function() {
     test('redirect to basic', function() {
       assertEquals(settings.Route.BASIC, settings.getCurrentRoute());
diff --git a/chrome/test/data/webui/settings/people_page_test.js b/chrome/test/data/webui/settings/people_page_test.js
index 3df7cfac..16c7a47 100644
--- a/chrome/test/data/webui/settings/people_page_test.js
+++ b/chrome/test/data/webui/settings/people_page_test.js
@@ -329,22 +329,6 @@
         });
       });
 
-      test('ActivityControlsLink', function() {
-        return browserProxy.whenCalled('getSyncStatus').then(function() {
-          Polymer.dom.flush();
-
-          var activityControls = peoplePage.$$('#activity-controls');
-          assertTrue(!!activityControls);
-          assertFalse(activityControls.hidden);
-
-          cr.webUIListenerCallback('sync-status-changed', {
-            signedIn: false,
-          });
-
-          assertTrue(activityControls.hidden);
-        });
-      });
-
       test('syncStatusNotActionableForManagedAccounts', function() {
         assertFalse(!!peoplePage.$$('#sync-status'));
 
diff --git a/chrome/test/data/webui/settings/settings_subpage_browsertest.js b/chrome/test/data/webui/settings/settings_subpage_browsertest.js
index bbc22ec..5b90649 100644
--- a/chrome/test/data/webui/settings/settings_subpage_browsertest.js
+++ b/chrome/test/data/webui/settings/settings_subpage_browsertest.js
@@ -96,7 +96,13 @@
   __proto__: SettingsSubPageBrowserTest.prototype,
 };
 
-TEST_F('SettingsBasicSubPageBrowserTest', 'SubPages', function() {
+// Failing on ChromiumOS dbg. https://crbug.com/709442
+GEN('#if defined(OS_CHROMEOS) && !defined(NDEBUG)');
+GEN('#define MAYBE_SubPages DISABLED_SubPages');
+GEN('#else');
+GEN('#define MAYBE_SubPages SubPages');
+GEN('#endif');
+TEST_F('SettingsBasicSubPageBrowserTest', 'MAYBE_SubPages', function() {
   suiteSetup(this.verifySubPagesHidden_.bind(this));
   suite('Basic', this.testSubPages.bind(this));
   mocha.run();
diff --git a/chrome/test/data/webui/settings/site_settings_page_browsertest.js b/chrome/test/data/webui/settings/site_settings_page_browsertest.js
index 0b8256e2..0b9ade75 100644
--- a/chrome/test/data/webui/settings/site_settings_page_browsertest.js
+++ b/chrome/test/data/webui/settings/site_settings_page_browsertest.js
@@ -15,7 +15,13 @@
   __proto__: SettingsPageBrowserTest.prototype,
 };
 
-TEST_F('SettingsSiteSettingsPageBrowserTest', 'labels', function() {
+// Failing on ChromiumOS dbg. https://crbug.com/709442
+GEN('#if defined(OS_CHROMEOS) && !defined(NDEBUG)');
+GEN('#define MAYBE_labels DISABLED_labels');
+GEN('#else');
+GEN('#define MAYBE_labels labels');
+GEN('#endif');
+TEST_F('SettingsSiteSettingsPageBrowserTest', 'MAYBE_labels', function() {
   suite('Site settings page', function() {
     var ui;
 
diff --git a/chromecast/common/media/BUILD.gn b/chromecast/common/media/BUILD.gn
index 2e1181d..2e22b435 100644
--- a/chromecast/common/media/BUILD.gn
+++ b/chromecast/common/media/BUILD.gn
@@ -6,27 +6,17 @@
 import("//mojo/public/tools/bindings/mojom.gni")
 
 source_set("media") {
-  sources = [
-    "cast_media_client.cc",
-    "cast_media_client.h",
-  ]
-
-  deps = [
-    "//base",
-    "//chromecast/media",
-    "//chromecast/media/cdm",
-    "//chromecast/public:public",
-    "//media",
-  ]
-
   if (is_android) {
-    sources += [
+    sources = [
       "cast_media_drm_bridge_client.cc",
       "cast_media_drm_bridge_client.h",
     ]
-    deps += [
+    deps = [
+      "//base",
       "//chromecast/media",
+      "//chromecast/media/cdm",
       "//components/cdm/common",
+      "//media",
     ]
   }
 
diff --git a/chromecast/common/media/cast_media_client.cc b/chromecast/common/media/cast_media_client.cc
deleted file mode 100644
index 4a0b696e..0000000
--- a/chromecast/common/media/cast_media_client.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2016 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 "chromecast/common/media/cast_media_client.h"
-
-#include "chromecast/media/base/media_caps.h"
-#include "chromecast/media/base/media_codec_support.h"
-#include "chromecast/media/base/supported_codec_profile_levels_memo.h"
-#include "chromecast/public/media/media_capabilities_shlib.h"
-
-// TODO(servolk): Is there a better way to override just IsSupportedVideoConfig
-// without duplicating content::RenderMediaClient implementation?
-// For now use this to allow access to the ::media::GetMediaClient.
-namespace media {
-MEDIA_EXPORT MediaClient* GetMediaClient();
-}
-
-namespace chromecast {
-namespace media {
-
-void CastMediaClient::Initialize(
-    SupportedCodecProfileLevelsMemo* supported_profiles) {
-  ::media::SetMediaClient(
-      new CastMediaClient(::media::GetMediaClient(), supported_profiles));
-}
-
-CastMediaClient::CastMediaClient(
-    ::media::MediaClient* content_media_client,
-    SupportedCodecProfileLevelsMemo* supported_profiles) {
-  // Ensure that CastMediaClient gets initialized after the
-  // content::RenderMediaClient.
-  DCHECK(content_media_client);
-  content_media_client_ = content_media_client;
-  supported_profiles_ = supported_profiles;
-}
-
-CastMediaClient::~CastMediaClient() {}
-
-void CastMediaClient::AddKeySystemsInfoForUMA(
-    std::vector<::media::KeySystemInfoForUMA>* key_systems_info_for_uma) {
-  content_media_client_->AddKeySystemsInfoForUMA(key_systems_info_for_uma);
-}
-
-bool CastMediaClient::IsKeySystemsUpdateNeeded() {
-  return content_media_client_->IsKeySystemsUpdateNeeded();
-}
-
-void CastMediaClient::AddSupportedKeySystems(
-    std::vector<std::unique_ptr<::media::KeySystemProperties>>*
-        key_systems_properties) {
-  content_media_client_->AddSupportedKeySystems(key_systems_properties);
-}
-
-void CastMediaClient::RecordRapporURL(const std::string& metric,
-                                      const GURL& url) {
-  content_media_client_->RecordRapporURL(metric, url);
-}
-
-// static
-bool CastMediaClient::IsSupportedVideoConfig(
-    const ::media::VideoConfig& config) {
-// TODO(servolk): make use of eotf.
-#if defined(OS_ANDROID)
-  return supported_profiles_->IsSupportedVideoConfig(
-      ToCastVideoCodec(config.codec, config.profile),
-      ToCastVideoProfile(config.profile), config.level);
-#else
-  return MediaCapabilitiesShlib::IsSupportedVideoConfig(
-      ToCastVideoCodec(config.codec, config.profile),
-      ToCastVideoProfile(config.profile), config.level);
-#endif
-}
-
-bool CastMediaClient::IsSupportedAudioConfig(
-    const ::media::AudioConfig& config) {
-#if defined(OS_ANDROID)
-  // TODO(sanfin): Implement this for Android.
-  return true;
-#else
-  AudioCodec codec = ToCastAudioCodec(config.codec);
-  // Cast platform implements software decoding of Opus and FLAC, so only PCM
-  // support is necessary in order to support Opus and FLAC.
-  if (codec == kCodecOpus || codec == kCodecFLAC)
-    codec = kCodecPCM;
-
-  // If HDMI sink supports AC3/EAC3 codecs then we don't need the vendor backend
-  // to support these codec directly.
-  if (codec == kCodecEAC3 && MediaCapabilities::HdmiSinkSupportsEAC3())
-    return true;
-  if (codec == kCodecAC3 && MediaCapabilities::HdmiSinkSupportsAC3())
-    return true;
-
-  AudioConfig cast_audio_config;
-  cast_audio_config.codec = codec;
-  return MediaCapabilitiesShlib::IsSupportedAudioConfig(cast_audio_config);
-#endif
-}
-
-}  // namespace media
-}  // namespace chromecast
diff --git a/chromecast/common/media/cast_media_client.h b/chromecast/common/media/cast_media_client.h
deleted file mode 100644
index b1a0a38..0000000
--- a/chromecast/common/media/cast_media_client.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2016 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.
-
-#ifndef CHROMECAST_COMMON_MEDIA_CAST_MEDIA_CLIENT_H_
-#define CHROMECAST_COMMON_MEDIA_CAST_MEDIA_CLIENT_H_
-
-#include "base/lazy_instance.h"
-#include "base/macros.h"
-#include "chromecast/media/base/supported_codec_profile_levels_memo.h"
-#include "media/base/media_client.h"
-
-namespace chromecast {
-namespace media {
-
-// Forwards MediaClient::IsSupportedVideoConfig calls to MediaCapabilitiesShlib
-// and the rest of the calls to the default content media client (i.e.
-// content::RenderMediaClient).
-class CastMediaClient : public ::media::MediaClient {
- public:
-  // Initialize CastMediaClient and SetMediaClient(). Note that the instance
-  // is not exposed because no content code needs to directly access it.
-  static void Initialize(SupportedCodecProfileLevelsMemo* memo);
-
-  // MediaClient implementation
-  void AddKeySystemsInfoForUMA(std::vector<::media::KeySystemInfoForUMA>*
-                                   key_systems_info_for_uma) override;
-  bool IsKeySystemsUpdateNeeded() override;
-  void AddSupportedKeySystems(
-      std::vector<std::unique_ptr<::media::KeySystemProperties>>*
-          key_systems_properties) override;
-  void RecordRapporURL(const std::string& metric, const GURL& url) override;
-  bool IsSupportedAudioConfig(const ::media::AudioConfig& config) override;
-  bool IsSupportedVideoConfig(const ::media::VideoConfig& config) override;
-
- private:
-  friend struct base::LazyInstanceTraitsBase<CastMediaClient>;
-
-  CastMediaClient(::media::MediaClient* content_media_client,
-                  SupportedCodecProfileLevelsMemo* supported_profiles);
-  ~CastMediaClient() override;
-
-  ::media::MediaClient* content_media_client_;
-  SupportedCodecProfileLevelsMemo* supported_profiles_;
-
-  DISALLOW_COPY_AND_ASSIGN(CastMediaClient);
-};
-
-}  // namespace media
-}  // namespace chromecast
-
-#endif  // CHROMECAST_COMMON_MEDIA_CAST_MEDIA_CLIENT_H_
diff --git a/chromecast/media/cma/base/decoder_config_adapter.cc b/chromecast/media/cma/base/decoder_config_adapter.cc
index cf4fdee..c69341c5 100644
--- a/chromecast/media/cma/base/decoder_config_adapter.cc
+++ b/chromecast/media/cma/base/decoder_config_adapter.cc
@@ -307,19 +307,21 @@
   base::Optional<::media::HDRMetadata> hdr_metadata = config.hdr_metadata();
   if (hdr_metadata) {
     video_config.have_hdr_metadata = true;
-    video_config.hdr_metadata.max_cll = hdr_metadata->max_cll;
-    video_config.hdr_metadata.max_fall = hdr_metadata->max_fall;
+    video_config.hdr_metadata.max_content_light_level =
+        hdr_metadata->max_content_light_level;
+    video_config.hdr_metadata.max_frame_average_light_level =
+        hdr_metadata->max_frame_average_light_level;
 
     const auto& mm1 = hdr_metadata->mastering_metadata;
     auto& mm2 = video_config.hdr_metadata.mastering_metadata;
-    mm2.primary_r_chromaticity_x = mm1.primary_r_chromaticity_x;
-    mm2.primary_r_chromaticity_y = mm1.primary_r_chromaticity_y;
-    mm2.primary_g_chromaticity_x = mm1.primary_g_chromaticity_x;
-    mm2.primary_g_chromaticity_y = mm1.primary_g_chromaticity_y;
-    mm2.primary_b_chromaticity_x = mm1.primary_b_chromaticity_x;
-    mm2.primary_b_chromaticity_y = mm1.primary_b_chromaticity_y;
-    mm2.white_point_chromaticity_x = mm1.white_point_chromaticity_x;
-    mm2.white_point_chromaticity_y = mm1.white_point_chromaticity_y;
+    mm2.primary_r_chromaticity_x = mm1.primary_r.x();
+    mm2.primary_r_chromaticity_y = mm1.primary_r.y();
+    mm2.primary_g_chromaticity_x = mm1.primary_g.x();
+    mm2.primary_g_chromaticity_y = mm1.primary_g.y();
+    mm2.primary_b_chromaticity_x = mm1.primary_b.x();
+    mm2.primary_b_chromaticity_y = mm1.primary_b.y();
+    mm2.white_point_chromaticity_x = mm1.white_point.x();
+    mm2.white_point_chromaticity_y = mm1.white_point.y();
     mm2.luminance_max = mm1.luminance_max;
     mm2.luminance_min = mm1.luminance_min;
   }
diff --git a/chromecast/public/media/decoder_config.h b/chromecast/public/media/decoder_config.h
index 5b3b9db..d0fe46d 100644
--- a/chromecast/public/media/decoder_config.h
+++ b/chromecast/public/media/decoder_config.h
@@ -212,7 +212,7 @@
 };
 
 // Table 4
-enum class MatrixID : int8_t {
+enum class MatrixID : uint8_t {
   RGB = 0,
   BT709 = 1,
   UNSPECIFIED = 2,
@@ -265,8 +265,8 @@
 // HDR metadata common for HDR10 and WebM/VP9-based HDR formats.
 struct HDRMetadata {
   MasteringMetadata mastering_metadata;
-  unsigned max_cll = 0;
-  unsigned max_fall = 0;
+  unsigned max_content_light_level = 0;
+  unsigned max_frame_average_light_level = 0;
 
   HDRMetadata();
   HDRMetadata(const HDRMetadata& rhs);
diff --git a/chromecast/renderer/BUILD.gn b/chromecast/renderer/BUILD.gn
index e8ee80b..bb5a1c4 100644
--- a/chromecast/renderer/BUILD.gn
+++ b/chromecast/renderer/BUILD.gn
@@ -10,8 +10,6 @@
     "cast_content_renderer_client.h",
     "cast_render_frame_action_deferrer.cc",
     "cast_render_frame_action_deferrer.h",
-    "key_systems_cast.cc",
-    "key_systems_cast.h",
   ]
 
   public_deps = [
@@ -33,7 +31,6 @@
     "//chromecast/crash",
     "//chromecast/media",
     "//chromecast/media",
-    "//components/cdm/renderer",
     "//components/network_hints/renderer",
     "//content/public/common",
     "//content/public/renderer",
@@ -41,6 +38,5 @@
     "//ipc",
     "//media",
     "//services/service_manager/public/cpp",
-    "//third_party/widevine/cdm:headers",
   ]
 }
diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc
index 1036193d..bd68a2d 100644
--- a/chromecast/renderer/cast_content_renderer_client.cc
+++ b/chromecast/renderer/cast_content_renderer_client.cc
@@ -11,11 +11,13 @@
 #include "base/strings/string_number_conversions.h"
 #include "build/build_config.h"
 #include "chromecast/base/chromecast_switches.h"
-#include "chromecast/common/media/cast_media_client.h"
 #include "chromecast/crash/cast_crash_keys.h"
+#include "chromecast/media/base/media_caps.h"
+#include "chromecast/media/base/media_codec_support.h"
 #include "chromecast/media/base/supported_codec_profile_levels_memo.h"
+#include "chromecast/public/media/media_capabilities_shlib.h"
 #include "chromecast/renderer/cast_render_frame_action_deferrer.h"
-#include "chromecast/renderer/key_systems_cast.h"
+#include "chromecast/renderer/media/key_systems_cast.h"
 #include "chromecast/renderer/media/media_caps_observer_impl.h"
 #include "components/network_hints/renderer/prescient_networking_dispatcher.h"
 #include "content/public/common/content_switches.h"
@@ -78,8 +80,6 @@
       new media::MediaCapsObserverImpl(&proxy, supported_profiles_.get()));
   media_caps->AddObserver(std::move(proxy));
 
-  chromecast::media::CastMediaClient::Initialize(supported_profiles_.get());
-
   prescient_networking_dispatcher_.reset(
       new network_hints::PrescientNetworkingDispatcher());
 
@@ -110,9 +110,51 @@
 void CastContentRendererClient::AddSupportedKeySystems(
     std::vector<std::unique_ptr<::media::KeySystemProperties>>*
         key_systems_properties) {
-  AddChromecastKeySystems(key_systems_properties,
-                          false /* enable_persistent_license_support */,
-                          false /* force_software_crypto */);
+  media::AddChromecastKeySystems(key_systems_properties,
+                                 false /* enable_persistent_license_support */,
+                                 false /* force_software_crypto */);
+}
+
+bool CastContentRendererClient::IsSupportedAudioConfig(
+    const ::media::AudioConfig& config) {
+#if defined(OS_ANDROID)
+  // TODO(sanfin): Implement this for Android.
+  return true;
+#else
+  media::AudioCodec codec = media::ToCastAudioCodec(config.codec);
+  // Cast platform implements software decoding of Opus and FLAC, so only PCM
+  // support is necessary in order to support Opus and FLAC.
+  if (codec == media::kCodecOpus || codec == media::kCodecFLAC)
+    codec = media::kCodecPCM;
+
+  // If HDMI sink supports AC3/EAC3 codecs then we don't need the vendor backend
+  // to support these codec directly.
+  if (codec == media::kCodecEAC3 &&
+      media::MediaCapabilities::HdmiSinkSupportsEAC3())
+    return true;
+  if (codec == media::kCodecAC3 &&
+      media::MediaCapabilities::HdmiSinkSupportsAC3())
+    return true;
+
+  media::AudioConfig cast_audio_config;
+  cast_audio_config.codec = codec;
+  return media::MediaCapabilitiesShlib::IsSupportedAudioConfig(
+      cast_audio_config);
+#endif
+}
+
+bool CastContentRendererClient::IsSupportedVideoConfig(
+    const ::media::VideoConfig& config) {
+// TODO(servolk): make use of eotf.
+#if defined(OS_ANDROID)
+  return supported_profiles_->IsSupportedVideoConfig(
+      media::ToCastVideoCodec(config.codec, config.profile),
+      media::ToCastVideoProfile(config.profile), config.level);
+#else
+  return media::MediaCapabilitiesShlib::IsSupportedVideoConfig(
+      media::ToCastVideoCodec(config.codec, config.profile),
+      media::ToCastVideoProfile(config.profile), config.level);
+#endif
 }
 
 blink::WebPrescientNetworking*
diff --git a/chromecast/renderer/cast_content_renderer_client.h b/chromecast/renderer/cast_content_renderer_client.h
index 8f6aba4..74533aa 100644
--- a/chromecast/renderer/cast_content_renderer_client.h
+++ b/chromecast/renderer/cast_content_renderer_client.h
@@ -38,6 +38,8 @@
   void AddSupportedKeySystems(
       std::vector<std::unique_ptr<::media::KeySystemProperties>>*
           key_systems_properties) override;
+  bool IsSupportedAudioConfig(const ::media::AudioConfig& config) override;
+  bool IsSupportedVideoConfig(const ::media::VideoConfig& config) override;
   blink::WebPrescientNetworking* GetPrescientNetworking() override;
   void DeferMediaLoad(content::RenderFrame* render_frame,
                       bool render_frame_has_played_media_before,
diff --git a/chromecast/renderer/media/BUILD.gn b/chromecast/renderer/media/BUILD.gn
index 4a3a5ce..e831f1f23 100644
--- a/chromecast/renderer/media/BUILD.gn
+++ b/chromecast/renderer/media/BUILD.gn
@@ -4,13 +4,22 @@
 
 source_set("media") {
   sources = [
+    "key_systems_cast.cc",
+    "key_systems_cast.h",
     "media_caps_observer_impl.cc",
     "media_caps_observer_impl.h",
   ]
 
   deps = [
+    "//base",
     "//chromecast/common/media:interfaces",
     "//chromecast/media",
+    "//chromecast/media/cdm",
+    "//chromecast/public:public",
+    "//components/cdm/renderer",
+    "//content/public/renderer",
+    "//media",
+    "//third_party/widevine/cdm:headers",
     "//ui/gfx/geometry",
   ]
 }
diff --git a/chromecast/renderer/key_systems_cast.cc b/chromecast/renderer/media/key_systems_cast.cc
similarity index 93%
rename from chromecast/renderer/key_systems_cast.cc
rename to chromecast/renderer/media/key_systems_cast.cc
index 8ea79eb..1e29715 100644
--- a/chromecast/renderer/key_systems_cast.cc
+++ b/chromecast/renderer/media/key_systems_cast.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chromecast/renderer/key_systems_cast.h"
+#include "chromecast/renderer/media/key_systems_cast.h"
 
 #include <string>
 
@@ -16,7 +16,7 @@
 #include "media/base/key_system_properties.h"
 #include "media/media_features.h"
 
-#include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
+#include "widevine_cdm_version.h"  // In SHARED_INTERMEDIATE_DIR.
 
 using ::media::EmeConfigRule;
 using ::media::EmeFeatureSupport;
@@ -26,15 +26,14 @@
 using ::media::SupportedCodecs;
 
 namespace chromecast {
-namespace shell {
+namespace media {
 namespace {
 
 #if defined(PLAYREADY_CDM_AVAILABLE)
 class PlayReadyKeySystemProperties : public ::media::KeySystemProperties {
  public:
   explicit PlayReadyKeySystemProperties(bool persistent_license_support)
-      : persistent_license_support_(persistent_license_support) {
-  }
+      : persistent_license_support_(persistent_license_support) {}
 
   std::string GetKeySystemName() const override {
     return media::kChromecastPlayreadyKeySystem;
@@ -62,7 +61,7 @@
 
   EmeSessionTypeSupport GetPersistentLicenseSessionSupport() const override {
     return persistent_license_support_ ? EmeSessionTypeSupport::SUPPORTED
-        : EmeSessionTypeSupport::NOT_SUPPORTED;
+                                       : EmeSessionTypeSupport::NOT_SUPPORTED;
   }
 
   EmeSessionTypeSupport GetPersistentReleaseMessageSessionSupport()
@@ -113,7 +112,7 @@
   codecs |= ::media::EME_CODEC_MP4_HEVC;
 #endif
   key_systems_properties->emplace_back(new cdm::WidevineKeySystemProperties(
-      codecs,  // Regular codecs.
+      codecs,                     // Regular codecs.
       Robustness::HW_SECURE_ALL,  // Max audio robustness.
       Robustness::HW_SECURE_ALL,  // Max video robustness.
       enable_persistent_license_support
@@ -127,5 +126,5 @@
 #endif  // defined(WIDEVINE_CDM_AVAILABLE)
 }
 
-}  // namespace shell
+}  // namespace media
 }  // namespace chromecast
diff --git a/chromecast/renderer/key_systems_cast.h b/chromecast/renderer/media/key_systems_cast.h
similarity index 71%
rename from chromecast/renderer/key_systems_cast.h
rename to chromecast/renderer/media/key_systems_cast.h
index 5b524ed..1084827 100644
--- a/chromecast/renderer/key_systems_cast.h
+++ b/chromecast/renderer/media/key_systems_cast.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMECAST_RENDERER_KEY_SYSTEMS_CAST_H_
-#define CHROMECAST_RENDERER_KEY_SYSTEMS_CAST_H_
+#ifndef CHROMECAST_RENDERER_MEDIA_KEY_SYSTEMS_CAST_H_
+#define CHROMECAST_RENDERER_MEDIA_KEY_SYSTEMS_CAST_H_
 
 #include <memory>
 #include <vector>
@@ -13,7 +13,7 @@
 }
 
 namespace chromecast {
-namespace shell {
+namespace media {
 
 void AddChromecastKeySystems(
     std::vector<std::unique_ptr<::media::KeySystemProperties>>*
@@ -21,7 +21,7 @@
     bool enable_persistent_license_support,
     bool force_software_crypto);
 
-}  // namespace shell
+}  // namespace media
 }  // namespace chromecast
 
-#endif  // CHROMECAST_RENDERER_KEY_SYSTEMS_CAST_H_
+#endif  // CHROMECAST_RENDERER_MEDIA_KEY_SYSTEMS_CAST_H_
diff --git a/chromeos/dbus/cryptohome_client.cc b/chromeos/dbus/cryptohome_client.cc
index 19a7728..23e6f31 100644
--- a/chromeos/dbus/cryptohome_client.cc
+++ b/chromeos/dbus/cryptohome_client.cc
@@ -889,48 +889,36 @@
 
   void GetBootAttribute(const cryptohome::GetBootAttributeRequest& request,
                         const ProtobufMethodCallback& callback) override {
-    const char* method_name = cryptohome::kCryptohomeGetBootAttribute;
-    dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, method_name);
-
-    dbus::MessageWriter writer(&method_call);
-    writer.AppendProtoAsArrayOfBytes(request);
-
-    proxy_->CallMethod(&method_call,
-                       kTpmDBusTimeoutMs ,
-                       base::Bind(&CryptohomeClientImpl::OnBaseReplyMethod,
-                                  weak_ptr_factory_.GetWeakPtr(),
-                                  callback));
+    CallCryptohomeMethod(cryptohome::kCryptohomeGetBootAttribute, request,
+                         callback);
   }
 
   void SetBootAttribute(const cryptohome::SetBootAttributeRequest& request,
                         const ProtobufMethodCallback& callback) override {
-    const char* method_name = cryptohome::kCryptohomeSetBootAttribute;
-    dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, method_name);
-
-    dbus::MessageWriter writer(&method_call);
-    writer.AppendProtoAsArrayOfBytes(request);
-
-    proxy_->CallMethod(&method_call,
-                       kTpmDBusTimeoutMs ,
-                       base::Bind(&CryptohomeClientImpl::OnBaseReplyMethod,
-                                  weak_ptr_factory_.GetWeakPtr(),
-                                  callback));
+    CallCryptohomeMethod(cryptohome::kCryptohomeSetBootAttribute, request,
+                         callback);
   }
 
   void FlushAndSignBootAttributes(
       const cryptohome::FlushAndSignBootAttributesRequest& request,
       const ProtobufMethodCallback& callback) override {
-    const char* method_name = cryptohome::kCryptohomeFlushAndSignBootAttributes;
-    dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, method_name);
+    CallCryptohomeMethod(cryptohome::kCryptohomeFlushAndSignBootAttributes,
+                         request, callback);
+  }
 
-    dbus::MessageWriter writer(&method_call);
-    writer.AppendProtoAsArrayOfBytes(request);
+  void RemoveFirmwareManagementParametersFromTpm(
+      const cryptohome::RemoveFirmwareManagementParametersRequest& request,
+      const ProtobufMethodCallback& callback) override {
+    CallCryptohomeMethod(
+        cryptohome::kCryptohomeRemoveFirmwareManagementParameters, request,
+        callback);
+  }
 
-    proxy_->CallMethod(&method_call,
-                       kTpmDBusTimeoutMs ,
-                       base::Bind(&CryptohomeClientImpl::OnBaseReplyMethod,
-                                  weak_ptr_factory_.GetWeakPtr(),
-                                  callback));
+  void SetFirmwareManagementParametersInTpm(
+      const cryptohome::SetFirmwareManagementParametersRequest& request,
+      const ProtobufMethodCallback& callback) override {
+    CallCryptohomeMethod(cryptohome::kCryptohomeSetFirmwareManagementParameters,
+                         request, callback);
   }
 
   void MigrateToDircrypto(const cryptohome::Identification& cryptohome_id,
@@ -1246,6 +1234,23 @@
         signal << " failed.";
   }
 
+  // Makes an asynchronous D-Bus call, using cryptohome interface. |method_name|
+  // is the name of the method to be called. |request| is the specific request
+  // for the method, including the data required to be sent. |callback| is
+  // invoked when the response is received.
+  void CallCryptohomeMethod(const std::string& method_name,
+                            const google::protobuf::MessageLite& request,
+                            const ProtobufMethodCallback& callback) {
+    dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, method_name);
+
+    dbus::MessageWriter writer(&method_call);
+    writer.AppendProtoAsArrayOfBytes(request);
+
+    proxy_->CallMethod(&method_call, kTpmDBusTimeoutMs,
+                       base::Bind(&CryptohomeClientImpl::OnBaseReplyMethod,
+                                  weak_ptr_factory_.GetWeakPtr(), callback));
+  }
+
   dbus::ObjectProxy* proxy_;
   std::unique_ptr<BlockingMethodCaller> blocking_method_caller_;
   AsyncCallStatusHandler async_call_status_handler_;
diff --git a/chromeos/dbus/cryptohome_client.h b/chromeos/dbus/cryptohome_client.h
index 94fe05b2b..3d0480a9 100644
--- a/chromeos/dbus/cryptohome_client.h
+++ b/chromeos/dbus/cryptohome_client.h
@@ -28,8 +28,10 @@
 class GetBootAttributeRequest;
 class GetKeyDataRequest;
 class MountRequest;
+class RemoveFirmwareManagementParametersRequest;
 class RemoveKeyRequest;
 class SetBootAttributeRequest;
+class SetFirmwareManagementParametersRequest;
 class UpdateKeyRequest;
 
 class Identification;
@@ -578,6 +580,20 @@
       const cryptohome::AuthorizationRequest& auth,
       const VoidDBusMethodCallback& callback) = 0;
 
+  // Asynchronously calls RemoveFirmwareManagementParameters method. |callback|
+  // is called after method call, and with reply protobuf.
+  virtual void RemoveFirmwareManagementParametersFromTpm(
+      const cryptohome::RemoveFirmwareManagementParametersRequest& request,
+      const ProtobufMethodCallback& callback) = 0;
+
+  // Asynchronously calls SetFirmwareManagementParameters method. |callback|
+  // is called after method call, and with reply protobuf. |request| contains
+  // the flags to be set. SetFirmwareManagementParameters creates the firmware
+  // management parameters in TPM and sets flags included in the request.
+  virtual void SetFirmwareManagementParametersInTpm(
+      const cryptohome::SetFirmwareManagementParametersRequest& request,
+      const ProtobufMethodCallback& callback) = 0;
+
  protected:
   // Create() should be used instead.
   CryptohomeClient();
diff --git a/chromeos/dbus/fake_cryptohome_client.cc b/chromeos/dbus/fake_cryptohome_client.cc
index e145cca4..7da79896 100644
--- a/chromeos/dbus/fake_cryptohome_client.cc
+++ b/chromeos/dbus/fake_cryptohome_client.cc
@@ -603,6 +603,18 @@
       this, &FakeCryptohomeClient::OnDircryptoMigrationProgressUpdated);
 }
 
+void FakeCryptohomeClient::RemoveFirmwareManagementParametersFromTpm(
+    const cryptohome::RemoveFirmwareManagementParametersRequest& request,
+    const ProtobufMethodCallback& callback) {
+  ReturnProtobufMethodCallback(cryptohome::BaseReply(), callback);
+}
+
+void FakeCryptohomeClient::SetFirmwareManagementParametersInTpm(
+    const cryptohome::SetFirmwareManagementParametersRequest& request,
+    const ProtobufMethodCallback& callback) {
+  ReturnProtobufMethodCallback(cryptohome::BaseReply(), callback);
+}
+
 void FakeCryptohomeClient::SetServiceIsAvailable(bool is_available) {
   service_is_available_ = is_available;
   if (is_available) {
diff --git a/chromeos/dbus/fake_cryptohome_client.h b/chromeos/dbus/fake_cryptohome_client.h
index 70f6ae3..0cf31de 100644
--- a/chromeos/dbus/fake_cryptohome_client.h
+++ b/chromeos/dbus/fake_cryptohome_client.h
@@ -201,6 +201,12 @@
                           const VoidDBusMethodCallback& callback) override;
   void SetDircryptoMigrationProgressHandler(
       const DircryptoMigrationProgessHandler& handler) override;
+  void RemoveFirmwareManagementParametersFromTpm(
+      const cryptohome::RemoveFirmwareManagementParametersRequest& request,
+      const ProtobufMethodCallback& callback) override;
+  void SetFirmwareManagementParametersInTpm(
+      const cryptohome::SetFirmwareManagementParametersRequest& request,
+      const ProtobufMethodCallback& callback) override;
 
   // Changes the behavior of WaitForServiceToBeAvailable(). This method runs
   // pending callbacks if is_available is true.
diff --git a/chromeos/dbus/mock_cryptohome_client.h b/chromeos/dbus/mock_cryptohome_client.h
index 5c5bfb0..e6248794 100644
--- a/chromeos/dbus/mock_cryptohome_client.h
+++ b/chromeos/dbus/mock_cryptohome_client.h
@@ -228,6 +228,14 @@
                     const VoidDBusMethodCallback& callback));
   MOCK_METHOD1(SetDircryptoMigrationProgressHandler,
                void(const DircryptoMigrationProgessHandler& handler));
+  MOCK_METHOD2(
+      RemoveFirmwareManagementParametersFromTpm,
+      void(const cryptohome::RemoveFirmwareManagementParametersRequest& request,
+           const ProtobufMethodCallback& callback));
+  MOCK_METHOD2(
+      SetFirmwareManagementParametersInTpm,
+      void(const cryptohome::SetFirmwareManagementParametersRequest& request,
+           const ProtobufMethodCallback& callback));
 };
 
 }  // namespace chromeos
diff --git a/chromeos/dbus/services/proxy_resolution_service_provider_unittest.cc b/chromeos/dbus/services/proxy_resolution_service_provider_unittest.cc
index a3aa6e9..ef2a0bcd 100644
--- a/chromeos/dbus/services/proxy_resolution_service_provider_unittest.cc
+++ b/chromeos/dbus/services/proxy_resolution_service_provider_unittest.cc
@@ -61,6 +61,7 @@
   net::ProxyInfo* mutable_proxy_info() { return &proxy_info_; }
 
   void set_async(bool async) { async_ = async; }
+  void set_result(net::Error result) { result_ = result; }
 
   // net::ProxyResolver:
   int GetProxyForURL(const GURL& url,
@@ -71,10 +72,10 @@
     CHECK(network_task_runner_->BelongsToCurrentThread());
     results->Use(proxy_info_);
     if (!async_)
-      return net::OK;
+      return result_;
 
     base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::Bind(callback, net::OK));
+        FROM_HERE, base::Bind(callback, result_));
     return net::ERR_IO_PENDING;
   }
 
@@ -87,6 +88,9 @@
   // If true, GetProxyForURL() replies asynchronously rather than synchronously.
   bool async_ = false;
 
+  // Final result for GetProxyForURL() to return.
+  net::Error result_ = net::OK;
+
   DISALLOW_COPY_AND_ASSIGN(TestProxyResolver);
 };
 
@@ -150,9 +154,12 @@
   void CreateProxyServiceOnNetworkThread() {
     CHECK(context_getter_->GetNetworkTaskRunner()->BelongsToCurrentThread());
 
-    // The config's autodetect property needs to be set in order for
-    // net::ProxyService to send requests to our resolver.
-    net::ProxyConfig config = net::ProxyConfig::CreateAutoDetect();
+    // Setting a mandatory PAC URL makes |proxy_service_| query
+    // |proxy_resolver_| and also lets us generate
+    // net::ERR_MANDATORY_PROXY_CONFIGURATION_FAILED errors.
+    net::ProxyConfig config;
+    config.set_pac_url(GURL("http://www.example.com"));
+    config.set_pac_mandatory(true);
     proxy_service_ = base::MakeUnique<net::ProxyService>(
         base::MakeUnique<net::ProxyConfigServiceFixed>(config),
         base::MakeUnique<TestProxyResolverFactory>(proxy_resolver_),
@@ -382,4 +389,26 @@
   EXPECT_FALSE(signal);
 }
 
+TEST_F(ProxyResolutionServiceProviderTest, ResponseError) {
+  const char kSourceURL[] = "http://www.gmail.com/";
+  proxy_resolver_->set_result(net::ERR_FAILED);
+  std::unique_ptr<dbus::Response> response;
+  std::unique_ptr<SignalInfo> signal;
+  CallMethod(kSourceURL, false /* request_signal */, &response, &signal);
+
+  // The response should contain empty proxy info and a "mandatory proxy config
+  // failed" error (which the error from the resolver will be mapped to).
+  ASSERT_TRUE(response);
+  dbus::MessageReader reader(response.get());
+  std::string proxy_info, error;
+  EXPECT_TRUE(reader.PopString(&proxy_info));
+  EXPECT_TRUE(reader.PopString(&error));
+  EXPECT_EQ("DIRECT", proxy_info);
+  EXPECT_EQ(net::ErrorToString(net::ERR_MANDATORY_PROXY_CONFIGURATION_FAILED),
+            error);
+
+  // No signal should've been emitted.
+  EXPECT_FALSE(signal);
+}
+
 }  // namespace chromeos
diff --git a/components/cdm/renderer/android_key_systems.cc b/components/cdm/renderer/android_key_systems.cc
index 71706cf..bd12b93 100644
--- a/components/cdm/renderer/android_key_systems.cc
+++ b/components/cdm/renderer/android_key_systems.cc
@@ -125,6 +125,7 @@
           : EmeSessionTypeSupport::NOT_SUPPORTED;
 
   if (response.compositing_codecs != media::EME_CODEC_NONE) {
+    DVLOG(3) << __func__ << " Widevine supported.";
     concrete_key_systems->emplace_back(new WidevineKeySystemProperties(
         response.compositing_codecs,           // Regular codecs.
         response.non_compositing_codecs,       // Hardware-secure codecs.
@@ -136,6 +137,7 @@
         EmeFeatureSupport::ALWAYS_ENABLED));   // Distinctive identifier.
   } else {
     // It doesn't make sense to support secure codecs but not regular codecs.
+    DVLOG(3) << __func__ << " Widevine NOT supported.";
     DCHECK(response.non_compositing_codecs == media::EME_CODEC_NONE);
   }
 }
diff --git a/components/cronet/android/test/javaperftests/android_rndis_forwarder.py b/components/cronet/android/test/javaperftests/android_rndis_forwarder.py
index f4f5364e..4c5a3b0 100644
--- a/components/cronet/android/test/javaperftests/android_rndis_forwarder.py
+++ b/components/cronet/android/test/javaperftests/android_rndis_forwarder.py
@@ -28,7 +28,9 @@
     self._host_ip = rndis_configurator.host_ip
     self._original_dns = None, None, None
     self._RedirectPorts()
-    self._OverrideDns()
+    # The netd commands fail on Lollipop and newer releases, but aren't
+    # necessary as DNS isn't used.
+    # self._OverrideDns()
     self._OverrideDefaultGateway()
     # Need to override routing policy again since call to setifdns
     # sometimes resets policy table
diff --git a/components/cronet/android/test/javaperftests/run.py b/components/cronet/android/test/javaperftests/run.py
index fc6203b..1e815e2 100755
--- a/components/cronet/android/test/javaperftests/run.py
+++ b/components/cronet/android/test/javaperftests/run.py
@@ -21,6 +21,15 @@
 3. cronet_perf_test_apk has been built for the Android device, e.g. via:
      ./components/cronet/tools/cr_cronet.py gn -r
      ninja -C out/Release cronet_perf_test_apk
+4. If "sudo ufw status" doesn't say "Status: inactive", run "sudo ufw disable".
+5. sudo apt-get install lighttpd
+6. If the usb0 interface on the host keeps losing it's IPv4 address
+   (WaitFor(HasHostAddress) will keep failing), NetworkManager may need to be
+   told to leave usb0 alone with these commands:
+     sudo bash -c "printf \"\\n[keyfile]\
+         \\nunmanaged-devices=interface-name:usb0\\n\" \
+         >> /etc/NetworkManager/NetworkManager.conf"
+     sudo service network-manager restart
 
 Invocation:
 ./run.py
@@ -224,7 +233,7 @@
     # the redirect done in build/android/pylib/pexpect.py.
     # pylint: disable=no-member
     self._process = pexpect.spawn(QUIC_SERVER,
-                                  ['--quic_in_memory_cache_dir=%s' %
+                                  ['--quic_response_cache_dir=%s' %
                                       self._quic_server_doc_root,
                                    '--certificate_file=%s' % QUIC_CERT,
                                    '--key_file=%s' % QUIC_KEY,
diff --git a/components/data_use_measurement/content/content_url_request_classifier.cc b/components/data_use_measurement/content/content_url_request_classifier.cc
index d40af5d..d3354c45 100644
--- a/components/data_use_measurement/content/content_url_request_classifier.cc
+++ b/components/data_use_measurement/content/content_url_request_classifier.cc
@@ -156,4 +156,12 @@
           base::HistogramBase::kUmaTargetedHistogramFlag));
 }
 
+bool ContentURLRequestClassifier::IsFavIconRequest(
+    const net::URLRequest& request) const {
+  const content::ResourceRequestInfo* request_info =
+      content::ResourceRequestInfo::ForRequest(&request);
+  return request_info && request_info->GetResourceType() ==
+                             content::ResourceType::RESOURCE_TYPE_FAVICON;
+}
+
 }  // namespace data_use_measurement
diff --git a/components/data_use_measurement/content/content_url_request_classifier.h b/components/data_use_measurement/content/content_url_request_classifier.h
index 1b7bbb0..0726bb967 100644
--- a/components/data_use_measurement/content/content_url_request_classifier.h
+++ b/components/data_use_measurement/content/content_url_request_classifier.h
@@ -20,13 +20,12 @@
  private:
   // UrlRequestClassifier:
   bool IsUserRequest(const net::URLRequest& request) const override;
-
   DataUseUserData::DataUseContentType GetContentType(
       const net::URLRequest& request,
       const net::HttpResponseHeaders& response_headers) const override;
-
   void RecordPageTransitionUMA(uint64_t page_transition,
                                int64_t received_bytes) const override;
+  bool IsFavIconRequest(const net::URLRequest& request) const override;
 };
 
 }  // namespace data_use_measurement
diff --git a/components/data_use_measurement/core/data_use_measurement.cc b/components/data_use_measurement/core/data_use_measurement.cc
index 0e2794c..fcebeb8 100644
--- a/components/data_use_measurement/core/data_use_measurement.cc
+++ b/components/data_use_measurement/core/data_use_measurement.cc
@@ -17,6 +17,7 @@
 #include "net/base/network_change_notifier.h"
 #include "net/base/upload_data_stream.h"
 #include "net/http/http_response_headers.h"
+#include "net/http/http_status_code.h"
 #include "net/url_request/url_request.h"
 
 #if defined(OS_ANDROID)
@@ -65,6 +66,17 @@
 }
 #endif
 
+void RecordFavIconDataUse(const net::URLRequest& request) {
+  UMA_HISTOGRAM_COUNTS_100000(
+      "DataUse.FavIcon.Downstream",
+      request.was_cached() ? 0 : request.GetTotalReceivedBytes());
+  if (request.status().is_success() &&
+      request.GetResponseCode() != net::HTTP_OK) {
+    UMA_HISTOGRAM_COUNTS_100000("DataUse.FavIcon.Downstream.Non200Response",
+                                request.GetTotalReceivedBytes());
+  }
+}
+
 }  // namespace
 
 DataUseMeasurement::DataUseMeasurement(
@@ -132,6 +144,8 @@
   // TODO(rajendrant): May not be needed when http://crbug/651957 is fixed.
   UpdateDataUsePrefs(request);
   ReportServicesMessageSizeUMA(request);
+  if (url_request_classifier_->IsFavIconRequest(request))
+    RecordFavIconDataUse(request);
 }
 
 void DataUseMeasurement::OnHeadersReceived(
@@ -173,6 +187,8 @@
 #if defined(OS_ANDROID)
   MaybeRecordNetworkBytesOS();
 #endif
+  if (url_request_classifier_->IsFavIconRequest(request))
+    RecordFavIconDataUse(request);
 }
 
 void DataUseMeasurement::ReportDataUseUMA(const net::URLRequest& request,
diff --git a/components/data_use_measurement/core/data_use_measurement_unittest.cc b/components/data_use_measurement/core/data_use_measurement_unittest.cc
index 52887d9..63cc5e1 100644
--- a/components/data_use_measurement/core/data_use_measurement_unittest.cc
+++ b/components/data_use_measurement/core/data_use_measurement_unittest.cc
@@ -58,6 +58,10 @@
   void RecordPageTransitionUMA(uint64_t page_transition,
                                int64_t received_bytes) const override {}
 
+  bool IsFavIconRequest(const net::URLRequest& request) const override {
+    return false;
+  }
+
  private:
   DataUseUserData::DataUseContentType content_type_;
 };
diff --git a/components/data_use_measurement/core/data_use_network_delegate_unittest.cc b/components/data_use_measurement/core/data_use_network_delegate_unittest.cc
index b5f3fd9..ef5b810 100644
--- a/components/data_use_measurement/core/data_use_network_delegate_unittest.cc
+++ b/components/data_use_measurement/core/data_use_network_delegate_unittest.cc
@@ -42,6 +42,10 @@
 
   void RecordPageTransitionUMA(uint64_t page_transition,
                                int64_t received_bytes) const override {}
+
+  bool IsFavIconRequest(const net::URLRequest& request) const override {
+    return false;
+  }
 };
 
 class TestDataUseAscriber : public DataUseAscriber {
diff --git a/components/data_use_measurement/core/url_request_classifier.h b/components/data_use_measurement/core/url_request_classifier.h
index 27b3d72..d8239b3f 100644
--- a/components/data_use_measurement/core/url_request_classifier.h
+++ b/components/data_use_measurement/core/url_request_classifier.h
@@ -34,6 +34,9 @@
   // Records the page transition histograms.
   virtual void RecordPageTransitionUMA(uint64_t page_transition,
                                        int64_t received_bytes) const = 0;
+
+  // Returns true if |request| is fetching a favicon.
+  virtual bool IsFavIconRequest(const net::URLRequest& request) const = 0;
 };
 
 }  // namespace data_use_measurement
diff --git a/components/device_event_log/README.md b/components/device_event_log/README.md
new file mode 100644
index 0000000..f899ee8
--- /dev/null
+++ b/components/device_event_log/README.md
@@ -0,0 +1,49 @@
+# Device Event Log
+
+This directory contains code for logging device and system events.
+
+## Usage
+
+Use device event log macros to record events without contributing to noise in
+the chrome log.
+
+* Events are stored in a circular buffer (current limit is 4000).
+* Events can be viewed at chrome://device-log. Events can be filtered by type
+  and level.
+* Events show up in **feedback reports** under `device_event_log`.
+* Network events are separated out into a `network_event_log` section.
+* **ERROR** events will also be logged to the main chrome log.
+* All events can be logged to the main chrome log using vlog:
+  `--vmodule=device_event_log*=1`
+
+The events can also be queried for viewing in other informational pages, e.g:
+```
+device_event_log::GetAsString(device_event_log::OLDEST_FIRST, "json",
+                              "bluetooth", device_event_log::LOG_LEVEL_DEBUG,
+                              1000);
+```
+
+## Examples
+
+Typical usage:
+
+```NET_LOG(EVENT) << "NetworkState Changed " << name << ": " << state;```
+
+```POWER_LOG(USER) << "Suspend requested";```
+
+```POWER_LOG(DEBUG) << "Sending suspend request to dbus object: " << path;```
+
+```BLUETOOTH_LOG(ERROR) << "Unrecognized DBus error " << error_name;```
+
+Advanced usage:
+
+```
+device_event_log::LogLevel log_level =
+      SuppressError(dbus_error_message) ? device_event_log::LOG_LEVEL_DEBUG
+                                        : device_event_log::LOG_LEVEL_ERROR;
+DEVICE_LOG(device_event_log::LOG_TYPE_NETWORK, log_level) << detail;
+```
+
+```
+USB_PLOG(DEBUG) << "Failed to set configuration " << configuration_value;
+```
diff --git a/components/device_event_log/device_event_log.h b/components/device_event_log/device_event_log.h
index 8383781f..be9411b01 100644
--- a/components/device_event_log/device_event_log.h
+++ b/components/device_event_log/device_event_log.h
@@ -30,6 +30,8 @@
 // Examples:
 //  NET_LOG(EVENT) << "NetworkState Changed " << name << ": " << state;
 //  POWER_LOG(USER) << "Suspend requested";
+//
+// See also the README.md in this directory.
 
 #define NET_LOG(level)                             \
   DEVICE_LOG(::device_event_log::LOG_TYPE_NETWORK, \
@@ -40,6 +42,9 @@
 #define LOGIN_LOG(level)                         \
   DEVICE_LOG(::device_event_log::LOG_TYPE_LOGIN, \
              ::device_event_log::LOG_LEVEL_##level)
+#define BLUETOOTH_LOG(level)                         \
+  DEVICE_LOG(::device_event_log::LOG_TYPE_BLUETOOTH, \
+             ::device_event_log::LOG_LEVEL_##level)
 #define USB_LOG(level)                         \
   DEVICE_LOG(::device_event_log::LOG_TYPE_USB, \
              ::device_event_log::LOG_LEVEL_##level)
@@ -76,22 +81,23 @@
 
 namespace device_event_log {
 
-// Used to specify the type of event. NOTE: Be sure to update LogTypeFromString
-// and GetLogTypeString when adding entries to this enum. Also consider
-// updating chrome://device-log (see device_log_ui.cc).
+// Used to specify the type of event. Consider updating chrome://device-log
+// when adding new types (see device_log_ui.cc).
 enum LogType {
   // Shill / network configuration related events.
-  LOG_TYPE_NETWORK,
+  LOG_TYPE_NETWORK = 0,
   // Power manager related events.
-  LOG_TYPE_POWER,
+  LOG_TYPE_POWER = 1,
   // Login related events.
-  LOG_TYPE_LOGIN,
+  LOG_TYPE_LOGIN = 2,
+  // Bluetooth device related events (i.e. device/bluetooth).
+  LOG_TYPE_BLUETOOTH = 3,
   // USB device related events (i.e. device/usb).
-  LOG_TYPE_USB,
+  LOG_TYPE_USB = 4,
   // Human-interface device related events (i.e. device/hid).
-  LOG_TYPE_HID,
-  // Used internally
-  LOG_TYPE_UNKNOWN
+  LOG_TYPE_HID = 5,
+  // Used internally, must be the last type (may be changed).
+  LOG_TYPE_UNKNOWN = 6
 };
 
 // Used to specify the detail level for logging. In GetAsString, used to
diff --git a/components/device_event_log/device_event_log_impl.cc b/components/device_event_log/device_event_log_impl.cc
index eef30154..cac5547f 100644
--- a/components/device_event_log/device_event_log_impl.cc
+++ b/components/device_event_log/device_event_log_impl.cc
@@ -29,6 +29,7 @@
 const char* kLogTypeNetworkDesc = "Network";
 const char* kLogTypePowerDesc = "Power";
 const char* kLogTypeLoginDesc = "Login";
+const char* kLogTypeBluetoothDesc = "Bluetooth";
 const char* kLogTypeUsbDesc = "USB";
 const char* kLogTypeHidDesc = "HID";
 
@@ -40,14 +41,29 @@
       return kLogTypePowerDesc;
     case LOG_TYPE_LOGIN:
       return kLogTypeLoginDesc;
+    case LOG_TYPE_BLUETOOTH:
+      return kLogTypeBluetoothDesc;
     case LOG_TYPE_USB:
       return kLogTypeUsbDesc;
     case LOG_TYPE_HID:
       return kLogTypeHidDesc;
-    default:
-      NOTREACHED();
-      return "Unknown";
+    case LOG_TYPE_UNKNOWN:
+      break;
   }
+  NOTREACHED();
+  return "Unknown";
+}
+
+LogType GetLogTypeFromString(const std::string& desc) {
+  std::string desc_lc = base::ToLowerASCII(desc);
+  for (int i = 0; i < LOG_TYPE_UNKNOWN; ++i) {
+    auto type = static_cast<LogType>(i);
+    std::string log_desc_lc = base::ToLowerASCII(GetLogTypeString(type));
+    if (desc_lc == log_desc_lc)
+      return type;
+  }
+  NOTREACHED() << "Unrecogized LogType: " << desc;
+  return LOG_TYPE_UNKNOWN;
 }
 
 std::string DateAndTimeWithMicroseconds(const base::Time& time) {
@@ -185,18 +201,6 @@
   }
 }
 
-LogType LogTypeFromString(const std::string& desc) {
-  std::string desc_lc = base::ToLowerASCII(desc);
-  if (desc_lc == "network")
-    return LOG_TYPE_NETWORK;
-  if (desc_lc == "power")
-    return LOG_TYPE_POWER;
-  if (desc_lc == "login")
-    return LOG_TYPE_LOGIN;
-  NOTREACHED() << "Unrecogized LogType: " << desc;
-  return LOG_TYPE_UNKNOWN;
-}
-
 void GetLogTypes(const std::string& types,
                  std::set<LogType>* include_types,
                  std::set<LogType>* exclude_types) {
@@ -204,11 +208,11 @@
   while (tokens.GetNext()) {
     std::string tok(tokens.token());
     if (tok.substr(0, 4) == "non-") {
-      LogType type = LogTypeFromString(tok.substr(4));
+      LogType type = GetLogTypeFromString(tok.substr(4));
       if (type != LOG_TYPE_UNKNOWN)
         exclude_types->insert(type);
     } else {
-      LogType type = LogTypeFromString(tok);
+      LogType type = GetLogTypeFromString(tok);
       if (type != LOG_TYPE_UNKNOWN)
         include_types->insert(type);
     }
diff --git a/components/display_compositor/BUILD.gn b/components/display_compositor/BUILD.gn
index 57b7cdd..41cc049 100644
--- a/components/display_compositor/BUILD.gn
+++ b/components/display_compositor/BUILD.gn
@@ -17,6 +17,8 @@
     "gl_helper_readback_support.h",
     "gl_helper_scaling.cc",
     "gl_helper_scaling.h",
+    "host_shared_bitmap_manager.cc",
+    "host_shared_bitmap_manager.h",
   ]
 
   configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
@@ -73,6 +75,7 @@
   testonly = true
   sources = [
     "buffer_queue_unittest.cc",
+    "host_shared_bitmap_manager_unittest.cc",
   ]
 
   if (!use_aura && !is_mac) {
diff --git a/components/display_compositor/DEPS b/components/display_compositor/DEPS
index eca1d9b8..5f7809b 100644
--- a/components/display_compositor/DEPS
+++ b/components/display_compositor/DEPS
@@ -2,6 +2,7 @@
   "+cc/base",
   "+cc/ipc",
   "+cc/output",
+  "+cc/resources",
   "+cc/surfaces",
   "+cc/test",
   "+gpu/GLES2",
@@ -10,6 +11,7 @@
   "+gpu/ipc",
   "+gpu/ipc/common",
   "+mojo/public/cpp/bindings",
+  "+mojo/public/cpp/system",
   "+third_party/khronos/GLES2",
   "+third_party/skia",
   "+ui/display",
diff --git a/content/common/host_shared_bitmap_manager.cc b/components/display_compositor/host_shared_bitmap_manager.cc
similarity index 88%
rename from content/common/host_shared_bitmap_manager.cc
rename to components/display_compositor/host_shared_bitmap_manager.cc
index f424ac3..cd914f5 100644
--- a/content/common/host_shared_bitmap_manager.cc
+++ b/components/display_compositor/host_shared_bitmap_manager.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/common/host_shared_bitmap_manager.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 
 #include <stdint.h>
 
@@ -13,12 +13,13 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
 #include "base/trace_event/process_memory_dump.h"
 #include "build/build_config.h"
-#include "content/common/view_messages.h"
+#include "mojo/public/cpp/system/platform_handle.h"
 #include "ui/gfx/geometry/size.h"
 
-namespace content {
+namespace display_compositor {
 
 class BitmapData : public base::RefCountedThreadSafe<BitmapData> {
  public:
@@ -62,14 +63,29 @@
 
 HostSharedBitmapManagerClient::HostSharedBitmapManagerClient(
     HostSharedBitmapManager* manager)
-    : manager_(manager) {
-}
+    : manager_(manager), binding_(this) {}
 
 HostSharedBitmapManagerClient::~HostSharedBitmapManagerClient() {
   for (const auto& id : owned_bitmaps_)
     manager_->ChildDeletedSharedBitmap(id);
 }
 
+void HostSharedBitmapManagerClient::Bind(
+    cc::mojom::SharedBitmapManagerAssociatedRequest request) {
+  binding_.Bind(std::move(request));
+}
+
+void HostSharedBitmapManagerClient::DidAllocateSharedBitmap(
+    mojo::ScopedSharedBufferHandle buffer,
+    const cc::SharedBitmapId& id) {
+  base::SharedMemoryHandle memory_handle;
+  size_t size;
+  MojoResult result = mojo::UnwrapSharedMemoryHandle(
+      std::move(buffer), &memory_handle, &size, NULL);
+  DCHECK_EQ(result, MOJO_RESULT_OK);
+  this->ChildAllocatedSharedBitmap(size, memory_handle, id);
+}
+
 void HostSharedBitmapManagerClient::AllocateSharedBitmapForChild(
     base::ProcessHandle process_handle,
     size_t buffer_size,
@@ -93,7 +109,7 @@
   }
 }
 
-void HostSharedBitmapManagerClient::ChildDeletedSharedBitmap(
+void HostSharedBitmapManagerClient::DidDeleteSharedBitmap(
     const cc::SharedBitmapId& id) {
   manager_->ChildDeletedSharedBitmap(id);
   {
@@ -225,7 +241,7 @@
     *shared_memory_handle = base::SharedMemory::NULLHandle();
     return;
   }
- data->memory->Close();
+  data->memory->Close();
 }
 
 void HostSharedBitmapManager::ChildDeletedSharedBitmap(
@@ -245,4 +261,4 @@
   handle_map_.erase(id);
 }
 
-}  // namespace content
+}  // namespace display_compositor
diff --git a/content/common/host_shared_bitmap_manager.h b/components/display_compositor/host_shared_bitmap_manager.h
similarity index 73%
rename from content/common/host_shared_bitmap_manager.h
rename to components/display_compositor/host_shared_bitmap_manager.h
index d2abcd4..05706c3 100644
--- a/content/common/host_shared_bitmap_manager.h
+++ b/components/display_compositor/host_shared_bitmap_manager.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_COMMON_HOST_SHARED_BITMAP_MANAGER_H_
-#define CONTENT_COMMON_HOST_SHARED_BITMAP_MANAGER_H_
+#ifndef COMPONENTS_DISPLAY_COMPOSITOR_HOST_SHARED_BITMAP_MANAGER_H_
+#define COMPONENTS_DISPLAY_COMPOSITOR_HOST_SHARED_BITMAP_MANAGER_H_
 
 #include <stddef.h>
 
@@ -18,8 +18,10 @@
 #include "base/memory/shared_memory.h"
 #include "base/synchronization/lock.h"
 #include "base/trace_event/memory_dump_provider.h"
+#include "cc/ipc/shared_bitmap_manager.mojom.h"
 #include "cc/resources/shared_bitmap_manager.h"
-#include "content/common/content_export.h"
+#include "components/display_compositor/display_compositor_export.h"
+#include "mojo/public/cpp/bindings/associated_binding.h"
 
 namespace BASE_HASH_NAMESPACE {
 template <>
@@ -30,15 +32,23 @@
 };
 }  // namespace BASE_HASH_NAMESPACE
 
-namespace content {
+namespace display_compositor {
 class BitmapData;
 class HostSharedBitmapManager;
 
-class CONTENT_EXPORT HostSharedBitmapManagerClient {
+class DISPLAY_COMPOSITOR_EXPORT HostSharedBitmapManagerClient
+    : NON_EXPORTED_BASE(public cc::mojom::SharedBitmapManager) {
  public:
   explicit HostSharedBitmapManagerClient(HostSharedBitmapManager* manager);
 
-  ~HostSharedBitmapManagerClient();
+  ~HostSharedBitmapManagerClient() override;
+
+  void Bind(cc::mojom::SharedBitmapManagerAssociatedRequest request);
+
+  // cc::mojom::SharedBitmapManager overrides:
+  void DidAllocateSharedBitmap(mojo::ScopedSharedBufferHandle buffer,
+                               const cc::SharedBitmapId& id) override;
+  void DidDeleteSharedBitmap(const cc::SharedBitmapId& id) override;
 
   void AllocateSharedBitmapForChild(
       base::ProcessHandle process_handle,
@@ -48,10 +58,10 @@
   void ChildAllocatedSharedBitmap(size_t buffer_size,
                                   const base::SharedMemoryHandle& handle,
                                   const cc::SharedBitmapId& id);
-  void ChildDeletedSharedBitmap(const cc::SharedBitmapId& id);
 
  private:
   HostSharedBitmapManager* manager_;
+  mojo::AssociatedBinding<cc::mojom::SharedBitmapManager> binding_;
 
   // Lock must be held around access to owned_bitmaps_.
   base::Lock lock_;
@@ -60,7 +70,7 @@
   DISALLOW_COPY_AND_ASSIGN(HostSharedBitmapManagerClient);
 };
 
-class CONTENT_EXPORT HostSharedBitmapManager
+class DISPLAY_COMPOSITOR_EXPORT HostSharedBitmapManager
     : public cc::SharedBitmapManager,
       public base::trace_event::MemoryDumpProvider {
  public:
@@ -99,13 +109,13 @@
 
   mutable base::Lock lock_;
 
-  typedef base::hash_map<cc::SharedBitmapId, scoped_refptr<BitmapData> >
+  typedef base::hash_map<cc::SharedBitmapId, scoped_refptr<BitmapData>>
       BitmapMap;
   BitmapMap handle_map_;
 
   DISALLOW_COPY_AND_ASSIGN(HostSharedBitmapManager);
 };
 
-}  // namespace content
+}  // namespace display_compositor
 
-#endif  // CONTENT_COMMON_HOST_SHARED_BITMAP_MANAGER_H_
+#endif  // COMPONENTS_DISPLAY_COMPOSITOR_HOST_SHARED_BITMAP_MANAGER_H_
diff --git a/content/common/host_shared_bitmap_manager_unittest.cc b/components/display_compositor/host_shared_bitmap_manager_unittest.cc
similarity index 95%
rename from content/common/host_shared_bitmap_manager_unittest.cc
rename to components/display_compositor/host_shared_bitmap_manager_unittest.cc
index e1f5feeb..e3ea524 100644
--- a/content/common/host_shared_bitmap_manager_unittest.cc
+++ b/components/display_compositor/host_shared_bitmap_manager_unittest.cc
@@ -5,10 +5,10 @@
 #include <stddef.h>
 #include <string.h>
 
-#include "content/common/host_shared_bitmap_manager.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-namespace content {
+namespace display_compositor {
 namespace {
 
 class HostSharedBitmapManagerTest : public testing::Test {
@@ -66,7 +66,7 @@
   EXPECT_EQ(memcmp(shared_bitmap->pixels(), bitmap->memory(), size_in_bytes),
             0);
 
-  client.ChildDeletedSharedBitmap(id);
+  client.DidDeleteSharedBitmap(id);
 
   memset(bitmap->memory(), 0, size_in_bytes);
 
@@ -98,7 +98,7 @@
   EXPECT_TRUE(
       memcmp(bitmap->memory(), shared_bitmap->pixels(), size_in_bytes) == 0);
 
-  client.ChildDeletedSharedBitmap(id);
+  client.DidDeleteSharedBitmap(id);
 }
 
 TEST_F(HostSharedBitmapManagerTest, RemoveProcess) {
@@ -158,8 +158,8 @@
   ASSERT_TRUE(shared_bitmap.get() != NULL);
   EXPECT_EQ(memcmp(shared_bitmap->pixels(), bitmap->memory(), size_in_bytes),
             0);
-  client.ChildDeletedSharedBitmap(id);
+  client.DidDeleteSharedBitmap(id);
 }
 
 }  // namespace
-}  // namespace content
+}  // namespace display_compositor
diff --git a/components/dom_distiller/core/BUILD.gn b/components/dom_distiller/core/BUILD.gn
index 49f014fb..55652429d 100644
--- a/components/dom_distiller/core/BUILD.gn
+++ b/components/dom_distiller/core/BUILD.gn
@@ -59,6 +59,7 @@
 
   public_deps = [
     "//components/dom_distiller/core/proto",
+    "//net",
     "//third_party/dom_distiller_js:proto",
   ]
   deps = [
@@ -71,7 +72,6 @@
     "//components/strings",
     "//components/sync",
     "//components/variations",
-    "//net",
     "//skia",
     "//third_party/re2",
     "//ui/base",
diff --git a/components/favicon/core/large_icon_service.cc b/components/favicon/core/large_icon_service.cc
index e44e5c7d..0153ddf 100644
--- a/components/favicon/core/large_icon_service.cc
+++ b/components/favicon/core/large_icon_service.cc
@@ -32,7 +32,7 @@
 const char kGoogleServerV2RequestFormat[] =
     "https://t0.gstatic.com/faviconV2?"
     "client=chrome&drop_404_icon=true&size=%d&min_size=%d&max_size=%d&"
-    "fallback_opts=TYPE,SIZE&url=%s";
+    "fallback_opts=TYPE,SIZE,URL&url=%s";
 const int kGoogleServerV2MaxSizeInPixel = 128;
 const int kGoogleServerV2DesiredSizeInPixel = 64;
 
diff --git a/components/favicon/core/large_icon_service_unittest.cc b/components/favicon/core/large_icon_service_unittest.cc
index 849a185..e7f17ff 100644
--- a/components/favicon/core/large_icon_service_unittest.cc
+++ b/components/favicon/core/large_icon_service_unittest.cc
@@ -131,7 +131,7 @@
 TEST_F(LargeIconServiceTest, ShouldGetFromGoogleServer) {
   const GURL kExpectedServerUrl(
       "https://t0.gstatic.com/faviconV2?client=chrome&drop_404_icon=true"
-      "&size=64&min_size=42&max_size=128&fallback_opts=TYPE,SIZE"
+      "&size=64&min_size=42&max_size=128&fallback_opts=TYPE,SIZE,URL"
       "&url=http://www.example.com/");
 
   EXPECT_CALL(mock_favicon_service_, UnableToDownloadFavicon(_)).Times(0);
@@ -158,7 +158,7 @@
   const GURL kDummyUrlWithQuery("http://www.example.com?foo=1");
   const GURL kExpectedServerUrl(
       "https://t0.gstatic.com/faviconV2?client=chrome&drop_404_icon=true"
-      "&size=64&min_size=42&max_size=128&fallback_opts=TYPE,SIZE"
+      "&size=64&min_size=42&max_size=128&fallback_opts=TYPE,SIZE,URL"
       "&url=http://www.example.com/");
 
   EXPECT_CALL(*mock_image_fetcher_,
@@ -197,7 +197,7 @@
   const GURL kDummyUrlWithQuery("http://www.example.com?foo=1");
   const GURL kExpectedServerUrl(
       "https://t0.gstatic.com/faviconV2?client=chrome&drop_404_icon=true"
-      "&size=64&min_size=42&max_size=128&fallback_opts=TYPE,SIZE"
+      "&size=64&min_size=42&max_size=128&fallback_opts=TYPE,SIZE,URL"
       "&url=http://www.example.com/");
 
   EXPECT_CALL(mock_favicon_service_, SetLastResortFavicons(_, _, _, _, _))
@@ -223,7 +223,7 @@
       mock_favicon_service_,
       WasUnableToDownloadFavicon(GURL(
           "https://t0.gstatic.com/faviconV2?client=chrome&drop_404_icon=true"
-          "&size=64&min_size=42&max_size=128&fallback_opts=TYPE,SIZE"
+          "&size=64&min_size=42&max_size=128&fallback_opts=TYPE,SIZE,URL"
           "&url=http://www.example.com/")))
       .WillByDefault(Return(true));
 
diff --git a/components/filesystem/file_system_app.cc b/components/filesystem/file_system_app.cc
index dd1d24b..e12cba1 100644
--- a/components/filesystem/file_system_app.cc
+++ b/components/filesystem/file_system_app.cc
@@ -39,7 +39,9 @@
 
 }  // namespace filesystem
 
-FileSystemApp::FileSystemApp() : lock_table_(new LockTable) {}
+FileSystemApp::FileSystemApp() : lock_table_(new LockTable) {
+  registry_.AddInterface<mojom::FileSystem>(this);
+}
 
 FileSystemApp::~FileSystemApp() {}
 
@@ -47,10 +49,12 @@
   tracing_.Initialize(context()->connector(), context()->identity().name());
 }
 
-bool FileSystemApp::OnConnect(const service_manager::ServiceInfo& remote_info,
-                              service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::FileSystem>(this);
-  return true;
+void FileSystemApp::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 // |InterfaceFactory<Files>| implementation:
diff --git a/components/filesystem/file_system_app.h b/components/filesystem/file_system_app.h
index b3f399d..7035393 100644
--- a/components/filesystem/file_system_app.h
+++ b/components/filesystem/file_system_app.h
@@ -10,6 +10,7 @@
 #include "components/filesystem/file_system_impl.h"
 #include "components/filesystem/lock_table.h"
 #include "components/filesystem/public/interfaces/file_system.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/tracing/public/cpp/provider.h"
@@ -29,8 +30,9 @@
 
   // |service_manager::Service| override:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // |InterfaceFactory<Files>| implementation:
   void Create(const service_manager::Identity& remote_identity,
@@ -38,6 +40,8 @@
 
   tracing::Provider tracing_;
 
+  service_manager::BinderRegistry registry_;
+
   scoped_refptr<LockTable> lock_table_;
 
   DISALLOW_COPY_AND_ASSIGN(FileSystemApp);
diff --git a/components/font_service/font_service_app.cc b/components/font_service/font_service_app.cc
index 78f6d4a..57700b2 100644
--- a/components/font_service/font_service_app.cc
+++ b/components/font_service/font_service_app.cc
@@ -10,7 +10,6 @@
 #include "base/files/file_path.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/service_manager/public/cpp/connection.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 
 static_assert(
@@ -41,7 +40,9 @@
 
 namespace font_service {
 
-FontServiceApp::FontServiceApp() {}
+FontServiceApp::FontServiceApp() {
+  registry_.AddInterface(this);
+}
 
 FontServiceApp::~FontServiceApp() {}
 
@@ -49,10 +50,12 @@
   tracing_.Initialize(context()->connector(), context()->identity().name());
 }
 
-bool FontServiceApp::OnConnect(const service_manager::ServiceInfo& remote_info,
-                               service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface(this);
-  return true;
+void FontServiceApp::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void FontServiceApp::Create(
diff --git a/components/font_service/font_service_app.h b/components/font_service/font_service_app.h
index 39f2d33..ddad254 100644
--- a/components/font_service/font_service_app.h
+++ b/components/font_service/font_service_app.h
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "components/font_service/public/interfaces/font_service.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/tracing/public/cpp/provider.h"
@@ -29,8 +30,9 @@
  private:
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // service_manager::InterfaceFactory<mojom::FontService>:
   void Create(const service_manager::Identity& remote_identity,
@@ -45,6 +47,7 @@
 
   int FindOrAddPath(const SkString& path);
 
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::FontService> bindings_;
 
   tracing::Provider tracing_;
diff --git a/components/google/core/browser/google_url_tracker.cc b/components/google/core/browser/google_url_tracker.cc
index 4f4a9a4..e16f32776 100644
--- a/components/google/core/browser/google_url_tracker.cc
+++ b/components/google/core/browser/google_url_tracker.cc
@@ -74,14 +74,9 @@
   registry->RegisterStringPref(prefs::kLastPromptedGoogleURL, std::string());
 }
 
-void GoogleURLTracker::RequestServerCheck(bool force) {
-  // If this instance already has a fetcher, SetNeedToFetch() is unnecessary,
-  // and changing |already_fetched_| is wrong.
-  if (!fetcher_) {
-    if (force)
-      already_fetched_ = false;
+void GoogleURLTracker::RequestServerCheck() {
+  if (!fetcher_)
     SetNeedToFetch();
-  }
 }
 
 std::unique_ptr<GoogleURLTracker::Subscription>
diff --git a/components/google/core/browser/google_url_tracker.h b/components/google/core/browser/google_url_tracker.h
index 27496a6a..5d0ba62a 100644
--- a/components/google/core/browser/google_url_tracker.h
+++ b/components/google/core/browser/google_url_tracker.h
@@ -65,13 +65,11 @@
   const GURL& google_url() const { return google_url_; }
 
   // Requests that the tracker perform a server check to update the Google URL
-  // as necessary.  If |force| is false, this will happen at most once per
-  // network change, not sooner than five seconds after startup (checks
-  // requested before that time will occur then; checks requested afterwards
-  // will occur immediately, if no other checks have been made during this run).
-  // If |force| is true, and the tracker has already performed any requested
-  // check, it will check again.
-  void RequestServerCheck(bool force);
+  // as necessary.  This will happen at most once per network change, not sooner
+  // than five seconds after startup (checks requested before that time will
+  // occur then; checks requested afterwards will occur immediately, if no other
+  // checks have been made during this run).
+  void RequestServerCheck();
 
   std::unique_ptr<Subscription> RegisterCallback(
       const OnGoogleURLUpdatedCallback& cb);
diff --git a/components/image_fetcher/core/image_data_fetcher.cc b/components/image_fetcher/core/image_data_fetcher.cc
index 56078f7..dd88027b 100644
--- a/components/image_fetcher/core/image_data_fetcher.cc
+++ b/components/image_fetcher/core/image_data_fetcher.cc
@@ -89,6 +89,7 @@
 
   RequestMetadata metadata;
   if (success && source->GetResponseHeaders()) {
+    metadata.http_response_headers = source->GetResponseHeaders();
     source->GetResponseHeaders()->GetMimeType(&metadata.mime_type);
     metadata.http_response_code = source->GetResponseHeaders()->response_code();
     success &= (metadata.http_response_code == net::HTTP_OK);
diff --git a/components/image_fetcher/core/image_data_fetcher_unittest.cc b/components/image_fetcher/core/image_data_fetcher_unittest.cc
index 2ece1b0..90887dd 100644
--- a/components/image_fetcher/core/image_data_fetcher_unittest.cc
+++ b/components/image_fetcher/core/image_data_fetcher_unittest.cc
@@ -63,9 +63,17 @@
       GURL(kImageURL), base::Bind(&ImageDataFetcherTest::OnImageDataFetched,
                                   base::Unretained(this)));
 
+  std::string raw_header =
+      "HTTP/1.1 200 OK\n"
+      "Content-type: image/png\n\n";
+  std::replace(raw_header.begin(), raw_header.end(), '\n', '\0');
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(raw_header));
+
   RequestMetadata expected_metadata;
   expected_metadata.mime_type = std::string("image/png");
   expected_metadata.http_response_code = net::HTTP_OK;
+  expected_metadata.http_response_headers = headers.get();
   EXPECT_CALL(*this, OnImageDataFetched(std::string(kURLResponseData),
                                         expected_metadata));
 
@@ -80,14 +88,6 @@
       net::URLRequestStatus(net::URLRequestStatus::SUCCESS, net::OK));
   test_url_fetcher->SetResponseString(kURLResponseData);
   test_url_fetcher->set_response_code(net::HTTP_OK);
-
-  std::string raw_header =
-      "HTTP/1.1 200 OK\n"
-      "Content-type: image/png\n\n";
-  std::replace(raw_header.begin(), raw_header.end(), '\n', '\0');
-  scoped_refptr<net::HttpResponseHeaders> headers(
-      new net::HttpResponseHeaders(raw_header));
-
   test_url_fetcher->set_response_headers(headers);
 
   // Call the URLFetcher delegate to continue the test.
@@ -99,10 +99,18 @@
       GURL(kImageURL), base::Bind(&ImageDataFetcherTest::OnImageDataFetched,
                                   base::Unretained(this)));
 
+  std::string raw_header =
+      "HTTP/1.1 200 OK\n"
+      "Content-type: image/png\n\n";
+  std::replace(raw_header.begin(), raw_header.end(), '\n', '\0');
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(raw_header));
+
   RequestMetadata expected_metadata;
   expected_metadata.mime_type = std::string("image/png");
   expected_metadata.http_response_code = net::HTTP_OK;
   expected_metadata.from_http_cache = true;
+  expected_metadata.http_response_headers = headers.get();
   EXPECT_CALL(*this, OnImageDataFetched(std::string(kURLResponseData),
                                         expected_metadata));
 
@@ -114,14 +122,6 @@
   test_url_fetcher->SetResponseString(kURLResponseData);
   test_url_fetcher->set_response_code(net::HTTP_OK);
   test_url_fetcher->set_was_cached(true);
-
-  std::string raw_header =
-      "HTTP/1.1 200 OK\n"
-      "Content-type: image/png\n\n";
-  std::replace(raw_header.begin(), raw_header.end(), '\n', '\0');
-  scoped_refptr<net::HttpResponseHeaders> headers(
-      new net::HttpResponseHeaders(raw_header));
-
   test_url_fetcher->set_response_headers(headers);
 
   // Call the URLFetcher delegate to continue the test.
@@ -133,9 +133,17 @@
       GURL(kImageURL), base::Bind(&ImageDataFetcherTest::OnImageDataFetched,
                                   base::Unretained(this)));
 
+  std::string raw_header =
+      "HTTP/1.1 404 Not Found\n"
+      "Content-type: image/png\n\n";
+  std::replace(raw_header.begin(), raw_header.end(), '\n', '\0');
+  scoped_refptr<net::HttpResponseHeaders> headers(
+      new net::HttpResponseHeaders(raw_header));
+
   RequestMetadata expected_metadata;
   expected_metadata.mime_type = std::string("image/png");
   expected_metadata.http_response_code = net::HTTP_NOT_FOUND;
+  expected_metadata.http_response_headers = headers.get();
   // For 404, expect an empty result even though correct image data is sent.
   EXPECT_CALL(*this, OnImageDataFetched(std::string(), expected_metadata));
 
@@ -145,14 +153,6 @@
   test_url_fetcher->set_status(
       net::URLRequestStatus(net::URLRequestStatus::SUCCESS, net::OK));
   test_url_fetcher->SetResponseString(kURLResponseData);
-
-  std::string raw_header =
-      "HTTP/1.1 404 Not Found\n"
-      "Content-type: image/png\n\n";
-  std::replace(raw_header.begin(), raw_header.end(), '\n', '\0');
-  scoped_refptr<net::HttpResponseHeaders> headers(
-      new net::HttpResponseHeaders(raw_header));
-
   test_url_fetcher->set_response_headers(headers);
 
   // Call the URLFetcher delegate to continue the test.
diff --git a/components/image_fetcher/core/request_metadata.cc b/components/image_fetcher/core/request_metadata.cc
index b9b31d5..2fa6e54 100644
--- a/components/image_fetcher/core/request_metadata.cc
+++ b/components/image_fetcher/core/request_metadata.cc
@@ -4,15 +4,35 @@
 
 #include "components/image_fetcher/core/request_metadata.h"
 
+#include "net/http/http_response_headers.h"
+
 namespace image_fetcher {
 
+namespace {
+
+bool HttpHeadersEqual(const net::HttpResponseHeaders* lhs,
+                      const net::HttpResponseHeaders* rhs) {
+  if (!lhs && !rhs) {
+    return true;  // Equal if both nullptr.
+  }
+  if (!lhs || !rhs) {
+    return false;  // We cannot compare the content if one of them is nullptr.
+  }
+  return lhs->raw_headers() == rhs->raw_headers();
+}
+
+}  // namespace
+
 RequestMetadata::RequestMetadata()
-    : http_response_code(RESPONSE_CODE_INVALID), from_http_cache(false) {}
+    : http_response_code(RESPONSE_CODE_INVALID),
+      from_http_cache(false),
+      http_response_headers(nullptr) {}
 
 bool operator==(const RequestMetadata& lhs, const RequestMetadata& rhs) {
   return lhs.mime_type == rhs.mime_type &&
          lhs.http_response_code == rhs.http_response_code &&
-         lhs.from_http_cache == rhs.from_http_cache;
+         lhs.from_http_cache == rhs.from_http_cache &&
+         HttpHeadersEqual(lhs.http_response_headers, rhs.http_response_headers);
 }
 
 bool operator!=(const RequestMetadata& lhs, const RequestMetadata& rhs) {
diff --git a/components/image_fetcher/core/request_metadata.h b/components/image_fetcher/core/request_metadata.h
index fbff28c1..f625c82 100644
--- a/components/image_fetcher/core/request_metadata.h
+++ b/components/image_fetcher/core/request_metadata.h
@@ -24,6 +24,12 @@
   std::string mime_type;
   int http_response_code;
   bool from_http_cache;
+
+  // Is guaranteed to be a valid pointer only when the callback is called. The
+  // headers may get deleted right after the callback finishes.
+  // TODO(jkrcal): Remove |mime_type| and |http_response_code| as it all can be
+  // read from HttpResponseHeaders.
+  net::HttpResponseHeaders* http_response_headers;
 };
 
 bool operator==(const RequestMetadata& lhs, const RequestMetadata& rhs);
diff --git a/components/image_fetcher/core/request_metadata_unittest.cc b/components/image_fetcher/core/request_metadata_unittest.cc
index 5337340b..dcbe60c 100644
--- a/components/image_fetcher/core/request_metadata_unittest.cc
+++ b/components/image_fetcher/core/request_metadata_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "components/image_fetcher/core/request_metadata.h"
 
+#include "base/memory/ref_counted.h"
+#include "net/http/http_response_headers.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace image_fetcher {
diff --git a/components/invalidation/impl/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java b/components/invalidation/impl/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java
index deee2e3..1ec8c83 100644
--- a/components/invalidation/impl/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java
+++ b/components/invalidation/impl/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java
@@ -93,6 +93,26 @@
      */
     @Nullable
     public static Bundle decodeToBundle(String encoded) {
+        Invalidation invalidation = decodeToInvalidation(encoded);
+        if (invalidation == null) return null;
+        return createBundle(invalidation.objectId, invalidation.objectSource,
+                invalidation.version != null ? invalidation.version : 0L, invalidation.payload);
+    }
+
+    /**
+     * Decode the invalidation encoded as a String into a PendingInvalidation.
+     * Return value is {@code null} if the string could not be parsed or is an invalidation for all.
+     */
+    @Nullable
+    public static PendingInvalidation decodeToPendingInvalidation(String encoded) {
+        Invalidation invalidation = decodeToInvalidation(encoded);
+        if (invalidation == null) return null;
+        return new PendingInvalidation(invalidation.objectId, invalidation.objectSource,
+                invalidation.version, invalidation.payload);
+    }
+
+    @Nullable
+    private static Invalidation decodeToInvalidation(String encoded) {
         assert encoded != null;
         byte[] decoded = Base64.decode(encoded, Base64.DEFAULT);
         Invalidation invalidation;
@@ -104,8 +124,7 @@
         }
         assert invalidation != null;
         if (invalidation.objectSource == null || invalidation.objectSource == 0) return null;
-        return createBundle(invalidation.objectId, invalidation.objectSource,
-                invalidation.version != null ? invalidation.version : 0L, invalidation.payload);
+        return invalidation;
     }
 
     public String toDebugString() {
diff --git a/components/invalidation/impl/android/junit/src/org/chromium/components/invalidation/PendingInvalidationTest.java b/components/invalidation/impl/android/junit/src/org/chromium/components/invalidation/PendingInvalidationTest.java
index b28f74f..897ebdd 100644
--- a/components/invalidation/impl/android/junit/src/org/chromium/components/invalidation/PendingInvalidationTest.java
+++ b/components/invalidation/impl/android/junit/src/org/chromium/components/invalidation/PendingInvalidationTest.java
@@ -8,11 +8,13 @@
 
 import android.os.Bundle;
 
-import org.chromium.testing.local.LocalRobolectricTestRunner;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+
 import org.robolectric.annotation.Config;
 
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
 /**
  * Tests for {@link PendingInvalidation}.
  */
@@ -42,6 +44,19 @@
     public void testParseToAndFromProtocolBuffer() {
         PendingInvalidation invalidation =
                 new PendingInvalidation(sObjecId, sObjectSource, sVersion, sPayload);
+        PendingInvalidation parsedInvalidation =
+                PendingInvalidation.decodeToPendingInvalidation(invalidation.encodeToString());
+        assertEquals(sObjecId, parsedInvalidation.mObjectId);
+        assertEquals(sObjectSource, parsedInvalidation.mObjectSource);
+        assertEquals(sVersion, parsedInvalidation.mVersion);
+        assertEquals(sPayload, parsedInvalidation.mPayload);
+        assertEquals(invalidation, parsedInvalidation);
+    }
+
+    @Test
+    public void testParseToAndFromProtocolBufferThroughBundle() {
+        PendingInvalidation invalidation =
+                new PendingInvalidation(sObjecId, sObjectSource, sVersion, sPayload);
         Bundle bundle = PendingInvalidation.decodeToBundle(invalidation.encodeToString());
         PendingInvalidation parsedInvalidation = new PendingInvalidation(bundle);
         assertEquals(sObjecId, parsedInvalidation.mObjectId);
diff --git a/components/leveldb/leveldb_app.cc b/components/leveldb/leveldb_app.cc
index cb15293d..93086f77 100644
--- a/components/leveldb/leveldb_app.cc
+++ b/components/leveldb/leveldb_app.cc
@@ -5,12 +5,13 @@
 #include "components/leveldb/leveldb_app.h"
 
 #include "components/leveldb/leveldb_service_impl.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 
 namespace leveldb {
 
-LevelDBApp::LevelDBApp() : file_thread_("LevelDBFile") {}
+LevelDBApp::LevelDBApp() : file_thread_("LevelDBFile") {
+  registry_.AddInterface<mojom::LevelDBService>(this);
+}
 
 LevelDBApp::~LevelDBApp() {}
 
@@ -18,10 +19,12 @@
   tracing_.Initialize(context()->connector(), context()->identity().name());
 }
 
-bool LevelDBApp::OnConnect(const service_manager::ServiceInfo& remote_info,
-                           service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::LevelDBService>(this);
-  return true;
+void LevelDBApp::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void LevelDBApp::Create(const service_manager::Identity& remote_identity,
diff --git a/components/leveldb/leveldb_app.h b/components/leveldb/leveldb_app.h
index b69efe8..1898f525 100644
--- a/components/leveldb/leveldb_app.h
+++ b/components/leveldb/leveldb_app.h
@@ -10,6 +10,7 @@
 #include "base/threading/thread.h"
 #include "components/leveldb/public/interfaces/leveldb.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/tracing/public/cpp/provider.h"
@@ -26,8 +27,9 @@
  private:
   // |Service| override:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // |InterfaceFactory<mojom::LevelDBService>| implementation:
   void Create(const service_manager::Identity& remote_identity,
@@ -35,6 +37,7 @@
 
   tracing::Provider tracing_;
   std::unique_ptr<mojom::LevelDBService> service_;
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::LevelDBService> bindings_;
 
   base::Thread file_thread_;
diff --git a/components/nacl/common/nacl_service.cc b/components/nacl/common/nacl_service.cc
index fb19f6a8..eecc139 100644
--- a/components/nacl/common/nacl_service.cc
+++ b/components/nacl/common/nacl_service.cc
@@ -14,7 +14,7 @@
 #include "mojo/edk/embedder/embedder.h"
 #include "mojo/edk/embedder/scoped_ipc_support.h"
 #include "mojo/edk/embedder/scoped_platform_handle.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/service_manager/public/cpp/service_info.h"
@@ -65,35 +65,38 @@
   ~NaClService() override;
 
   // Service overrides.
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
  private:
   IPC::mojom::ChannelBootstrapPtrInfo ipc_channel_bootstrap_;
   std::unique_ptr<mojo::edk::ScopedIPCSupport> ipc_support_;
   bool connected_ = false;
+  service_manager::BinderRegistry registry_;
 };
 
 NaClService::NaClService(
     IPC::mojom::ChannelBootstrapPtrInfo bootstrap,
     std::unique_ptr<mojo::edk::ScopedIPCSupport> ipc_support)
     : ipc_channel_bootstrap_(std::move(bootstrap)),
-      ipc_support_(std::move(ipc_support)) {}
+      ipc_support_(std::move(ipc_support)) {
+  registry_.AddInterface(base::Bind(&ConnectBootstrapChannel,
+                                    base::Passed(&ipc_channel_bootstrap_)));
+}
 
 NaClService::~NaClService() = default;
 
-bool NaClService::OnConnect(const service_manager::ServiceInfo& remote_info,
-                            service_manager::InterfaceRegistry* registry) {
-  if (remote_info.identity.name() != content::mojom::kBrowserServiceName)
-    return false;
-
-  if (connected_)
-    return false;
-
-  connected_ = true;
-  registry->AddInterface(base::Bind(&ConnectBootstrapChannel,
-                                    base::Passed(&ipc_channel_bootstrap_)));
-  return true;
+void NaClService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  if (source_info.identity.name() == content::mojom::kBrowserServiceName &&
+      !connected_) {
+    connected_ = true;
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
+  }
 }
 
 }  // namespace
diff --git a/components/network_session_configurator/network_session_configurator.cc b/components/network_session_configurator/network_session_configurator.cc
index b26ee5918..c53ba078 100644
--- a/components/network_session_configurator/network_session_configurator.cc
+++ b/components/network_session_configurator/network_session_configurator.cc
@@ -107,6 +107,14 @@
              "true");
 }
 
+bool ShouldMarkQuicBrokenWhenNetworkBlackholes(
+    const VariationParameters& quic_trial_params) {
+  return base::LowerCaseEqualsASCII(
+      GetVariationParam(quic_trial_params,
+                        "mark_quic_broken_when_network_blackholes"),
+      "true");
+}
+
 bool ShouldQuicDisableConnectionPooling(
     const VariationParameters& quic_trial_params) {
   return base::LowerCaseEqualsASCII(
@@ -325,6 +333,8 @@
   params->enable_quic = ShouldEnableQuic(
       quic_trial_group, quic_trial_params, is_quic_force_disabled,
       is_quic_force_enabled);
+  params->mark_quic_broken_when_network_blackholes =
+      ShouldMarkQuicBrokenWhenNetworkBlackholes(quic_trial_params);
 
   params->enable_quic_alternative_service_with_different_host =
       ShouldQuicEnableAlternativeServicesForDifferentHost(quic_trial_params);
diff --git a/components/network_session_configurator/network_session_configurator_unittest.cc b/components/network_session_configurator/network_session_configurator_unittest.cc
index 0c4e95d..f4dcd107 100644
--- a/components/network_session_configurator/network_session_configurator_unittest.cc
+++ b/components/network_session_configurator/network_session_configurator_unittest.cc
@@ -67,6 +67,7 @@
   ParseFieldTrials();
 
   EXPECT_TRUE(params_.enable_quic);
+  EXPECT_FALSE(params_.mark_quic_broken_when_network_blackholes);
   EXPECT_EQ(1350u, params_.quic_max_packet_length);
   EXPECT_EQ(net::QuicTagVector(), params_.quic_connection_options);
   EXPECT_FALSE(params_.quic_always_require_handshake_confirmation);
@@ -121,6 +122,18 @@
 }
 
 TEST_F(NetworkSessionConfiguratorTest,
+       MarkQuicBrokenWhenNetworkBlackholesFromFieldTrialParams) {
+  std::map<std::string, std::string> field_trial_params;
+  field_trial_params["mark_quic_broken_when_network_blackholes"] = "true";
+  variations::AssociateVariationParams("QUIC", "Enabled", field_trial_params);
+  base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled");
+
+  ParseFieldTrials();
+
+  EXPECT_TRUE(params_.mark_quic_broken_when_network_blackholes);
+}
+
+TEST_F(NetworkSessionConfiguratorTest,
        QuicCloseSessionsOnIpChangeFromFieldTrialParams) {
   std::map<std::string, std::string> field_trial_params;
   field_trial_params["close_sessions_on_ip_change"] = "true";
diff --git a/components/ntp_snippets/pref_names.cc b/components/ntp_snippets/pref_names.cc
index 271c8900..fb5582a 100644
--- a/components/ntp_snippets/pref_names.cc
+++ b/components/ntp_snippets/pref_names.cc
@@ -13,11 +13,11 @@
 
 const char kSnippetLastFetchAttempt[] = "ntp_snippets.last_fetch_attempt";
 
-const char kSnippetSoftFetchingIntervalOnUsageEvent[] =
-    "ntp_snippets.soft_fetching_interval_on_usage_event";
+const char kSnippetSoftFetchingIntervalWifi[] =
+    "ntp_snippets.soft_fetching_interval_wifi";
 
-const char kSnippetSoftFetchingIntervalOnNtpOpened[] =
-    "ntp_snippets.soft_fetching_interval_on_ntp_opened";
+const char kSnippetSoftFetchingIntervalFallback[] =
+    "ntp_snippets.soft_fetching_interval_fallback";
 
 const char kSnippetPersistentFetchingIntervalWifi[] =
     "ntp_snippets.fetching_interval_wifi";
diff --git a/components/ntp_snippets/pref_names.h b/components/ntp_snippets/pref_names.h
index ee60486..9826eb9e 100644
--- a/components/ntp_snippets/pref_names.h
+++ b/components/ntp_snippets/pref_names.h
@@ -20,11 +20,12 @@
 extern const char kSnippetLastFetchAttempt[];
 // The pref name for the currently applied minimal interval between two
 // successive soft background fetches that react to user activity (such as
-// opening Chrome).
-extern const char kSnippetSoftFetchingIntervalOnUsageEvent[];
+// opening Chrome) when there is a WiFi connectivity.
+extern const char kSnippetSoftFetchingIntervalWifi[];
 // The pref name for the currently applied minimal interval between two
-// successive soft brackground fetches when the New Tab Page is opened.
-extern const char kSnippetSoftFetchingIntervalOnNtpOpened[];
+// successive soft background fetches that react to user activity (such as
+// opening Chrome) when there is no WiFi connectivity.
+extern const char kSnippetSoftFetchingIntervalFallback[];
 
 // The pref name for the currently-scheduled background fetching interval when
 // there is WiFi connectivity.
diff --git a/components/ntp_snippets/remote/persistent_scheduler.h b/components/ntp_snippets/remote/persistent_scheduler.h
index 70a27e7..080ceb0 100644
--- a/components/ntp_snippets/remote/persistent_scheduler.h
+++ b/components/ntp_snippets/remote/persistent_scheduler.h
@@ -35,6 +35,10 @@
   // the scheduling was successful.
   virtual bool Unschedule() = 0;
 
+  // TODO(jkrcal): Get this information exposed in the platform-independent
+  // net::NetworkChangeNotifier and remove this function.
+  virtual bool IsOnUnmeteredConnection() = 0;
+
  protected:
   PersistentScheduler() = default;
 
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
index 253d415..699c3b5a 100644
--- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
@@ -22,6 +22,7 @@
 #include "components/ntp_snippets/user_classifier.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
+#include "net/base/network_change_notifier.h"
 
 namespace ntp_snippets {
 
@@ -30,16 +31,23 @@
 // The FetchingInterval enum specifies overlapping time intervals that are used
 // for scheduling the next remote suggestion fetch. Therefore a timer is created
 // for each interval. Initially all the timers are started at the same time.
-// Fetches are
-// only performed when certain conditions associated with the intervals are
-// met. If a fetch failed, then only the corresponding timer is reset. The
-// other timers are not touched.
-// TODO(markusheintz): Describe the individual intervals.
+// Fetches are only performed when conditions associated with the intervals are
+// met:
+//   - A "soft" fetch is performed only at a moment when the user actively uses
+//  Chrome after the interval has elapsed and causes a trigger that is currently
+//  enabled while
+//   - a "persistent" fetch is initiated automatically by the OS after the
+//  interval elapses.
+//   - A "wifi" fetch is performed only when the user is on a connection that
+//   the OS classifies as unmetered while
+//   - a "fallback" fetch happens on any connection.
+// If a fetch failed, then only the corresponding timer is reset. The other
+// timers are not touched.
 enum class FetchingInterval {
   PERSISTENT_FALLBACK,
   PERSISTENT_WIFI,
-  SOFT_ON_USAGE_EVENT,
-  SOFT_ON_NTP_OPENED,
+  SOFT_FALLBACK,
+  SOFT_WIFI,
   COUNT
 };
 
@@ -51,7 +59,7 @@
 // the arrays can be overridden using different variation parameters.
 const double kDefaultFetchingIntervalHoursRareNtpUser[] = {48.0, 24.0, 12.0,
                                                            6.0};
-const double kDefaultFetchingIntervalHoursActiveNtpUser[] = {24.0, 6.0, 2.0,
+const double kDefaultFetchingIntervalHoursActiveNtpUser[] = {24.0, 6.0, 4.0,
                                                              2.0};
 const double kDefaultFetchingIntervalHoursActiveSuggestionsConsumer[] = {
     24.0, 6.0, 2.0, 1.0};
@@ -61,18 +69,18 @@
 const char* kFetchingIntervalParamNameRareNtpUser[] = {
     "fetching_interval_hours-fallback-rare_ntp_user",
     "fetching_interval_hours-wifi-rare_ntp_user",
-    "soft_fetching_interval_hours-active-rare_ntp_user",
-    "soft_on_ntp_opened_interval_hours-rare_ntp_user"};
+    "soft_fetching_interval_hours-fallback-rare_ntp_user",
+    "soft_fetching_interval_hours-wifi-rare_ntp_user"};
 const char* kFetchingIntervalParamNameActiveNtpUser[] = {
     "fetching_interval_hours-fallback-active_ntp_user",
     "fetching_interval_hours-wifi-active_ntp_user",
-    "soft_fetching_interval_hours-active-active_ntp_user",
-    "soft_on_ntp_opened_interval_hours-active_ntp_user"};
+    "soft_fetching_interval_hours-fallback-active_ntp_user",
+    "soft_fetching_interval_hours-wifi-active_ntp_user"};
 const char* kFetchingIntervalParamNameActiveSuggestionsConsumer[] = {
     "fetching_interval_hours-fallback-active_suggestions_consumer",
     "fetching_interval_hours-wifi-active_suggestions_consumer",
-    "soft_fetching_interval_hours-active-active_suggestions_consumer",
-    "soft_on_ntp_opened_interval_hours-active_suggestions_consumer"};
+    "soft_fetching_interval_hours-fallback-active_suggestions_consumer",
+    "soft_fetching_interval_hours-wifi-active_suggestions_consumer"};
 
 static_assert(
     static_cast<unsigned int>(FetchingInterval::COUNT) ==
@@ -98,6 +106,11 @@
 
 const int kBlockBackgroundFetchesMinutesAfterClearingHistory = 30;
 
+const char kSnippetSoftFetchingIntervalOnUsageEventDeprecated[] =
+    "ntp_snippets.soft_fetching_interval_on_usage_event";
+const char kSnippetSoftFetchingIntervalOnNtpOpenedDeprecated[] =
+    "ntp_snippets.soft_fetching_interval_on_ntp_opened";
+
 // Returns the time interval to use for scheduling remote suggestion fetches for
 // the given interval and user_class.
 base::TimeDelta GetDesiredFetchingInterval(
@@ -183,8 +196,8 @@
     const FetchingSchedule& other) const {
   return interval_persistent_wifi == other.interval_persistent_wifi &&
          interval_persistent_fallback == other.interval_persistent_fallback &&
-         interval_soft_on_usage_event == other.interval_soft_on_usage_event &&
-         interval_soft_on_ntp_opened == other.interval_soft_on_ntp_opened;
+         interval_soft_wifi == other.interval_soft_wifi &&
+         interval_soft_fallback == other.interval_soft_fallback;
 }
 
 bool RemoteSuggestionsSchedulerImpl::FetchingSchedule::operator!=(
@@ -195,8 +208,7 @@
 bool RemoteSuggestionsSchedulerImpl::FetchingSchedule::is_empty() const {
   return interval_persistent_wifi.is_zero() &&
          interval_persistent_fallback.is_zero() &&
-         interval_soft_on_usage_event.is_zero() &&
-         interval_soft_on_ntp_opened.is_zero();
+         interval_soft_wifi.is_zero() && interval_soft_fallback.is_zero();
 }
 
 // The TriggerType enum specifies values for the events that can trigger
@@ -241,6 +253,10 @@
   DCHECK(user_classifier);
   DCHECK(profile_prefs);
 
+  // Cleanup procedure in M59. Remove for M62.
+  profile_prefs_->ClearPref(kSnippetSoftFetchingIntervalOnUsageEventDeprecated);
+  profile_prefs_->ClearPref(kSnippetSoftFetchingIntervalOnNtpOpenedDeprecated);
+
   LoadLastFetchingSchedule();
 }
 
@@ -252,10 +268,14 @@
   registry->RegisterInt64Pref(prefs::kSnippetPersistentFetchingIntervalWifi, 0);
   registry->RegisterInt64Pref(prefs::kSnippetPersistentFetchingIntervalFallback,
                               0);
-  registry->RegisterInt64Pref(prefs::kSnippetSoftFetchingIntervalOnUsageEvent,
-                              0);
+  registry->RegisterInt64Pref(prefs::kSnippetSoftFetchingIntervalWifi, 0);
+  registry->RegisterInt64Pref(prefs::kSnippetSoftFetchingIntervalFallback, 0);
   registry->RegisterInt64Pref(prefs::kSnippetLastFetchAttempt, 0);
-  registry->RegisterInt64Pref(prefs::kSnippetSoftFetchingIntervalOnNtpOpened,
+
+  // Cleanup procedure in M59. Remove for M62.
+  registry->RegisterInt64Pref(
+      kSnippetSoftFetchingIntervalOnUsageEventDeprecated, 0);
+  registry->RegisterInt64Pref(kSnippetSoftFetchingIntervalOnNtpOpenedDeprecated,
                               0);
 }
 
@@ -308,35 +328,26 @@
 }
 
 void RemoteSuggestionsSchedulerImpl::OnPersistentSchedulerWakeUp() {
-  RefetchInTheBackgroundIfEnabled(TriggerType::PERSISTENT_SCHEDULER_WAKE_UP);
+  RefetchInTheBackgroundIfAppropriate(
+      TriggerType::PERSISTENT_SCHEDULER_WAKE_UP);
 }
 
 void RemoteSuggestionsSchedulerImpl::OnBrowserForegrounded() {
   // TODO(jkrcal): Consider that this is called whenever we open or return to an
   // Activity. Therefore, keep work light for fast start up calls.
-  if (!ShouldRefetchInTheBackgroundNow(TriggerType::BROWSER_FOREGROUNDED)) {
-    return;
-  }
-
-  RefetchInTheBackgroundIfEnabled(TriggerType::BROWSER_FOREGROUNDED);
+  RefetchInTheBackgroundIfAppropriate(TriggerType::BROWSER_FOREGROUNDED);
 }
 
 void RemoteSuggestionsSchedulerImpl::OnBrowserColdStart() {
-  // TODO(fhorschig|jkrcal): Consider that work here must be kept light for fast
+  // TODO(jkrcal): Consider that work here must be kept light for fast
   // cold start ups.
-  if (!ShouldRefetchInTheBackgroundNow(TriggerType::BROWSER_COLD_START)) {
-    return;
-  }
-
-  RefetchInTheBackgroundIfEnabled(TriggerType::BROWSER_COLD_START);
+  RefetchInTheBackgroundIfAppropriate(TriggerType::BROWSER_COLD_START);
 }
 
 void RemoteSuggestionsSchedulerImpl::OnNTPOpened() {
-  if (!ShouldRefetchInTheBackgroundNow(TriggerType::NTP_OPENED)) {
-    return;
-  }
-
-  RefetchInTheBackgroundIfEnabled(TriggerType::NTP_OPENED);
+  // TODO(jkrcal): Consider that this is called whenever we open an NTP.
+  // Therefore, keep work light for fast start up calls.
+  RefetchInTheBackgroundIfAppropriate(TriggerType::NTP_OPENED);
 }
 
 void RemoteSuggestionsSchedulerImpl::StartScheduling() {
@@ -384,10 +395,10 @@
       GetDesiredFetchingInterval(FetchingInterval::PERSISTENT_WIFI, user_class);
   schedule.interval_persistent_fallback = GetDesiredFetchingInterval(
       FetchingInterval::PERSISTENT_FALLBACK, user_class);
-  schedule.interval_soft_on_usage_event = GetDesiredFetchingInterval(
-      FetchingInterval::SOFT_ON_USAGE_EVENT, user_class);
-  schedule.interval_soft_on_ntp_opened = GetDesiredFetchingInterval(
-      FetchingInterval::SOFT_ON_NTP_OPENED, user_class);
+  schedule.interval_soft_wifi =
+      GetDesiredFetchingInterval(FetchingInterval::SOFT_WIFI, user_class);
+  schedule.interval_soft_fallback =
+      GetDesiredFetchingInterval(FetchingInterval::SOFT_FALLBACK, user_class);
 
   return schedule;
 }
@@ -398,11 +409,10 @@
   schedule_.interval_persistent_fallback =
       base::TimeDelta::FromInternalValue(profile_prefs_->GetInt64(
           prefs::kSnippetPersistentFetchingIntervalFallback));
-  schedule_.interval_soft_on_usage_event =
-      base::TimeDelta::FromInternalValue(profile_prefs_->GetInt64(
-          prefs::kSnippetSoftFetchingIntervalOnUsageEvent));
-  schedule_.interval_soft_on_ntp_opened = base::TimeDelta::FromInternalValue(
-      profile_prefs_->GetInt64(prefs::kSnippetSoftFetchingIntervalOnNtpOpened));
+  schedule_.interval_soft_wifi = base::TimeDelta::FromInternalValue(
+      profile_prefs_->GetInt64(prefs::kSnippetSoftFetchingIntervalWifi));
+  schedule_.interval_soft_fallback = base::TimeDelta::FromInternalValue(
+      profile_prefs_->GetInt64(prefs::kSnippetSoftFetchingIntervalFallback));
 }
 
 void RemoteSuggestionsSchedulerImpl::StoreFetchingSchedule() {
@@ -412,29 +422,24 @@
   profile_prefs_->SetInt64(
       prefs::kSnippetPersistentFetchingIntervalFallback,
       schedule_.interval_persistent_fallback.ToInternalValue());
-  profile_prefs_->SetInt64(
-      prefs::kSnippetSoftFetchingIntervalOnUsageEvent,
-      schedule_.interval_soft_on_usage_event.ToInternalValue());
-  profile_prefs_->SetInt64(
-      prefs::kSnippetSoftFetchingIntervalOnNtpOpened,
-      schedule_.interval_soft_on_ntp_opened.ToInternalValue());
+  profile_prefs_->SetInt64(prefs::kSnippetSoftFetchingIntervalWifi,
+                           schedule_.interval_soft_wifi.ToInternalValue());
+  profile_prefs_->SetInt64(prefs::kSnippetSoftFetchingIntervalFallback,
+                           schedule_.interval_soft_fallback.ToInternalValue());
 }
 
-void RemoteSuggestionsSchedulerImpl::RefetchInTheBackgroundIfEnabled(
+void RemoteSuggestionsSchedulerImpl::RefetchInTheBackgroundIfAppropriate(
     TriggerType trigger) {
+  if (background_fetch_in_progress_) {
+    return;
+  }
+
   if (BackgroundFetchesDisabled(trigger)) {
     return;
   }
 
-  UMA_HISTOGRAM_ENUMERATION(
-      "NewTabPage.ContentSuggestions.BackgroundFetchTrigger",
-      static_cast<int>(trigger), static_cast<int>(TriggerType::COUNT));
-
-  RefetchInTheBackground();
-}
-
-void RemoteSuggestionsSchedulerImpl::RefetchInTheBackground() {
-  if (background_fetch_in_progress_) {
+  if (trigger != TriggerType::PERSISTENT_SCHEDULER_WAKE_UP &&
+      !ShouldRefetchInTheBackgroundNow()) {
     return;
   }
 
@@ -442,34 +447,30 @@
     return;
   }
 
+  UMA_HISTOGRAM_ENUMERATION(
+      "NewTabPage.ContentSuggestions.BackgroundFetchTrigger",
+      static_cast<int>(trigger), static_cast<int>(TriggerType::COUNT));
+
   background_fetch_in_progress_ = true;
   provider_->RefetchInTheBackground(base::Bind(
       &RemoteSuggestionsSchedulerImpl::RefetchInTheBackgroundFinished,
       base::Unretained(this)));
 }
 
-bool RemoteSuggestionsSchedulerImpl::ShouldRefetchInTheBackgroundNow(
-    TriggerType trigger) {
+bool RemoteSuggestionsSchedulerImpl::ShouldRefetchInTheBackgroundNow() {
   const base::Time last_fetch_attempt_time = base::Time::FromInternalValue(
       profile_prefs_->GetInt64(prefs::kSnippetLastFetchAttempt));
-  base::Time first_allowed_fetch_time;
-  switch (trigger) {
-    case TriggerType::NTP_OPENED:
-      first_allowed_fetch_time =
-          last_fetch_attempt_time + schedule_.interval_soft_on_ntp_opened;
-      break;
-    case TriggerType::BROWSER_FOREGROUNDED:
-    case TriggerType::BROWSER_COLD_START:
-      first_allowed_fetch_time =
-          last_fetch_attempt_time + schedule_.interval_soft_on_usage_event;
-      break;
-    case TriggerType::PERSISTENT_SCHEDULER_WAKE_UP:
-    case TriggerType::COUNT:
-      NOTREACHED();
-      break;
-  }
-  base::Time now = clock_->Now();
 
+  // If we have no persistent scheduler to ask, err on the side of caution.
+  bool wifi = false;
+  if (persistent_scheduler_) {
+    wifi = persistent_scheduler_->IsOnUnmeteredConnection();
+  }
+
+  base::Time first_allowed_fetch_time =
+      last_fetch_attempt_time +
+      (wifi ? schedule_.interval_soft_wifi : schedule_.interval_soft_fallback);
+  base::Time now = clock_->Now();
   return background_fetches_allowed_after_ <= now &&
          first_allowed_fetch_time <= now;
 }
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
index a8baaf0..7fe94d6 100644
--- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
@@ -61,7 +61,8 @@
   void OnNTPOpened() override;
 
  private:
-  // Abstract description of the fetching schedule.
+  // Abstract description of the fetching schedule. See the enum
+  // FetchingInterval for more documentation.
   struct FetchingSchedule {
     static FetchingSchedule Empty();
     bool operator==(const FetchingSchedule& other) const;
@@ -70,8 +71,8 @@
 
     base::TimeDelta interval_persistent_wifi;
     base::TimeDelta interval_persistent_fallback;
-    base::TimeDelta interval_soft_on_usage_event;
-    base::TimeDelta interval_soft_on_ntp_opened;
+    base::TimeDelta interval_soft_wifi;
+    base::TimeDelta interval_soft_fallback;
   };
 
   enum class TriggerType;
@@ -86,15 +87,13 @@
   // schedule.
   void StopScheduling();
 
-  // Trigger a background refetch for the given |trigger| if enabled.
-  void RefetchInTheBackgroundIfEnabled(TriggerType trigger);
-
-  // Trigger the background refetch.
-  void RefetchInTheBackground();
+  // Trigger a background refetch for the given |trigger| if enabled and if the
+  // timing is appropriate for another fetch.
+  void RefetchInTheBackgroundIfAppropriate(TriggerType trigger);
 
   // Checks whether it is time to perform a soft background fetch, according to
   // |schedule|.
-  bool ShouldRefetchInTheBackgroundNow(TriggerType trigger);
+  bool ShouldRefetchInTheBackgroundNow();
 
   // Returns whether background fetching (for the given |trigger|) is disabled.
   bool BackgroundFetchesDisabled(TriggerType trigger) const;
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
index 3ad4455..220863e1 100644
--- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
@@ -32,6 +32,7 @@
 #include "components/prefs/testing_pref_service.h"
 #include "components/variations/variations_params_manager.h"
 #include "components/web_resource/web_resource_pref_names.h"
+#include "net/base/network_change_notifier.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -65,6 +66,7 @@
                bool(base::TimeDelta period_wifi,
                     base::TimeDelta period_fallback));
   MOCK_METHOD0(Unschedule, bool());
+  MOCK_METHOD0(IsOnUnmeteredConnection, bool());
 };
 
 // TODO(jkrcal): Move into its own library to reuse in other unit-tests?
@@ -118,6 +120,9 @@
     // registers this pref and replace the call in browser_process_impl.cc & in
     // eula_accepted_notifier_unittest.cc with the new static function.
     local_state_.registry()->RegisterBooleanPref(::prefs::kEulaAccepted, false);
+    // By default pretend we are on WiFi.
+    EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection())
+        .WillRepeatedly(Return(true));
     ResetProvider();
   }
 
@@ -473,7 +478,7 @@
         .WillOnce(SaveArg<0>(&signal_fetch_done));
     // Rescheduling after a succesful fetch.
     EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
-    // The second call to NTPOpened 2hrs later again results in a fetch.
+    // The second call to NTPOpened 4hrs later again results in a fetch.
     EXPECT_CALL(*provider(), RefetchInTheBackground(_));
   }
 
@@ -482,8 +487,8 @@
   // Make the first soft fetch successful.
   scheduler()->OnBrowserForegrounded();
   signal_fetch_done.Run(Status::Success());
-  // Open NTP again after 2hrs.
-  test_clock()->Advance(base::TimeDelta::FromHours(2));
+  // Open NTP again after 4hrs.
+  test_clock()->Advance(base::TimeDelta::FromHours(4));
   scheduler()->OnBrowserForegrounded();
 }
 
@@ -568,7 +573,8 @@
   DeactivateProvider();
 }
 
-TEST_F(RemoteSuggestionsSchedulerImplTest, ReschedulesWhenWifiParamChanges) {
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+       ReschedulesWhenPersistentWifiParamChanges) {
   EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
   ActivateProvider();
 
@@ -581,7 +587,7 @@
 }
 
 TEST_F(RemoteSuggestionsSchedulerImplTest,
-       ReschedulesWhenFallbackParamChanges) {
+       ReschedulesWhenPersistentFallbackParamChanges) {
   EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
   ActivateProvider();
 
@@ -595,13 +601,13 @@
 }
 
 TEST_F(RemoteSuggestionsSchedulerImplTest,
-       ReschedulesWhenOnUsageEventParamChanges) {
+       ReschedulesWhenSoftWifiParamChanges) {
   EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
   ActivateProvider();
 
   // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
   // null. Change the on usage interval for this class.
-  SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user",
+  SetVariationParameter("soft_fetching_interval_hours-wifi-active_ntp_user",
                         "1.5");
 
   // Schedule() should get called for the second time after params have changed.
@@ -609,85 +615,143 @@
 }
 
 TEST_F(RemoteSuggestionsSchedulerImplTest,
-       ReschedulesWhenOnNtpOpenedParamChanges) {
+       ReschedulesWhenSoftFallbackParamChanges) {
   EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
   ActivateProvider();
 
   // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
   // null. Change the fallback interval for this class.
-  SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user",
+  SetVariationParameter("soft_fetching_interval_hours-fallback-active_ntp_user",
                         "1.5");
 
   // Schedule() should get called for the second time after params have changed.
   ActivateProvider();
 }
 
-TEST_F(RemoteSuggestionsSchedulerImplTest, FetchIntervalForNtpOpenedTrigger) {
-  RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
-  {
-    InSequence s;
-    // Initial scheduling after being enabled.
-    EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
-    // The first call to NTPOpened results in a fetch.
-    EXPECT_CALL(*provider(), RefetchInTheBackground(_))
-        .WillOnce(SaveArg<0>(&signal_fetch_done));
-    // Rescheduling after a succesful fetch.
-    EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
-    // The third call to NTPOpened 35min later again results in a fetch.
-    EXPECT_CALL(*provider(), RefetchInTheBackground(_));
-  }
+TEST_F(RemoteSuggestionsSchedulerImplTest, FetchIntervalForSoftTriggerOnWifi) {
+  // Pretend we are on WiFi (already done in ctor, we make it explicit here).
+  EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection())
+      .WillRepeatedly(Return(true));
+  // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time
+  // interval by default for soft background fetches on WiFi.
 
+  // Initial scheduling after being enabled.
+  EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
   ActivateProvider();
 
+  // The first call to NTPOpened results in a fetch.
+  RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
+  EXPECT_CALL(*provider(), RefetchInTheBackground(_))
+      .WillOnce(SaveArg<0>(&signal_fetch_done));
   scheduler()->OnNTPOpened();
+  // Rescheduling after a succesful fetch.
+  EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
   signal_fetch_done.Run(Status::Success());
 
-  // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time
-  // interval by default for soft backgroudn fetches on ntp open events.
-
-  // Open NTP again after 20min. This time no fetch is executed.
+  // Open NTP again after too short delay. This time no fetch is executed.
   test_clock()->Advance(base::TimeDelta::FromMinutes(20));
   scheduler()->OnNTPOpened();
 
-  // Open NTP again after 101min (121min since first opened). Since the default
-  // time interval has passed refetch again.
-  test_clock()->Advance(base::TimeDelta::FromMinutes(101));
+  // Open NTP after another delay, now together long enough to issue a fetch.
+  test_clock()->Advance(base::TimeDelta::FromMinutes(100));
+  EXPECT_CALL(*provider(), RefetchInTheBackground(_));
   scheduler()->OnNTPOpened();
 }
 
 TEST_F(RemoteSuggestionsSchedulerImplTest,
-       OverrideFetchIntervalForNtpOpenedTrigger) {
+       OverrideFetchIntervalForSoftTriggerOnWifi) {
+  // Pretend we are on WiFi (already done in ctor, we make it explicit here).
+  EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection())
+      .WillRepeatedly(Return(true));
   // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
   // null. Change the on usage interval for this class from 2h to 30min.
-  SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user",
+  SetVariationParameter("soft_fetching_interval_hours-wifi-active_ntp_user",
                         "0.5");
 
-  RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
-  {
-    InSequence s;
-    // Initial scheduling after being enabled.
-    EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
-    // The first call to NTPOpened results in a fetch.
-    EXPECT_CALL(*provider(), RefetchInTheBackground(_))
-        .WillOnce(SaveArg<0>(&signal_fetch_done));
-    // Rescheduling after a succesful fetch.
-    EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
-    // The third call to NTPOpened 35min later again results in a fetch.
-    EXPECT_CALL(*provider(), RefetchInTheBackground(_));
-  }
-
+  // Initial scheduling after being enabled.
+  EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
   ActivateProvider();
 
+  // The first call to NTPOpened results in a fetch.
+  RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
+  EXPECT_CALL(*provider(), RefetchInTheBackground(_))
+      .WillOnce(SaveArg<0>(&signal_fetch_done));
   scheduler()->OnNTPOpened();
+  // Rescheduling after a succesful fetch.
+  EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
   signal_fetch_done.Run(Status::Success());
 
-  // Open NTP again after 20min. No fetch request is issues since the 30 min
-  // time interval has not passed yet.
+  // Open NTP again after too short delay. This time no fetch is executed.
   test_clock()->Advance(base::TimeDelta::FromMinutes(20));
   scheduler()->OnNTPOpened();
 
-  // Open NTP again after 15min (35min since first opened)
-  test_clock()->Advance(base::TimeDelta::FromMinutes(15));
+  // Open NTP after another delay, now together long enough to issue a fetch.
+  test_clock()->Advance(base::TimeDelta::FromMinutes(10));
+  EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+  scheduler()->OnNTPOpened();
+}
+
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+       FetchIntervalForSoftTriggerOnFallback) {
+  // Pretend we are not on wifi -> fallback connection.
+  EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection())
+      .WillRepeatedly(Return(false));
+  // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 4h time
+  // interval by default for soft background fetches not on WiFi.
+
+  // Initial scheduling after being enabled.
+  EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+  ActivateProvider();
+
+  // The first call to NTPOpened results in a fetch.
+  RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
+  EXPECT_CALL(*provider(), RefetchInTheBackground(_))
+      .WillOnce(SaveArg<0>(&signal_fetch_done));
+  scheduler()->OnNTPOpened();
+  // Rescheduling after a succesful fetch.
+  EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+  signal_fetch_done.Run(Status::Success());
+
+  // Open NTP again after too short delay. This time no fetch is executed.
+  test_clock()->Advance(base::TimeDelta::FromMinutes(180));
+  scheduler()->OnNTPOpened();
+
+  // Open NTP after another delay, now together long enough to issue a fetch.
+  test_clock()->Advance(base::TimeDelta::FromMinutes(60));
+  EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+  scheduler()->OnNTPOpened();
+}
+
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+       OverrideFetchIntervalForSoftTriggerOnFallback) {
+  // Pretend we are not on wifi -> fallback connection.
+  EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection())
+      .WillRepeatedly(Return(false));
+  // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
+  // null. Change the on usage interval for this class from 4h to 30min.
+  SetVariationParameter("soft_fetching_interval_hours-fallback-active_ntp_user",
+                        "0.5");
+
+  // Initial scheduling after being enabled.
+  EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+  ActivateProvider();
+
+  // The first call to NTPOpened results in a fetch.
+  RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
+  EXPECT_CALL(*provider(), RefetchInTheBackground(_))
+      .WillOnce(SaveArg<0>(&signal_fetch_done));
+  scheduler()->OnNTPOpened();
+  // Rescheduling after a succesful fetch.
+  EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+  signal_fetch_done.Run(Status::Success());
+
+  // Open NTP again after too short delay. This time no fetch is executed.
+  test_clock()->Advance(base::TimeDelta::FromMinutes(20));
+  scheduler()->OnNTPOpened();
+
+  // Open NTP after another delay, now together long enough to issue a fetch.
+  test_clock()->Advance(base::TimeDelta::FromMinutes(10));
+  EXPECT_CALL(*provider(), RefetchInTheBackground(_));
   scheduler()->OnNTPOpened();
 }
 
diff --git a/components/payments/core/BUILD.gn b/components/payments/core/BUILD.gn
index e330013..1eecb8e7 100644
--- a/components/payments/core/BUILD.gn
+++ b/components/payments/core/BUILD.gn
@@ -49,6 +49,7 @@
     "address_normalizer_unittest.cc",
     "basic_card_response_unittest.cc",
     "currency_formatter_unittest.cc",
+    "journey_logger_unittest.cc",
     "payment_address_unittest.cc",
     "payment_method_data_unittest.cc",
     "payment_request_data_util_unittest.cc",
@@ -61,6 +62,7 @@
     "//base/test:test_support",
     "//components/autofill/core/browser",
     "//components/autofill/core/browser:test_support",
+    "//testing/gmock",
     "//testing/gtest",
     "//third_party/libaddressinput:test_support",
   ]
diff --git a/components/payments/core/journey_logger.cc b/components/payments/core/journey_logger.cc
index a62e2e2..d8731c0 100644
--- a/components/payments/core/journey_logger.cc
+++ b/components/payments/core/journey_logger.cc
@@ -175,7 +175,7 @@
   if (was_show_called_)
     effect_on_show |= CMP_SHOW_DID_SHOW;
   if (could_make_payment_)
-    effect_on_show |= CMP_SHOW_COULD_MAKE_PAYMENT_;
+    effect_on_show |= CMP_SHOW_COULD_MAKE_PAYMENT;
 
   UMA_HISTOGRAM_ENUMERATION("PaymentRequest.CanMakePayment.Used.EffectOnShow",
                             effect_on_show, CMP_SHOW_MAX);
diff --git a/components/payments/core/journey_logger.h b/components/payments/core/journey_logger.h
index 326704e..67401c1 100644
--- a/components/payments/core/journey_logger.h
+++ b/components/payments/core/journey_logger.h
@@ -50,7 +50,7 @@
   // Payment Request is shown to the user.
   static const int CMP_SHOW_COULD_NOT_MAKE_PAYMENT_AND_DID_NOT_SHOW = 0;
   static const int CMP_SHOW_DID_SHOW = 1 << 0;
-  static const int CMP_SHOW_COULD_MAKE_PAYMENT_ = 1 << 1;
+  static const int CMP_SHOW_COULD_MAKE_PAYMENT = 1 << 1;
   static const int CMP_SHOW_MAX = 4;
 
   explicit JourneyLogger(bool is_incognito);
diff --git a/components/payments/core/journey_logger_unittest.cc b/components/payments/core/journey_logger_unittest.cc
new file mode 100644
index 0000000..75372e9
--- /dev/null
+++ b/components/payments/core/journey_logger_unittest.cc
@@ -0,0 +1,661 @@
+// 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 "components/payments/core/journey_logger.h"
+
+#include "base/test/histogram_tester.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::ContainerEq;
+
+namespace payments {
+
+// Tests the canMakePayment stats for the case where the merchant does not use
+// it and does not show the PaymentRequest to the user.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentNotCalled_NoShow) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_NOT_USED,
+                                     1);
+
+  // There should be no completion stats since PR was not shown to the user
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix(
+          "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests the canMakePayment stats for the case where the merchant does not use
+// it and the transaction is aborted.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentNotCalled_ShowAndUserAbort) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The merchant does not query CanMakePayment, show the PaymentRequest and the
+  // user aborts it.
+  logger.SetShowCalled();
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_NOT_USED,
+                                     1);
+
+  // There should be a record for an abort when CanMakePayment is not used but
+  // the PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1);
+}
+
+// Tests the canMakePayment stats for the case where the merchant does not use
+// it and the transaction is aborted.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentNotCalled_ShowAndOtherAbort) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The merchant does not query CanMakePayment, show the PaymentRequest and
+  // there is an abort not initiated by the user.
+  logger.SetShowCalled();
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_NOT_USED,
+                                     1);
+
+  // There should be a record for an abort when CanMakePayment is not used but
+  // the PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED, 1);
+}
+
+// Tests the canMakePayment stats for the case where the merchant does not use
+// it and the transaction is completed.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentNotCalled_ShowAndComplete) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The merchant does not query CanMakePayment, show the PaymentRequest and the
+  // user completes it.
+  logger.SetShowCalled();
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_NOT_USED,
+                                     1);
+
+  // There should be a record for an abort when CanMakePayment is not used but
+  // the PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_COMPLETED, 1);
+}
+
+// Tests the canMakePayment stats for the case where the merchant uses it,
+// returns false and show is not called.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentCalled_FalseAndNoShow) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetCanMakePaymentValue(false);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+
+  // The CanMakePayment effect on show should be recorded as being false and not
+  // shown.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.EffectOnShow",
+      JourneyLogger::CMP_SHOW_COULD_NOT_MAKE_PAYMENT_AND_DID_NOT_SHOW, 1);
+
+  // There should be no completion stats since PR was not shown to the user.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix(
+          "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests the canMakePayment stats for the case where the merchant uses it,
+// returns true and show is not called.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentCalled_TrueAndNoShow) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetCanMakePaymentValue(true);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+
+  // The CanMakePayment effect on show should be recorded as being true and not
+  // shown.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.EffectOnShow",
+      JourneyLogger::CMP_SHOW_COULD_MAKE_PAYMENT, 1);
+
+  // There should be no completion stats since PR was not shown to the user.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix(
+          "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests the canMakePayment stats for the case where the merchant uses it,
+// returns false, show is called but the transaction is aborted by the user.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentCalled_FalseShowAndUserAbort) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetShowCalled();
+  logger.SetCanMakePaymentValue(false);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+
+  // The CanMakePayment effect on show should be recorded as being false and
+  // shown.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.EffectOnShow",
+      JourneyLogger::CMP_SHOW_DID_SHOW, 1);
+  // There should be a record for an abort when CanMakePayment is false but the
+  // PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1);
+}
+
+// Tests the canMakePayment stats for the case where the merchant uses it,
+// returns false, show is called but the transaction is aborted.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentCalled_FalseShowAndOtherAbort) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetShowCalled();
+  logger.SetCanMakePaymentValue(false);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+
+  // The CanMakePayment effect on show should be recorded as being false and
+  // shown.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.EffectOnShow",
+      JourneyLogger::CMP_SHOW_DID_SHOW, 1);
+  // There should be a record for an abort when CanMakePayment is false but the
+  // PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED, 1);
+}
+
+// Tests the canMakePayment stats for the case where the merchant uses it,
+// returns false, show is called and the transaction is completed.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentCalled_FalseShowAndComplete) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetShowCalled();
+  logger.SetCanMakePaymentValue(false);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+
+  // The CanMakePayment effect on show should be recorded as being false and
+  // shown.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.EffectOnShow",
+      JourneyLogger::CMP_SHOW_DID_SHOW, 1);
+
+  // There should be a record for an completion when CanMakePayment is false but
+  // the PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_COMPLETED, 1);
+}
+
+// Tests the canMakePayment stats for the case where the merchant uses it,
+// returns true, show is called but the transaction is aborted by the user.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentCalled_TrueShowAndUserAbort) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetShowCalled();
+  logger.SetCanMakePaymentValue(true);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+
+  // The CanMakePayment effect on show should be recorded as being true and not
+  // shown.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.EffectOnShow",
+      JourneyLogger::CMP_SHOW_DID_SHOW |
+          JourneyLogger::CMP_SHOW_COULD_MAKE_PAYMENT,
+      1);
+  // There should be a record for an abort when CanMakePayment is true and the
+  // PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1);
+}
+
+// Tests the canMakePayment stats for the case where the merchant uses it,
+// returns true, show is called but the transaction is aborted.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentCalled_TrueShowAndOtherAbort) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetShowCalled();
+  logger.SetCanMakePaymentValue(true);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+
+  // The CanMakePayment effect on show should be recorded as being true and not
+  // shown.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.EffectOnShow",
+      JourneyLogger::CMP_SHOW_DID_SHOW |
+          JourneyLogger::CMP_SHOW_COULD_MAKE_PAYMENT,
+      1);
+  // There should be a record for an abort when CanMakePayment is true and the
+  // PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED, 1);
+}
+
+// Tests the canMakePayment stats for the case where the merchant uses it,
+// returns true, show is called and the transaction is completed.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePaymentCalled_TrueShowAndComplete) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetShowCalled();
+  logger.SetCanMakePaymentValue(true);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+
+  // The CanMakePayment effect on show should be recorded as being true and not
+  // shown.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.EffectOnShow",
+      JourneyLogger::CMP_SHOW_DID_SHOW |
+          JourneyLogger::CMP_SHOW_COULD_MAKE_PAYMENT,
+      1);
+  // There should be a record for a completion when CanMakePayment is true and
+  // the PR is shown to the user.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_COMPLETED, 1);
+}
+
+// Tests the canMakePayment metrics are not logged if the Payment Request was
+// done in an incognito tab.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_CanMakePayment_IncognitoTab) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/true);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+
+  // The user cannot make payment and the PaymentRequest is not shown.
+  logger.SetShowCalled();
+  logger.SetCanMakePaymentValue(true);
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+
+  // Expect no log for CanMakePayment.
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix("PaymentRequest.CanMakePayment"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the completion status metrics based on whether the user had
+// suggestions for all the requested sections are logged as correctly.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_SuggestionsForEverything_Completed) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Simulate that the user had suggestions for all the requested sections.
+  logger.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 1);
+
+  // Simulate that the user completes the checkout.
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_COMPLETED, 1);
+
+  EXPECT_THAT(histogram_tester.GetTotalCountsForPrefix(
+                  "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+                  "EffectOnCompletion"),
+              testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the completion status metrics based on whether the user had
+// suggestions for all the requested sections are logged as correctly.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_SuggestionsForEverything_UserAborted) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Simulate that the user had suggestions for all the requested sections.
+  logger.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 1);
+
+  // Simulate that the user aborts the checkout.
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED);
+
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1);
+
+  EXPECT_THAT(histogram_tester.GetTotalCountsForPrefix(
+                  "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+                  "EffectOnCompletion"),
+              testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the completion status metrics based on whether the user had
+// suggestions for all the requested sections are logged as correctly.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_SuggestionsForEverything_OtherAborted) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Simulate that the user had suggestions for all the requested sections.
+  logger.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 1);
+
+  // Simulate that the checkout is aborted.
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED);
+
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED, 1);
+
+  EXPECT_THAT(histogram_tester.GetTotalCountsForPrefix(
+                  "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+                  "EffectOnCompletion"),
+              testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the completion status metrics based on whether the user had
+// suggestions for all the requested sections are logged as correctly, even in
+// incognito mode.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_SuggestionsForEverything_Incognito) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/true);
+
+  // Simulate that the user had suggestions for all the requested sections.
+  logger.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 1);
+
+  // Simulate that the user completes the checkout.
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_COMPLETED, 1);
+
+  EXPECT_THAT(histogram_tester.GetTotalCountsForPrefix(
+                  "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+                  "EffectOnCompletion"),
+              testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the completion status metrics based on whether the user had
+// suggestions for all the requested sections are logged as correctly.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_NoSuggestionsForEverything_Completed) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Simulate that the user had suggestions for all the requested sections.
+  logger.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 0);
+
+  // Simulate that the user completes the checkout.
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+      "EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_COMPLETED, 1);
+
+  EXPECT_THAT(
+      histogram_tester.GetTotalCountsForPrefix(
+          "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion"),
+      testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the completion status metrics based on whether the user had
+// suggestions for all the requested sections are logged as correctly.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_NoSuggestionsForEverything_UserAborted) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Simulate that the user had suggestions for all the requested sections.
+  logger.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 0);
+
+  // Simulate that the user aborts the checkout.
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED);
+
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+      "EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1);
+
+  EXPECT_THAT(histogram_tester.GetTotalCountsForPrefix(
+                  "PaymentRequest.UserHadSuggestionsForEverything."
+                  "EffectOnCompletion"),
+              testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the completion status metrics based on whether the user had
+// suggestions for all the requested sections are logged as correctly.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_NoSuggestionsForEverything_OtherAborted) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/false);
+
+  // Simulate that the user had suggestions for all the requested sections.
+  logger.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 0);
+
+  // Simulate that the user aborts the checkout.
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED);
+
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+      "EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED, 1);
+
+  EXPECT_THAT(histogram_tester.GetTotalCountsForPrefix(
+                  "PaymentRequest.UserHadSuggestionsForEverything."
+                  "EffectOnCompletion"),
+              testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the completion status metrics based on whether the user had
+// suggestions for all the requested sections are logged as correctly, even in
+// incognito mode.
+TEST(JourneyLoggerTest,
+     RecordJourneyStatsHistograms_NoSuggestionsForEverything_Incognito) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger(/*is_incognito=*/true);
+
+  // Simulate that the user had suggestions for all the requested sections.
+  logger.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 0);
+
+  // Simulate that the user aborts the checkout.
+  logger.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED);
+
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+      "EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1);
+
+  EXPECT_THAT(histogram_tester.GetTotalCountsForPrefix(
+                  "PaymentRequest.UserHadSuggestionsForEverything."
+                  "EffectOnCompletion"),
+              testing::ContainerEq(base::HistogramTester::CountsMap()));
+}
+
+// Tests that the metrics are logged correctly for two simultaneous Payment
+// Requests.
+TEST(JourneyLoggerTest, RecordJourneyStatsHistograms_TwoPaymentRequests) {
+  base::HistogramTester histogram_tester;
+  JourneyLogger logger1(/*is_incognito=*/false);
+  JourneyLogger logger2(/*is_incognito=*/false);
+
+  // Make the two loggers have different data.
+  logger1.SetShowCalled();
+  logger2.SetShowCalled();
+
+  logger1.SetCanMakePaymentValue(true);
+
+  logger1.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 1);
+  logger2.SetNumberOfSuggestionsShown(JourneyLogger::SECTION_CREDIT_CARDS, 0);
+
+  // Simulate that the user completes one checkout and aborts the other.
+  logger1.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_COMPLETED);
+  logger2.RecordJourneyStatsHistograms(
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED);
+
+  // Make sure the appropriate metrics were logged for logger1.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_COMPLETED, 1);
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_USED, 1);
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_COMPLETED, 1);
+
+  // Make sure the appropriate metrics were logged for logger2.
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+      "EffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1);
+  histogram_tester.ExpectBucketCount("PaymentRequest.CanMakePayment.Usage",
+                                     JourneyLogger::CAN_MAKE_PAYMENT_NOT_USED,
+                                     1);
+  histogram_tester.ExpectBucketCount(
+      "PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion",
+      JourneyLogger::COMPLETION_STATUS_USER_ABORTED, 1);
+}
+
+}  // namespace payments
\ No newline at end of file
diff --git a/components/printing/renderer/print_web_view_helper.cc b/components/printing/renderer/print_web_view_helper.cc
index 5abbe83..7c2b9f4 100644
--- a/components/printing/renderer/print_web_view_helper.cc
+++ b/components/printing/renderer/print_web_view_helper.cc
@@ -596,8 +596,7 @@
   // Load page with script to avoid async operations.
   ExecuteScript(frame, kPageLoadScriptFormat, html);
 
-  std::unique_ptr<base::DictionaryValue> options(new base::DictionaryValue());
-  options.reset(new base::DictionaryValue());
+  auto options = base::MakeUnique<base::DictionaryValue>();
   options->SetDouble(kSettingHeaderFooterDate, base::Time::Now().ToJsTime());
   options->SetDouble("width", page_size.width);
   options->SetDouble("height", page_size.height);
@@ -1202,9 +1201,9 @@
   }
 
   const PrintMsg_Print_Params& print_params = print_pages_params_->params;
-  prep_frame_view_.reset(new PrepareFrameAndViewForPrint(
+  prep_frame_view_ = base::MakeUnique<PrepareFrameAndViewForPrint>(
       print_params, print_preview_context_.source_frame(),
-      print_preview_context_.source_node(), ignore_css_margins_));
+      print_preview_context_.source_node(), ignore_css_margins_);
   prep_frame_view_->CopySelectionIfNeeded(
       render_frame()->GetWebkitPreferences(),
       base::Bind(&PrintWebViewHelper::OnFramePreparedForPreviewDocument,
@@ -1341,7 +1340,7 @@
   std::unique_ptr<PdfMetafileSkia> draft_metafile;
   PdfMetafileSkia* initial_render_metafile = print_preview_context_.metafile();
   if (print_preview_context_.IsModifiable() && is_print_ready_metafile_sent_) {
-    draft_metafile.reset(new PdfMetafileSkia(PDF_SKIA_DOCUMENT_TYPE));
+    draft_metafile = base::MakeUnique<PdfMetafileSkia>(PDF_SKIA_DOCUMENT_TYPE);
     initial_render_metafile = draft_metafile.get();
   }
 
@@ -1830,8 +1829,8 @@
 
   const PrintMsg_PrintPages_Params& params = *print_pages_params_;
   const PrintMsg_Print_Params& print_params = params.params;
-  prep_frame_view_.reset(new PrepareFrameAndViewForPrint(
-      print_params, frame, node, ignore_css_margins_));
+  prep_frame_view_ = base::MakeUnique<PrepareFrameAndViewForPrint>(
+      print_params, frame, node, ignore_css_margins_);
   DCHECK(!print_pages_params_->params.selection_only ||
          print_pages_params_->pages.empty());
   prep_frame_view_->CopySelectionIfNeeded(
@@ -2141,7 +2140,7 @@
     return false;
   }
 
-  metafile_.reset(new PdfMetafileSkia(PDF_SKIA_DOCUMENT_TYPE));
+  metafile_ = base::MakeUnique<PdfMetafileSkia>(PDF_SKIA_DOCUMENT_TYPE);
   CHECK(metafile_->Init());
 
   current_page_index_ = 0;
@@ -2323,7 +2322,7 @@
 
 void PrintWebViewHelper::SetPrintPagesParams(
     const PrintMsg_PrintPages_Params& settings) {
-  print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
+  print_pages_params_ = base::MakeUnique<PrintMsg_PrintPages_Params>(settings);
   Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(),
                                              settings.params.document_cookie));
 }
diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc
index 0a8eced..02bfb5e 100644
--- a/components/search_engines/template_url_service.cc
+++ b/components/search_engines/template_url_service.cc
@@ -671,18 +671,7 @@
 
   default_search_manager_.ClearUserSelectedDefaultSearchEngine();
 
-  if (!default_search_provider_) {
-    // If the default search provider came from a user pref we would have been
-    // notified of the new (fallback-provided) value in
-    // ClearUserSelectedDefaultSearchEngine() above. Since we are here, the
-    // value was presumably originally a fallback value (which may have been
-    // repaired).
-    DefaultSearchManager::Source source;
-    const TemplateURLData* new_dse =
-        default_search_manager_.GetDefaultSearchEngine(&source);
-    // ApplyDefaultSearchChange will notify observers once it is done.
-    ApplyDefaultSearchChange(new_dse, source);
-  } else {
+  if (default_search_provider_) {
     // Set fallback engine as user selected, because repair is considered a user
     // action and we are expected to sync new fallback engine to other devices.
     const TemplateURLData* fallback_engine_data =
@@ -701,6 +690,18 @@
                         fallback_engine->sync_guid());
     }
     NotifyObservers();
+    RequestGoogleURLTrackerServerCheckIfNecessary();
+  } else {
+    // If the default search provider came from a user pref we would have been
+    // notified of the new (fallback-provided) value in
+    // ClearUserSelectedDefaultSearchEngine() above. Since we are here, the
+    // value was presumably originally a fallback value (which may have been
+    // repaired).
+    DefaultSearchManager::Source source;
+    const TemplateURLData* new_dse =
+        default_search_manager_.GetDefaultSearchEngine(&source);
+    // ApplyDefaultSearchChange will notify observers once it is done.
+    ApplyDefaultSearchChange(new_dse, source);
   }
 }
 
@@ -1829,7 +1830,7 @@
   if (default_search_provider_ &&
       default_search_provider_->HasGoogleBaseURLs(search_terms_data()) &&
       google_url_tracker_)
-    google_url_tracker_->RequestServerCheck(false);
+    google_url_tracker_->RequestServerCheck();
 }
 
 void TemplateURLService::GoogleBaseURLChanged() {
diff --git a/components/update_client/ping_manager_unittest.cc b/components/update_client/ping_manager_unittest.cc
index 1d201887..9795d676 100644
--- a/components/update_client/ping_manager_unittest.cc
+++ b/components/update_client/ping_manager_unittest.cc
@@ -175,6 +175,9 @@
           "download_time_ms=\"9870\"/></app>"))
       << interceptor->GetRequestsAsString();
   interceptor->Reset();
+
+  interceptor_factory.reset();
+  base::RunLoop().RunUntilIdle();
 }
 
 // Tests that sending the ping fails when the component requires encryption but
diff --git a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java
index 7f117590..3c69677 100644
--- a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java
+++ b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java
@@ -77,15 +77,21 @@
     }
 
     @VisibleForTesting
-    protected HttpURLConnection getServerConnection() throws MalformedURLException, IOException {
-        URL url = new URL(VARIATIONS_SERVER_URL);
+    protected HttpURLConnection getServerConnection(String restrictMode)
+            throws MalformedURLException, IOException {
+        String urlString = VARIATIONS_SERVER_URL;
+        if (restrictMode != null && !restrictMode.isEmpty()) {
+            urlString += "&restrict=" + restrictMode;
+        }
+        URL url = new URL(urlString);
         return (HttpURLConnection) url.openConnection();
     }
 
     /**
      * Fetch the first run variations seed.
+     * @param restrictMode The restrict mode parameter to pass to the server via a URL param.
      */
-    public void fetchSeed() {
+    public void fetchSeed(String restrictMode) {
         assert !ThreadUtils.runningOnUiThread();
         // Prevent multiple simultaneous fetches
         synchronized (sLock) {
@@ -100,7 +106,7 @@
                     || VariationsSeedBridge.hasNativePref(context)) {
                 return;
             }
-            downloadContent(context);
+            downloadContent(context, restrictMode);
             prefs.edit().putBoolean(VARIATIONS_INITIALIZED_PREF, true).apply();
         }
     }
@@ -124,11 +130,11 @@
         histogram.record(timeDeltaMillis);
     }
 
-    private void downloadContent(Context context) {
+    private void downloadContent(Context context, String restrictMode) {
         HttpURLConnection connection = null;
         try {
             long startTimeMillis = SystemClock.elapsedRealtime();
-            connection = getServerConnection();
+            connection = getServerConnection(restrictMode);
             connection.setReadTimeout(READ_TIMEOUT);
             connection.setConnectTimeout(REQUEST_TIMEOUT);
             connection.setDoInput(true);
diff --git a/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java b/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java
index 1835e1e..5cad3a2b 100644
--- a/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java
+++ b/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java
@@ -53,7 +53,7 @@
         ThreadUtils.setUiThread(mock(Looper.class));
         mFetcher = spy(VariationsSeedFetcher.get());
         mConnection = mock(HttpURLConnection.class);
-        doReturn(mConnection).when(mFetcher).getServerConnection();
+        doReturn(mConnection).when(mFetcher).getServerConnection("");
         mPrefs = ContextUtils.getAppSharedPreferences();
         mPrefs.edit().clear().apply();
     }
@@ -80,7 +80,7 @@
         when(mConnection.getHeaderField("IM")).thenReturn("gzip");
         when(mConnection.getInputStream()).thenReturn(new ByteArrayInputStream("1234".getBytes()));
 
-        mFetcher.fetchSeed();
+        mFetcher.fetchSeed("");
 
         assertThat(mPrefs.getString(VariationsSeedBridge.VARIATIONS_FIRST_RUN_SEED_SIGNATURE, ""),
                 equalTo("signature"));
@@ -101,7 +101,7 @@
     public void testFetchSeed_noFetchNeeded() throws IOException {
         mPrefs.edit().putBoolean(VariationsSeedFetcher.VARIATIONS_INITIALIZED_PREF, true).apply();
 
-        mFetcher.fetchSeed();
+        mFetcher.fetchSeed("");
 
         verify(mConnection, never()).connect();
     }
@@ -113,7 +113,7 @@
     public void testFetchSeed_badResponse() throws IOException {
         when(mConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_NOT_FOUND);
 
-        mFetcher.fetchSeed();
+        mFetcher.fetchSeed("");
 
         assertTrue(mPrefs.getBoolean(VariationsSeedFetcher.VARIATIONS_INITIALIZED_PREF, false));
         assertFalse(VariationsSeedBridge.hasJavaPref(ContextUtils.getApplicationContext()));
@@ -126,7 +126,7 @@
     public void testFetchSeed_IOException() throws IOException {
         doThrow(new IOException()).when(mConnection).connect();
 
-        mFetcher.fetchSeed();
+        mFetcher.fetchSeed("");
 
         assertTrue(mPrefs.getBoolean(VariationsSeedFetcher.VARIATIONS_INITIALIZED_PREF, false));
         assertFalse(VariationsSeedBridge.hasJavaPref(ContextUtils.getApplicationContext()));
diff --git a/content/browser/DEPS b/content/browser/DEPS
index 7b93f69c..c11c2b1 100644
--- a/content/browser/DEPS
+++ b/content/browser/DEPS
@@ -3,6 +3,7 @@
   # See comment in content/DEPS for which components are allowed.
   "+components/discardable_memory/common",
   "+components/discardable_memory/service",
+  "+components/display_compositor",
   "+components/filesystem",
   "+components/leveldb",
   "+components/link_header_util",
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc
index 2aff1e7..1b2bf05 100644
--- a/content/browser/accessibility/browser_accessibility.cc
+++ b/content/browser/accessibility/browser_accessibility.cc
@@ -375,16 +375,6 @@
   return RelativeToAbsoluteBounds(bounds, false);
 }
 
-gfx::Rect BrowserAccessibility::GetScreenBoundsRect() const {
-  gfx::Rect bounds = GetPageBoundsRect();
-
-  // Adjust the bounds by the top left corner of the containing view's bounds
-  // in screen coordinates.
-  bounds.Offset(manager_->GetViewBounds().OffsetFromOrigin());
-
-  return bounds;
-}
-
 gfx::Rect BrowserAccessibility::GetPageBoundsForRange(int start, int len)
     const {
   DCHECK_GE(start, 0);
@@ -1363,9 +1353,14 @@
   return nullptr;
 }
 
-gfx::Vector2d BrowserAccessibility::GetGlobalCoordinateOffset() {
-  NOTREACHED();
-  return gfx::Vector2d();
+gfx::Rect BrowserAccessibility::GetScreenBoundsRect() const {
+  gfx::Rect bounds = GetPageBoundsRect();
+
+  // Adjust the bounds by the top left corner of the containing view's bounds
+  // in screen coordinates.
+  bounds.Offset(manager_->GetViewBounds().OffsetFromOrigin());
+
+  return bounds;
 }
 
 gfx::NativeViewAccessible BrowserAccessibility::HitTestSync(int x, int y) {
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h
index c8b8738e..871d6b1d 100644
--- a/content/browser/accessibility/browser_accessibility.h
+++ b/content/browser/accessibility/browser_accessibility.h
@@ -151,9 +151,6 @@
   // page (specifically, the top-left corner of the topmost web contents).
   gfx::Rect GetPageBoundsRect() const;
 
-  // Returns the bounds of this object in screen coordinates.
-  gfx::Rect GetScreenBoundsRect() const;
-
   // Returns the bounds of the given range in coordinates relative to the
   // top-left corner of the overall web area. Only valid when the
   // role is WebAXRoleStaticText.
@@ -419,7 +416,7 @@
   gfx::NativeViewAccessible GetParent() override;
   int GetChildCount() override;
   gfx::NativeViewAccessible ChildAtIndex(int index) override;
-  gfx::Vector2d GetGlobalCoordinateOffset() override;
+  gfx::Rect GetScreenBoundsRect() const override;
   gfx::NativeViewAccessible HitTestSync(int x, int y) override;
   gfx::NativeViewAccessible GetFocus() override;
   gfx::AcceleratedWidget GetTargetForNativeAccessibilityEvent() override;
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
index 920eab33..d4a8d1f 100644
--- a/content/browser/accessibility/browser_accessibility_win.cc
+++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -483,20 +483,8 @@
   if (!instance_active())
     return E_FAIL;
 
-  if (!x_left || !y_top || !width || !height)
-    return E_INVALIDARG;
-
-  BrowserAccessibilityWin* target = GetTargetFromChildID(var_id);
-  if (!target)
-    return E_INVALIDARG;
-
-  gfx::Rect bounds = target->GetScreenBoundsRect();
-  *x_left = bounds.x();
-  *y_top  = bounds.y();
-  *width  = bounds.width();
-  *height = bounds.height();
-
-  return S_OK;
+  return GetPlatformNodeWin()->accLocation(x_left, y_top, width, height,
+                                           var_id);
 }
 
 STDMETHODIMP BrowserAccessibilityWin::accNavigate(LONG nav_dir,
@@ -5037,6 +5025,11 @@
       this))->Fire();
 }
 
+ui::AXPlatformNodeWin* BrowserAccessibilityWin::GetPlatformNodeWin() const {
+  DCHECK(platform_node_);
+  return static_cast<ui::AXPlatformNodeWin*>(platform_node_);
+}
+
 void BrowserAccessibilityWin::InitRoleAndState() {
   int32_t ia_role = 0;
   int32_t ia_state = 0;
diff --git a/content/browser/accessibility/browser_accessibility_win.h b/content/browser/accessibility/browser_accessibility_win.h
index 7b454d6..d563382b 100644
--- a/content/browser/accessibility/browser_accessibility_win.h
+++ b/content/browser/accessibility/browser_accessibility_win.h
@@ -23,6 +23,7 @@
 #include "third_party/isimpledom/ISimpleDOMDocument.h"
 #include "third_party/isimpledom/ISimpleDOMNode.h"
 #include "third_party/isimpledom/ISimpleDOMText.h"
+#include "ui/accessibility/platform/ax_platform_node_win.h"
 
 namespace ui {
 enum TextBoundaryDirection;
@@ -917,6 +918,8 @@
   // Fire a Windows-specific accessibility event notification on this node.
   void FireNativeEvent(LONG win_event_type) const;
 
+  ui::AXPlatformNodeWin* GetPlatformNodeWin() const;
+
   struct WinAttributes {
     WinAttributes();
     ~WinAttributes();
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index 1efb328..5366bc93 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -1087,6 +1087,28 @@
   SendScreenRectsAndResizeWidget();
 }
 
+void ContentViewCoreImpl::UpdateImeAdapter(int text_input_type,
+                                           int text_input_flags,
+                                           int text_input_mode,
+                                           const std::string& text,
+                                           int selection_start,
+                                           int selection_end,
+                                           int composition_start,
+                                           int composition_end,
+                                           bool show_ime_if_needed,
+                                           bool reply_to_request) {
+  JNIEnv* env = AttachCurrentThread();
+  ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+  if (obj.is_null())
+    return;
+
+  ScopedJavaLocalRef<jstring> jstring_text = ConvertUTF8ToJavaString(env, text);
+  Java_ContentViewCore_updateImeAdapter(
+      env, obj, text_input_type, text_input_flags, text_input_mode,
+      jstring_text, selection_start, selection_end, composition_start,
+      composition_end, show_ime_if_needed, reply_to_request);
+}
+
 void ContentViewCoreImpl::SetAccessibilityEnabled(
     JNIEnv* env,
     const JavaParamRef<jobject>& obj,
diff --git a/content/browser/android/content_view_core_impl.h b/content/browser/android/content_view_core_impl.h
index 866eb1b..9dbda85 100644
--- a/content/browser/android/content_view_core_impl.h
+++ b/content/browser/android/content_view_core_impl.h
@@ -263,6 +263,17 @@
                        bool is_mobile_optimized_hint,
                        const gfx::SelectionBound& selection_start);
 
+  void UpdateImeAdapter(int text_input_type,
+                        int text_input_flags,
+                        int text_input_mode,
+                        const std::string& text,
+                        int selection_start,
+                        int selection_end,
+                        int composition_start,
+                        int composition_end,
+                        bool show_ime_if_needed,
+                        bool reply_to_request);
+
   bool HasFocus();
   void RequestDisallowInterceptTouchEvent();
   void OnGestureEventAck(const blink::WebGestureEvent& event,
diff --git a/content/browser/android/ime_adapter_android.cc b/content/browser/android/ime_adapter_android.cc
index 695e537..4e18e286 100644
--- a/content/browser/android/ime_adapter_android.cc
+++ b/content/browser/android/ime_adapter_android.cc
@@ -32,7 +32,6 @@
 
 using base::android::AttachCurrentThread;
 using base::android::ConvertJavaStringToUTF16;
-using base::android::ConvertUTF8ToJavaString;
 using base::android::JavaParamRef;
 using base::android::ScopedJavaLocalRef;
 
@@ -188,21 +187,6 @@
   }
 }
 
-void ImeAdapterAndroid::UpdateState(const TextInputState& state) {
-  JNIEnv* env = AttachCurrentThread();
-  ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
-  if (obj.is_null())
-    return;
-
-  ScopedJavaLocalRef<jstring> jstring_text =
-      ConvertUTF8ToJavaString(env, state.value);
-  Java_ImeAdapter_updateState(env, obj, static_cast<int>(state.type),
-                              state.flags, state.mode, state.show_ime_if_needed,
-                              jstring_text, state.selection_start,
-                              state.selection_end, state.composition_start,
-                              state.composition_end, state.reply_to_request);
-}
-
 bool ImeAdapterAndroid::SendKeyEvent(
     JNIEnv* env,
     const JavaParamRef<jobject>&,
diff --git a/content/browser/android/ime_adapter_android.h b/content/browser/android/ime_adapter_android.h
index e2860e1..d30d2e1 100644
--- a/content/browser/android/ime_adapter_android.h
+++ b/content/browser/android/ime_adapter_android.h
@@ -26,7 +26,6 @@
 class RenderFrameHost;
 class RenderWidgetHostImpl;
 class RenderWidgetHostViewAndroid;
-struct TextInputState;
 
 // This class is in charge of dispatching key events from the java side
 // and forward to renderer along with input method results via
@@ -106,8 +105,6 @@
   void DidDetachInterstitialPage() override;
   void WebContentsDestroyed() override;
 
-  void UpdateState(const TextInputState& state);
-
  private:
   RenderWidgetHostImpl* GetFocusedWidget();
   RenderFrameHost* GetFocusedFrame();
diff --git a/content/browser/background_fetch/background_fetch_data_manager.cc b/content/browser/background_fetch/background_fetch_data_manager.cc
index 64d62d7..24909e37 100644
--- a/content/browser/background_fetch/background_fetch_data_manager.cc
+++ b/content/browser/background_fetch/background_fetch_data_manager.cc
@@ -207,11 +207,21 @@
     settled_fetch.request = request->fetch_request();
 
     settled_fetch.response.url_list = request->GetURLChain();
-    // TODO: settled_fetch.response.status_code
+
+    // TODO(peter): The |status_code| should match what the download manager ran
+    // in to in the BackgroundFetchResponseInfo.
+    settled_fetch.response.status_code = 200;
     // TODO: settled_fetch.response.status_text
+
     settled_fetch.response.response_type =
         blink::WebServiceWorkerResponseTypeDefault;
-    // TODO: settled_fetch.response.headers
+
+    // TODO(peter): The |headers| should be set to the real response headers,
+    // but the download manager does not relay those to us yet.
+    if (!request->GetResponseType().empty()) {
+      settled_fetch.response.headers["Content-Type"] =
+          request->GetResponseType();
+    }
 
     if (request->GetFileSize() > 0) {
       DCHECK(!request->GetFilePath().empty());
@@ -226,6 +236,10 @@
         settled_fetch.response.blob_uuid = blob_handle->GetUUID();
         settled_fetch.response.blob_size = request->GetFileSize();
 
+        // TODO(peter): Remove when we relay the real response headers.
+        settled_fetch.response.headers["Content-Length"] =
+            std::to_string(request->GetFileSize());
+
         blob_handles.push_back(std::move(blob_handle));
       }
     }
diff --git a/content/browser/background_fetch/background_fetch_request_info.cc b/content/browser/background_fetch/background_fetch_request_info.cc
index 00476061..0beb3c9 100644
--- a/content/browser/background_fetch/background_fetch_request_info.cc
+++ b/content/browser/background_fetch/background_fetch_request_info.cc
@@ -36,6 +36,7 @@
   file_path_ = download_item->GetTargetFilePath();
   file_size_ = download_item->GetReceivedBytes();
   response_time_ = download_item->GetEndTime();
+  response_type_ = download_item->GetMimeType();
 
   response_data_populated_ = true;
 }
@@ -60,4 +61,9 @@
   return response_time_;
 }
 
+const std::string& BackgroundFetchRequestInfo::GetResponseType() const {
+  DCHECK(response_data_populated_);
+  return response_type_;
+}
+
 }  // namespace content
diff --git a/content/browser/background_fetch/background_fetch_request_info.h b/content/browser/background_fetch/background_fetch_request_info.h
index d5939be9..6c611012 100644
--- a/content/browser/background_fetch/background_fetch_request_info.h
+++ b/content/browser/background_fetch/background_fetch_request_info.h
@@ -60,6 +60,9 @@
   // Returns the time at which the response was completed.
   const base::Time& GetResponseTime() const;
 
+  // Returns the mime type describing the response, as indicated by the server.
+  const std::string& GetResponseType() const;
+
  private:
   friend class base::RefCountedThreadSafe<BackgroundFetchRequestInfo>;
 
@@ -87,6 +90,7 @@
   base::FilePath file_path_;
   int64_t file_size_ = 0;
   base::Time response_time_;
+  std::string response_type_;
 
   DISALLOW_COPY_AND_ASSIGN(BackgroundFetchRequestInfo);
 };
diff --git a/content/browser/background_fetch/background_fetch_service_unittest.cc b/content/browser/background_fetch/background_fetch_service_unittest.cc
index 8e47edd..a76ac7a 100644
--- a/content/browser/background_fetch/background_fetch_service_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_service_unittest.cc
@@ -369,11 +369,11 @@
     EXPECT_EQ(fetches[i].request.url, fetches[i].response.url_list[0]);
 
     // TODO(peter): change-detector tests for unsupported properties.
-    EXPECT_EQ(fetches[i].response.status_code, 0);
+    EXPECT_EQ(fetches[i].response.status_code, 200);
     EXPECT_TRUE(fetches[i].response.status_text.empty());
     EXPECT_EQ(fetches[i].response.response_type,
               blink::WebServiceWorkerResponseTypeDefault);
-    EXPECT_TRUE(fetches[i].response.headers.empty());
+    EXPECT_FALSE(fetches[i].response.headers.empty());
     EXPECT_EQ(fetches[i].response.error,
               blink::WebServiceWorkerResponseErrorUnknown);
 
diff --git a/content/browser/background_fetch/background_fetch_test_base.cc b/content/browser/background_fetch/background_fetch_test_base.cc
index 161e670..ec4ca73f 100644
--- a/content/browser/background_fetch/background_fetch_test_base.cc
+++ b/content/browser/background_fetch/background_fetch_test_base.cc
@@ -133,6 +133,7 @@
 
     download_item->SetTargetFilePath(response_path);
     download_item->SetReceivedBytes(response_info.second.size());
+    download_item->SetMimeType("text/plain");
 
     // Notify the Job Controller about the download having been updated.
     download_item->NotifyDownloadUpdated();
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index 337fc893..9b6275d 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -46,6 +46,7 @@
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "components/discardable_memory/service/discardable_shared_memory_manager.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 #include "components/tracing/common/process_metrics_memory_dump_provider.h"
 #include "components/tracing/common/trace_config_file.h"
 #include "components/tracing/common/trace_to_console.h"
@@ -78,7 +79,6 @@
 #include "content/browser/webui/content_web_ui_controller_factory.h"
 #include "content/browser/webui/url_data_manager.h"
 #include "content/common/content_switches_internal.h"
-#include "content/common/host_shared_bitmap_manager.h"
 #include "content/common/service_manager/service_manager_connection_impl.h"
 #include "content/public/browser/browser_main_parts.h"
 #include "content/public/browser/content_browser_client.h"
@@ -804,7 +804,8 @@
   tracing::ProcessMetricsMemoryDumpProvider::RegisterForProcess(
       base::kNullProcessId);
   base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
-      HostSharedBitmapManager::current(), "HostSharedBitmapManager", nullptr);
+      display_compositor::HostSharedBitmapManager::current(),
+      "display_compositor::HostSharedBitmapManager", nullptr);
   base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
       skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr);
   base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index 437744a..4d67e25b 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -36,7 +36,6 @@
 #include "content/common/browser_plugin/browser_plugin_messages.h"
 #include "content/common/content_constants_internal.h"
 #include "content/common/drag_messages.h"
-#include "content/common/host_shared_bitmap_manager.h"
 #include "content/common/input_messages.h"
 #include "content/common/site_isolation_policy.h"
 #include "content/common/text_input_state.h"
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
index 54b7119..b1de4f5 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -31,6 +31,7 @@
 #include "cc/surfaces/surface_manager.h"
 #include "components/display_compositor/compositor_overlay_candidate_validator.h"
 #include "components/display_compositor/gl_helper.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 #include "content/browser/compositor/browser_compositor_output_surface.h"
 #include "content/browser/compositor/gpu_browser_compositor_output_surface.h"
 #include "content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.h"
@@ -40,7 +41,6 @@
 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
 #include "content/browser/gpu/gpu_data_manager_impl.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/common/host_shared_bitmap_manager.h"
 #include "content/public/common/content_switches.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
@@ -581,11 +581,12 @@
 
   // The Display owns and uses the |display_output_surface| created above.
   data->display = base::MakeUnique<cc::Display>(
-      HostSharedBitmapManager::current(), GetGpuMemoryBufferManager(),
-      compositor->GetRendererSettings(), compositor->frame_sink_id(),
-      begin_frame_source, std::move(display_output_surface),
-      std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>(
-                                compositor->task_runner().get()));
+      display_compositor::HostSharedBitmapManager::current(),
+      GetGpuMemoryBufferManager(), compositor->GetRendererSettings(),
+      compositor->frame_sink_id(), begin_frame_source,
+      std::move(display_output_surface), std::move(scheduler),
+      base::MakeUnique<cc::TextureMailboxDeleter>(
+          compositor->task_runner().get()));
   // Note that we are careful not to destroy prior BeginFrameSource objects
   // until we have reset |data->display|.
   data->synthetic_begin_frame_source = std::move(synthetic_begin_frame_source);
@@ -605,7 +606,7 @@
                 compositor->frame_sink_id(), surface_manager_.get(),
                 data->display.get(), context_provider,
                 shared_worker_context_provider_, GetGpuMemoryBufferManager(),
-                HostSharedBitmapManager::current());
+                display_compositor::HostSharedBitmapManager::current());
   data->display->Resize(compositor->size());
   data->display->SetOutputIsSecure(data->output_is_secure);
   compositor->SetCompositorFrameSink(std::move(compositor_frame_sink));
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc
index 8823e3a..204903c3 100644
--- a/content/browser/devtools/render_frame_devtools_agent_host.cc
+++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -462,6 +462,13 @@
 
   g_instances.Get().push_back(this);
   AddRef();  // Balanced in RenderFrameHostDestroyed.
+
+  DevToolsManager* manager = DevToolsManager::GetInstance();
+  if (manager->delegate()) {
+    type_ = manager->delegate()->GetTargetType(host);
+    title_ = manager->delegate()->GetTargetTitle(host);
+  }
+
   NotifyCreated();
 }
 
@@ -1015,24 +1022,18 @@
 }
 
 std::string RenderFrameDevToolsAgentHost::GetType() {
-  DevToolsManager* manager = DevToolsManager::GetInstance();
-  if (manager->delegate() && current_) {
-    std::string result = manager->delegate()->GetTargetType(current_->host());
-    if (!result.empty())
-      return result;
-  }
+  if (!type_.empty())
+    return type_;
   if (IsChildFrame())
     return kTypeFrame;
   return kTypePage;
 }
 
 std::string RenderFrameDevToolsAgentHost::GetTitle() {
-  DevToolsManager* manager = DevToolsManager::GetInstance();
-  if (manager->delegate() && current_) {
-    std::string result = manager->delegate()->GetTargetTitle(current_->host());
-    if (!result.empty())
-      return result;
-  }
+  if (!title_.empty())
+    return title_;
+  if (current_ && current_->host()->GetParent())
+    return current_->host()->GetLastCommittedURL().spec();
   content::WebContents* web_contents = GetWebContents();
   if (web_contents)
     return base::UTF16ToUTF8(web_contents->GetTitle());
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.h b/content/browser/devtools/render_frame_devtools_agent_host.h
index ff6bbd85..7e600114 100644
--- a/content/browser/devtools/render_frame_devtools_agent_host.h
+++ b/content/browser/devtools/render_frame_devtools_agent_host.h
@@ -171,6 +171,8 @@
 #endif
   RenderFrameHostImpl* handlers_frame_host_;
   bool current_frame_crashed_;
+  std::string title_;
+  std::string type_;
 
   // PlzNavigate
 
diff --git a/content/browser/dom_storage/local_storage_context_mojo_unittest.cc b/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
index 0f4fa58..05733f82 100644
--- a/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
+++ b/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
@@ -617,14 +617,17 @@
                               service_manager::mojom::ServiceFactory> {
  public:
   explicit ServiceTestClient(service_manager::test::ServiceTest* test)
-      : service_manager::test::ServiceTestClient(test) {}
+      : service_manager::test::ServiceTestClient(test) {
+    registry_.AddInterface<service_manager::mojom::ServiceFactory>(this);
+  }
   ~ServiceTestClient() override {}
 
  protected:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface<service_manager::mojom::ServiceFactory>(this);
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
   void CreateService(service_manager::mojom::ServiceRequest request,
@@ -644,6 +647,7 @@
   }
 
  private:
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<service_manager::mojom::ServiceFactory>
       service_factory_bindings_;
   std::unique_ptr<service_manager::ServiceContext> file_service_context_;
diff --git a/content/browser/download/download_create_info.cc b/content/browser/download/download_create_info.cc
index 060624c8..1d48aa17 100644
--- a/content/browser/download/download_create_info.cc
+++ b/content/browser/download/download_create_info.cc
@@ -21,6 +21,7 @@
       total_bytes(0),
       offset(0),
       has_user_gesture(false),
+      transient(false),
       result(DOWNLOAD_INTERRUPT_REASON_NONE),
       save_info(std::move(save_info)),
       request_net_log(net_log),
diff --git a/content/browser/download/download_create_info.h b/content/browser/download/download_create_info.h
index da7be51..59c51ca 100644
--- a/content/browser/download/download_create_info.h
+++ b/content/browser/download/download_create_info.h
@@ -72,6 +72,10 @@
   // True if the download was initiated by user action.
   bool has_user_gesture;
 
+  // Whether the download should be transient. A transient download is
+  // short-lived and is not shown in the UI.
+  bool transient;
+
   base::Optional<ui::PageTransition> transition_type;
 
   // The remote IP address where the download was fetched from.  Copied from
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc
index 5c2286b..65105cd 100644
--- a/content/browser/download/download_item_impl.cc
+++ b/content/browser/download/download_item_impl.cc
@@ -228,6 +228,7 @@
       start_time_(info.start_time),
       delegate_(delegate),
       is_temporary_(!info.save_info->file_path.empty()),
+      transient_(info.transient),
       last_modified_time_(info.last_modified),
       etag_(info.etag),
       net_log_(net_log),
diff --git a/content/browser/download/download_request_core.cc b/content/browser/download/download_request_core.cc
index 65d009a5..8d5e995c 100644
--- a/content/browser/download/download_request_core.cc
+++ b/content/browser/download/download_request_core.cc
@@ -62,6 +62,7 @@
     return std::move(save_info_);
   }
   uint32_t download_id() const { return download_id_; }
+  bool is_transient() const { return transient_; }
   const DownloadUrlParameters::OnStartedCallback& callback() const {
     return on_started_callback_;
   }
@@ -71,6 +72,7 @@
 
   std::unique_ptr<DownloadSaveInfo> save_info_;
   uint32_t download_id_ = DownloadItem::kInvalidId;
+  bool transient_ = false;
   DownloadUrlParameters::OnStartedCallback on_started_callback_;
 };
 
@@ -85,6 +87,7 @@
   request_data->save_info_.reset(
       new DownloadSaveInfo(parameters->GetSaveInfo()));
   request_data->download_id_ = download_id;
+  request_data->transient_ = parameters->is_transient();
   request_data->on_started_callback_ = parameters->callback();
   request->SetUserData(&kKey, request_data);
 }
@@ -199,6 +202,7 @@
   if (request_data) {
     save_info_ = request_data->TakeSaveInfo();
     download_id_ = request_data->download_id();
+    transient_ = request_data->is_transient();
     on_started_callback_ = request_data->callback();
     DownloadRequestData::Detach(request_);
     is_partial_request_ = save_info_->offset > 0;
@@ -228,6 +232,7 @@
   create_info->referrer_url = GURL(request()->referrer());
   create_info->result = result;
   create_info->download_id = download_id_;
+  create_info->transient = transient_;
   create_info->offset = create_info->save_info->offset;
   return create_info;
 }
diff --git a/content/browser/download/download_request_core.h b/content/browser/download/download_request_core.h
index 34b12893..395a90e4 100644
--- a/content/browser/download/download_request_core.h
+++ b/content/browser/download/download_request_core.h
@@ -135,6 +135,7 @@
   // populate the DownloadCreateInfo when the time comes.
   std::unique_ptr<DownloadSaveInfo> save_info_;
   uint32_t download_id_;
+  bool transient_;
   DownloadUrlParameters::OnStartedCallback on_started_callback_;
 
   // Data flow
diff --git a/content/browser/gpu/browser_gpu_channel_host_factory.cc b/content/browser/gpu/browser_gpu_channel_host_factory.cc
index e5cace20..f290ed3 100644
--- a/content/browser/gpu/browser_gpu_channel_host_factory.cc
+++ b/content/browser/gpu/browser_gpu_channel_host_factory.cc
@@ -39,32 +39,27 @@
     : public base::RefCountedThreadSafe<EstablishRequest> {
  public:
   static scoped_refptr<EstablishRequest> Create(int gpu_client_id,
-                                                uint64_t gpu_client_tracing_id,
-                                                int gpu_host_id);
+                                                uint64_t gpu_client_tracing_id);
   void Wait();
   void Cancel();
 
-  int gpu_host_id() { return gpu_host_id_; }
   IPC::ChannelHandle& channel_handle() { return channel_handle_; }
   gpu::GPUInfo gpu_info() { return gpu_info_; }
 
  private:
   friend class base::RefCountedThreadSafe<EstablishRequest>;
-  explicit EstablishRequest(int gpu_client_id,
-                            uint64_t gpu_client_tracing_id,
-                            int gpu_host_id);
+  explicit EstablishRequest(int gpu_client_id, uint64_t gpu_client_tracing_id);
   ~EstablishRequest() {}
   void EstablishOnIO();
   void OnEstablishedOnIO(const IPC::ChannelHandle& channel_handle,
-                         const gpu::GPUInfo& gpu_info);
+                         const gpu::GPUInfo& gpu_info,
+                         GpuProcessHost::EstablishChannelStatus status);
   void FinishOnIO();
   void FinishOnMain();
 
   base::WaitableEvent event_;
   const int gpu_client_id_;
   const uint64_t gpu_client_tracing_id_;
-  int gpu_host_id_;
-  bool reused_gpu_process_;
   IPC::ChannelHandle channel_handle_;
   gpu::GPUInfo gpu_info_;
   bool finished_;
@@ -74,10 +69,9 @@
 scoped_refptr<BrowserGpuChannelHostFactory::EstablishRequest>
 BrowserGpuChannelHostFactory::EstablishRequest::Create(
     int gpu_client_id,
-    uint64_t gpu_client_tracing_id,
-    int gpu_host_id) {
+    uint64_t gpu_client_tracing_id) {
   scoped_refptr<EstablishRequest> establish_request =
-      new EstablishRequest(gpu_client_id, gpu_client_tracing_id, gpu_host_id);
+      new EstablishRequest(gpu_client_id, gpu_client_tracing_id);
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
       BrowserThread::GetTaskRunnerForThread(BrowserThread::IO);
   // PostTask outside the constructor to ensure at least one reference exists.
@@ -90,14 +84,11 @@
 
 BrowserGpuChannelHostFactory::EstablishRequest::EstablishRequest(
     int gpu_client_id,
-    uint64_t gpu_client_tracing_id,
-    int gpu_host_id)
+    uint64_t gpu_client_tracing_id)
     : event_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
              base::WaitableEvent::InitialState::NOT_SIGNALED),
       gpu_client_id_(gpu_client_id),
       gpu_client_tracing_id_(gpu_client_tracing_id),
-      gpu_host_id_(gpu_host_id),
-      reused_gpu_process_(false),
       finished_(false),
       main_task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
 
@@ -107,27 +98,12 @@
       FROM_HERE_WITH_EXPLICIT_FUNCTION(
           "477117 "
           "BrowserGpuChannelHostFactory::EstablishRequest::EstablishOnIO"));
-  GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_);
+  GpuProcessHost* host =
+      GpuProcessHost::Get(GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED);
   if (!host) {
-    host = GpuProcessHost::Get(GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED);
-    if (!host) {
-      LOG(ERROR) << "Failed to launch GPU process.";
-      FinishOnIO();
-      return;
-    }
-    gpu_host_id_ = host->host_id();
-    reused_gpu_process_ = false;
-  } else {
-    if (reused_gpu_process_) {
-      // We come here if we retried to establish the channel because of a
-      // failure in ChannelEstablishedOnIO, but we ended up with the same
-      // process ID, meaning the failure was not because of a channel error,
-      // but another reason. So fail now.
-      LOG(ERROR) << "Failed to create channel.";
-      FinishOnIO();
-      return;
-    }
-    reused_gpu_process_ = true;
+    LOG(ERROR) << "Failed to launch GPU process.";
+    FinishOnIO();
+    return;
   }
 
   bool preempts = true;
@@ -143,18 +119,18 @@
 
 void BrowserGpuChannelHostFactory::EstablishRequest::OnEstablishedOnIO(
     const IPC::ChannelHandle& channel_handle,
-    const gpu::GPUInfo& gpu_info) {
-  if (!channel_handle.mojo_handle.is_valid() && reused_gpu_process_) {
-    // We failed after re-using the GPU process, but it may have died in the
-    // mean time. Retry to have a chance to create a fresh GPU process.
+    const gpu::GPUInfo& gpu_info,
+    GpuProcessHost::EstablishChannelStatus status) {
+  if (!channel_handle.mojo_handle.is_valid() &&
+      status == GpuProcessHost::EstablishChannelStatus::GPU_HOST_INVALID) {
     DVLOG(1) << "Failed to create channel on existing GPU process. Trying to "
                 "restart GPU process.";
     EstablishOnIO();
-  } else {
-    channel_handle_ = channel_handle;
-    gpu_info_ = gpu_info;
-    FinishOnIO();
+    return;
   }
+  channel_handle_ = channel_handle;
+  gpu_info_ = gpu_info;
+  FinishOnIO();
 }
 
 void BrowserGpuChannelHostFactory::EstablishRequest::FinishOnIO() {
@@ -234,8 +210,7 @@
           base::WaitableEvent::InitialState::NOT_SIGNALED)),
       gpu_memory_buffer_manager_(
           new BrowserGpuMemoryBufferManager(gpu_client_id_,
-                                            gpu_client_tracing_id_)),
-      gpu_host_id_(0) {
+                                            gpu_client_tracing_id_)) {
   if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kDisableGpuShaderDiskCache)) {
     DCHECK(GetContentClient());
@@ -291,8 +266,8 @@
 
   if (!gpu_channel_.get() && !pending_request_.get()) {
     // We should only get here if the context was lost.
-    pending_request_ = EstablishRequest::Create(
-        gpu_client_id_, gpu_client_tracing_id_, gpu_host_id_);
+    pending_request_ =
+        EstablishRequest::Create(gpu_client_id_, gpu_client_tracing_id_);
   }
 
   if (!callback.is_null()) {
@@ -349,7 +324,6 @@
         pending_request_->channel_handle(), shutdown_event_.get(),
         gpu_memory_buffer_manager_.get());
   }
-  gpu_host_id_ = pending_request_->gpu_host_id();
   pending_request_ = NULL;
 
   // TODO(robliao): Remove ScopedTracker below once https://crbug.com/466866 is
@@ -365,17 +339,6 @@
 }
 
 // static
-void BrowserGpuChannelHostFactory::AddFilterOnIO(
-    int host_id,
-    scoped_refptr<IPC::MessageFilter> filter) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
-  GpuProcessHost* host = GpuProcessHost::FromID(host_id);
-  if (host)
-    host->AddFilter(filter.get());
-}
-
-// static
 void BrowserGpuChannelHostFactory::InitializeShaderDiskCacheOnIO(
     int gpu_client_id,
     const base::FilePath& cache_dir) {
diff --git a/content/browser/gpu/browser_gpu_channel_host_factory.h b/content/browser/gpu/browser_gpu_channel_host_factory.h
index c1388b7..e5f3ce42 100644
--- a/content/browser/gpu/browser_gpu_channel_host_factory.h
+++ b/content/browser/gpu/browser_gpu_channel_host_factory.h
@@ -36,7 +36,6 @@
   std::unique_ptr<base::SharedMemory> AllocateSharedMemory(
       size_t size) override;
 
-  int GpuProcessHostId() { return gpu_host_id_; }
   gpu::GpuChannelHost* GetGpuChannel();
   int GetGpuChannelId() { return gpu_client_id_; }
 
@@ -64,8 +63,6 @@
 
   void GpuChannelEstablished();
 
-  static void AddFilterOnIO(int gpu_host_id,
-                            scoped_refptr<IPC::MessageFilter> filter);
   static void InitializeShaderDiskCacheOnIO(int gpu_client_id,
                                             const base::FilePath& cache_dir);
 
@@ -74,7 +71,6 @@
   std::unique_ptr<base::WaitableEvent> shutdown_event_;
   scoped_refptr<gpu::GpuChannelHost> gpu_channel_;
   std::unique_ptr<BrowserGpuMemoryBufferManager> gpu_memory_buffer_manager_;
-  int gpu_host_id_;
   scoped_refptr<EstablishRequest> pending_request_;
   std::vector<gpu::GpuChannelEstablishedCallback> established_callbacks_;
 
diff --git a/content/browser/gpu/gpu_client.cc b/content/browser/gpu/gpu_client.cc
index 3faea93..9fe3e05 100644
--- a/content/browser/gpu/gpu_client.cc
+++ b/content/browser/gpu/gpu_client.cc
@@ -41,7 +41,8 @@
 void GpuClient::OnEstablishGpuChannel(
     const EstablishGpuChannelCallback& callback,
     const IPC::ChannelHandle& channel,
-    const gpu::GPUInfo& gpu_info) {
+    const gpu::GPUInfo& gpu_info,
+    GpuProcessHost::EstablishChannelStatus status) {
   mojo::ScopedMessagePipeHandle channel_handle;
   channel_handle.reset(channel.mojo_handle);
   callback.Run(render_process_id_, std::move(channel_handle), gpu_info);
@@ -58,7 +59,9 @@
   GpuProcessHost* host =
       GpuProcessHost::Get(GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED);
   if (!host) {
-    OnEstablishGpuChannel(callback, IPC::ChannelHandle(), gpu::GPUInfo());
+    OnEstablishGpuChannel(
+        callback, IPC::ChannelHandle(), gpu::GPUInfo(),
+        GpuProcessHost::EstablishChannelStatus::GPU_ACCESS_DENIED);
     return;
   }
 
diff --git a/content/browser/gpu/gpu_client.h b/content/browser/gpu/gpu_client.h
index 70eb29f..4e45d860 100644
--- a/content/browser/gpu/gpu_client.h
+++ b/content/browser/gpu/gpu_client.h
@@ -6,6 +6,7 @@
 #define CONTENT_BROWSER_GPU_GPU_CLIENT_H_
 
 #include "base/memory/weak_ptr.h"
+#include "content/browser/gpu/gpu_process_host.h"
 #include "ipc/ipc_channel_handle.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/ui/public/interfaces/gpu.mojom.h"
@@ -23,7 +24,8 @@
   void OnError();
   void OnEstablishGpuChannel(const EstablishGpuChannelCallback& callback,
                              const IPC::ChannelHandle& channel,
-                             const gpu::GPUInfo& gpu_info);
+                             const gpu::GPUInfo& gpu_info,
+                             GpuProcessHost::EstablishChannelStatus status);
   void OnCreateGpuMemoryBuffer(const CreateGpuMemoryBufferCallback& callback,
                                const gfx::GpuMemoryBufferHandle& handle);
 
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index 4160c89..16b1f0d 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -34,8 +34,6 @@
 #include "content/browser/gpu/gpu_main_thread_factory.h"
 #include "content/browser/gpu/gpu_process_host_ui_shim.h"
 #include "content/browser/gpu/shader_cache_factory.h"
-#include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/browser/renderer_host/render_widget_host_view_frame_subscriber.h"
 #include "content/browser/service_manager/service_manager_context.h"
 #include "content/common/child_process_host_impl.h"
 #include "content/common/in_process_child_thread_params.h"
@@ -44,8 +42,6 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/browser/gpu_utils.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_widget_host_view.h"
 #include "content/public/common/connection_filter.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_switches.h"
@@ -198,15 +194,14 @@
 }
 
 #if defined(USE_OZONE)
-void SendGpuProcessMessageByHostId(int host_id, IPC::Message* message) {
-  GpuProcessHost* host = GpuProcessHost::FromID(host_id);
-  if (host) {
+void SendGpuProcessMessage(base::WeakPtr<GpuProcessHost> host,
+                           IPC::Message* message) {
+  if (host)
     host->Send(message);
-  } else {
+  else
     delete message;
-  }
 }
-#endif
+#endif  // defined(USE_OZONE)
 
 // NOTE: changes to this class need to be reviewed by the security team.
 class GpuSandboxedProcessLauncherDelegate
@@ -311,14 +306,6 @@
 #endif  // OS_WIN
 };
 
-void HostLoadedShader(int host_id,
-                      const std::string& key,
-                      const std::string& data) {
-  GpuProcessHost* host = GpuProcessHost::FromID(host_id);
-  if (host)
-    host->LoadedShader(key, data);
-}
-
 }  // anonymous namespace
 
 class GpuProcessHost::ConnectionFilterImpl : public ConnectionFilter {
@@ -631,8 +618,8 @@
   ui::OzonePlatform::GetInstance()
       ->GetGpuPlatformSupportHost()
       ->OnGpuProcessLaunched(
-          host_id_, BrowserThread::GetTaskRunnerForThread(BrowserThread::IO),
-          base::Bind(&SendGpuProcessMessageByHostId, host_id_));
+          host_id_, base::ThreadTaskRunnerHandle::Get(),
+          base::Bind(&SendGpuProcessMessage, weak_ptr_factory_.GetWeakPtr()));
 #endif
 
   return true;
@@ -662,11 +649,6 @@
   return result;
 }
 
-void GpuProcessHost::AddFilter(IPC::MessageFilter* filter) {
-  DCHECK(CalledOnValidThread());
-  process_->GetHost()->AddFilter(filter);
-}
-
 bool GpuProcessHost::OnMessageReceived(const IPC::Message& message) {
   DCHECK(CalledOnValidThread());
   RouteOnUIThread(message);
@@ -695,7 +677,8 @@
   // If GPU features are already blacklisted, no need to establish the channel.
   if (!GpuDataManagerImpl::GetInstance()->GpuAccessAllowed(NULL)) {
     DVLOG(1) << "GPU blacklisted, refusing to open a GPU channel.";
-    callback.Run(IPC::ChannelHandle(), gpu::GPUInfo());
+    callback.Run(IPC::ChannelHandle(), gpu::GPUInfo(),
+                 EstablishChannelStatus::GPU_ACCESS_DENIED);
     return;
   }
 
@@ -767,13 +750,15 @@
   if (channel_handle.is_valid() &&
       !GpuDataManagerImpl::GetInstance()->GpuAccessAllowed(nullptr)) {
     gpu_service_ptr_->CloseChannel(client_id);
-    callback.Run(IPC::ChannelHandle(), gpu::GPUInfo());
+    callback.Run(IPC::ChannelHandle(), gpu::GPUInfo(),
+                 EstablishChannelStatus::GPU_ACCESS_DENIED);
     RecordLogMessage(logging::LOG_WARNING, "WARNING",
                      "Hardware acceleration is unavailable.");
     return;
   }
 
-  callback.Run(IPC::ChannelHandle(channel_handle.release()), gpu_info_);
+  callback.Run(IPC::ChannelHandle(channel_handle.release()), gpu_info_,
+               EstablishChannelStatus::SUCCESS);
 }
 
 void GpuProcessHost::OnGpuMemoryBufferCreated(
@@ -1061,7 +1046,8 @@
   while (!channel_requests_.empty()) {
     auto callback = channel_requests_.front();
     channel_requests_.pop();
-    callback.Run(IPC::ChannelHandle(), gpu::GPUInfo());
+    callback.Run(IPC::ChannelHandle(), gpu::GPUInfo(),
+                 EstablishChannelStatus::GPU_HOST_INVALID);
   }
 
   while (!create_gpu_memory_buffer_requests_.empty()) {
@@ -1193,7 +1179,8 @@
   if (!cache.get())
     return;
 
-  cache->set_shader_loaded_callback(base::Bind(&HostLoadedShader, host_id_));
+  cache->set_shader_loaded_callback(base::Bind(&GpuProcessHost::LoadedShader,
+                                               weak_ptr_factory_.GetWeakPtr()));
 
   client_id_to_shader_cache_[client_id] = cache;
 }
diff --git a/content/browser/gpu/gpu_process_host.h b/content/browser/gpu/gpu_process_host.h
index f8729382..749d63be 100644
--- a/content/browser/gpu/gpu_process_host.h
+++ b/content/browser/gpu/gpu_process_host.h
@@ -66,8 +66,18 @@
     GPU_PROCESS_KIND_COUNT
   };
 
-  typedef base::Callback<void(const IPC::ChannelHandle&, const gpu::GPUInfo&)>
-      EstablishChannelCallback;
+  enum class EstablishChannelStatus {
+    GPU_ACCESS_DENIED,  // GPU access was not allowed.
+    GPU_HOST_INVALID,   // Request failed because the gpu host became invalid
+                        // while processing the request (e.g. the gpu process
+                        // may have been killed). The caller should normally
+                        // make another request to establish a new channel.
+    SUCCESS
+  };
+  using EstablishChannelCallback =
+      base::Callback<void(const IPC::ChannelHandle&,
+                          const gpu::GPUInfo&,
+                          EstablishChannelStatus status)>;
 
   typedef base::Callback<void(const gfx::GpuMemoryBufferHandle& handle)>
       CreateGpuMemoryBufferCallback;
@@ -108,9 +118,6 @@
   // IPC::Sender implementation.
   bool Send(IPC::Message* msg) override;
 
-  // Adds a message filter to the GpuProcessHost's channel.
-  void AddFilter(IPC::MessageFilter* filter);
-
   // Tells the GPU process to create a new channel for communication with a
   // client. Once the GPU process responds asynchronously with the IPC handle
   // and GPUInfo, we call the callback.
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index 8b9dd49..bfc265f 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -48,11 +48,11 @@
 #include "cc/trees/layer_tree_settings.h"
 #include "components/display_compositor/compositor_overlay_candidate_validator_android.h"
 #include "components/display_compositor/gl_helper.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 #include "content/browser/gpu/browser_gpu_channel_host_factory.h"
 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
 #include "content/browser/gpu/compositor_util.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/common/host_shared_bitmap_manager.h"
 #include "content/public/browser/android/compositor.h"
 #include "content/public/browser/android/compositor_client.h"
 #include "content/public/common/content_switches.h"
@@ -759,7 +759,7 @@
       task_runner, display_output_surface->capabilities().max_frames_pending));
 
   display_.reset(new cc::Display(
-      HostSharedBitmapManager::current(),
+      display_compositor::HostSharedBitmapManager::current(),
       BrowserGpuMemoryBufferManager::current(),
       host_->GetSettings().renderer_settings, frame_sink_id_,
       root_window_->GetBeginFrameSource(), std::move(display_output_surface),
@@ -774,7 +774,7 @@
           : base::MakeUnique<cc::DirectCompositorFrameSink>(
                 frame_sink_id_, manager, display_.get(), context_provider,
                 nullptr, BrowserGpuMemoryBufferManager::current(),
-                HostSharedBitmapManager::current());
+                display_compositor::HostSharedBitmapManager::current());
 
   display_->SetVisible(true);
   display_->Resize(size_);
diff --git a/content/browser/renderer_host/media/buildable_video_capture_device.h b/content/browser/renderer_host/media/buildable_video_capture_device.h
index 3f41490a..e358435 100644
--- a/content/browser/renderer_host/media/buildable_video_capture_device.h
+++ b/content/browser/renderer_host/media/buildable_video_capture_device.h
@@ -30,11 +30,7 @@
   class CONTENT_EXPORT Callbacks {
    public:
     virtual ~Callbacks() {}
-    // Returns nullptr if no descriptor was found.
-    virtual const media::VideoCaptureDeviceDescriptor* LookupDeviceDescriptor(
-        const std::string& id) = 0;
-    virtual void WillStartDevice(media::VideoFacingMode facing_mode) = 0;
-    virtual void DidStartDevice(VideoCaptureController* controller) = 0;
+    virtual void OnDeviceStarted(VideoCaptureController* controller) = 0;
     virtual void OnDeviceStartFailed(VideoCaptureController* controller) = 0;
     virtual void OnDeviceStartAborted() = 0;
   };
diff --git a/content/browser/renderer_host/media/in_process_buildable_video_capture_device.cc b/content/browser/renderer_host/media/in_process_buildable_video_capture_device.cc
index 3016f5f..f562158b 100644
--- a/content/browser/renderer_host/media/in_process_buildable_video_capture_device.cc
+++ b/content/browser/renderer_host/media/in_process_buildable_video_capture_device.cc
@@ -83,9 +83,9 @@
 
 InProcessBuildableVideoCaptureDevice::InProcessBuildableVideoCaptureDevice(
     scoped_refptr<base::SingleThreadTaskRunner> device_task_runner,
-    media::VideoCaptureDeviceFactory* device_factory)
+    media::VideoCaptureSystem* video_capture_system)
     : device_task_runner_(std::move(device_task_runner)),
-      device_factory_(device_factory) {}
+      video_capture_system_(video_capture_system) {}
 
 InProcessBuildableVideoCaptureDevice::~InProcessBuildableVideoCaptureDevice() {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -108,45 +108,24 @@
       CreateDeviceClient(max_buffers, controller->GetWeakPtrForIOThread());
 
   base::Closure start_capture_closure;
+  // Use of Unretained() is safe, because |done_cb| guarantees that
+  // |this| stays alive.
+  ReceiveDeviceCallback after_start_capture_callback = media::BindToCurrentLoop(
+      base::Bind(&InProcessBuildableVideoCaptureDevice::OnDeviceStarted,
+                 base::Unretained(this), controller, callbacks,
+                 base::Passed(&done_cb)));
+
   switch (controller->stream_type()) {
     case MEDIA_DEVICE_VIDEO_CAPTURE: {
-      const media::VideoCaptureDeviceDescriptor* descriptor =
-          callbacks->LookupDeviceDescriptor(controller->device_id());
-      if (!descriptor) {
-        callbacks->OnDeviceStartFailed(controller);
-        base::ResetAndReturn(&done_cb).Run();
-        return;
-      }
-      controller->OnLog(base::StringPrintf(
-          "Starting device: id: %s, name: %s, api: %s",
-          descriptor->device_id.c_str(), descriptor->GetNameAndModel().c_str(),
-          descriptor->GetCaptureApiTypeString()));
-
-      callbacks->WillStartDevice(descriptor->facing);
-
-      // Use of Unretained() is safe, because |done_cb| guarantees that |this|
-      // stays alive.
-      ReceiveDeviceCallback after_start_capture_callback =
-          media::BindToCurrentLoop(
-              base::Bind(&InProcessBuildableVideoCaptureDevice::OnDeviceStarted,
-                         base::Unretained(this), controller, callbacks,
-                         base::Passed(&done_cb)));
       start_capture_closure =
           base::Bind(&InProcessBuildableVideoCaptureDevice::
                          DoStartDeviceCaptureOnDeviceThread,
-                     base::Unretained(this), *descriptor, params,
+                     base::Unretained(this), controller->device_id(), params,
                      base::Passed(std::move(device_client)),
                      std::move(after_start_capture_callback));
       break;
     }
-    case MEDIA_TAB_VIDEO_CAPTURE: {
-      // Use of Unretained() is safe, because |done_cb| guarantees that |this|
-      // stays alive.
-      ReceiveDeviceCallback after_start_capture_callback =
-          media::BindToCurrentLoop(
-              base::Bind(&InProcessBuildableVideoCaptureDevice::OnDeviceStarted,
-                         base::Unretained(this), controller, callbacks,
-                         base::Passed(&done_cb)));
+    case MEDIA_TAB_VIDEO_CAPTURE:
       start_capture_closure =
           base::Bind(&InProcessBuildableVideoCaptureDevice::
                          DoStartTabCaptureOnDeviceThread,
@@ -154,15 +133,8 @@
                      base::Passed(std::move(device_client)),
                      std::move(after_start_capture_callback));
       break;
-    }
-    case MEDIA_DESKTOP_VIDEO_CAPTURE: {
-      // Use of Unretained() is safe, because |done_cb| guarantees that |this|
-      // stays alive.
-      ReceiveDeviceCallback after_start_capture_callback =
-          media::BindToCurrentLoop(
-              base::Bind(&InProcessBuildableVideoCaptureDevice::OnDeviceStarted,
-                         base::Unretained(this), controller, callbacks,
-                         base::Passed(&done_cb)));
+
+    case MEDIA_DESKTOP_VIDEO_CAPTURE:
       start_capture_closure =
           base::Bind(&InProcessBuildableVideoCaptureDevice::
                          DoStartDesktopCaptureOnDeviceThread,
@@ -170,7 +142,7 @@
                      base::Passed(std::move(device_client)),
                      std::move(after_start_capture_callback));
       break;
-    }
+
     default: {
       NOTIMPLEMENTED();
       return;
@@ -338,7 +310,7 @@
               device.get(), device_task_runner_));
       device_ = std::move(device);
       state_ = State::DEVICE_STARTED;
-      callbacks->DidStartDevice(controller);
+      callbacks->OnDeviceStarted(controller);
       base::ResetAndReturn(&done_cb).Run();
       return;
     case State::DEVICE_START_ABORTING:
@@ -363,7 +335,7 @@
 }
 
 void InProcessBuildableVideoCaptureDevice::DoStartDeviceCaptureOnDeviceThread(
-    const media::VideoCaptureDeviceDescriptor& descriptor,
+    const std::string& device_id,
     const media::VideoCaptureParams& params,
     std::unique_ptr<media::VideoCaptureDeviceClient> device_client,
     ReceiveDeviceCallback result_callback) {
@@ -371,7 +343,7 @@
   DCHECK(device_task_runner_->BelongsToCurrentThread());
 
   std::unique_ptr<media::VideoCaptureDevice> video_capture_device =
-      device_factory_->CreateDevice(descriptor);
+      video_capture_system_->CreateDevice(device_id);
 
   if (!video_capture_device) {
     result_callback.Run(nullptr);
diff --git a/content/browser/renderer_host/media/in_process_buildable_video_capture_device.h b/content/browser/renderer_host/media/in_process_buildable_video_capture_device.h
index b7c5639..a4cdfed 100644
--- a/content/browser/renderer_host/media/in_process_buildable_video_capture_device.h
+++ b/content/browser/renderer_host/media/in_process_buildable_video_capture_device.h
@@ -10,7 +10,7 @@
 #include "media/capture/video/video_capture_device.h"
 #include "media/capture/video/video_capture_device_client.h"
 #include "media/capture/video/video_capture_device_descriptor.h"
-#include "media/capture/video/video_capture_device_factory.h"
+#include "media/capture/video/video_capture_system.h"
 
 namespace content {
 
@@ -23,7 +23,7 @@
  public:
   InProcessBuildableVideoCaptureDevice(
       scoped_refptr<base::SingleThreadTaskRunner> device_task_runner,
-      media::VideoCaptureDeviceFactory* device_factory);
+      media::VideoCaptureSystem* video_capture_system);
   ~InProcessBuildableVideoCaptureDevice() override;
 
   // BuildableVideoCaptureDevice implementation:
@@ -70,7 +70,7 @@
                        std::unique_ptr<media::VideoCaptureDevice> device);
 
   void DoStartDeviceCaptureOnDeviceThread(
-      const media::VideoCaptureDeviceDescriptor& descriptor,
+      const std::string& device_id,
       const media::VideoCaptureParams& params,
       std::unique_ptr<media::VideoCaptureDeviceClient> client,
       ReceiveDeviceCallback result_callback);
@@ -93,7 +93,7 @@
       base::OnceClosure done_cb);
 
   const scoped_refptr<base::SingleThreadTaskRunner> device_task_runner_;
-  media::VideoCaptureDeviceFactory* const device_factory_;
+  media::VideoCaptureSystem* const video_capture_system_;
   std::unique_ptr<media::VideoCaptureDevice> device_;
   State state_ = State::NO_DEVICE;
 };
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_devices_dispatcher_host_unittest.cc
index c907d5f..5c964576 100644
--- a/content/browser/renderer_host/media/media_devices_dispatcher_host_unittest.cc
+++ b/content/browser/renderer_host/media/media_devices_dispatcher_host_unittest.cc
@@ -36,6 +36,7 @@
 
 using testing::_;
 using testing::SaveArg;
+using testing::InvokeWithoutArgs;
 
 namespace content {
 
@@ -354,38 +355,26 @@
   base::RunLoop().RunUntilIdle();
 
   // Verify that the callback for a valid origin does get called.
-  EXPECT_CALL(*this, ValidOriginCallback(testing::_));
+  base::RunLoop run_loop;
+  EXPECT_CALL(*this, ValidOriginCallback(testing::_))
+      .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
   host_->EnumerateDevices(
       true, true, true, url::Origin(GURL("http://localhost")),
       base::Bind(&MediaDevicesDispatcherHostTest::ValidOriginCallback,
                  base::Unretained(this)));
-  base::RunLoop().RunUntilIdle();
-#if defined(OS_WIN)
-  // On Windows, the underlying MediaStreamManager uses a separate thread for
-  // video capture which must be flushed to guarantee that the callback bound to
-  // EnumerateDevices above is invoked before the end of this test's body.
-  media_stream_manager_->FlushVideoCaptureThreadForTesting();
-  base::RunLoop().RunUntilIdle();
-#endif
+  run_loop.Run();
 }
 
 TEST_F(MediaDevicesDispatcherHostTest, GetVideoInputCapabilities) {
-  EXPECT_CALL(*this, MockVideoInputCapabilitiesCallback());
+  base::RunLoop run_loop;
+  EXPECT_CALL(*this, MockVideoInputCapabilitiesCallback())
+      .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
   host_->GetVideoInputCapabilities(
       origin_,
       base::Bind(
           &MediaDevicesDispatcherHostTest::VideoInputCapabilitiesCallback,
           base::Unretained(this)));
-  base::RunLoop().RunUntilIdle();
-
-#if defined(OS_WIN)
-  // On Windows, the underlying MediaStreamManager uses a separate thread for
-  // video capture which must be flushed to guarantee that the callback bound to
-  // GetVIdeoInputCapabilities above is invoked before the end of this test's
-  // body.
-  media_stream_manager_->FlushVideoCaptureThreadForTesting();
-  base::RunLoop().RunUntilIdle();
-#endif
+  run_loop.Run();
 }
 
 };  // namespace content
diff --git a/content/browser/renderer_host/media/media_devices_manager_unittest.cc b/content/browser/renderer_host/media/media_devices_manager_unittest.cc
index 5ad37f9..cbad64f 100644
--- a/content/browser/renderer_host/media/media_devices_manager_unittest.cc
+++ b/content/browser/renderer_host/media/media_devices_manager_unittest.cc
@@ -20,6 +20,7 @@
 #include "media/audio/fake_audio_log_factory.h"
 #include "media/audio/fake_audio_manager.h"
 #include "media/capture/video/fake_video_capture_device_factory.h"
+#include "media/capture/video/video_capture_system_impl.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -142,12 +143,13 @@
   void SetUp() override {
     audio_manager_.reset(new MockAudioManager());
     audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get());
+    auto video_capture_device_factory =
+        base::MakeUnique<MockVideoCaptureDeviceFactory>();
+    video_capture_device_factory_ = video_capture_device_factory.get();
+    auto video_capture_system = base::MakeUnique<media::VideoCaptureSystemImpl>(
+        std::move(video_capture_device_factory));
     video_capture_manager_ = new VideoCaptureManager(
-        std::unique_ptr<media::VideoCaptureDeviceFactory>(
-            new MockVideoCaptureDeviceFactory()),
-        base::ThreadTaskRunnerHandle::Get());
-    video_capture_device_factory_ = static_cast<MockVideoCaptureDeviceFactory*>(
-        video_capture_manager_->video_capture_device_factory());
+        std::move(video_capture_system), base::ThreadTaskRunnerHandle::Get());
     media_devices_manager_.reset(new MediaDevicesManager(
         audio_system_.get(), video_capture_manager_, nullptr));
   }
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
index 44e034b..5d10dc88 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
@@ -53,17 +53,26 @@
 using ::testing::DeleteArg;
 using ::testing::DoAll;
 using ::testing::InSequence;
+using ::testing::Invoke;
 using ::testing::Return;
 using ::testing::SaveArg;
 
-const int kProcessId = 5;
-const int kRenderId = 6;
-const int kPageRequestId = 7;
-
 namespace content {
 
 namespace {
 
+constexpr int kProcessId = 5;
+constexpr int kRenderId = 6;
+constexpr int kPageRequestId = 7;
+constexpr const char* kRegularVideoDeviceId = "stub_device_0";
+constexpr const char* kDepthVideoDeviceId = "stub_device_1 (depth)";
+constexpr media::VideoCaptureApi kStubCaptureApi =
+    media::VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE;
+constexpr double kStubFocalLengthX = 135.0;
+constexpr double kStubFocalLengthY = 135.6;
+constexpr double kStubDepthNear = 0.0;
+constexpr double kStubDepthFar = 65.535;
+
 void AudioInputDevicesEnumerated(base::Closure quit_closure,
                                  media::AudioDeviceDescriptions* out,
                                  const MediaDeviceEnumeration& enumeration) {
@@ -73,7 +82,7 @@
   quit_closure.Run();
 }
 
-}  // namespace
+}  // anonymous namespace
 
 class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
                                       public TestContentBrowserClient {
@@ -228,6 +237,18 @@
            const MediaStreamUIProxy::WindowIdCallback& window_id_callback));
 };
 
+class MockVideoCaptureSystem : public media::VideoCaptureSystem {
+ public:
+  MOCK_METHOD1(GetDeviceInfosAsync,
+               void(const base::Callback<
+                    void(const std::vector<media::VideoCaptureDeviceInfo>&)>&
+                        result_callback));
+
+  MOCK_METHOD1(
+      CreateDevice,
+      std::unique_ptr<media::VideoCaptureDevice>(const std::string& device_id));
+};
+
 class MediaStreamDispatcherHostTest : public testing::Test {
  public:
   MediaStreamDispatcherHostTest()
@@ -240,19 +261,12 @@
     // Make sure we use fake devices to avoid long delays.
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kUseFakeDeviceForMediaStream);
+    auto mock_video_capture_system = base::MakeUnique<MockVideoCaptureSystem>();
+    mock_video_capture_system_ = mock_video_capture_system.get();
     // Create our own MediaStreamManager.
-    media_stream_manager_ =
-        base::MakeUnique<MediaStreamManager>(audio_system_.get());
-    video_capture_device_factory_ =
-        static_cast<media::FakeVideoCaptureDeviceFactory*>(
-            media_stream_manager_->video_capture_manager()
-            ->video_capture_device_factory());
-    DCHECK(video_capture_device_factory_);
-#if defined(OS_WIN)
-    // Override the Video Capture Thread that MediaStreamManager constructs.
-    media_stream_manager_->video_capture_manager()->set_device_task_runner(
+    media_stream_manager_ = base::MakeUnique<MediaStreamManager>(
+        audio_system_.get(), std::move(mock_video_capture_system),
         base::ThreadTaskRunnerHandle::Get());
-#endif
 
     MockResourceContext* mock_resource_context =
         static_cast<MockResourceContext*>(
@@ -279,9 +293,32 @@
   }
 
   void SetUp() override {
-    video_capture_device_factory_->GetDeviceDescriptors(
-        &physical_video_devices_);
-    ASSERT_GT(physical_video_devices_.size(), 0u);
+    stub_video_device_ids_.emplace_back(kRegularVideoDeviceId);
+    stub_video_device_ids_.emplace_back(kDepthVideoDeviceId);
+    ON_CALL(*mock_video_capture_system_, GetDeviceInfosAsync(_))
+        .WillByDefault(Invoke(
+            [this](const base::Callback<void(
+                       const std::vector<media::VideoCaptureDeviceInfo>&)>&
+                       result_callback) {
+              std::vector<media::VideoCaptureDeviceInfo> result;
+              for (const auto& device_id : stub_video_device_ids_) {
+                media::VideoCaptureDeviceInfo info;
+                info.descriptor.device_id = device_id;
+                info.descriptor.capture_api = kStubCaptureApi;
+                if (device_id == kDepthVideoDeviceId) {
+                  info.descriptor.camera_calibration.emplace();
+                  info.descriptor.camera_calibration->focal_length_x =
+                      kStubFocalLengthX;
+                  info.descriptor.camera_calibration->focal_length_y =
+                      kStubFocalLengthY;
+                  info.descriptor.camera_calibration->depth_near =
+                      kStubDepthNear;
+                  info.descriptor.camera_calibration->depth_far = kStubDepthFar;
+                }
+                result.push_back(info);
+              }
+              result_callback.Run(result);
+            }));
 
     base::RunLoop run_loop;
     MediaDevicesManager::BoolDeviceTypes devices_to_enumerate;
@@ -289,10 +326,10 @@
     media_stream_manager_->media_devices_manager()->EnumerateDevices(
         devices_to_enumerate,
         base::Bind(&AudioInputDevicesEnumerated, run_loop.QuitClosure(),
-                   &physical_audio_devices_));
+                   &audio_device_descriptions_));
     run_loop.Run();
 
-    ASSERT_GT(physical_audio_devices_.size(), 0u);
+    ASSERT_GT(audio_device_descriptions_.size(), 0u);
   }
 
   void TearDown() override { host_->OnChannelClosing(); }
@@ -312,9 +349,10 @@
                                       const StreamControls& controls) {
     base::RunLoop run_loop;
     int expected_audio_array_size =
-        (controls.audio.requested && !physical_audio_devices_.empty()) ? 1 : 0;
+        (controls.audio.requested && !audio_device_descriptions_.empty()) ? 1
+                                                                          : 0;
     int expected_video_array_size =
-        (controls.video.requested && !physical_video_devices_.empty()) ? 1 : 0;
+        (controls.video.requested && !stub_video_device_ids_.empty()) ? 1 : 0;
     EXPECT_CALL(*host_.get(), OnStreamGenerated(render_frame_id,
                                                 page_request_id,
                                                 expected_audio_array_size,
@@ -361,13 +399,13 @@
               media::AudioDeviceDescription::kDefaultDeviceId &&
           devices[i].device.id !=
               media::AudioDeviceDescription::kCommunicationsDeviceId) {
-        for (const auto& audio_device : physical_audio_devices_) {
+        for (const auto& audio_device : audio_device_descriptions_) {
           if (audio_device.unique_id == devices[i].device.id)
             return true;
         }
       }
-      for (const auto& video_device : physical_video_devices_) {
-        if (video_device.device_id == devices[i].device.id)
+      for (const std::string& device_id : stub_video_device_ids_) {
+        if (device_id == devices[i].device.id)
           return true;
       }
     }
@@ -379,8 +417,8 @@
     for (size_t i = 0; i < devices.size(); ++i) {
       bool found_match = false;
       media::AudioDeviceDescriptions::const_iterator audio_it =
-          physical_audio_devices_.begin();
-      for (; audio_it != physical_audio_devices_.end(); ++audio_it) {
+          audio_device_descriptions_.begin();
+      for (; audio_it != audio_device_descriptions_.end(); ++audio_it) {
         if (content::DoesMediaDeviceIDMatchHMAC(
                 browser_context_.GetResourceContext()->GetMediaDeviceIDSalt(),
                 origin,
@@ -390,12 +428,10 @@
           found_match = true;
         }
       }
-      media::VideoCaptureDeviceDescriptors::const_iterator video_it =
-          physical_video_devices_.begin();
-      for (; video_it != physical_video_devices_.end(); ++video_it) {
+      for (const std::string& device_id : stub_video_device_ids_) {
         if (content::DoesMediaDeviceIDMatchHMAC(
                 browser_context_.GetResourceContext()->GetMediaDeviceIDSalt(),
-                origin, devices[i].device.id, video_it->device_id)) {
+                origin, devices[i].device.id, device_id)) {
           EXPECT_FALSE(found_match);
           found_match = true;
         }
@@ -434,10 +470,10 @@
   ContentBrowserClient* old_browser_client_;
   std::unique_ptr<ContentClient> content_client_;
   content::TestBrowserContext browser_context_;
-  media::AudioDeviceDescriptions physical_audio_devices_;
-  media::VideoCaptureDeviceDescriptors physical_video_devices_;
+  media::AudioDeviceDescriptions audio_device_descriptions_;
+  std::vector<std::string> stub_video_device_ids_;
   url::Origin origin_;
-  media::FakeVideoCaptureDeviceFactory* video_capture_device_factory_;
+  MockVideoCaptureSystem* mock_video_capture_system_;
 };
 
 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamWithVideoOnly) {
@@ -481,26 +517,21 @@
 }
 
 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamWithDepthVideo) {
-  // Video device on index 1 is depth video capture device.  The number of fake
-  // devices is 2.
-  physical_video_devices_.clear();
-  video_capture_device_factory_->SetToDefaultDevicesConfig(2);
-  video_capture_device_factory_->GetDeviceDescriptors(&physical_video_devices_);
   // We specify to generate both audio and video stream.
   StreamControls controls(true, true);
   std::string source_id = content::GetHMACForMediaDeviceID(
       browser_context_.GetResourceContext()->GetMediaDeviceIDSalt(), origin_,
-      physical_video_devices_[1].device_id);
-  // |source_id| is related to depth device (the device on index 1). As we can
-  // generate only one video stream using GenerateStreamAndWaitForResult, we
-  // use controls.video.source_id to specify that the stream is depth video.
+      kDepthVideoDeviceId);
+  // |source_id| corresponds to the depth device. As we can generate only one
+  // video stream using GenerateStreamAndWaitForResult, we use
+  // controls.video.source_id to specify that the stream is depth video.
   // See also MediaStreamManager::GenerateStream and other tests here.
   controls.video.device_id = source_id;
 
   SetupFakeUI(true);
   GenerateStreamAndWaitForResult(kRenderId, kPageRequestId, controls);
 
-  // There are two fake devices. We specified the generation and expect to get
+  // We specified the generation and expect to get
   // one audio and one depth video stream.
   EXPECT_EQ(host_->audio_devices_.size(), 1u);
   EXPECT_EQ(host_->video_devices_.size(), 1u);
@@ -509,10 +540,10 @@
   const base::Optional<CameraCalibration> calibration =
       host_->video_devices_[0].device.camera_calibration;
   EXPECT_TRUE(calibration);
-  EXPECT_EQ(calibration->focal_length_x, 135.0);
-  EXPECT_EQ(calibration->focal_length_y, 135.6);
-  EXPECT_EQ(calibration->depth_near, 0.0);
-  EXPECT_EQ(calibration->depth_far, 65.535);
+  EXPECT_EQ(calibration->focal_length_x, kStubFocalLengthX);
+  EXPECT_EQ(calibration->focal_length_y, kStubFocalLengthY);
+  EXPECT_EQ(calibration->depth_near, kStubDepthNear);
+  EXPECT_EQ(calibration->depth_far, kStubDepthFar);
 }
 
 // This test generates two streams with video only using the same render frame
@@ -636,12 +667,12 @@
 // Test that we can generate streams where a sourceId is specified in
 // the request.
 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamsWithSourceId) {
-  ASSERT_GE(physical_audio_devices_.size(), 1u);
-  ASSERT_GE(physical_video_devices_.size(), 1u);
+  ASSERT_GE(audio_device_descriptions_.size(), 1u);
+  ASSERT_GE(stub_video_device_ids_.size(), 1u);
 
   media::AudioDeviceDescriptions::const_iterator audio_it =
-      physical_audio_devices_.begin();
-  for (; audio_it != physical_audio_devices_.end(); ++audio_it) {
+      audio_device_descriptions_.begin();
+  for (; audio_it != audio_device_descriptions_.end(); ++audio_it) {
     std::string source_id = content::GetHMACForMediaDeviceID(
         browser_context_.GetResourceContext()->GetMediaDeviceIDSalt(),
         origin_,
@@ -655,12 +686,10 @@
     EXPECT_EQ(host_->audio_devices_[0].device.id, source_id);
   }
 
-  media::VideoCaptureDeviceDescriptors::const_iterator video_it =
-      physical_video_devices_.begin();
-  for (; video_it != physical_video_devices_.end(); ++video_it) {
+  for (const std::string& device_id : stub_video_device_ids_) {
     std::string source_id = content::GetHMACForMediaDeviceID(
         browser_context_.GetResourceContext()->GetMediaDeviceIDSalt(), origin_,
-        video_it->device_id);
+        device_id);
     ASSERT_FALSE(source_id.empty());
     StreamControls controls(true, true);
     controls.video.device_id = source_id;
@@ -690,9 +719,7 @@
 }
 
 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamsNoAvailableVideoDevice) {
-  physical_video_devices_.clear();
-  video_capture_device_factory_->SetToDefaultDevicesConfig(0);
-  video_capture_device_factory_->GetDeviceDescriptors(&physical_video_devices_);
+  stub_video_device_ids_.clear();
   StreamControls controls(true, true);
 
   SetupFakeUI(false);
@@ -848,7 +875,7 @@
   EXPECT_EQ(host_->audio_devices_.size(), 1u);
   EXPECT_EQ(host_->video_devices_.size(), 1u);
 
-  video_capture_device_factory_->SetToDefaultDevicesConfig(0);
+  stub_video_device_ids_.clear();
 
   base::RunLoop run_loop;
   EXPECT_CALL(*host_.get(), OnDeviceStopped(kRenderId))
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index 963c9c7..2711aac7 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -50,6 +50,7 @@
 #include "media/base/channel_layout.h"
 #include "media/base/media_switches.h"
 #include "media/capture/video/video_capture_device_factory.h"
+#include "media/capture/video/video_capture_system_impl.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
@@ -393,6 +394,12 @@
 }
 
 MediaStreamManager::MediaStreamManager(media::AudioSystem* audio_system)
+    : MediaStreamManager(audio_system, nullptr, nullptr) {}
+
+MediaStreamManager::MediaStreamManager(
+    media::AudioSystem* audio_system,
+    std::unique_ptr<media::VideoCaptureSystem> video_capture_system,
+    scoped_refptr<base::SingleThreadTaskRunner> device_task_runner)
     : audio_system_(audio_system),
 #if defined(OS_WIN)
       video_capture_thread_("VideoCaptureThread"),
@@ -401,16 +408,23 @@
           switches::kUseFakeUIForMediaStream)) {
   DCHECK(audio_system_);
 
-  // Some unit tests create the MSM in the IO thread and assumes the
-  // initialization is done synchronously.
-  if (BrowserThread::CurrentlyOn(BrowserThread::IO)) {
-    InitializeDeviceManagersOnIOThread();
-  } else {
-    BrowserThread::PostTask(
-        BrowserThread::IO, FROM_HERE,
-        base::Bind(&MediaStreamManager::InitializeDeviceManagersOnIOThread,
-                   base::Unretained(this)));
+  if (!video_capture_system) {
+    video_capture_system = base::MakeUnique<media::VideoCaptureSystemImpl>(
+        media::VideoCaptureDeviceFactory::CreateFactory(
+            BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)));
   }
+  if (!device_task_runner) {
+    device_task_runner = audio_system_->GetTaskRunner();
+#if defined(OS_WIN)
+    // Use an STA Video Capture Thread to try to avoid crashes on enumeration of
+    // buggy third party Direct Show modules, http://crbug.com/428958.
+    video_capture_thread_.init_com_with_mta(false);
+    CHECK(video_capture_thread_.Start());
+    device_task_runner = video_capture_thread_.task_runner();
+#endif
+  }
+  InitializeMaybeAsync(std::move(video_capture_system),
+                       std::move(device_task_runner));
 
   base::PowerMonitor* power_monitor = base::PowerMonitor::Get();
   // BrowserMainLoop always creates the PowerMonitor instance before creating
@@ -1214,8 +1228,21 @@
   DeleteRequest(label);
 }
 
-void MediaStreamManager::InitializeDeviceManagersOnIOThread() {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+void MediaStreamManager::InitializeMaybeAsync(
+    std::unique_ptr<media::VideoCaptureSystem> video_capture_system,
+    scoped_refptr<base::SingleThreadTaskRunner> device_task_runner) {
+  // Some unit tests initialize the MSM in the IO thread and assume the
+  // initialization is done synchronously. Other clients call this from a
+  // different thread and expect initialization to run asynchronously.
+  if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
+    BrowserThread::PostTask(
+        BrowserThread::IO, FROM_HERE,
+        base::Bind(&MediaStreamManager::InitializeMaybeAsync,
+                   base::Unretained(this), base::Passed(&video_capture_system),
+                   std::move(device_task_runner)));
+    return;
+  }
+
   // Store a pointer to |this| on the IO thread to avoid having to jump to the
   // UI thread to fetch a pointer to the MSM. In particular on Android, it can
   // be problematic to post to a UI thread from arbitrary worker threads since
@@ -1228,7 +1255,6 @@
   tracked_objects::ScopedTracker tracking_profile1(
       FROM_HERE_WITH_EXPLICIT_FUNCTION(
           "457525 MediaStreamManager::InitializeDeviceManagersOnIOThread 1"));
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
   // TODO(dalecurtis): Remove ScopedTracker below once crbug.com/457525 is
   // fixed.
@@ -1253,22 +1279,9 @@
   tracked_objects::ScopedTracker tracking_profile4(
       FROM_HERE_WITH_EXPLICIT_FUNCTION(
           "457525 MediaStreamManager::InitializeDeviceManagersOnIOThread 4"));
-#if defined(OS_WIN)
-  // Use an STA Video Capture Thread to try to avoid crashes on enumeration of
-  // buggy third party Direct Show modules, http://crbug.com/428958.
-  video_capture_thread_.init_com_with_mta(false);
-  CHECK(video_capture_thread_.Start());
-  video_capture_manager_ = new VideoCaptureManager(
-      media::VideoCaptureDeviceFactory::CreateFactory(
-          BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)),
-      video_capture_thread_.task_runner());
-#else
-  video_capture_manager_ = new VideoCaptureManager(
-      media::VideoCaptureDeviceFactory::CreateFactory(
-          BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)),
-      audio_system_->GetTaskRunner());
-#endif
 
+  video_capture_manager_ = new VideoCaptureManager(
+      std::move(video_capture_system), std::move(device_task_runner));
   video_capture_manager_->RegisterListener(this);
 
   media_devices_manager_.reset(
@@ -1735,12 +1748,6 @@
   generate_stream_test_callback_ = test_callback;
 }
 
-#if defined(OS_WIN)
-void MediaStreamManager::FlushVideoCaptureThreadForTesting() {
-  video_capture_thread_.FlushForTesting();
-}
-#endif
-
 MediaStreamDevices MediaStreamManager::ConvertToMediaStreamDevices(
     MediaStreamType stream_type,
     const MediaDeviceInfoArray& device_infos) {
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h
index 630addd..b3a5cec 100644
--- a/content/browser/renderer_host/media/media_stream_manager.h
+++ b/content/browser/renderer_host/media/media_stream_manager.h
@@ -49,6 +49,7 @@
 
 namespace media {
 class AudioSystem;
+class VideoCaptureSystem;
 }
 
 namespace url {
@@ -87,6 +88,13 @@
 
   explicit MediaStreamManager(media::AudioSystem* audio_system);
 
+  // |audio_system| is required but defaults will be used if either
+  // |video_capture_system| or |device_task_runner| are null.
+  explicit MediaStreamManager(
+      media::AudioSystem* audio_system,
+      std::unique_ptr<media::VideoCaptureSystem> video_capture_system,
+      scoped_refptr<base::SingleThreadTaskRunner> device_task_runner);
+
   ~MediaStreamManager() override;
 
   // Used to access VideoCaptureManager.
@@ -260,10 +268,6 @@
   void SetGenerateStreamCallbackForTesting(
       GenerateStreamTestCallback test_callback);
 
-#if defined(OS_WIN)
-  void FlushVideoCaptureThreadForTesting();
-#endif
-
   // This method is called when all tracks are started.
   void OnStreamStarted(const std::string& label);
 
@@ -277,9 +281,9 @@
   using LabeledDeviceRequest = std::pair<std::string, DeviceRequest*>;
   using DeviceRequests = std::list<LabeledDeviceRequest>;
 
-  // Initializes the device managers on IO thread.  Auto-starts the device
-  // thread and registers this as a listener with the device managers.
-  void InitializeDeviceManagersOnIOThread();
+  void InitializeMaybeAsync(
+      std::unique_ptr<media::VideoCaptureSystem> video_capture_system,
+      scoped_refptr<base::SingleThreadTaskRunner> device_task_runner);
 
   // |output_parameters| contains real values only if the request requires it.
   void HandleAccessRequestResponse(
diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/content/browser/renderer_host/media/video_capture_manager.cc
index c5b56ce..9c58c0f 100644
--- a/content/browser/renderer_host/media/video_capture_manager.cc
+++ b/content/browser/renderer_host/media/video_capture_manager.cc
@@ -58,51 +58,6 @@
 
 namespace {
 
-// Compares two VideoCaptureFormat by checking smallest frame_size area, then
-// by _largest_ frame_rate. Used to order a VideoCaptureFormats vector so that
-// the first entry for a given resolution has the largest frame rate, as needed
-// by the ConsolidateCaptureFormats() method.
-bool IsCaptureFormatSmaller(const media::VideoCaptureFormat& format1,
-                            const media::VideoCaptureFormat& format2) {
-  DCHECK(format1.frame_size.GetCheckedArea().IsValid());
-  DCHECK(format2.frame_size.GetCheckedArea().IsValid());
-  if (format1.frame_size.GetCheckedArea().ValueOrDefault(0) ==
-      format2.frame_size.GetCheckedArea().ValueOrDefault(0)) {
-    return format1.frame_rate > format2.frame_rate;
-  }
-  return format1.frame_size.GetCheckedArea().ValueOrDefault(0) <
-         format2.frame_size.GetCheckedArea().ValueOrDefault(0);
-}
-
-bool IsCaptureFormatSizeEqual(const media::VideoCaptureFormat& format1,
-                              const media::VideoCaptureFormat& format2) {
-  DCHECK(format1.frame_size.GetCheckedArea().IsValid());
-  DCHECK(format2.frame_size.GetCheckedArea().IsValid());
-  return format1.frame_size.GetCheckedArea().ValueOrDefault(0) ==
-         format2.frame_size.GetCheckedArea().ValueOrDefault(0);
-}
-
-// This function receives a list of capture formats, removes duplicated
-// resolutions while keeping the highest frame rate for each, and forcing I420
-// pixel format.
-void ConsolidateCaptureFormats(media::VideoCaptureFormats* formats) {
-  if (formats->empty())
-    return;
-  std::sort(formats->begin(), formats->end(), IsCaptureFormatSmaller);
-  // Due to the ordering imposed, the largest frame_rate is kept while removing
-  // duplicated resolutions.
-  media::VideoCaptureFormats::iterator last =
-      std::unique(formats->begin(), formats->end(), IsCaptureFormatSizeEqual);
-  formats->erase(last, formats->end());
-  // Mark all formats as I420, since this is what the renderer side will get
-  // anyhow: the actual pixel format is decided at the device level.
-  // Don't do this for Y16 format as it is handled separatelly.
-  for (auto& format : *formats) {
-    if (format.pixel_format != media::PIXEL_FORMAT_Y16)
-      format.pixel_format = media::PIXEL_FORMAT_I420;
-  }
-}
-
 // Used for logging capture events.
 // Elements in this enum should not be deleted or rearranged; the only
 // permitted operation is to add new elements before NUM_VIDEO_CAPTURE_EVENT.
@@ -126,19 +81,6 @@
 
 namespace content {
 
-// Bundles a media::VideoCaptureDeviceDescriptor with corresponding supported
-// video formats.
-struct VideoCaptureManager::DeviceInfo {
-  DeviceInfo();
-  DeviceInfo(media::VideoCaptureDeviceDescriptor descriptor);
-  DeviceInfo(const DeviceInfo& other);
-  ~DeviceInfo();
-  DeviceInfo& operator=(const DeviceInfo& other);
-
-  media::VideoCaptureDeviceDescriptor descriptor;
-  media::VideoCaptureFormats supported_formats;
-};
-
 // Class used for queuing request for starting a device.
 class VideoCaptureManager::CaptureDeviceStartRequest {
  public:
@@ -155,20 +97,6 @@
   const media::VideoCaptureParams params_;
 };
 
-VideoCaptureManager::DeviceInfo::DeviceInfo() = default;
-
-VideoCaptureManager::DeviceInfo::DeviceInfo(
-    media::VideoCaptureDeviceDescriptor descriptor)
-    : descriptor(descriptor) {}
-
-VideoCaptureManager::DeviceInfo::DeviceInfo(
-    const VideoCaptureManager::DeviceInfo& other) = default;
-
-VideoCaptureManager::DeviceInfo::~DeviceInfo() = default;
-
-VideoCaptureManager::DeviceInfo& VideoCaptureManager::DeviceInfo::operator=(
-    const VideoCaptureManager::DeviceInfo& other) = default;
-
 VideoCaptureManager::CaptureDeviceStartRequest::CaptureDeviceStartRequest(
     VideoCaptureController* controller,
     media::VideoCaptureSessionId session_id,
@@ -176,11 +104,11 @@
     : controller_(controller), session_id_(session_id), params_(params) {}
 
 VideoCaptureManager::VideoCaptureManager(
-    std::unique_ptr<media::VideoCaptureDeviceFactory> factory,
+    std::unique_ptr<media::VideoCaptureSystem> video_capture_system,
     scoped_refptr<base::SingleThreadTaskRunner> device_task_runner)
     : device_task_runner_(std::move(device_task_runner)),
       new_capture_session_id_(1),
-      video_capture_device_factory_(std::move(factory)) {}
+      video_capture_system_(std::move(video_capture_system)) {}
 
 VideoCaptureManager::~VideoCaptureManager() {
   DCHECK(controllers_.empty());
@@ -224,29 +152,17 @@
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DVLOG(1) << "VideoCaptureManager::EnumerateDevices";
 
-  // Bind a callback to ConsolidateDevicesInfoOnDeviceThread() with an argument
-  // for another callback to OnDevicesInfoEnumerated() to be run in the current
-  // loop, i.e. IO loop. Pass a timer for UMA histogram collection.
-  base::Callback<void(std::unique_ptr<VideoCaptureDeviceDescriptors>)>
-      devices_enumerated_callback = base::Bind(
-          &VideoCaptureManager::ConsolidateDevicesInfoOnDeviceThread, this,
-          media::BindToCurrentLoop(base::Bind(
-              &VideoCaptureManager::OnDevicesInfoEnumerated, this,
-              base::Owned(new base::ElapsedTimer()), client_callback)),
-          devices_info_cache_);
-  // OK to use base::Unretained() since we own the VCDFactory and |this| is
-  // bound in |devices_enumerated_callback|.
+  // OK to use base::Unretained(video_capture_system_) since we own the
+  // |video_capture_system_| and |this| is bound in
+  // |devices_enumerated_callback|.
   device_task_runner_->PostTask(
       FROM_HERE,
-      base::Bind(&media::VideoCaptureDeviceFactory::EnumerateDeviceDescriptors,
-                 base::Unretained(video_capture_device_factory_.get()),
-                 devices_enumerated_callback));
-}
-
-const media::VideoCaptureDeviceDescriptor*
-VideoCaptureManager::LookupDeviceDescriptor(const std::string& id) {
-  const DeviceInfo* info = GetDeviceInfoById(id);
-  return info ? (&info->descriptor) : nullptr;
+      base::Bind(&media::VideoCaptureSystem::GetDeviceInfosAsync,
+                 base::Unretained(video_capture_system_.get()),
+                 // Pass a timer for UMA histogram collection.
+                 media::BindToCurrentLoop(base::Bind(
+                     &VideoCaptureManager::OnDeviceInfosReceived, this,
+                     base::Owned(new base::ElapsedTimer()), client_callback))));
 }
 
 int VideoCaptureManager::Open(const MediaStreamDevice& device) {
@@ -337,7 +253,8 @@
     }
   }
 
-  const DeviceInfo* device_info = GetDeviceInfoById(controller->device_id());
+  const media::VideoCaptureDeviceInfo* device_info =
+      GetDeviceInfoById(controller->device_id());
   if (device_info != nullptr) {
     for (auto& observer : capture_observers_)
       observer.OnVideoCaptureStopped(device_info->descriptor.facing);
@@ -368,6 +285,25 @@
   DVLOG(3) << "HandleQueuedStartRequest, Post start to device thread, device = "
            << controller->device_id()
            << " start id = " << controller->serial_id();
+  // The unit test VideoCaptureManagerTest.OpenNotExisting requires us to fail
+  // synchronously if the stream_type is MEDIA_DEVICE_VIDEO_CAPTURE and no
+  // DeviceInfo matching the requested id is present (which is the case when
+  // requesting a device with a bogus id). Note, that since other types of
+  // failure during startup of the device are allowed to be reported
+  // asynchronously, this requirement is questionable.
+  // TODO(chfremer): Check if any production code actually depends on this
+  // requirement. If not, relax the requirement in the test and remove the below
+  // if block. See crbug.com/708251
+  if (controller->stream_type() == MEDIA_DEVICE_VIDEO_CAPTURE) {
+    const media::VideoCaptureDeviceInfo* device_info =
+        GetDeviceInfoById(controller->device_id());
+    if (!device_info) {
+      OnDeviceStartFailed(controller);
+      return;
+    }
+    for (auto& observer : capture_observers_)
+      observer.OnVideoCaptureStarted(device_info->descriptor.facing);
+  }
 
   // The method CreateAndStartDeviceAsync() is going to run asynchronously.
   // Since we may be removing the controller while it is executing, we need to
@@ -385,17 +321,13 @@
                  GetControllerSharedRef(controller)));
 }
 
-void VideoCaptureManager::WillStartDevice(media::VideoFacingMode facing_mode) {
-  for (auto& observer : capture_observers_)
-    observer.OnVideoCaptureStarted(facing_mode);
-}
-
-void VideoCaptureManager::DidStartDevice(VideoCaptureController* controller) {
+void VideoCaptureManager::OnDeviceStarted(VideoCaptureController* controller) {
   DVLOG(3) << __func__;
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DCHECK(!device_start_request_queue_.empty());
   DCHECK_EQ(controller, device_start_request_queue_.begin()->controller());
   DCHECK(controller);
+
   if (controller->stream_type() == MEDIA_DESKTOP_VIDEO_CAPTURE) {
     const media::VideoCaptureSessionId session_id =
         device_start_request_queue_.front().session_id();
@@ -586,7 +518,7 @@
   DCHECK(supported_formats->empty());
 
   // Return all available formats of the device, regardless its started state.
-  DeviceInfo* existing_device = GetDeviceInfoById(device_id);
+  media::VideoCaptureDeviceInfo* existing_device = GetDeviceInfoById(device_id);
   if (existing_device)
     *supported_formats = existing_device->supported_formats;
   return true;
@@ -744,18 +676,18 @@
     listener.Closed(stream_type, capture_session_id);
 }
 
-void VideoCaptureManager::OnDevicesInfoEnumerated(
+void VideoCaptureManager::OnDeviceInfosReceived(
     base::ElapsedTimer* timer,
     const EnumerationCallback& client_callback,
-    const VideoCaptureManager::DeviceInfos& new_devices_info_cache) {
+    const std::vector<media::VideoCaptureDeviceInfo>& device_infos) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   UMA_HISTOGRAM_TIMES(
       "Media.VideoCaptureManager.GetAvailableDevicesInfoOnDeviceThreadTime",
       timer->Elapsed());
-  devices_info_cache_ = new_devices_info_cache;
+  devices_info_cache_ = device_infos;
 
   // Walk the |devices_info_cache_| and produce a
-  // media::VideoCaptureDeviceDescriptors for return purposes.
+  // media::VideoCaptureDeviceDescriptors for |client_callback|.
   media::VideoCaptureDeviceDescriptors devices;
   std::vector<std::tuple<media::VideoCaptureDeviceDescriptor,
                          media::VideoCaptureFormats>>
@@ -770,40 +702,6 @@
   client_callback.Run(devices);
 }
 
-void VideoCaptureManager::ConsolidateDevicesInfoOnDeviceThread(
-    base::Callback<void(const VideoCaptureManager::DeviceInfos&)>
-        on_devices_enumerated_callback,
-    const VideoCaptureManager::DeviceInfos& old_device_info_cache,
-    std::unique_ptr<VideoCaptureDeviceDescriptors> descriptors_snapshot) {
-  DCHECK(device_task_runner_->BelongsToCurrentThread());
-  // Construct |new_devices_info_cache| with the cached devices that are still
-  // present in the system, and remove their names from |names_snapshot|, so we
-  // keep there the truly new devices.
-  VideoCaptureManager::DeviceInfos new_devices_info_cache;
-  for (const auto& device_info : old_device_info_cache) {
-    for (VideoCaptureDeviceDescriptors::iterator it =
-             descriptors_snapshot->begin();
-         it != descriptors_snapshot->end(); ++it) {
-      if (device_info.descriptor.device_id == it->device_id) {
-        new_devices_info_cache.push_back(device_info);
-        descriptors_snapshot->erase(it);
-        break;
-      }
-    }
-  }
-
-  // Get the device info for the new devices in |names_snapshot|.
-  for (const auto& it : *descriptors_snapshot) {
-    DeviceInfo device_info(it);
-    video_capture_device_factory_->GetSupportedFormats(
-        it, &device_info.supported_formats);
-    ConsolidateCaptureFormats(&device_info.supported_formats);
-    new_devices_info_cache.push_back(device_info);
-  }
-
-  on_devices_enumerated_callback.Run(new_devices_info_cache);
-}
-
 void VideoCaptureManager::DestroyControllerIfNoClients(
     VideoCaptureController* controller) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -872,7 +770,7 @@
   return nullptr;
 }
 
-VideoCaptureManager::DeviceInfo* VideoCaptureManager::GetDeviceInfoById(
+media::VideoCaptureDeviceInfo* VideoCaptureManager::GetDeviceInfoById(
     const std::string& id) {
   for (auto& it : devices_info_cache_) {
     if (it.descriptor.device_id == id)
@@ -903,14 +801,14 @@
   VideoCaptureController* new_controller = new VideoCaptureController(
       device_info.id, device_info.type, params,
       base::MakeUnique<InProcessBuildableVideoCaptureDevice>(
-          device_task_runner_, video_capture_device_factory_.get()));
+          device_task_runner_, video_capture_system_.get()));
   controllers_.emplace_back(new_controller);
   return new_controller;
 }
 
 base::Optional<CameraCalibration> VideoCaptureManager::GetCameraCalibration(
     const std::string& device_id) {
-  VideoCaptureManager::DeviceInfo* info = GetDeviceInfoById(device_id);
+  media::VideoCaptureDeviceInfo* info = GetDeviceInfoById(device_id);
   if (!info)
     return base::Optional<CameraCalibration>();
   return info->descriptor.camera_calibration;
diff --git a/content/browser/renderer_host/media/video_capture_manager.h b/content/browser/renderer_host/media/video_capture_manager.h
index 026af56..0021c1e 100644
--- a/content/browser/renderer_host/media/video_capture_manager.h
+++ b/content/browser/renderer_host/media/video_capture_manager.h
@@ -33,7 +33,8 @@
 #include "content/common/media/media_stream_options.h"
 #include "media/base/video_facing.h"
 #include "media/capture/video/video_capture_device.h"
-#include "media/capture/video/video_capture_device_factory.h"
+#include "media/capture/video/video_capture_device_info.h"
+#include "media/capture/video/video_capture_system.h"
 #include "media/capture/video_capture_types.h"
 
 #if defined(OS_ANDROID)
@@ -56,7 +57,7 @@
       base::Callback<void(const base::WeakPtr<VideoCaptureController>&)>;
 
   VideoCaptureManager(
-      std::unique_ptr<media::VideoCaptureDeviceFactory> factory,
+      std::unique_ptr<media::VideoCaptureSystem> capture_system,
       scoped_refptr<base::SingleThreadTaskRunner> device_task_runner);
 
   // AddVideoCaptureObserver() can be called only before any devices are opened.
@@ -161,24 +162,6 @@
   void SetDesktopCaptureWindowId(media::VideoCaptureSessionId session_id,
                                  gfx::NativeViewId window_id);
 
-  // Gets a weak reference to the device factory, used for tests.
-  media::VideoCaptureDeviceFactory* video_capture_device_factory() const {
-    return video_capture_device_factory_.get();
-  }
-
-#if defined(OS_WIN)
-  void set_device_task_runner(
-      const scoped_refptr<base::SingleThreadTaskRunner>& device_task_runner) {
-    device_task_runner_ = device_task_runner;
-  }
-#endif
-
-  // Returns the SingleThreadTaskRunner where devices are enumerated on and
-  // started.
-  scoped_refptr<base::SingleThreadTaskRunner>& device_task_runner() {
-    return device_task_runner_;
-  }
-
   void GetPhotoCapabilities(
       int session_id,
       VideoCaptureDevice::GetPhotoCapabilitiesCallback callback);
@@ -197,13 +180,12 @@
 
   using EnumerationCallback =
       base::Callback<void(const media::VideoCaptureDeviceDescriptors&)>;
+  // Asynchronously obtains descriptors for the available devices.
+  // As a side-effect, updates |devices_info_cache_|.
   void EnumerateDevices(const EnumerationCallback& client_callback);
 
   // Implementation of BuildableVideoCaptureDevice::Callbacks:
-  const media::VideoCaptureDeviceDescriptor* LookupDeviceDescriptor(
-      const std::string& id) override;
-  void WillStartDevice(media::VideoFacingMode facing_mode) override;
-  void DidStartDevice(VideoCaptureController* controller) override;
+  void OnDeviceStarted(VideoCaptureController* controller) override;
   void OnDeviceStartFailed(VideoCaptureController* controller) override;
   void OnDeviceStartAborted() override;
 
@@ -216,32 +198,24 @@
 
  private:
   class CaptureDeviceStartRequest;
-  struct DeviceInfo;
 
   using SessionMap = std::map<media::VideoCaptureSessionId, MediaStreamDevice>;
-  using DeviceInfos = std::vector<DeviceInfo>;
   using DeviceStartQueue = std::list<CaptureDeviceStartRequest>;
   using VideoCaptureDeviceDescriptor = media::VideoCaptureDeviceDescriptor;
   using VideoCaptureDeviceDescriptors = media::VideoCaptureDeviceDescriptors;
 
   ~VideoCaptureManager() override;
 
+  void OnDeviceInfosReceived(
+      base::ElapsedTimer* timer,
+      const EnumerationCallback& client_callback,
+      const std::vector<media::VideoCaptureDeviceInfo>& device_infos);
+
   // Helpers to report an event to our Listener.
   void OnOpened(MediaStreamType type,
                 media::VideoCaptureSessionId capture_session_id);
   void OnClosed(MediaStreamType type,
                 media::VideoCaptureSessionId capture_session_id);
-  void OnDevicesInfoEnumerated(base::ElapsedTimer* timer,
-                               const EnumerationCallback& client_callback,
-                               const DeviceInfos& new_devices_info_cache);
-
-  // Consolidates the cached devices list with the list of currently connected
-  // devices in the system |names_snapshot|. Retrieves the supported formats of
-  // the new devices and sends the new cache to OnDevicesInfoEnumerated().
-  void ConsolidateDevicesInfoOnDeviceThread(
-      base::Callback<void(const DeviceInfos&)> on_devices_enumerated_callback,
-      const DeviceInfos& old_device_info_cache,
-      std::unique_ptr<VideoCaptureDeviceDescriptors> descriptors_snapshot);
 
   // Checks to see if |controller| has no clients left. If so, remove it from
   // the list of controllers, and delete it asynchronously. |controller| may be
@@ -260,7 +234,7 @@
       VideoCaptureController* controller) const;
 
   // Finds the device info by |id| in |devices_info_cache_|, or nullptr.
-  DeviceInfo* GetDeviceInfoById(const std::string& id);
+  media::VideoCaptureDeviceInfo* GetDeviceInfoById(const std::string& id);
 
   // Finds a VideoCaptureController for the indicated |capture_session_id|,
   // creating a fresh one if necessary. Returns nullptr if said
@@ -320,19 +294,14 @@
 
   // Device creation factory injected on construction from MediaStreamManager or
   // from the test harness.
-  std::unique_ptr<media::VideoCaptureDeviceFactory>
-      video_capture_device_factory_;
+  std::unique_ptr<media::VideoCaptureSystem> video_capture_system_;
 
   base::ObserverList<media::VideoCaptureObserver> capture_observers_;
 
-  // Local cache of the enumerated video capture devices' names and capture
-  // supported formats. A snapshot of the current devices and their capabilities
-  // is composed in VideoCaptureDeviceFactory::EnumerateDeviceNames() and
-  // ConsolidateDevicesInfoOnDeviceThread(), and this snapshot is used to update
-  // this list in OnDevicesInfoEnumerated(). GetDeviceSupportedFormats() will
+  // Local cache of the enumerated DeviceInfos. GetDeviceSupportedFormats() will
   // use this list if the device is not started, otherwise it will retrieve the
   // active device capture format from the VideoCaptureController associated.
-  DeviceInfos devices_info_cache_;
+  std::vector<media::VideoCaptureDeviceInfo> devices_info_cache_;
 
   // Map used by DesktopCapture.
   std::map<media::VideoCaptureSessionId, gfx::NativeViewId>
diff --git a/content/browser/renderer_host/media/video_capture_manager_unittest.cc b/content/browser/renderer_host/media/video_capture_manager_unittest.cc
index 778b906..86dccd3 100644
--- a/content/browser/renderer_host/media/video_capture_manager_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_manager_unittest.cc
@@ -24,6 +24,7 @@
 #include "content/common/media/media_stream_options.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "media/capture/video/fake_video_capture_device_factory.h"
+#include "media/capture/video/video_capture_system_impl.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -196,12 +197,13 @@
  protected:
   void SetUp() override {
     listener_.reset(new MockMediaStreamProviderListener());
-    vcm_ = new VideoCaptureManager(
-        std::unique_ptr<media::VideoCaptureDeviceFactory>(
-            new WrappedDeviceFactory()),
-        base::ThreadTaskRunnerHandle::Get());
-    video_capture_device_factory_ = static_cast<WrappedDeviceFactory*>(
-        vcm_->video_capture_device_factory());
+    auto video_capture_device_factory =
+        base::MakeUnique<WrappedDeviceFactory>();
+    video_capture_device_factory_ = video_capture_device_factory.get();
+    auto video_capture_system = base::MakeUnique<media::VideoCaptureSystemImpl>(
+        std::move(video_capture_device_factory));
+    vcm_ = new VideoCaptureManager(std::move(video_capture_system),
+                                   base::ThreadTaskRunnerHandle::Get());
     const int32_t kNumberOfFakeDevices = 2;
     video_capture_device_factory_->SetToDefaultDevicesConfig(
         kNumberOfFakeDevices);
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc
index e1359fb..6276ca0 100644
--- a/content/browser/renderer_host/render_message_filter.cc
+++ b/content/browser/renderer_host/render_message_filter.cc
@@ -135,7 +135,8 @@
                            arraysize(kFilteredMessageClasses)),
       BrowserAssociatedInterface<mojom::RenderMessageFilter>(this, this),
       resource_dispatcher_host_(ResourceDispatcherHostImpl::Get()),
-      bitmap_manager_client_(HostSharedBitmapManager::current()),
+      bitmap_manager_client_(
+          display_compositor::HostSharedBitmapManager::current()),
       request_context_(request_context),
       resource_context_(browser_context->GetResourceContext()),
       render_widget_helper_(render_widget_helper),
@@ -260,6 +261,11 @@
   callback.Run(route_id);
 }
 
+void RenderMessageFilter::GetSharedBitmapManager(
+    cc::mojom::SharedBitmapManagerAssociatedRequest request) {
+  bitmap_manager_client_.Bind(std::move(request));
+}
+
 #if defined(OS_MACOSX)
 
 void RenderMessageFilter::OnLoadFont(const FontDescriptor& font,
@@ -290,21 +296,6 @@
 
 #endif  // defined(OS_MACOSX)
 
-void RenderMessageFilter::AllocatedSharedBitmap(
-    mojo::ScopedSharedBufferHandle buffer,
-    const cc::SharedBitmapId& id) {
-  base::SharedMemoryHandle memory_handle;
-  size_t size;
-  MojoResult result = mojo::UnwrapSharedMemoryHandle(
-      std::move(buffer), &memory_handle, &size, NULL);
-  DCHECK_EQ(result, MOJO_RESULT_OK);
-  bitmap_manager_client_.ChildAllocatedSharedBitmap(size, memory_handle, id);
-}
-
-void RenderMessageFilter::DeletedSharedBitmap(const cc::SharedBitmapId& id) {
-  bitmap_manager_client_.ChildDeletedSharedBitmap(id);
-}
-
 #if defined(OS_LINUX)
 void RenderMessageFilter::SetThreadPriorityOnFileThread(
     base::PlatformThreadId ns_tid,
diff --git a/content/browser/renderer_host/render_message_filter.h b/content/browser/renderer_host/render_message_filter.h
index d025771..55de0db1 100644
--- a/content/browser/renderer_host/render_message_filter.h
+++ b/content/browser/renderer_host/render_message_filter.h
@@ -20,8 +20,8 @@
 #include "base/strings/string16.h"
 #include "build/build_config.h"
 #include "cc/resources/shared_bitmap_manager.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 #include "content/common/cache_storage/cache_storage_types.h"
-#include "content/common/host_shared_bitmap_manager.h"
 #include "content/common/render_message_filter.mojom.h"
 #include "content/public/browser/browser_associated_interface.h"
 #include "content/public/browser/browser_message_filter.h"
@@ -120,9 +120,8 @@
   void CreateFullscreenWidget(
       int opener_id,
       const CreateFullscreenWidgetCallback& callback) override;
-  void AllocatedSharedBitmap(mojo::ScopedSharedBufferHandle buffer,
-                             const cc::SharedBitmapId& id) override;
-  void DeletedSharedBitmap(const cc::SharedBitmapId& id) override;
+  void GetSharedBitmapManager(
+      cc::mojom::SharedBitmapManagerAssociatedRequest request) override;
 
   // Message handlers called on the browser IO thread:
   void OnHasGpuProcess(IPC::Message* reply);
@@ -165,7 +164,7 @@
   // than we do.
   ResourceDispatcherHostImpl* resource_dispatcher_host_;
 
-  HostSharedBitmapManagerClient bitmap_manager_client_;
+  display_compositor::HostSharedBitmapManagerClient bitmap_manager_client_;
 
   // Contextual information to be used for requests created here.
   scoped_refptr<net::URLRequestContextGetter> request_context_;
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 09711bf..7f26dc84 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -30,6 +30,7 @@
 #include "build/build_config.h"
 #include "cc/base/switches.h"
 #include "cc/output/compositor_frame.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
 #include "content/browser/bad_message.h"
 #include "content/browser/browser_plugin/browser_plugin_guest.h"
@@ -57,7 +58,6 @@
 #include "content/common/cursors/webcursor.h"
 #include "content/common/drag_messages.h"
 #include "content/common/frame_messages.h"
-#include "content/common/host_shared_bitmap_manager.h"
 #include "content/common/input_messages.h"
 #include "content/common/resize_params.h"
 #include "content/common/text_input_state.h"
@@ -2104,7 +2104,8 @@
   DCHECK(!size.IsEmpty());
 
   std::unique_ptr<cc::SharedBitmap> bitmap =
-      HostSharedBitmapManager::current()->GetSharedBitmapFromId(size, id);
+      display_compositor::HostSharedBitmapManager::current()
+          ->GetSharedBitmapFromId(size, id);
   if (!bitmap) {
     bad_message::ReceivedBadMessage(GetProcess(),
                                     bad_message::RWH_SHARED_BITMAP);
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index a2a4fd1..c1c8a006 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -719,10 +719,13 @@
           ? *GetTextInputManager()->GetTextInputState()
           : TextInputState();
 
-  if (!ime_adapter_android_ || is_in_vr_)
+  if (!content_view_core_ || is_in_vr_)
     return;
 
-  ime_adapter_android_->UpdateState(state);
+  content_view_core_->UpdateImeAdapter(
+      static_cast<int>(state.type), state.flags, state.mode, state.value,
+      state.selection_start, state.selection_end, state.composition_start,
+      state.composition_end, state.show_ime_if_needed, state.reply_to_request);
 }
 
 void RenderWidgetHostViewAndroid::OnImeCompositionRangeChanged(
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 0f4ca71..2b7a0e2 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -32,6 +32,7 @@
 #include "cc/test/begin_frame_args_test.h"
 #include "cc/test/fake_external_begin_frame_source.h"
 #include "components/display_compositor/gl_helper.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 #include "content/browser/browser_thread_impl.h"
 #include "content/browser/compositor/test/no_transport_image_transport_factory.h"
 #include "content/browser/frame_host/render_widget_host_view_guest.h"
@@ -49,7 +50,6 @@
 #include "content/browser/renderer_host/render_widget_host_view_frame_subscriber.h"
 #include "content/browser/renderer_host/text_input_manager.h"
 #include "content/browser/web_contents/web_contents_view_aura.h"
-#include "content/common/host_shared_bitmap_manager.h"
 #include "content/common/input/synthetic_web_input_event_builders.h"
 #include "content/common/input_messages.h"
 #include "content/common/text_input_state.h"
@@ -2671,7 +2671,8 @@
   size_t renderer_count = max_renderer_frames + 1;
   gfx::Rect view_rect(100, 100);
   gfx::Size frame_size = view_rect.size();
-  DCHECK_EQ(0u, HostSharedBitmapManager::current()->AllocatedBitmapCount());
+  DCHECK_EQ(0u, display_compositor::HostSharedBitmapManager::current()
+                    ->AllocatedBitmapCount());
 
   std::unique_ptr<RenderWidgetHostImpl* []> hosts(
       new RenderWidgetHostImpl*[renderer_count]);
@@ -2810,8 +2811,8 @@
   int handles_per_frame = 5;
   RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2);
 
-  HostSharedBitmapManagerClient bitmap_client(
-      HostSharedBitmapManager::current());
+  display_compositor::HostSharedBitmapManagerClient bitmap_client(
+      display_compositor::HostSharedBitmapManager::current());
 
   for (size_t i = 0; i < (renderer_count - 1) * handles_per_frame; i++) {
     bitmap_client.ChildAllocatedSharedBitmap(
@@ -2844,7 +2845,8 @@
   size_t renderer_count = max_renderer_frames + 1;
   gfx::Rect view_rect(100, 100);
   gfx::Size frame_size = view_rect.size();
-  DCHECK_EQ(0u, HostSharedBitmapManager::current()->AllocatedBitmapCount());
+  DCHECK_EQ(0u, display_compositor::HostSharedBitmapManager::current()
+                    ->AllocatedBitmapCount());
 
   std::unique_ptr<RenderWidgetHostImpl* []> hosts(
       new RenderWidgetHostImpl*[renderer_count]);
@@ -2916,7 +2918,8 @@
   size_t renderer_count = kMaxRendererFrames;
   gfx::Rect view_rect(100, 100);
   gfx::Size frame_size = view_rect.size();
-  DCHECK_EQ(0u, HostSharedBitmapManager::current()->AllocatedBitmapCount());
+  DCHECK_EQ(0u, display_compositor::HostSharedBitmapManager::current()
+                    ->AllocatedBitmapCount());
 
   std::unique_ptr<RenderWidgetHostImpl* []> hosts(
       new RenderWidgetHostImpl*[renderer_count]);
diff --git a/content/browser/renderer_host/renderer_frame_manager.cc b/content/browser/renderer_host/renderer_frame_manager.cc
index 7650e32..e8944e4 100644
--- a/content/browser/renderer_host/renderer_frame_manager.cc
+++ b/content/browser/renderer_host/renderer_frame_manager.cc
@@ -15,7 +15,7 @@
 #include "base/memory/shared_memory.h"
 #include "base/sys_info.h"
 #include "build/build_config.h"
-#include "content/common/host_shared_bitmap_manager.h"
+#include "components/display_compositor/host_shared_bitmap_manager.h"
 #include "content/public/common/content_features.h"
 
 namespace content {
@@ -135,8 +135,9 @@
 void RendererFrameManager::CullUnlockedFrames(size_t saved_frame_limit) {
   if (unlocked_frames_.size() + locked_frames_.size() > 0) {
     float handles_per_frame =
-        HostSharedBitmapManager::current()->AllocatedBitmapCount() * 1.0f /
-        (unlocked_frames_.size() + locked_frames_.size());
+        display_compositor::HostSharedBitmapManager::current()
+            ->AllocatedBitmapCount() *
+        1.0f / (unlocked_frames_.size() + locked_frames_.size());
 
     saved_frame_limit = std::max(
         1,
diff --git a/content/browser/tracing/memory_tracing_browsertest.cc b/content/browser/tracing/memory_tracing_browsertest.cc
index fe96666..a5f8b8a2 100644
--- a/content/browser/tracing/memory_tracing_browsertest.cc
+++ b/content/browser/tracing/memory_tracing_browsertest.cc
@@ -302,7 +302,8 @@
 #endif  // !defined(GOOGLE_CHROME_BUILD)
 
 // Non-deterministic races under TSan. crbug.com/529678
-#if defined(THREAD_SANITIZER)
+// Flaky on Linux. crbug.com/709524
+#if defined(THREAD_SANITIZER) || defined(OS_LINUX)
 #define MAYBE_BrowserInitiatedDump DISABLED_BrowserInitiatedDump
 #else
 #define MAYBE_BrowserInitiatedDump BrowserInitiatedDump
diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn
index 38b71e5..a63855b1 100644
--- a/content/child/BUILD.gn
+++ b/content/child/BUILD.gn
@@ -66,8 +66,6 @@
     "child_process_sandbox_support_impl_shm_linux.cc",
     "child_resource_message_filter.cc",
     "child_resource_message_filter.h",
-    "child_shared_bitmap_manager.cc",
-    "child_shared_bitmap_manager.h",
     "child_thread_impl.cc",
     "child_thread_impl.h",
     "content_child_helpers.cc",
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index b783df3..5db3dab8 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -68,6 +68,11 @@
 #if defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_MACOSX)
   WebRuntimeFeatures::enableWebBluetooth(true);
 #endif
+
+// The Notification Center on Mac OS X does not support content images.
+#if defined(OS_MACOSX)
+  WebRuntimeFeatures::enableNotificationContentImage(false);
+#endif
 }
 
 void SetRuntimeFeaturesDefaultsAndUpdateFromArgs(
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index 4295af4..567121c 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -150,8 +150,6 @@
     "generic_shared_memory_id_generator.cc",
     "generic_shared_memory_id_generator.h",
     "gin_java_bridge_messages.h",
-    "host_shared_bitmap_manager.cc",
-    "host_shared_bitmap_manager.h",
     "in_process_child_thread_params.cc",
     "in_process_child_thread_params.h",
     "indexed_db/indexed_db_constants.h",
diff --git a/content/common/render_message_filter.mojom b/content/common/render_message_filter.mojom
index 78c93ef..0e6cfc3 100644
--- a/content/common/render_message_filter.mojom
+++ b/content/common/render_message_filter.mojom
@@ -4,6 +4,7 @@
 
 module content.mojom;
 
+import "cc/ipc/shared_bitmap_manager.mojom";
 import "content/common/native_types.mojom";
 import "content/public/common/window_container_type.mojom";
 import "gpu/ipc/common/mailbox.mojom";
@@ -94,14 +95,5 @@
   [Sync] CreateFullscreenWidget(int32 opener_id)
       => (int32 route_id);
 
-  // The 2 following methods belong to a future CC related mojom.
-  // For now they need to be part of this channel associated interface to
-  // prevent running into message ordering issues (CC trying to access a shared
-  // bitmap before the registration message below made it to the browser).
-  //
-  // Informs the browser that the child allocated a shared bitmap.
-  AllocatedSharedBitmap(handle<shared_buffer> buffer, gpu.mojom.Mailbox id);
-
-  // Informs the browser that the child deleted a shared bitmap.
-  DeletedSharedBitmap(gpu.mojom.Mailbox id);
+  GetSharedBitmapManager(associated cc.mojom.SharedBitmapManager& bitmap_manager);
 };
diff --git a/content/common/service_manager/service_manager_connection_impl.cc b/content/common/service_manager/service_manager_connection_impl.cc
index ea9b4f4..9e81238a 100644
--- a/content/common/service_manager/service_manager_connection_impl.cc
+++ b/content/common/service_manager/service_manager_connection_impl.cc
@@ -139,11 +139,6 @@
  private:
   friend class base::RefCountedThreadSafe<IOThreadContext>;
 
-  struct PendingRequest {
-    std::string service_name;
-    service_manager::mojom::ServiceRequest request;
-  };
-
   class MessageLoopObserver : public base::MessageLoop::DestructionObserver {
    public:
     explicit MessageLoopObserver(base::WeakPtr<IOThreadContext> context)
@@ -261,16 +256,6 @@
     DCHECK(io_thread_checker_.CalledOnValidThread());
     auto result = request_handlers_.insert(std::make_pair(name, handler));
     DCHECK(result.second);
-    auto iter = pending_requests_.begin();
-    while (iter != pending_requests_.end()) {
-      if ((*iter)->service_name == name) {
-        std::unique_ptr<PendingRequest> pending_request = std::move(*iter);
-        iter = pending_requests_.erase(iter);
-        handler.Run(std::move(pending_request->request));
-      } else {
-        ++iter;
-      }
-    }
   }
 
   /////////////////////////////////////////////////////////////////////////////
@@ -344,14 +329,8 @@
                      const std::string& name) override {
     DCHECK(io_thread_checker_.CalledOnValidThread());
     auto it = request_handlers_.find(name);
-    if (it == request_handlers_.end()) {
-      std::unique_ptr<PendingRequest> pending_request =
-          base::MakeUnique<PendingRequest>();
-      pending_request->service_name = name;
-      pending_request->request = std::move(request);
-      pending_requests_.push_back(std::move(pending_request));
-      return;
-    }
+    DCHECK(it != request_handlers_.end())
+        << "Can't create service " << name << ". No handler found.";
     it->second.Run(std::move(request));
   }
 
@@ -413,10 +392,6 @@
       embedded_services_;
   std::unordered_map<std::string, ServiceRequestHandler> request_handlers_;
 
-  // Requests before the service have been registered are added here. Typically
-  // there are very few elements, so we use a vector.
-  std::vector<std::unique_ptr<PendingRequest>> pending_requests_;
-
   mojo::Binding<mojom::Child> child_binding_;
 
   base::WeakPtrFactory<IOThreadContext> weak_factory_;
diff --git a/content/gpu/gpu_child_thread.cc b/content/gpu/gpu_child_thread.cc
index af964692..f2ad57e 100644
--- a/content/gpu/gpu_child_thread.cc
+++ b/content/gpu/gpu_child_thread.cc
@@ -165,7 +165,6 @@
     ui::mojom::GpuHostPtr gpu_host,
     const gpu::GpuPreferences& gpu_preferences,
     mojo::ScopedSharedBufferHandle activity_flags) {
-  gpu_service_->Bind(std::move(request));
   gpu_service_->UpdateGPUInfoFromPreferences(gpu_preferences);
   for (const LogMessage& log : deferred_messages_)
     gpu_host->RecordLogMessage(log.severity, log.header, log.message);
@@ -179,6 +178,10 @@
     return;
   }
 
+  // Bind should happen only if initialization succeeds (i.e. not dead on
+  // arrival), because otherwise, it can receive requests from the host while in
+  // an uninitialized state.
+  gpu_service_->Bind(std::move(request));
   gpu::SyncPointManager* sync_point_manager = nullptr;
   // Note SyncPointManager from ContentGpuClient cannot be owned by this.
   if (GetContentClient()->gpu())
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
index 278c8a6..ca4005ba 100644
--- a/content/public/android/BUILD.gn
+++ b/content/public/android/BUILD.gn
@@ -153,7 +153,6 @@
     "java/src/org/chromium/content/browser/SpeechRecognition.java",
     "java/src/org/chromium/content/browser/TracingControllerAndroid.java",
     "java/src/org/chromium/content/browser/ViewPositionObserver.java",
-    "java/src/org/chromium/content/browser/ViewUtils.java",
     "java/src/org/chromium/content/browser/WindowAndroidProvider.java",
     "java/src/org/chromium/content/browser/WindowAndroidChangedObserver.java",
     "java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java",
@@ -224,7 +223,6 @@
     "java/src/org/chromium/content_public/browser/ContentBitmapCallback.java",
     "java/src/org/chromium/content_public/browser/GestureStateListener.java",
     "java/src/org/chromium/content_public/browser/ImageDownloadCallback.java",
-    "java/src/org/chromium/content_public/browser/ImeEventObserver.java",
     "java/src/org/chromium/content_public/browser/InterfaceRegistrar.java",
     "java/src/org/chromium/content_public/browser/JavaScriptCallback.java",
     "java/src/org/chromium/content_public/browser/LoadUrlParams.java",
@@ -447,6 +445,7 @@
     "javatests/src/org/chromium/content/browser/input/ImeTestUtils.java",
     "javatests/src/org/chromium/content/browser/input/InputDialogContainerTest.java",
     "javatests/src/org/chromium/content/browser/input/SelectPopupTest.java",
+    "javatests/src/org/chromium/content/browser/input/TestImeAdapterDelegate.java",
     "javatests/src/org/chromium/content/browser/picker/DateTimePickerDialogTest.java",
     "javatests/src/org/chromium/content/browser/webcontents/AccessibilitySnapshotTest.java",
     "javatests/src/org/chromium/content/browser/webcontents/WebContentsTest.java",
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java
index 4499622f..2ad7b8a 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java
@@ -12,7 +12,6 @@
 import android.content.pm.ServiceInfo;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.DeadObjectException;
 import android.os.IBinder;
 import android.os.RemoteException;
 
@@ -541,13 +540,8 @@
     }
 
     @VisibleForTesting
-    public boolean crashServiceForTesting() throws RemoteException {
-        try {
-            mService.crashIntentionallyForTesting();
-        } catch (DeadObjectException e) {
-            return true;
-        }
-        return false;
+    public void crashServiceForTesting() throws RemoteException {
+        mService.crashIntentionallyForTesting();
     }
 
     @VisibleForTesting
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index 42c5977e..3531ac6 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -17,6 +17,8 @@
 import android.graphics.Rect;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.ResultReceiver;
 import android.os.SystemClock;
 import android.util.Pair;
 import android.view.ActionMode;
@@ -35,6 +37,7 @@
 import android.view.accessibility.AccessibilityNodeProvider;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnection;
+import android.view.inputmethod.InputMethodManager;
 
 import org.chromium.base.ObserverList;
 import org.chromium.base.ObserverList.RewindableIterator;
@@ -58,7 +61,6 @@
 import org.chromium.content_public.browser.AccessibilitySnapshotNode;
 import org.chromium.content_public.browser.ActionModeCallbackHelper;
 import org.chromium.content_public.browser.GestureStateListener;
-import org.chromium.content_public.browser.ImeEventObserver;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsObserver;
 import org.chromium.device.gamepad.GamepadList;
@@ -66,6 +68,7 @@
 import org.chromium.ui.base.EventForwarder;
 import org.chromium.ui.base.ViewAndroidDelegate;
 import org.chromium.ui.base.WindowAndroid;
+import org.chromium.ui.base.ime.TextInputType;
 import org.chromium.ui.display.DisplayAndroid;
 import org.chromium.ui.display.DisplayAndroid.DisplayAndroidObserver;
 
@@ -89,7 +92,7 @@
 public class ContentViewCore
         implements AccessibilityStateChangeListener, DisplayAndroidObserver,
                    SystemCaptioningBridge.SystemCaptioningBridgeListener, WindowAndroidProvider,
-                   JoystickZoomProvider.PinchZoomHandler, ImeEventObserver {
+                   JoystickZoomProvider.PinchZoomHandler {
     private static final String TAG = "cr_ContentViewCore";
 
     // Used to avoid enabling zooming in / out if resulting zooming will
@@ -171,6 +174,32 @@
     }
 
     /**
+     * {@ResultReceiver} passed in InputMethodManager#showSoftInput}. We need this to scroll to the
+     * editable node at the right timing, which is after input method window shows up.
+     */
+    // TODO(crbug.com/635567): Fix this properly.
+    @SuppressLint("ParcelCreator")
+    private static class ShowKeyboardResultReceiver extends ResultReceiver {
+
+        // Unfortunately, the memory life cycle of ResultReceiver object, once passed in
+        // showSoftInput(), is in the control of Android's input method framework and IME app,
+        // so we use a weakref to avoid tying CVC's lifetime to that of ResultReceiver object.
+        private final WeakReference<ContentViewCore> mContentViewCore;
+
+        public ShowKeyboardResultReceiver(ContentViewCore contentViewCore, Handler handler) {
+            super(handler);
+            mContentViewCore = new WeakReference<>(contentViewCore);
+        }
+
+        @Override
+        public void onReceiveResult(int resultCode, Bundle resultData) {
+            ContentViewCore contentViewCore = mContentViewCore.get();
+            if (contentViewCore == null) return;
+            contentViewCore.onShowKeyboardReceiveResult(resultCode);
+        }
+    }
+
+    /**
      * Interface that consumers of {@link ContentViewCore} must implement to allow the proper
      * dispatching of view methods through the containing view.
      *
@@ -293,6 +322,10 @@
     // WebView.
     private boolean mShouldSetAccessibilityFocusOnPageLoad;
 
+    // Temporary notification to tell onSizeChanged to focus a form element,
+    // because the OSK was just brought up.
+    private final Rect mFocusPreOSKViewportRect = new Rect();
+
     // Whether a touch scroll sequence is active, used to hide text selection
     // handles. Note that a scroll sequence will *always* bound a pinch
     // sequence, so this will also be true for the duration of a pinch gesture.
@@ -323,6 +356,10 @@
     // A ViewAndroidDelegate that delegates to the current container view.
     private ViewAndroidDelegate mViewAndroidDelegate;
 
+    // NOTE: This object will not be released by Android framework until the matching
+    // ResultReceiver in the InputMethodService (IME app) gets gc'ed.
+    private ShowKeyboardResultReceiver mShowKeyboardResultReceiver;
+
     // The list of observers that are notified when ContentViewCore changes its WindowAndroid.
     private final ObserverList<WindowAndroidChangedObserver> mWindowAndroidChangedObservers;
 
@@ -435,10 +472,6 @@
         if (mNativeContentViewCore != 0) nativeWasResized(mNativeContentViewCore);
     }
 
-    public void addImeEventObserver(ImeEventObserver imeEventObserver) {
-        mImeAdapter.addEventObserver(imeEventObserver);
-    }
-
     @VisibleForTesting
     public void setImeAdapterForTest(ImeAdapter imeAdapter) {
         mImeAdapter = imeAdapter;
@@ -449,6 +482,55 @@
         return mImeAdapter;
     }
 
+    private ImeAdapter createImeAdapter(ViewGroup containerView) {
+        return new ImeAdapter(containerView.getResources().getConfiguration(), mWebContents,
+                new InputMethodManagerWrapper(mContext), new ImeAdapter.ImeAdapterDelegate() {
+                    @Override
+                    public void onImeEvent() {
+                        mPopupZoomer.hide(true);
+                        getContentViewClient().onImeEvent();
+                        if (isFocusedNodeEditable()) mWebContents.dismissTextHandles();
+                    }
+
+                    @Override
+                    public void onKeyboardBoundsUnchanged() {
+                        assert mWebContents != null;
+                        mWebContents.scrollFocusedEditableNodeIntoView();
+                    }
+
+                    @Override
+                    public boolean performContextMenuAction(int id) {
+                        assert mWebContents != null;
+                        switch (id) {
+                            case android.R.id.selectAll:
+                                mWebContents.selectAll();
+                                return true;
+                            case android.R.id.cut:
+                                mWebContents.cut();
+                                return true;
+                            case android.R.id.copy:
+                                mWebContents.copy();
+                                return true;
+                            case android.R.id.paste:
+                                mWebContents.paste();
+                                return true;
+                            default:
+                                return false;
+                        }
+                    }
+
+                    @Override
+                    public View getAttachedView() {
+                        return mContainerView;
+                    }
+
+                    @Override
+                    public ResultReceiver getNewShowKeyboardReceiver() {
+                        return ContentViewCore.this.getNewShowKeyboardReceiver();
+                    }
+                });
+    }
+
     /**
      *
      * @param viewDelegate Delegate to add/remove anchor views.
@@ -484,22 +566,20 @@
 
         setContainerViewInternals(internalDispatcher);
 
-        ViewGroup containerView = viewDelegate.getContainerView();
-        initPopupZoomer(mContext, containerView);
-        mImeAdapter = new ImeAdapter(
-                mWebContents, containerView, new InputMethodManagerWrapper(mContext));
-        mImeAdapter.addEventObserver(this);
+        initPopupZoomer(mContext, viewDelegate.getContainerView());
+        mImeAdapter = createImeAdapter(viewDelegate.getContainerView());
 
-        mSelectionPopupController = new SelectionPopupController(
-                mContext, windowAndroid, webContents, containerView, mRenderCoordinates);
+        mSelectionPopupController = new SelectionPopupController(mContext, windowAndroid,
+                webContents, viewDelegate.getContainerView(), mRenderCoordinates);
         mSelectionPopupController.setCallback(ActionModeCallbackHelper.EMPTY_CALLBACK);
+        mSelectionPopupController.setContainerView(viewDelegate.getContainerView());
 
         mWebContentsObserver = new ContentViewWebContentsObserver(this);
 
         mShouldRequestUnbufferedDispatch = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
                 && ContentFeatureList.isEnabled(ContentFeatureList.REQUEST_UNBUFFERED_DISPATCH);
 
-        setContainerView(containerView);
+        setContainerView(viewDelegate.getContainerView());
     }
 
     /**
@@ -582,7 +662,6 @@
             if (mContainerView != null) {
                 hideSelectPopupWithCancelMessage();
                 mPopupZoomer.hide(false);
-                mImeAdapter.setContainerView(containerView);
             }
 
             mContainerView = containerView;
@@ -1217,13 +1296,12 @@
 
         // Execute a delayed form focus operation because the OSK was brought
         // up earlier.
-        Rect focusPreOSKViewportRect = mImeAdapter.getFocusPreOSKViewportRect();
-        if (!focusPreOSKViewportRect.isEmpty()) {
+        if (!mFocusPreOSKViewportRect.isEmpty()) {
             Rect rect = new Rect();
             getContainerView().getWindowVisibleDisplayFrame(rect);
-            if (!rect.equals(focusPreOSKViewportRect)) {
+            if (!rect.equals(mFocusPreOSKViewportRect)) {
                 // Only assume the OSK triggered the onSizeChanged if width was preserved.
-                if (rect.width() == focusPreOSKViewportRect.width()) {
+                if (rect.width() == mFocusPreOSKViewportRect.width()) {
                     assert mWebContents != null;
                     mWebContents.scrollFocusedEditableNodeIntoView();
                 }
@@ -1235,7 +1313,7 @@
     private void cancelRequestToScrollFocusedEditableNodeIntoView() {
         // Zero-ing the rect will prevent |updateAfterSizeChanged()| from
         // issuing the delayed form focus event.
-        mImeAdapter.getFocusPreOSKViewportRect().setEmpty();
+        mFocusPreOSKViewportRect.setEmpty();
     }
 
     /**
@@ -1694,17 +1772,31 @@
         TraceEvent.end("ContentViewCore:updateFrameInfo");
     }
 
-    // ImeEventObserver
+    @CalledByNative
+    private void updateImeAdapter(int textInputType, int textInputFlags, int textInputMode,
+            String text, int selectionStart, int selectionEnd, int compositionStart,
+            int compositionEnd, boolean showImeIfNeeded, boolean replyToRequest) {
+        try {
+            TraceEvent.begin("ContentViewCore.updateImeAdapter");
+            boolean focusedNodeEditable = (textInputType != TextInputType.NONE);
+            boolean focusedNodeIsPassword = (textInputType == TextInputType.PASSWORD);
 
-    @Override
-    public void onImeEvent() {
-        mPopupZoomer.hide(true);
-    }
+            mImeAdapter.updateState(textInputType, textInputFlags, textInputMode, showImeIfNeeded,
+                    text, selectionStart, selectionEnd, compositionStart, compositionEnd,
+                    replyToRequest);
 
-    @Override
-    public void onNodeAttributeUpdated(boolean editable, boolean password) {
-        mJoystickScrollProvider.setEnabled(!editable);
-        mSelectionPopupController.updateSelectionState(editable, password);
+            boolean editableToggled = (focusedNodeEditable != isFocusedNodeEditable());
+            mSelectionPopupController.updateSelectionState(focusedNodeEditable,
+                    focusedNodeIsPassword);
+            if (editableToggled) {
+                if (mJoystickScrollProvider != null) {
+                    mJoystickScrollProvider.setEnabled(!focusedNodeEditable);
+                }
+                getContentViewClient().onFocusedNodeEditabilityChanged(focusedNodeEditable);
+            }
+        } finally {
+            TraceEvent.end("ContentViewCore.updateImeAdapter");
+        }
     }
 
     /**
@@ -1826,7 +1918,10 @@
      */
     @CalledByNative
     private boolean hasFocus() {
-        return ViewUtils.hasFocus(mContainerView);
+        // If the container view is not focusable, we consider it always focused from
+        // Chromium's point of view.
+        if (!mContainerView.isFocusable()) return true;
+        return mContainerView.hasFocus();
     }
 
     /**
@@ -2450,6 +2545,35 @@
         mSelectionPopupController.setSelectionClient(selectionClient);
     }
 
+    /**
+     * Call this when we get result from ResultReceiver passed in calling showSoftInput().
+     * @param resultCode The result of showSoftInput() as defined in InputMethodManager.
+     */
+    public void onShowKeyboardReceiveResult(int resultCode) {
+        if (resultCode == InputMethodManager.RESULT_SHOWN) {
+            // If OSK is newly shown, delay the form focus until
+            // the onSizeChanged (in order to adjust relative to the
+            // new size).
+            // TODO(jdduke): We should not assume that onSizeChanged will
+            // always be called, crbug.com/294908.
+            getContainerView().getWindowVisibleDisplayFrame(mFocusPreOSKViewportRect);
+        } else if (hasFocus() && resultCode == InputMethodManager.RESULT_UNCHANGED_SHOWN) {
+            // If the OSK was already there, focus the form immediately.
+            if (mWebContents != null) {
+                mWebContents.scrollFocusedEditableNodeIntoView();
+            }
+        }
+    }
+
+    @VisibleForTesting
+    public ResultReceiver getNewShowKeyboardReceiver() {
+        if (mShowKeyboardResultReceiver == null) {
+            // Note: the returned object will get leaked by Android framework.
+            mShowKeyboardResultReceiver = new ShowKeyboardResultReceiver(this, new Handler());
+        }
+        return mShowKeyboardResultReceiver;
+    }
+
     private native long nativeInit(WebContents webContents, ViewAndroidDelegate viewAndroidDelegate,
             long windowAndroidPtr, float dipScale, HashSet<Object> retainedObjectSet);
     private static native ContentViewCore nativeFromWebContentsAndroid(WebContents webContents);
diff --git a/content/public/android/java/src/org/chromium/content/browser/ViewUtils.java b/content/public/android/java/src/org/chromium/content/browser/ViewUtils.java
deleted file mode 100644
index 4426062..0000000
--- a/content/public/android/java/src/org/chromium/content/browser/ViewUtils.java
+++ /dev/null
@@ -1,24 +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.
-
-package org.chromium.content.browser;
-
-import android.view.View;
-
-/**
- * A utility class that has helper methods for Android view.
- */
-public final class ViewUtils {
-    // Prevent instantiation.
-    private ViewUtils() {}
-
-    /**
-     * @return {@code true} if the given view has a focus.
-     */
-    public static boolean hasFocus(View view) {
-        // If the container view is not focusable, we consider it always focused from
-        // Chromium's point of view.
-        return !view.isFocusable() ? true : view.hasFocus();
-    }
-}
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
index 55746b9..8de6ade 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
@@ -4,12 +4,8 @@
 
 package org.chromium.content.browser.input;
 
-import android.annotation.SuppressLint;
 import android.content.res.Configuration;
-import android.graphics.Rect;
 import android.os.Build;
-import android.os.Bundle;
-import android.os.Handler;
 import android.os.ResultReceiver;
 import android.os.SystemClock;
 import android.text.SpannableString;
@@ -23,10 +19,8 @@
 import android.view.inputmethod.BaseInputConnection;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnection;
-import android.view.inputmethod.InputMethodManager;
 
 import org.chromium.base.Log;
-import org.chromium.base.TraceEvent;
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
@@ -34,16 +28,10 @@
 import org.chromium.blink_public.web.WebInputEventType;
 import org.chromium.blink_public.web.WebTextInputMode;
 import org.chromium.content.browser.RenderCoordinates;
-import org.chromium.content.browser.ViewUtils;
 import org.chromium.content.browser.picker.InputDialogContainer;
-import org.chromium.content_public.browser.ImeEventObserver;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.ui.base.ime.TextInputType;
 
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Adapts and plumbs android IME service onto the chrome text input API.
  * ImeAdapter provides an interface in both ways native <-> java:
@@ -72,6 +60,36 @@
 
     public static final int COMPOSITION_KEY_CODE = 229;
 
+    /**
+     * Interface for the delegate that needs to be notified of IME changes.
+     */
+    public interface ImeAdapterDelegate {
+        /**
+         * Called to notify the delegate about synthetic/real key events before sending to renderer.
+         */
+        void onImeEvent();
+
+        /**
+         * Called when the keyboard could not be shown due to the hardware keyboard being present.
+         */
+        void onKeyboardBoundsUnchanged();
+
+        /**
+         * @see BaseInputConnection#performContextMenuAction(int)
+         */
+        boolean performContextMenuAction(int id);
+
+        /**
+         * @return View that the keyboard should be attached to.
+         */
+        View getAttachedView();
+
+        /**
+         * @return Object that should be called for all keyboard show and hide requests.
+         */
+        ResultReceiver getNewShowKeyboardReceiver();
+    }
+
     static char[] sSingleCharArray = new char[1];
     static KeyCharacterMap sKeyCharacterMap;
 
@@ -80,29 +98,16 @@
     private ChromiumBaseInputConnection mInputConnection;
     private ChromiumBaseInputConnection.Factory mInputConnectionFactory;
 
-    // NOTE: This object will not be released by Android framework until the matching
-    // ResultReceiver in the InputMethodService (IME app) gets gc'ed.
-    private ShowKeyboardResultReceiver mShowKeyboardResultReceiver;
-
-    private final WebContents mWebContents;
-    private View mContainerView;
-
+    private final ImeAdapterDelegate mViewEmbedder;
     // This holds the information necessary for constructing CursorAnchorInfo, and notifies to
     // InputMethodManager on appropriate timing, depending on how IME requested the information
     // via InputConnection. The update request is per InputConnection, hence for each time it is
     // re-created, the monitoring status will be reset.
     private final CursorAnchorInfoController mCursorAnchorInfoController;
 
-    private final List<ImeEventObserver> mEventObservers = new ArrayList<>();
-
     private int mTextInputType = TextInputType.NONE;
     private int mTextInputFlags;
     private int mTextInputMode = WebTextInputMode.kDefault;
-    private boolean mNodeEditable;
-
-    // Viewport rect before the OSK was brought up.
-    // Used to tell View#onSizeChanged to focus a form element.
-    private final Rect mFocusPreOSKViewportRect = new Rect();
 
     // Keep the current configuration to detect the change when onConfigurationChanged() is called.
     private Configuration mCurrentConfig;
@@ -118,45 +123,18 @@
     private boolean mIsConnected;
 
     /**
-     * {@ResultReceiver} passed in InputMethodManager#showSoftInput}. We need this to scroll to the
-     * editable node at the right timing, which is after input method window shows up.
-     */
-    // TODO(crbug.com/635567): Fix this properly.
-    @SuppressLint("ParcelCreator")
-    private static class ShowKeyboardResultReceiver extends ResultReceiver {
-        // Unfortunately, the memory life cycle of ResultReceiver object, once passed in
-        // showSoftInput(), is in the control of Android's input method framework and IME app,
-        // so we use a weakref to avoid tying ImeAdapter's lifetime to that of ResultReceiver
-        // object.
-        private final WeakReference<ImeAdapter> mImeAdapter;
-
-        public ShowKeyboardResultReceiver(ImeAdapter imeAdapter, Handler handler) {
-            super(handler);
-            mImeAdapter = new WeakReference<>(imeAdapter);
-        }
-
-        @Override
-        public void onReceiveResult(int resultCode, Bundle resultData) {
-            ImeAdapter imeAdapter = mImeAdapter.get();
-            if (imeAdapter == null) return;
-            imeAdapter.onShowKeyboardReceiveResult(resultCode);
-        }
-    }
-
-    /**
+     * @param initialConfiguration The initial configuration of the embedder's attached view.
      * @param webContents WebContents instance with which this ImeAdapter is associated.
-     * @param containerView {@link View} instance which input events are posted on.
      * @param wrapper InputMethodManagerWrapper that should receive all the call directed to
      *                InputMethodManager.
+     * @param embedder The view that is used for callbacks from ImeAdapter.
      */
-    public ImeAdapter(
-            WebContents webContents, View containerView, InputMethodManagerWrapper wrapper) {
-        mWebContents = webContents;
-        mContainerView = containerView;
+    public ImeAdapter(Configuration initialConfiguration, WebContents webContents,
+            InputMethodManagerWrapper wrapper, ImeAdapterDelegate embedder) {
         mInputMethodManagerWrapper = wrapper;
-
+        mViewEmbedder = embedder;
         // Deep copy newConfig so that we can notice the difference.
-        mCurrentConfig = new Configuration(mContainerView.getResources().getConfiguration());
+        mCurrentConfig = new Configuration(initialConfiguration);
         // CursorAnchroInfo is supported only after L.
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             mCursorAnchorInfoController = CursorAnchorInfoController.create(wrapper,
@@ -188,18 +166,6 @@
         mNativeImeAdapterAndroid = nativeInit(webContents);
     }
 
-    /**
-     * Set the container view.
-     * @param containerView {@link View} which this ImeAdapter works on.
-     */
-    public void setContainerView(View containerView) {
-        mContainerView = containerView;
-    }
-
-    public void addEventObserver(ImeEventObserver eventObserver) {
-        mEventObservers.add(eventObserver);
-    }
-
     private void createInputConnectionFactory() {
         if (mInputConnectionFactory != null) return;
         mInputConnectionFactory = new ThreadedInputConnectionFactory(mInputMethodManagerWrapper);
@@ -228,14 +194,15 @@
             return null;
         }
         if (mInputConnectionFactory == null) return null;
-        setInputConnection(mInputConnectionFactory.initializeAndGet(mContainerView, this,
-                mTextInputType, mTextInputFlags, mTextInputMode, mLastSelectionStart,
+        setInputConnection(mInputConnectionFactory.initializeAndGet(mViewEmbedder.getAttachedView(),
+                this, mTextInputType, mTextInputFlags, mTextInputMode, mLastSelectionStart,
                 mLastSelectionEnd, outAttrs));
         if (DEBUG_LOGS) Log.i(TAG, "onCreateInputConnection: " + mInputConnection);
 
         if (mCursorAnchorInfoController != null) {
-            mCursorAnchorInfoController.onRequestCursorUpdates(false /* not an immediate request */,
-                    false /* disable monitoring */, mContainerView);
+            mCursorAnchorInfoController.onRequestCursorUpdates(
+                    false /* not an immediate request */, false /* disable monitoring */,
+                    mViewEmbedder.getAttachedView());
         }
         if (isValid()) {
             nativeRequestCursorUpdate(mNativeImeAdapterAndroid,
@@ -321,71 +288,54 @@
      *                       selection.
      * @param replyToRequest True when the update was requested by IME.
      */
-    @CalledByNative
-    private void updateState(int textInputType, int textInputFlags, int textInputMode,
+    public void updateState(int textInputType, int textInputFlags, int textInputMode,
             boolean showIfNeeded, String text, int selectionStart, int selectionEnd,
             int compositionStart, int compositionEnd, boolean replyToRequest) {
-        TraceEvent.begin("ImeAdapter.updateState");
-        try {
-            if (DEBUG_LOGS) {
-                Log.i(TAG, "updateState: type [%d->%d], flags [%d], show [%b], ", mTextInputType,
-                        textInputType, textInputFlags, showIfNeeded);
-            }
-            boolean needsRestart = false;
-            if (mRestartInputOnNextStateUpdate) {
-                needsRestart = true;
-                mRestartInputOnNextStateUpdate = false;
-            }
-
-            mTextInputFlags = textInputFlags;
-            if (mTextInputMode != textInputMode) {
-                boolean editable = textInputMode != TextInputType.NONE;
-                if (mNodeEditable != editable) {
-                    boolean password = textInputType == TextInputType.PASSWORD;
-                    for (ImeEventObserver observer : mEventObservers) {
-                        observer.onNodeAttributeUpdated(editable, password);
-                    }
-                    mNodeEditable = editable;
-                }
-                mTextInputMode = textInputMode;
-                needsRestart = true;
-            }
-            if (mTextInputType != textInputType) {
-                mTextInputType = textInputType;
-                needsRestart = true;
-            }
-            if (mCursorAnchorInfoController != null
-                    && (!TextUtils.equals(mLastText, text) || mLastSelectionStart != selectionStart
-                               || mLastSelectionEnd != selectionEnd
-                               || mLastCompositionStart != compositionStart
-                               || mLastCompositionEnd != compositionEnd)) {
-                mCursorAnchorInfoController.invalidateLastCursorAnchorInfo();
-            }
-            mLastText = text;
-            mLastSelectionStart = selectionStart;
-            mLastSelectionEnd = selectionEnd;
-            mLastCompositionStart = compositionStart;
-            mLastCompositionEnd = compositionEnd;
-
-            if (textInputType == TextInputType.NONE) {
-                hideKeyboard();
-            } else {
-                if (needsRestart) restartInput();
-                // There is no API for us to get notified of user's dismissal of keyboard.
-                // Therefore, we should try to show keyboard even when text input type hasn't
-                // changed.
-                if (showIfNeeded) showSoftKeyboard();
-            }
-
-            if (mInputConnection != null) {
-                boolean singleLine = mTextInputType != TextInputType.TEXT_AREA
-                        && mTextInputType != TextInputType.CONTENT_EDITABLE;
-                mInputConnection.updateStateOnUiThread(text, selectionStart, selectionEnd,
-                        compositionStart, compositionEnd, singleLine, replyToRequest);
-            }
-        } finally {
-            TraceEvent.end("ImeAdapter.updateState");
+        if (DEBUG_LOGS) {
+            Log.i(TAG, "updateState: type [%d->%d], flags [%d], show [%b], ", mTextInputType,
+                    textInputType, textInputFlags, showIfNeeded);
         }
+        boolean needsRestart = false;
+        if (mRestartInputOnNextStateUpdate) {
+            needsRestart = true;
+            mRestartInputOnNextStateUpdate = false;
+        }
+
+        mTextInputFlags = textInputFlags;
+        if (mTextInputMode != textInputMode) {
+            mTextInputMode = textInputMode;
+            needsRestart = true;
+        }
+        if (mTextInputType != textInputType) {
+            mTextInputType = textInputType;
+            needsRestart = true;
+        }
+        if (mCursorAnchorInfoController != null && (!TextUtils.equals(mLastText, text)
+                || mLastSelectionStart != selectionStart || mLastSelectionEnd != selectionEnd
+                || mLastCompositionStart != compositionStart
+                || mLastCompositionEnd != compositionEnd)) {
+            mCursorAnchorInfoController.invalidateLastCursorAnchorInfo();
+        }
+        mLastText = text;
+        mLastSelectionStart = selectionStart;
+        mLastSelectionEnd = selectionEnd;
+        mLastCompositionStart = compositionStart;
+        mLastCompositionEnd = compositionEnd;
+
+        if (textInputType == TextInputType.NONE) {
+            hideKeyboard();
+        } else {
+            if (needsRestart) restartInput();
+            // There is no API for us to get notified of user's dismissal of keyboard.
+            // Therefore, we should try to show keyboard even when text input type hasn't changed.
+            if (showIfNeeded) showSoftKeyboard();
+        }
+
+        if (mInputConnection == null) return;
+        boolean singleLine = mTextInputType != TextInputType.TEXT_AREA
+                && mTextInputType != TextInputType.CONTENT_EDITABLE;
+        mInputConnection.updateStateOnUiThread(text, selectionStart, selectionEnd, compositionStart,
+                compositionEnd, singleLine, replyToRequest);
     }
 
     /**
@@ -393,51 +343,20 @@
      */
     private void showSoftKeyboard() {
         if (DEBUG_LOGS) Log.i(TAG, "showSoftKeyboard");
-        mInputMethodManagerWrapper.showSoftInput(mContainerView, 0, getNewShowKeyboardReceiver());
-        if (mContainerView.getResources().getConfiguration().keyboard
+        mInputMethodManagerWrapper.showSoftInput(
+                mViewEmbedder.getAttachedView(), 0, mViewEmbedder.getNewShowKeyboardReceiver());
+        if (mViewEmbedder.getAttachedView().getResources().getConfiguration().keyboard
                 != Configuration.KEYBOARD_NOKEYS) {
-            mWebContents.scrollFocusedEditableNodeIntoView();
+            mViewEmbedder.onKeyboardBoundsUnchanged();
         }
     }
 
     /**
-     * Call this when we get result from ResultReceiver passed in calling showSoftInput().
-     * @param resultCode The result of showSoftInput() as defined in InputMethodManager.
-     */
-    public void onShowKeyboardReceiveResult(int resultCode) {
-        if (resultCode == InputMethodManager.RESULT_SHOWN) {
-            // If OSK is newly shown, delay the form focus until
-            // the onSizeChanged (in order to adjust relative to the
-            // new size).
-            // TODO(jdduke): We should not assume that onSizeChanged will
-            // always be called, crbug.com/294908.
-            mContainerView.getWindowVisibleDisplayFrame(mFocusPreOSKViewportRect);
-        } else if (ViewUtils.hasFocus(mContainerView)
-                && resultCode == InputMethodManager.RESULT_UNCHANGED_SHOWN) {
-            // If the OSK was already there, focus the form immediately.
-            mWebContents.scrollFocusedEditableNodeIntoView();
-        }
-    }
-
-    public Rect getFocusPreOSKViewportRect() {
-        return mFocusPreOSKViewportRect;
-    }
-
-    @VisibleForTesting
-    public ResultReceiver getNewShowKeyboardReceiver() {
-        if (mShowKeyboardResultReceiver == null) {
-            // Note: the returned object will get leaked by Android framework.
-            mShowKeyboardResultReceiver = new ShowKeyboardResultReceiver(this, new Handler());
-        }
-        return mShowKeyboardResultReceiver;
-    }
-
-    /**
      * Hide soft keyboard.
      */
     private void hideKeyboard() {
         if (DEBUG_LOGS) Log.i(TAG, "hideKeyboard");
-        View view = mContainerView;
+        View view = mViewEmbedder.getAttachedView();
         if (mInputMethodManagerWrapper.isActive(view)) {
             // NOTE: we should not set ResultReceiver here. Otherwise, IMM will own ContentViewCore
             // and ImeAdapter even after input method goes away and result gets received.
@@ -579,8 +498,8 @@
      */
     void updateSelection(
             int selectionStart, int selectionEnd, int compositionStart, int compositionEnd) {
-        mInputMethodManagerWrapper.updateSelection(
-                mContainerView, selectionStart, selectionEnd, compositionStart, compositionEnd);
+        mInputMethodManagerWrapper.updateSelection(mViewEmbedder.getAttachedView(),
+                selectionStart, selectionEnd, compositionStart, compositionEnd);
     }
 
     /**
@@ -588,7 +507,7 @@
      */
     void restartInput() {
         // This will eventually cause input method manager to call View#onCreateInputConnection().
-        mInputMethodManagerWrapper.restartInput(mContainerView);
+        mInputMethodManagerWrapper.restartInput(mViewEmbedder.getAttachedView());
         if (mInputConnection != null) mInputConnection.onRestartInputOnUiThread();
     }
 
@@ -597,22 +516,7 @@
      */
     boolean performContextMenuAction(int id) {
         if (DEBUG_LOGS) Log.i(TAG, "performContextMenuAction: id [%d]", id);
-        switch (id) {
-            case android.R.id.selectAll:
-                mWebContents.selectAll();
-                return true;
-            case android.R.id.cut:
-                mWebContents.cut();
-                return true;
-            case android.R.id.copy:
-                mWebContents.copy();
-                return true;
-            case android.R.id.paste:
-                mWebContents.paste();
-                return true;
-            default:
-                return false;
-        }
+        return mViewEmbedder.performContextMenuAction(id);
     }
 
     boolean performEditorAction(int actionCode) {
@@ -646,11 +550,6 @@
                 flags));
     }
 
-    private void onImeEvent() {
-        for (ImeEventObserver observer : mEventObservers) observer.onImeEvent();
-        if (mNodeEditable) mWebContents.dismissTextHandles();
-    }
-
     boolean sendCompositionToNative(
             CharSequence text, int newCursorPosition, boolean isCommit, int unicodeFromKeyEvent) {
         if (!isValid()) return false;
@@ -662,7 +561,7 @@
             return true;
         }
 
-        onImeEvent();
+        mViewEmbedder.onImeEvent();
         long timestampMs = SystemClock.uptimeMillis();
         nativeSendKeyEvent(mNativeImeAdapterAndroid, null, WebInputEventType.RawKeyDown, 0,
                 timestampMs, COMPOSITION_KEY_CODE, 0, false, unicodeFromKeyEvent);
@@ -702,7 +601,7 @@
             // sends ACTION_DOWN), so it's fine to silently drop it.
             return false;
         }
-        onImeEvent();
+        mViewEmbedder.onImeEvent();
 
         return nativeSendKeyEvent(mNativeImeAdapterAndroid, event, type,
                 getModifiers(event.getMetaState()), event.getEventTime(), event.getKeyCode(),
@@ -718,7 +617,7 @@
      * @return Whether the native counterpart of ImeAdapter received the call.
      */
     boolean deleteSurroundingText(int beforeLength, int afterLength) {
-        onImeEvent();
+        mViewEmbedder.onImeEvent();
         if (!isValid()) return false;
         nativeSendKeyEvent(mNativeImeAdapterAndroid, null, WebInputEventType.RawKeyDown, 0,
                 SystemClock.uptimeMillis(), COMPOSITION_KEY_CODE, 0, false, 0);
@@ -737,7 +636,7 @@
      * @return Whether the native counterpart of ImeAdapter received the call.
      */
     boolean deleteSurroundingTextInCodePoints(int beforeLength, int afterLength) {
-        onImeEvent();
+        mViewEmbedder.onImeEvent();
         if (!isValid()) return false;
         nativeSendKeyEvent(mNativeImeAdapterAndroid, null, WebInputEventType.RawKeyDown, 0,
                 SystemClock.uptimeMillis(), COMPOSITION_KEY_CODE, 0, false, 0);
@@ -813,8 +712,8 @@
             nativeRequestCursorUpdate(mNativeImeAdapterAndroid, immediateRequest, monitorRequest);
         }
         if (mCursorAnchorInfoController == null) return false;
-        return mCursorAnchorInfoController.onRequestCursorUpdates(
-                immediateRequest, monitorRequest, mContainerView);
+        return mCursorAnchorInfoController.onRequestCursorUpdates(immediateRequest, monitorRequest,
+                mViewEmbedder.getAttachedView());
     }
 
     /**
@@ -835,7 +734,7 @@
         if (mCursorAnchorInfoController == null) return;
         mCursorAnchorInfoController.onUpdateFrameInfo(renderCoordinates, hasInsertionMarker,
                 isInsertionMarkerVisible, insertionMarkerHorizontal, insertionMarkerTop,
-                insertionMarkerBottom, mContainerView);
+                insertionMarkerBottom, mViewEmbedder.getAttachedView());
     }
 
     @CalledByNative
@@ -869,7 +768,8 @@
     @CalledByNative
     private void setCharacterBounds(float[] characterBounds) {
         if (mCursorAnchorInfoController == null) return;
-        mCursorAnchorInfoController.setCompositionCharacterBounds(characterBounds, mContainerView);
+        mCursorAnchorInfoController.setCompositionCharacterBounds(characterBounds,
+                mViewEmbedder.getAttachedView());
     }
 
     @CalledByNative
diff --git a/content/public/android/java/src/org/chromium/content/common/IGpuProcessCallback.aidl b/content/public/android/java/src/org/chromium/content/common/IGpuProcessCallback.aidl
index 5b2de4c..03e906d 100644
--- a/content/public/android/java/src/org/chromium/content/common/IGpuProcessCallback.aidl
+++ b/content/public/android/java/src/org/chromium/content/common/IGpuProcessCallback.aidl
@@ -9,7 +9,7 @@
 
 interface IGpuProcessCallback {
 
-  void forwardSurfaceForSurfaceRequest(
+  oneway void forwardSurfaceForSurfaceRequest(
       in UnguessableToken requestToken, in Surface surface);
 
   SurfaceWrapper getViewSurface(int surfaceId);
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ImeEventObserver.java b/content/public/android/java/src/org/chromium/content_public/browser/ImeEventObserver.java
deleted file mode 100644
index 5ba308fa..0000000
--- a/content/public/android/java/src/org/chromium/content_public/browser/ImeEventObserver.java
+++ /dev/null
@@ -1,22 +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.
-
-package org.chromium.content_public.browser;
-
-/**
- * Interface for the classes that need to be notified of IME changes.
- */
-public interface ImeEventObserver {
-    /**
-     * Called to notify the delegate about synthetic/real key events before sending to renderer.
-     */
-    void onImeEvent();
-
-    /**
-     * Called when the focused node attribute is updated.
-     * @param editable {@code true} if the node becomes editable; else {@code false}.
-     * @param password indicates the node is of type password if {@code true}.
-     */
-    void onNodeAttributeUpdated(boolean editable, boolean password);
-}
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java
index 4de2bfa..7e08d1e 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java
@@ -103,7 +103,7 @@
         assertEquals(0, ChildProcessLauncher.connectedServicesCountForTesting());
 
         // Crash the service.
-        assertTrue(connection.crashServiceForTesting());
+        connection.crashServiceForTesting();
 
         // Verify that the connection gets cleaned-up.
         CriteriaHelper.pollInstrumentationThread(Criteria.equals(0, new Callable<Integer>() {
@@ -153,7 +153,7 @@
                 });
 
         // Crash the service.
-        assertTrue(connection.crashServiceForTesting());
+        connection.crashServiceForTesting();
 
         // Verify that the connection gets cleaned-up.
         CriteriaHelper.pollInstrumentationThread(Criteria.equals(0, new Callable<Integer>() {
@@ -217,7 +217,7 @@
                 });
 
         // Crash the service.
-        assertTrue(connection.crashServiceForTesting());
+        connection.crashServiceForTesting();
 
         // Verify that a new service is started for the pending spawn.
         CriteriaHelper.pollInstrumentationThread(Criteria.equals(0, new Callable<Integer>() {
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/PopupZoomerTest.java b/content/public/android/javatests/src/org/chromium/content/browser/PopupZoomerTest.java
index 43f443b..9633bc3 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/PopupZoomerTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/PopupZoomerTest.java
@@ -16,6 +16,7 @@
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.util.Feature;
 import org.chromium.content.browser.input.ImeAdapter;
+import org.chromium.content.browser.input.TestImeAdapterDelegate;
 import org.chromium.content.browser.test.util.TestInputMethodManagerWrapper;
 import org.chromium.content_shell_apk.ContentShellTestBase;
 
@@ -78,21 +79,25 @@
     @Override
     public void setUp() throws Exception {
         super.setUp();
+        mPopupZoomer = createPopupZoomerForTest(getInstrumentation().getTargetContext());
+        mContentViewCore = new ContentViewCore(getActivity(), "");
 
         final Context context = getActivity();
 
         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
             @Override
             public void run() {
+                mPopupZoomer = createPopupZoomerForTest(getInstrumentation().getTargetContext());
                 mContentViewCore = new ContentViewCore(context, "");
+                ImeAdapter imeAdapter = new ImeAdapter(
+                        getContentViewCore().getContainerView().getResources().getConfiguration(),
+                        getContentViewCore().getWebContents(),
+                        new TestInputMethodManagerWrapper(mContentViewCore),
+                        new TestImeAdapterDelegate(getContentViewCore().getContainerView()));
                 mContentViewCore.setSelectionPopupControllerForTesting(new SelectionPopupController(
                         context, null, null, null, mContentViewCore.getRenderCoordinates()));
-                mContentViewCore.setImeAdapterForTest(
-                        new ImeAdapter(getContentViewCore().getWebContents(),
-                                getContentViewCore().getContainerView(),
-                                new TestInputMethodManagerWrapper(mContentViewCore)));
-                mPopupZoomer = createPopupZoomerForTest(getInstrumentation().getTargetContext());
                 mContentViewCore.setPopupZoomerForTest(mPopupZoomer);
+                mContentViewCore.setImeAdapterForTest(imeAdapter);
             }
         });
     }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/TestImeAdapterDelegate.java b/content/public/android/javatests/src/org/chromium/content/browser/input/TestImeAdapterDelegate.java
new file mode 100644
index 0000000..fc6753f
--- /dev/null
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/TestImeAdapterDelegate.java
@@ -0,0 +1,42 @@
+// Copyright 2015 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.
+
+package org.chromium.content.browser.input;
+
+import android.os.ResultReceiver;
+import android.view.View;
+
+import org.chromium.content.browser.input.ImeAdapter.ImeAdapterDelegate;
+
+/**
+ * An empty ImeAdapterDelegate used for testing.
+ */
+public class TestImeAdapterDelegate implements ImeAdapterDelegate {
+    private final View mView;
+
+    public TestImeAdapterDelegate(View view) {
+        mView = view;
+    }
+
+    @Override
+    public void onImeEvent() {}
+
+    @Override
+    public void onKeyboardBoundsUnchanged() {}
+
+    @Override
+    public boolean performContextMenuAction(int id) {
+        return false;
+    }
+
+    @Override
+    public View getAttachedView() {
+        return mView;
+    }
+
+    @Override
+    public ResultReceiver getNewShowKeyboardReceiver() {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/content/public/browser/download_url_parameters.cc b/content/public/browser/download_url_parameters.cc
index 4ef1c14d..12c5a1ca 100644
--- a/content/public/browser/download_url_parameters.cc
+++ b/content/public/browser/download_url_parameters.cc
@@ -38,7 +38,8 @@
       render_frame_host_routing_id_(render_frame_host_routing_id),
       url_request_context_getter_(url_request_context_getter),
       url_(url),
-      do_not_prompt_for_login_(false) {}
+      do_not_prompt_for_login_(false),
+      transient_(false) {}
 
 DownloadUrlParameters::~DownloadUrlParameters() {
 }
diff --git a/content/public/browser/download_url_parameters.h b/content/public/browser/download_url_parameters.h
index 88ff9d4d..b1a8bce 100644
--- a/content/public/browser/download_url_parameters.h
+++ b/content/public/browser/download_url_parameters.h
@@ -205,6 +205,10 @@
     do_not_prompt_for_login_ = do_not_prompt;
   }
 
+  // Sets whether the download is to be treated as transient. A transient
+  // download is short-lived and is not shown in the UI.
+  void set_transient(bool transient) { transient_ = transient; }
+
   // For downloads of blob URLs, the caller can store a BlobDataHandle in the
   // DownloadUrlParameters object so that the blob will remain valid until
   // the download starts. The BlobDataHandle will be attached to the associated
@@ -257,6 +261,7 @@
   bool prompt() const { return save_info_.prompt_for_save_location; }
   const GURL& url() const { return url_; }
   bool do_not_prompt_for_login() const { return do_not_prompt_for_login_; }
+  bool is_transient() const { return transient_; }
 
   // STATE_CHANGING: Return the BlobDataHandle.
   std::unique_ptr<storage::BlobDataHandle> GetBlobDataHandle() {
@@ -288,6 +293,7 @@
   DownloadSaveInfo save_info_;
   GURL url_;
   bool do_not_prompt_for_login_;
+  bool transient_;
   std::unique_ptr<storage::BlobDataHandle> blob_data_handle_;
 
   DISALLOW_COPY_AND_ASSIGN(DownloadUrlParameters);
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc
index 1bc5fb2..d29d85f 100644
--- a/content/public/renderer/content_renderer_client.cc
+++ b/content/public/renderer/content_renderer_client.cc
@@ -169,6 +169,22 @@
 void ContentRendererClient::AddSupportedKeySystems(
     std::vector<std::unique_ptr<media::KeySystemProperties>>* key_systems) {}
 
+bool ContentRendererClient::IsKeySystemsUpdateNeeded() {
+  return false;
+}
+
+bool ContentRendererClient::IsSupportedAudioConfig(
+    const media::AudioConfig& config) {
+  // Defer to media's default support.
+  return ::media::IsSupportedAudioConfig(config);
+}
+
+bool ContentRendererClient::IsSupportedVideoConfig(
+    const media::VideoConfig& config) {
+  // Defer to media's default support.
+  return ::media::IsSupportedVideoConfig(config);
+}
+
 std::unique_ptr<MediaStreamRendererFactory>
 ContentRendererClient::CreateMediaStreamRendererFactory() {
   return nullptr;
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index 704289c..d544fb7 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -18,6 +18,7 @@
 #include "base/task_scheduler/task_scheduler.h"
 #include "build/build_config.h"
 #include "content/public/common/content_client.h"
+#include "media/base/decode_capabilities.h"
 #include "third_party/WebKit/public/platform/WebPageVisibilityState.h"
 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
 #include "third_party/WebKit/public/web/WebNavigationType.h"
@@ -263,11 +264,22 @@
   // Allows an embedder to provide a default image decode color space.
   virtual std::unique_ptr<gfx::ICCProfile> GetImageDecodeColorProfile();
 
-  // Gives the embedder a chance to register the key system(s) it supports by
-  // populating |key_systems|.
+  // Allows embedder to register the key system(s) it supports by populating
+  // |key_systems|.
   virtual void AddSupportedKeySystems(
       std::vector<std::unique_ptr<media::KeySystemProperties>>* key_systems);
 
+  // Signal that embedder has changed key systems.
+  // TODO(chcunningham): Refactor this to a proper change "observer" API that is
+  // less fragile (don't assume AddSupportedKeySystems has just one caller).
+  virtual bool IsKeySystemsUpdateNeeded();
+
+  // Allows embedder to describe customized audio capabilities.
+  virtual bool IsSupportedAudioConfig(const media::AudioConfig& config);
+
+  // Allows embedder to describe customized video capabilities.
+  virtual bool IsSupportedVideoConfig(const media::VideoConfig& config);
+
   // Returns true if we should report a detailed message (including a stack
   // trace) for console [logs|errors|exceptions]. |source| is the WebKit-
   // reported source for the error; this can point to a page or a script,
diff --git a/content/public/test/mock_render_thread.cc b/content/public/test/mock_render_thread.cc
index 393c6fe..51ee9d46 100644
--- a/content/public/test/mock_render_thread.cc
+++ b/content/public/test/mock_render_thread.cc
@@ -77,12 +77,8 @@
     NOTREACHED();
   }
 
-  void AllocatedSharedBitmap(mojo::ScopedSharedBufferHandle buffer,
-                             const cc::SharedBitmapId& id) override {
-    NOTREACHED();
-  }
-
-  void DeletedSharedBitmap(const cc::SharedBitmapId& id) override {
+  void GetSharedBitmapManager(
+      cc::mojom::SharedBitmapManagerAssociatedRequest request) override {
     NOTREACHED();
   }
 
diff --git a/content/public/test/test_service.cc b/content/public/test/test_service.cc
index 6854798..4e45f21 100644
--- a/content/public/test/test_service.cc
+++ b/content/public/test/test_service.cc
@@ -10,23 +10,25 @@
 #include "base/message_loop/message_loop.h"
 #include "services/service_manager/public/cpp/connection.h"
 #include "services/service_manager/public/cpp/connector.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 
 namespace content {
 
 const char kTestServiceUrl[] = "system:content_test_service";
 
 TestService::TestService() : service_binding_(this) {
+  registry_.AddInterface<mojom::TestService>(this);
 }
 
 TestService::~TestService() {
 }
 
-bool TestService::OnConnect(const service_manager::ServiceInfo& remote_info,
-                            service_manager::InterfaceRegistry* registry) {
-  requestor_name_ = remote_info.identity.name();
-  registry->AddInterface<mojom::TestService>(this);
-  return true;
+void TestService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  requestor_name_ = source_info.identity.name();
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void TestService::Create(const service_manager::Identity& remote_identity,
diff --git a/content/public/test/test_service.h b/content/public/test/test_service.h
index 8acc9de..da61b442 100644
--- a/content/public/test/test_service.h
+++ b/content/public/test/test_service.h
@@ -10,6 +10,7 @@
 #include "base/macros.h"
 #include "content/public/test/test_service.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 
@@ -29,8 +30,9 @@
 
  private:
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // service_manager::InterfaceFactory<mojom::TestService>:
   void Create(const service_manager::Identity& remote_identity,
@@ -44,6 +46,7 @@
   void CreateSharedBuffer(const std::string& message,
                           const CreateSharedBufferCallback& callback) override;
 
+  service_manager::BinderRegistry registry_;
   mojo::Binding<mojom::TestService> service_binding_;
 
   // The name of the app connecting to us.
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index b00ed864..e17e316 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -476,6 +476,7 @@
     "//services/device/public/interfaces:constants",
     "//services/service_manager/public/cpp",
     "//services/service_manager/public/interfaces",
+    "//services/ui/public/cpp/bitmap",
     "//services/ui/public/cpp/gpu",
     "//skia",
     "//storage/common",
@@ -690,8 +691,12 @@
       "media_recorder/audio_track_recorder.h",
       "media_recorder/media_recorder_handler.cc",
       "media_recorder/media_recorder_handler.h",
+      "media_recorder/vea_encoder.cc",
+      "media_recorder/vea_encoder.h",
       "media_recorder/video_track_recorder.cc",
       "media_recorder/video_track_recorder.h",
+      "media_recorder/vpx_encoder.cc",
+      "media_recorder/vpx_encoder.h",
       "p2p/empty_network_manager.cc",
       "p2p/empty_network_manager.h",
       "p2p/filtering_network_manager.cc",
@@ -753,6 +758,10 @@
       "//third_party/webrtc_overrides:init_webrtc",
     ]
     if (rtc_use_h264) {
+      sources += [
+        "media_recorder/h264_encoder.cc",
+        "media_recorder/h264_encoder.h",
+      ]
       deps += [ "//third_party/openh264:encoder" ]
     }
   } else {
@@ -792,6 +801,8 @@
       "pepper/pepper_audio_encoder_host.h",
       "pepper/pepper_audio_input_host.cc",
       "pepper/pepper_audio_input_host.h",
+      "pepper/pepper_audio_output_host.cc",
+      "pepper/pepper_audio_output_host.h",
       "pepper/pepper_broker.cc",
       "pepper/pepper_broker.h",
       "pepper/pepper_browser_connection.cc",
@@ -822,6 +833,8 @@
       "pepper/pepper_platform_audio_input.h",
       "pepper/pepper_platform_audio_output.cc",
       "pepper/pepper_platform_audio_output.h",
+      "pepper/pepper_platform_audio_output_dev.cc",
+      "pepper/pepper_platform_audio_output_dev.h",
       "pepper/pepper_platform_camera_device.cc",
       "pepper/pepper_platform_camera_device.h",
       "pepper/pepper_platform_video_capture.cc",
diff --git a/content/renderer/media/media_stream_constraints_util_video_content.cc b/content/renderer/media/media_stream_constraints_util_video_content.cc
index 7e879e0..9f21ec5 100644
--- a/content/renderer/media/media_stream_constraints_util_video_content.cc
+++ b/content/renderer/media/media_stream_constraints_util_video_content.cc
@@ -16,10 +16,10 @@
 
 namespace content {
 
-// TODO(guidou): Change default width and height to larger values. See
-// http://crbug.com/257097.
-const int kDefaultScreenCastWidth = MediaStreamVideoSource::kDefaultWidth;
-const int kDefaultScreenCastHeight = MediaStreamVideoSource::kDefaultHeight;
+const int kDefaultScreenCastWidth = 2880;
+const int kDefaultScreenCastHeight = 1800;
+const double kDefaultScreenCastAspectRatio =
+    static_cast<double>(kDefaultScreenCastWidth) / kDefaultScreenCastHeight;
 const double kDefaultScreenCastFrameRate =
     MediaStreamVideoSource::kDefaultFrameRate;
 const int kMinScreenCastDimension = 1;
@@ -224,12 +224,33 @@
     const blink::WebMediaTrackConstraintSet& basic_constraint_set) {
   std::string device_id = SelectDeviceIDFromCandidates(candidates.device_id_set,
                                                        basic_constraint_set);
+  // If a maximum width or height is explicitly given, use them as default.
+  // If only one of them is given, use the default aspect ratio to determine the
+  // other default value.
   // TODO(guidou): Use native screen-capture resolution as default.
   // http://crbug.com/257097
+  int default_height = kDefaultScreenCastHeight;
+  int default_width = kDefaultScreenCastWidth;
+  bool has_explicit_max_height =
+      candidates.resolution_set.max_height() < kMaxScreenCastDimension;
+  bool has_explicit_max_width =
+      candidates.resolution_set.max_width() < kMaxScreenCastDimension;
+  if (has_explicit_max_height && has_explicit_max_width) {
+    default_height = candidates.resolution_set.max_height();
+    default_width = candidates.resolution_set.max_width();
+  } else if (has_explicit_max_height) {
+    default_height = candidates.resolution_set.max_height();
+    default_width = static_cast<int>(
+        std::round(default_height * kDefaultScreenCastAspectRatio));
+  } else if (has_explicit_max_width) {
+    default_width = candidates.resolution_set.max_width();
+    default_height = static_cast<int>(
+        std::round(default_width / kDefaultScreenCastAspectRatio));
+  }
   media::VideoCaptureParams capture_params =
-      SelectVideoCaptureParamsFromCandidates(
-          candidates, basic_constraint_set, kDefaultScreenCastHeight,
-          kDefaultScreenCastWidth, kDefaultScreenCastFrameRate);
+      SelectVideoCaptureParamsFromCandidates(candidates, basic_constraint_set,
+                                             default_height, default_width,
+                                             kDefaultScreenCastFrameRate);
 
   base::Optional<bool> noise_reduction = SelectNoiseReductionFromCandidates(
       candidates.noise_reduction_set, basic_constraint_set);
diff --git a/content/renderer/media/media_stream_constraints_util_video_content.h b/content/renderer/media/media_stream_constraints_util_video_content.h
index fb7a2105..28f5b739 100644
--- a/content/renderer/media/media_stream_constraints_util_video_content.h
+++ b/content/renderer/media/media_stream_constraints_util_video_content.h
@@ -19,6 +19,7 @@
 
 CONTENT_EXPORT extern const int kDefaultScreenCastWidth;
 CONTENT_EXPORT extern const int kDefaultScreenCastHeight;
+CONTENT_EXPORT extern const double kDefaultScreenCastAspectRatio;
 CONTENT_EXPORT extern const double kDefaultScreenCastFrameRate;
 CONTENT_EXPORT extern const int kMinScreenCastDimension;
 CONTENT_EXPORT extern const int kMaxScreenCastDimension;
diff --git a/content/renderer/media/media_stream_constraints_util_video_content_unittest.cc b/content/renderer/media/media_stream_constraints_util_video_content_unittest.cc
index 79d69b1..4d9fb32 100644
--- a/content/renderer/media/media_stream_constraints_util_video_content_unittest.cc
+++ b/content/renderer/media/media_stream_constraints_util_video_content_unittest.cc
@@ -16,10 +16,6 @@
 
 namespace {
 
-const double kDefaultScreenCastAspectRatio =
-    static_cast<double>(kDefaultScreenCastWidth) /
-    static_cast<double>(kDefaultScreenCastHeight);
-
 void CheckNonResolutionDefaults(const VideoCaptureSettings& result) {
   EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
   EXPECT_EQ(base::Optional<bool>(), result.noise_reduction());
@@ -268,7 +264,7 @@
 
 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMinHeight) {
   constraint_factory_.Reset();
-  const int kHeight = 1000;
+  const int kHeight = 2000;
   constraint_factory_.basic().height.setMin(kHeight);
   auto result = SelectSettings();
   EXPECT_TRUE(result.HasValue());
@@ -299,66 +295,73 @@
 }
 
 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxHeight) {
-  constraint_factory_.Reset();
-  const int kHeight = 1000;
-  constraint_factory_.basic().height.setMax(kHeight);
-  auto result = SelectSettings();
-  EXPECT_TRUE(result.HasValue());
-  // kHeight is greater that the default, so expect the default.
-  EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
-  EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
-  CheckNonResolutionDefaults(result);
-  EXPECT_EQ(1.0 / kHeight, result.track_adapter_settings().min_aspect_ratio);
-  EXPECT_EQ(kMaxScreenCastDimension,
-            result.track_adapter_settings().max_aspect_ratio);
-  CheckTrackAdapterSettingsEqualsFormat(result);
-
-  const int kSmallHeight = 100;
-  constraint_factory_.basic().height.setMax(kSmallHeight);
-  result = SelectSettings();
-  EXPECT_TRUE(result.HasValue());
-  // kSmallHeight is less that the default, so expect kSmallHeight.
-  EXPECT_EQ(kSmallHeight, result.Height());
-  EXPECT_EQ(std::round(kSmallHeight * kDefaultScreenCastAspectRatio),
-            result.Width());
-  CheckNonResolutionDefaults(result);
-  EXPECT_EQ(1.0 / kSmallHeight,
-            result.track_adapter_settings().min_aspect_ratio);
-  EXPECT_EQ(kMaxScreenCastDimension,
-            result.track_adapter_settings().max_aspect_ratio);
-  CheckTrackAdapterSettingsEqualsFormat(result);
-}
-
-TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryHeightRange) {
-  constraint_factory_.Reset();
+  // kMaxHeight smaller than the default.
   {
-    const int kMinHeight = 300;
-    const int kMaxHeight = 1000;
-    constraint_factory_.basic().height.setMin(kMinHeight);
+    constraint_factory_.Reset();
+    const int kMaxHeight = kDefaultScreenCastHeight - 100;
     constraint_factory_.basic().height.setMax(kMaxHeight);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // The range includes the default, so expect the default.
-    EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
-    EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
+    EXPECT_EQ(kMaxHeight, result.Height());
+    EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
+              result.Width());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(1.0 / kMaxHeight,
               result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
+    EXPECT_EQ(kMaxScreenCastDimension,
               result.track_adapter_settings().max_aspect_ratio);
     CheckTrackAdapterSettingsEqualsFormat(result);
   }
 
+  // kMaxHeight greater than the default.
   {
-    const int kMinHeight = 900;
-    const int kMaxHeight = 1000;
+    constraint_factory_.Reset();
+    const int kMaxHeight = kDefaultScreenCastHeight + 100;
+    constraint_factory_.basic().height.setMax(kMaxHeight);
+    auto result = SelectSettings();
+    EXPECT_TRUE(result.HasValue());
+    EXPECT_EQ(kMaxHeight, result.Height());
+    EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
+              result.Width());
+    CheckNonResolutionDefaults(result);
+    EXPECT_EQ(1.0 / kMaxHeight,
+              result.track_adapter_settings().min_aspect_ratio);
+    EXPECT_EQ(kMaxScreenCastDimension,
+              result.track_adapter_settings().max_aspect_ratio);
+    CheckTrackAdapterSettingsEqualsFormat(result);
+  }
+
+  // kMaxHeight greater than the maximum allowed.
+  {
+    constraint_factory_.Reset();
+    constraint_factory_.basic().height.setMax(kMaxScreenCastDimension + 100);
+    auto result = SelectSettings();
+    EXPECT_TRUE(result.HasValue());
+    EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
+    EXPECT_EQ(
+        std::round(kDefaultScreenCastHeight * kDefaultScreenCastAspectRatio),
+        result.Width());
+    CheckNonResolutionDefaults(result);
+    EXPECT_EQ(1.0 / kMaxScreenCastDimension,
+              result.track_adapter_settings().min_aspect_ratio);
+    EXPECT_EQ(kMaxScreenCastDimension,
+              result.track_adapter_settings().max_aspect_ratio);
+    CheckTrackAdapterSettingsEqualsFormat(result);
+  }
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryHeightRange) {
+  // Range includes the default.
+  {
+    constraint_factory_.Reset();
+    const int kMinHeight = kDefaultScreenCastHeight - 100;
+    const int kMaxHeight = kDefaultScreenCastHeight + 100;
     constraint_factory_.basic().height.setMin(kMinHeight);
     constraint_factory_.basic().height.setMax(kMaxHeight);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // The whole range is greater than the default, so expect the range minimum.
-    EXPECT_EQ(kMinHeight, result.Height());
-    EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
+    EXPECT_EQ(kMaxHeight, result.Height());
+    EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
               result.Width());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(1.0 / kMaxHeight,
@@ -368,14 +371,35 @@
     CheckTrackAdapterSettingsEqualsFormat(result);
   }
 
+  // The whole range is greater than the default.
   {
-    const int kMinHeight = 300;
-    const int kMaxHeight = 400;
+    constraint_factory_.Reset();
+    const int kMinHeight = kDefaultScreenCastHeight + 100;
+    const int kMaxHeight = kDefaultScreenCastHeight + 200;
     constraint_factory_.basic().height.setMin(kMinHeight);
     constraint_factory_.basic().height.setMax(kMaxHeight);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // The whole range is less than the default, so expect the range maximum.
+    EXPECT_EQ(kMaxHeight, result.Height());
+    EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
+              result.Width());
+    CheckNonResolutionDefaults(result);
+    EXPECT_EQ(1.0 / kMaxHeight,
+              result.track_adapter_settings().min_aspect_ratio);
+    EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
+              result.track_adapter_settings().max_aspect_ratio);
+    CheckTrackAdapterSettingsEqualsFormat(result);
+  }
+
+  // The whole range is less than the default.
+  {
+    constraint_factory_.Reset();
+    const int kMinHeight = kDefaultScreenCastHeight - 200;
+    const int kMaxHeight = kDefaultScreenCastHeight - 100;
+    constraint_factory_.basic().height.setMin(kMinHeight);
+    constraint_factory_.basic().height.setMax(kMaxHeight);
+    auto result = SelectSettings();
+    EXPECT_TRUE(result.HasValue());
     EXPECT_EQ(kMaxHeight, result.Height());
     EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
               result.Width());
@@ -398,7 +422,7 @@
     EXPECT_TRUE(result.HasValue());
     EXPECT_EQ(kIdealHeight, result.Height());
     // When ideal height is given, the algorithm returns a width that is closest
-    // to height * kDefaultAspectRatio.
+    // to height * kDefaultScreenCastAspectRatio.
     EXPECT_EQ(std::round(kIdealHeight * kDefaultScreenCastAspectRatio),
               result.Width());
     CheckNonResolutionDefaults(result);
@@ -416,7 +440,7 @@
     EXPECT_TRUE(result.HasValue());
     // Ideal height is greater than the maximum, expect maximum.
     EXPECT_EQ(kMaxHeight, result.Height());
-    // Expect closest to kMaxHeight * kDefaultAspectRatio.
+    // Expect closest to kMaxHeight * kDefaultScreenCastAspectRatio.
     EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
               result.Width());
     CheckNonResolutionDefaults(result);
@@ -438,7 +462,7 @@
     EXPECT_TRUE(result.HasValue());
     // Ideal height is less than the minimum, expect minimum.
     EXPECT_EQ(kMinHeight, result.Height());
-    // Expect closest to kMinHeight * kDefaultAspectRatio.
+    // Expect closest to kMinHeight * kDefaultScreenCastAspectRatio.
     EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
               result.Width());
     CheckNonResolutionDefaults(result);
@@ -462,36 +486,11 @@
     EXPECT_TRUE(result.HasValue());
     // Ideal height is included in the bounding box.
     EXPECT_EQ(kIdealHeight, result.Height());
-    // Expect width closest to kIdealHeight * kDefaultAspectRatio, which is
-    // outside the box. Closest is max width.
-    EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
-    CheckNonResolutionDefaults(result);
-    EXPECT_EQ(100.0 / 1000.0, result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
-    CheckTrackAdapterSettingsEqualsFormat(result);
-
-    constraint_factory_.basic().width.setMin(1200);
-    constraint_factory_.basic().width.setMax(2000);
-    result = SelectSettings();
-    EXPECT_TRUE(result.HasValue());
-    EXPECT_EQ(kIdealHeight, result.Height());
-    // kIdealHeight * kDefaultAspectRatio is outside the box. Closest is
-    // min width.
-    EXPECT_EQ(constraint_factory_.basic().width.min(), result.Width());
-    CheckNonResolutionDefaults(result);
-    EXPECT_EQ(1200.0 / 1000.0,
-              result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(2000.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
-    CheckTrackAdapterSettingsEqualsFormat(result);
-
-    constraint_factory_.basic().width.setMin(100);
-    constraint_factory_.basic().width.setMax(500);
-    result = SelectSettings();
-    EXPECT_TRUE(result.HasValue());
-    EXPECT_EQ(kIdealHeight, result.Height());
-    // kIdealHeight * kDefaultAspectRatio is outside the box. Closest is
-    // max width.
-    EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
+    double default_aspect_ratio =
+        static_cast<double>(constraint_factory_.basic().width.max()) /
+        constraint_factory_.basic().height.max();
+    // Expect width closest to kIdealHeight * default aspect ratio.
+    EXPECT_EQ(std::round(kIdealHeight * default_aspect_ratio), result.Width());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(100.0 / 1000.0, result.track_adapter_settings().min_aspect_ratio);
     EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
@@ -510,7 +509,7 @@
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
     EXPECT_EQ(kMaxHeight, result.Height());
-    // Expect width closest to kMaxHeight * kDefaultAspectRatio, which is
+    // Expect width closest to kMaxHeight * default aspect ratio, which is
     // outside the box. Closest it max width.
     EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
     CheckNonResolutionDefaults(result);
@@ -518,33 +517,6 @@
               result.track_adapter_settings().min_aspect_ratio);
     EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
     CheckTrackAdapterSettingsEqualsFormat(result);
-
-    constraint_factory_.basic().width.setMin(1500);
-    constraint_factory_.basic().width.setMax(2000);
-    result = SelectSettings();
-    EXPECT_TRUE(result.HasValue());
-    EXPECT_EQ(kMaxHeight, result.Height());
-    // kMaxHeight * kDefaultAspectRatio is outside the box. Closest is min
-    // width.
-    EXPECT_EQ(constraint_factory_.basic().width.min(), result.Width());
-    CheckNonResolutionDefaults(result);
-    EXPECT_EQ(1500.0 / kMaxHeight,
-              result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(2000.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
-    CheckTrackAdapterSettingsEqualsFormat(result);
-
-    constraint_factory_.basic().width.setMin(100);
-    result = SelectSettings();
-    EXPECT_TRUE(result.HasValue());
-    EXPECT_EQ(kMaxHeight, result.Height());
-    // kMaxHeight * kDefaultAspectRatio is within the width limits.
-    EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
-              result.Width());
-    CheckNonResolutionDefaults(result);
-    EXPECT_EQ(100.0 / kMaxHeight,
-              result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(2000.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
-    CheckTrackAdapterSettingsEqualsFormat(result);
   }
 
   // Ideal outside the constrained set, closest to a single point.
@@ -587,7 +559,7 @@
 
 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMinWidth) {
   constraint_factory_.Reset();
-  const int kWidth = 1000;
+  const int kWidth = 3000;
   constraint_factory_.basic().width.setMin(kWidth);
   auto result = SelectSettings();
   EXPECT_TRUE(result.HasValue());
@@ -620,67 +592,77 @@
 }
 
 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxWidth) {
-  constraint_factory_.Reset();
-  const int kWidth = 1000;
-  constraint_factory_.basic().width.setMax(kWidth);
-  auto result = SelectSettings();
-  EXPECT_TRUE(result.HasValue());
-  // kWidth is greater that the default, so expect the default.
-  EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
-  EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
-  CheckNonResolutionDefaults(result);
-  EXPECT_EQ(1.0 / kMaxScreenCastDimension,
-            result.track_adapter_settings().min_aspect_ratio);
-  EXPECT_EQ(static_cast<double>(kWidth) / kMinScreenCastDimension,
-            result.track_adapter_settings().max_aspect_ratio);
-  CheckTrackAdapterSettingsEqualsFormat(result);
-
-  const int kSmallWidth = 100;
-  constraint_factory_.basic().width.setMax(kSmallWidth);
-  result = SelectSettings();
-  EXPECT_TRUE(result.HasValue());
-  // kSmallWidth is less that the default, so expect kSmallWidth.
-  EXPECT_EQ(kSmallWidth, result.Width());
-  EXPECT_EQ(std::round(kSmallWidth / kDefaultScreenCastAspectRatio),
-            result.Height());
-  CheckNonResolutionDefaults(result);
-  EXPECT_EQ(1.0 / kMaxScreenCastDimension,
-            result.track_adapter_settings().min_aspect_ratio);
-  EXPECT_EQ(static_cast<double>(kSmallWidth) / kMinScreenCastDimension,
-            result.track_adapter_settings().max_aspect_ratio);
-  CheckTrackAdapterSettingsEqualsFormat(result);
-}
-
-TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryWidthRange) {
-  constraint_factory_.Reset();
+  // kMaxWidth less than the default.
   {
-    const int kMinWidth = 300;
-    const int kMaxWidth = 1000;
-    constraint_factory_.basic().width.setMin(kMinWidth);
+    constraint_factory_.Reset();
+    const int kMaxWidth = kDefaultScreenCastWidth - 100;
     constraint_factory_.basic().width.setMax(kMaxWidth);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // The range includes the default, so expect the default.
-    EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
-    EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
+    // kSmallWidth is less that the default, so expect kSmallWidth.
+    EXPECT_EQ(kMaxWidth, result.Width());
+    EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
+              result.Height());
     CheckNonResolutionDefaults(result);
-    EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
+    EXPECT_EQ(1.0 / kMaxScreenCastDimension,
               result.track_adapter_settings().min_aspect_ratio);
     EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
               result.track_adapter_settings().max_aspect_ratio);
     CheckTrackAdapterSettingsEqualsFormat(result);
   }
 
+  // kMaxWidth greater than the default.
   {
-    const int kMinWidth = 900;
-    const int kMaxWidth = 1000;
+    constraint_factory_.Reset();
+    const int kMaxWidth = kDefaultScreenCastWidth + 100;
+    constraint_factory_.basic().width.setMax(kMaxWidth);
+    auto result = SelectSettings();
+    EXPECT_TRUE(result.HasValue());
+    // kSmallWidth is less that the default, so expect kSmallWidth.
+    EXPECT_EQ(kMaxWidth, result.Width());
+    EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
+              result.Height());
+    CheckNonResolutionDefaults(result);
+    EXPECT_EQ(1.0 / kMaxScreenCastDimension,
+              result.track_adapter_settings().min_aspect_ratio);
+    EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
+              result.track_adapter_settings().max_aspect_ratio);
+    CheckTrackAdapterSettingsEqualsFormat(result);
+  }
+
+  // kMaxWidth greater than the maximum allowed (gets ignored).
+  {
+    constraint_factory_.Reset();
+    constraint_factory_.basic().width.setMax(kMaxScreenCastDimension + 100);
+    auto result = SelectSettings();
+    EXPECT_TRUE(result.HasValue());
+    // kSmallWidth is less that the default, so expect kSmallWidth.
+    EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
+    EXPECT_EQ(
+        std::round(kDefaultScreenCastWidth / kDefaultScreenCastAspectRatio),
+        result.Height());
+    CheckNonResolutionDefaults(result);
+    EXPECT_EQ(1.0 / kMaxScreenCastDimension,
+              result.track_adapter_settings().min_aspect_ratio);
+    EXPECT_EQ(
+        static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
+        result.track_adapter_settings().max_aspect_ratio);
+    CheckTrackAdapterSettingsEqualsFormat(result);
+  }
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryWidthRange) {
+  // The whole range is less than the default.
+  {
+    constraint_factory_.Reset();
+    const int kMinWidth = kDefaultScreenCastWidth - 200;
+    const int kMaxWidth = kDefaultScreenCastWidth - 100;
     constraint_factory_.basic().width.setMin(kMinWidth);
     constraint_factory_.basic().width.setMax(kMaxWidth);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // The whole range is greater than the default, so expect the range minimum.
-    EXPECT_EQ(kMinWidth, result.Width());
-    EXPECT_EQ(std::round(kMinWidth / kDefaultScreenCastAspectRatio),
+    EXPECT_EQ(kMaxWidth, result.Width());
+    EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
               result.Height());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
@@ -690,14 +672,35 @@
     CheckTrackAdapterSettingsEqualsFormat(result);
   }
 
+  // The range includes the default.
   {
-    const int kMinWidth = 300;
-    const int kMaxWidth = 400;
+    constraint_factory_.Reset();
+    const int kMinWidth = kDefaultScreenCastWidth - 100;
+    const int kMaxWidth = kDefaultScreenCastWidth + 100;
     constraint_factory_.basic().width.setMin(kMinWidth);
     constraint_factory_.basic().width.setMax(kMaxWidth);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // The whole range is less than the default, so expect the range maximum.
+    EXPECT_EQ(kMaxWidth, result.Width());
+    EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
+              result.Height());
+    CheckNonResolutionDefaults(result);
+    EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
+              result.track_adapter_settings().min_aspect_ratio);
+    EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
+              result.track_adapter_settings().max_aspect_ratio);
+    CheckTrackAdapterSettingsEqualsFormat(result);
+  }
+
+  // The whole range is greater than the default.
+  {
+    constraint_factory_.Reset();
+    const int kMinWidth = kDefaultScreenCastWidth + 100;
+    const int kMaxWidth = kDefaultScreenCastWidth + 200;
+    constraint_factory_.basic().width.setMin(kMinWidth);
+    constraint_factory_.basic().width.setMax(kMaxWidth);
+    auto result = SelectSettings();
+    EXPECT_TRUE(result.HasValue());
     EXPECT_EQ(kMaxWidth, result.Width());
     EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
               result.Height());
@@ -720,7 +723,7 @@
     EXPECT_TRUE(result.HasValue());
     EXPECT_EQ(kIdealWidth, result.Width());
     // When ideal width is given, the algorithm returns a height that is closest
-    // to width / kDefaultAspectRatio.
+    // to width / kDefaultScreenCastAspectRatio.
     EXPECT_EQ(std::round(kIdealWidth / kDefaultScreenCastAspectRatio),
               result.Height());
     CheckNonResolutionDefaults(result);
@@ -737,7 +740,7 @@
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
     EXPECT_EQ(kMaxWidth, result.Width());
-    // Expect closest to kMaxWidth / kDefaultAspectRatio.
+    // Expect closest to kMaxWidth / kDefaultScreenCastAspectRatio.
     EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
               result.Height());
     CheckNonResolutionDefaults(result);
@@ -758,7 +761,7 @@
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
     EXPECT_EQ(kMinWidth, result.Width());
-    // Expect closest to kMinWidth / kDefaultAspectRatio.
+    // Expect closest to kMinWidth / kDefaultScreenCastAspectRatio.
     EXPECT_EQ(std::round(kMinWidth / kDefaultScreenCastAspectRatio),
               result.Height());
     CheckNonResolutionDefaults(result);
@@ -783,36 +786,11 @@
     EXPECT_TRUE(result.HasValue());
     // Ideal width is included in the bounding box.
     EXPECT_EQ(kIdealWidth, result.Width());
-    // Expect height closest to kIdealWidth / kDefaultAspectRatio, which is
-    // outside the box. Closest is max height.
-    EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height());
-    CheckNonResolutionDefaults(result);
-    EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(1000.0 / 100.0, result.track_adapter_settings().max_aspect_ratio);
-    CheckTrackAdapterSettingsEqualsFormat(result);
-
-    constraint_factory_.basic().height.setMin(1200);
-    constraint_factory_.basic().height.setMax(2000);
-    result = SelectSettings();
-    EXPECT_TRUE(result.HasValue());
-    EXPECT_EQ(kIdealWidth, result.Width());
-    // kIdealWidth / kDefaultAspectRatio outside the box. Closest is
-    // min height.
-    EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height());
-    CheckNonResolutionDefaults(result);
-    EXPECT_EQ(500.0 / 2000.0, result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(1000.0 / 1200.0,
-              result.track_adapter_settings().max_aspect_ratio);
-    CheckTrackAdapterSettingsEqualsFormat(result);
-
-    constraint_factory_.basic().height.setMin(100);
-    constraint_factory_.basic().height.setMax(500);
-    result = SelectSettings();
-    EXPECT_TRUE(result.HasValue());
-    EXPECT_EQ(kIdealWidth, result.Width());
-    // kIdealWidth / kDefaultAspectRatio is outside the box. Closest is max
-    // height.
-    EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height());
+    // Expect height closest to kIdealWidth / default aspect ratio.
+    double default_aspect_ratio =
+        static_cast<double>(constraint_factory_.basic().width.max()) /
+        constraint_factory_.basic().height.max();
+    EXPECT_EQ(std::round(kIdealWidth / default_aspect_ratio), result.Height());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio);
     EXPECT_EQ(1000.0 / 100.0, result.track_adapter_settings().max_aspect_ratio);
@@ -831,41 +809,14 @@
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
     EXPECT_EQ(kMaxWidth, result.Width());
-    // kMaxWidth / kDefaultAspectRatio is outside the box. Closest is max
-    // height.
+    // kMaxWidth / kDefaultScreenCastAspectRatio is outside the box. Closest is
+    // max height.
     EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio);
     EXPECT_EQ(static_cast<double>(kMaxWidth) / 100.0,
               result.track_adapter_settings().max_aspect_ratio);
     CheckTrackAdapterSettingsEqualsFormat(result);
-
-    constraint_factory_.basic().height.setMin(1500);
-    constraint_factory_.basic().height.setMax(2000);
-    result = SelectSettings();
-    EXPECT_TRUE(result.HasValue());
-    EXPECT_EQ(kMaxWidth, result.Width());
-    // kMaxWidth / kDefaultAspectRatio is outside the box. Closest is
-    // min height.
-    EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height());
-    CheckNonResolutionDefaults(result);
-    EXPECT_EQ(500.0 / 2000.0, result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(static_cast<double>(kMaxWidth) / 1500.0,
-              result.track_adapter_settings().max_aspect_ratio);
-    CheckTrackAdapterSettingsEqualsFormat(result);
-
-    constraint_factory_.basic().height.setMin(100);
-    result = SelectSettings();
-    EXPECT_TRUE(result.HasValue());
-    EXPECT_EQ(kMaxWidth, result.Width());
-    // kMaxWidth / kDefaultAspectRatio is within the height limits.
-    EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
-              result.Height());
-    CheckNonResolutionDefaults(result);
-    EXPECT_EQ(500.0 / 2000.0, result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(static_cast<double>(kMaxWidth) / 100.0,
-              result.track_adapter_settings().max_aspect_ratio);
-    CheckTrackAdapterSettingsEqualsFormat(result);
   }
 
   // Ideal outside the constrained set, closest to a single point.
@@ -1058,10 +1009,10 @@
     constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // Ideal height is greater than the maximum, expect maximum.
-    EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
-    EXPECT_EQ(std::round(kDefaultScreenCastHeight * kMaxAspectRatio),
-              result.Width());
+    // Ideal aspect ratio is greater than the maximum, expect maximum.
+    EXPECT_EQ(std::round(kDefaultScreenCastWidth / kMaxAspectRatio),
+              result.Height());
+    EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(
         static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension,
@@ -1080,10 +1031,10 @@
     constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // Ideal height is greater than the maximum, expect maximum.
-    EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
-    EXPECT_EQ(std::round(kDefaultScreenCastHeight * kMinAspectRatio),
-              result.Width());
+    // Ideal aspect ratio is less than the maximum, expect minimum.
+    EXPECT_EQ(std::round(kDefaultScreenCastWidth / kMinAspectRatio),
+              result.Height());
+    EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(kMinAspectRatio,
               result.track_adapter_settings().min_aspect_ratio);
@@ -1122,13 +1073,11 @@
     constraint_factory_.basic().width.setMax(5000);
     result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // Ideal aspect-ratio is included in the bounding box, with the value
-    // closest to a standard width or height and largest area being the cut with
-    // the minimum height.
-    EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height());
-    EXPECT_EQ(std::round(constraint_factory_.basic().height.min() *
-                         kIdealAspectRatio),
-              result.Width());
+    // Ideal aspect-ratio is included in the bounding box.
+    EXPECT_EQ(
+        std::round(constraint_factory_.basic().width.max() / kIdealAspectRatio),
+        result.Height());
+    EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
     CheckNonResolutionDefaults(result);
     EXPECT_EQ(1000.0 / 5000.0,
               result.track_adapter_settings().min_aspect_ratio);
@@ -1136,20 +1085,21 @@
               result.track_adapter_settings().max_aspect_ratio);
     CheckTrackAdapterSettingsEqualsFormat(result);
 
+    constraint_factory_.Reset();
+    constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio);
     constraint_factory_.basic().height.setMin(250);
-    constraint_factory_.basic().height.setMax(5000);
     constraint_factory_.basic().width.setMin(250);
-    constraint_factory_.basic().width.setMax(5000);
     result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
-    // Ideal aspect-ratio and default width and height are included in the
-    // bounding box. Preserving default height leads to larger area than
-    // preserving default width.
+    // Ideal aspect-ratio is included in the bounding box. Preserving default
+    // height leads to larger area than preserving default width.
     EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
     EXPECT_EQ(kDefaultScreenCastHeight * kIdealAspectRatio, result.Width());
     CheckNonResolutionDefaults(result);
-    EXPECT_EQ(250.0 / 5000.0, result.track_adapter_settings().min_aspect_ratio);
-    EXPECT_EQ(5000.0 / 250.0, result.track_adapter_settings().max_aspect_ratio);
+    EXPECT_EQ(250.0 / kMaxScreenCastDimension,
+              result.track_adapter_settings().min_aspect_ratio);
+    EXPECT_EQ(kMaxScreenCastDimension / 250.0,
+              result.track_adapter_settings().max_aspect_ratio);
     CheckTrackAdapterSettingsEqualsFormat(result);
   }
 
@@ -1196,10 +1146,11 @@
 
     // Use a box that is bigger and further from the origin to force closeness
     // to a different default dimension.
-    constraint_factory_.basic().height.setMin(1000);
-    constraint_factory_.basic().height.setMax(5000);
-    constraint_factory_.basic().width.setMin(1000);
-    constraint_factory_.basic().width.setMax(5000);
+    constraint_factory_.Reset();
+    constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio);
+    constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio);
+    constraint_factory_.basic().height.setMin(3000);
+    constraint_factory_.basic().width.setMin(3000);
     constraint_factory_.basic().aspectRatio.setIdeal(3.0);
     result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
@@ -1600,20 +1551,22 @@
   advanced1.height.setMin(480);
   blink::WebMediaTrackConstraintSet& advanced2 =
       constraint_factory_.AddAdvanced();
-  advanced2.width.setMin(1920);
-  advanced2.height.setMin(1080);
+  const int kMinWidth = 4000;
+  const int kMinHeight = 2000;
+  advanced2.width.setMin(kMinWidth);
+  advanced2.height.setMin(kMinHeight);
   advanced2.googNoiseReduction.setExact(false);
   auto result = SelectSettings();
   EXPECT_TRUE(result.HasValue());
-  EXPECT_EQ(1920, result.Width());
+  EXPECT_EQ(kMinWidth, result.Width());
   // Preserves default aspect ratio.
   EXPECT_EQ(static_cast<int>(
                 std::round(result.Width() / kDefaultScreenCastAspectRatio)),
             result.Height());
   EXPECT_TRUE(result.noise_reduction() && !*result.noise_reduction());
-  EXPECT_EQ(1920.0 / static_cast<double>(kMaxScreenCastDimension),
+  EXPECT_EQ(kMinWidth / static_cast<double>(kMaxScreenCastDimension),
             result.track_adapter_settings().min_aspect_ratio);
-  EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / 1080.0,
+  EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
             result.track_adapter_settings().max_aspect_ratio);
   CheckTrackAdapterSettingsEqualsFormat(result);
 }
@@ -1691,11 +1644,13 @@
 
 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
        AdvancedContradictoryMinMaxResolutionFrameRate) {
+  const int kMinHeight = 2600;
+  const int kMinWidth = 2800;
   constraint_factory_.Reset();
   blink::WebMediaTrackConstraintSet& advanced1 =
       constraint_factory_.AddAdvanced();
-  advanced1.width.setMin(800);
-  advanced1.height.setMin(600);
+  advanced1.width.setMin(kMinWidth);
+  advanced1.height.setMin(kMinHeight);
   blink::WebMediaTrackConstraintSet& advanced2 =
       constraint_factory_.AddAdvanced();
   advanced2.width.setMax(640);
@@ -1703,12 +1658,13 @@
   advanced2.frameRate.setExact(60.0);
   auto result = SelectSettings();
   EXPECT_TRUE(result.HasValue());
-  EXPECT_EQ(800, result.Width());
-  EXPECT_EQ(600, result.Height());
+  EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
+            result.Width());
+  EXPECT_EQ(kMinHeight, result.Height());
   EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
-  EXPECT_EQ(800.0 / kMaxScreenCastDimension,
+  EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
             result.track_adapter_settings().min_aspect_ratio);
-  EXPECT_EQ(kMaxScreenCastDimension / 600.0,
+  EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
             result.track_adapter_settings().max_aspect_ratio);
   CheckTrackAdapterSettingsEqualsFormat(result);
 }
@@ -1787,10 +1743,11 @@
 
 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
        AdvancedContradictoryWidthFrameRate) {
+  const int kMaxWidth = 1920;
   constraint_factory_.Reset();
   blink::WebMediaTrackConstraintSet& advanced1 =
       constraint_factory_.AddAdvanced();
-  advanced1.width.setMax(1920);
+  advanced1.width.setMax(kMaxWidth);
   blink::WebMediaTrackConstraintSet& advanced2 =
       constraint_factory_.AddAdvanced();
   advanced2.width.setMin(2000);
@@ -1800,36 +1757,39 @@
   advanced3.frameRate.setExact(90.0);
   auto result = SelectSettings();
   EXPECT_TRUE(result.HasValue());
-  EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
-  EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
+  EXPECT_EQ(kMaxWidth, result.Width());
+  EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
+            result.Height());
   EXPECT_EQ(90.0, result.FrameRate());
   EXPECT_EQ(
       static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension,
       result.track_adapter_settings().min_aspect_ratio);
-  EXPECT_EQ(1920.0 / kMinScreenCastDimension,
+  EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
             result.track_adapter_settings().max_aspect_ratio);
   CheckTrackAdapterSettingsEqualsFormat(result);
 }
 
 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
        AdvancedContradictoryHeightFrameRate) {
+  const int kMaxHeight = 2000;
   constraint_factory_.Reset();
   blink::WebMediaTrackConstraintSet& advanced1 =
       constraint_factory_.AddAdvanced();
-  advanced1.height.setMax(1080);
+  advanced1.height.setMax(kMaxHeight);
   blink::WebMediaTrackConstraintSet& advanced2 =
       constraint_factory_.AddAdvanced();
-  advanced2.height.setMin(1500);
+  advanced2.height.setMin(4500);
   advanced2.frameRate.setExact(10.0);
   blink::WebMediaTrackConstraintSet& advanced3 =
       constraint_factory_.AddAdvanced();
   advanced3.frameRate.setExact(60.0);
   auto result = SelectSettings();
   EXPECT_TRUE(result.HasValue());
-  EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
-  EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
+  EXPECT_EQ(kMaxHeight * kDefaultScreenCastAspectRatio, result.Width());
+  // Height defaults to explicitly given max constraint.
+  EXPECT_EQ(kMaxHeight, result.Height());
   EXPECT_EQ(60.0, result.FrameRate());
-  EXPECT_EQ(static_cast<double>(kMinScreenCastDimension) / 1080.0,
+  EXPECT_EQ(static_cast<double>(kMinScreenCastDimension) / kMaxHeight,
             result.track_adapter_settings().min_aspect_ratio);
   EXPECT_EQ(
       static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
diff --git a/content/renderer/media/media_stream_video_capturer_source.h b/content/renderer/media/media_stream_video_capturer_source.h
index 8161949..df70468 100644
--- a/content/renderer/media/media_stream_video_capturer_source.h
+++ b/content/renderer/media/media_stream_video_capturer_source.h
@@ -46,6 +46,7 @@
  private:
   friend class CanvasCaptureHandlerTest;
   friend class MediaStreamVideoCapturerSourceTest;
+  friend class MediaStreamVideoCapturerSourceOldConstraintsTest;
 
   // MediaStreamVideoSource overrides.
   void RequestRefreshFrame() override;
diff --git a/content/renderer/media/media_stream_video_capturer_source_unittest.cc b/content/renderer/media/media_stream_video_capturer_source_unittest.cc
index bdae348..b33d5e2 100644
--- a/content/renderer/media/media_stream_video_capturer_source_unittest.cc
+++ b/content/renderer/media/media_stream_video_capturer_source_unittest.cc
@@ -31,6 +31,8 @@
 
 namespace content {
 
+namespace {
+
 class MockVideoCapturerSource : public media::VideoCapturerSource {
  public:
   MockVideoCapturerSource() {
@@ -64,13 +66,51 @@
   }
 };
 
+class FakeMediaStreamVideoSink : public MediaStreamVideoSink {
+ public:
+  FakeMediaStreamVideoSink(base::TimeTicks* capture_time,
+                           media::VideoFrameMetadata* metadata,
+                           base::Closure got_frame_cb)
+      : capture_time_(capture_time),
+        metadata_(metadata),
+        got_frame_cb_(got_frame_cb) {}
+
+  void ConnectToTrack(const blink::WebMediaStreamTrack& track) {
+    MediaStreamVideoSink::ConnectToTrack(
+        track,
+        base::Bind(&FakeMediaStreamVideoSink::OnVideoFrame,
+                   base::Unretained(this)),
+        true);
+  }
+
+  void DisconnectFromTrack() { MediaStreamVideoSink::DisconnectFromTrack(); }
+
+  void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame,
+                    base::TimeTicks capture_time) {
+    *capture_time_ = capture_time;
+    metadata_->Clear();
+    metadata_->MergeMetadataFrom(frame->metadata());
+    base::ResetAndReturn(&got_frame_cb_).Run();
+  }
+
+ private:
+  base::TimeTicks* const capture_time_;
+  media::VideoFrameMetadata* const metadata_;
+  base::Closure got_frame_cb_;
+};
+
+}  // namespace
+
 class MediaStreamVideoCapturerSourceTest : public testing::Test {
  public:
   MediaStreamVideoCapturerSourceTest()
       : child_process_(new ChildProcess()),
         source_(nullptr),
         delegate_(nullptr),
-        source_stopped_(false) {}
+        source_stopped_(false) {
+    scoped_feature_list_.InitAndDisableFeature(
+        features::kMediaStreamOldVideoConstraints);
+  }
 
   void TearDown() override {
     webkit_source_.reset();
@@ -150,15 +190,197 @@
   blink::WebString webkit_source_id_;
   bool source_stopped_;
   MockConstraintFactory constraint_factory_;
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-// This test does not apply with spec-compliant constraints.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoCapturerSourceTest,
-       TabCaptureFixedResolutionByDefaultOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoCapturerSourceTest, StartAndStop) {
+  std::unique_ptr<MockVideoCapturerSource> delegate(
+      new MockVideoCapturerSource());
+  delegate_ = delegate.get();
+  EXPECT_CALL(*delegate_, GetPreferredFormats());
+  source_ = new MediaStreamVideoCapturerSource(
+      base::Bind(&MediaStreamVideoCapturerSourceTest::OnSourceStopped,
+                 base::Unretained(this)),
+      std::move(delegate));
+  webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
+                            blink::WebMediaStreamSource::TypeVideo,
+                            blink::WebString::fromASCII("dummy_source_name"),
+                            false /* remote */);
+  webkit_source_.setExtraData(source_);
+  webkit_source_id_ = webkit_source_.id();
+
+  InSequence s;
+  EXPECT_CALL(mock_delegate(), StartCapture(_, _, _));
+  blink::WebMediaStreamTrack track = StartSource(
+      VideoTrackAdapterSettings(), base::Optional<bool>(), false, 0.0);
+  base::RunLoop().RunUntilIdle();
+
+  OnStarted(true);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
+            webkit_source_.getReadyState());
+
+  EXPECT_FALSE(source_stopped_);
+
+  EXPECT_CALL(mock_delegate(), StopCapture());
+  OnStarted(false);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
+            webkit_source_.getReadyState());
+  // Verify that MediaStreamSource::SourceStoppedCallback has been triggered.
+  EXPECT_TRUE(source_stopped_);
+}
+
+TEST_F(MediaStreamVideoCapturerSourceTest, CaptureTimeAndMetadataPlumbing) {
+  std::unique_ptr<MockVideoCapturerSource> delegate(
+      new MockVideoCapturerSource());
+  delegate_ = delegate.get();
+  EXPECT_CALL(*delegate_, GetPreferredFormats());
+  source_ = new MediaStreamVideoCapturerSource(
+      base::Bind(&MediaStreamVideoCapturerSourceTest::OnSourceStopped,
+                 base::Unretained(this)),
+      std::move(delegate));
+  webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
+                            blink::WebMediaStreamSource::TypeVideo,
+                            blink::WebString::fromASCII("dummy_source_name"),
+                            false /* remote */);
+  webkit_source_.setExtraData(source_);
+  webkit_source_id_ = webkit_source_.id();
+
+  VideoCaptureDeliverFrameCB deliver_frame_cb;
+  media::VideoCapturerSource::RunningCallback running_cb;
+
+  InSequence s;
+  //  EXPECT_CALL(mock_delegate(), GetCurrentSupportedFormats(_, _, _, _));
+  EXPECT_CALL(mock_delegate(), StartCapture(_, _, _))
+      .WillOnce(testing::DoAll(testing::SaveArg<1>(&deliver_frame_cb),
+                               testing::SaveArg<2>(&running_cb)));
+  EXPECT_CALL(mock_delegate(), RequestRefreshFrame());
+  EXPECT_CALL(mock_delegate(), StopCapture());
+  blink::WebMediaStreamTrack track = StartSource(
+      VideoTrackAdapterSettings(), base::Optional<bool>(), false, 0.0);
+  running_cb.Run(true);
+
+  base::RunLoop run_loop;
+  base::TimeTicks reference_capture_time =
+      base::TimeTicks::FromInternalValue(60013);
+  base::TimeTicks capture_time;
+  media::VideoFrameMetadata metadata;
+  FakeMediaStreamVideoSink fake_sink(
+      &capture_time, &metadata,
+      media::BindToCurrentLoop(run_loop.QuitClosure()));
+  fake_sink.ConnectToTrack(track);
+  const scoped_refptr<media::VideoFrame> frame =
+      media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2));
+  frame->metadata()->SetDouble(media::VideoFrameMetadata::FRAME_RATE, 30.0);
+  child_process_->io_task_runner()->PostTask(
+      FROM_HERE, base::Bind(deliver_frame_cb, frame, reference_capture_time));
+  run_loop.Run();
+  fake_sink.DisconnectFromTrack();
+  EXPECT_EQ(reference_capture_time, capture_time);
+  double metadata_value;
+  EXPECT_TRUE(metadata.GetDouble(media::VideoFrameMetadata::FRAME_RATE,
+                                 &metadata_value));
+  EXPECT_EQ(30.0, metadata_value);
+}
+
+class MediaStreamVideoCapturerSourceOldConstraintsTest : public testing::Test {
+ public:
+  MediaStreamVideoCapturerSourceOldConstraintsTest()
+      : child_process_(new ChildProcess()),
+        source_(nullptr),
+        delegate_(nullptr),
+        source_stopped_(false) {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kMediaStreamOldVideoConstraints);
+  }
+
+  void TearDown() override {
+    webkit_source_.reset();
+    blink::WebHeap::collectAllGarbageForTesting();
+  }
+
+  void InitWithDeviceInfo(const StreamDeviceInfo& device_info) {
+    std::unique_ptr<MockVideoCapturerSource> delegate(
+        new MockVideoCapturerSource());
+    delegate_ = delegate.get();
+    source_ = new MediaStreamVideoCapturerSource(
+        base::Bind(
+            &MediaStreamVideoCapturerSourceOldConstraintsTest::OnSourceStopped,
+            base::Unretained(this)),
+        std::move(delegate));
+    source_->SetDeviceInfo(device_info);
+
+    webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
+                              blink::WebMediaStreamSource::TypeVideo,
+                              blink::WebString::fromASCII("dummy_source_name"),
+                              false /* remote */);
+    webkit_source_.setExtraData(source_);
+    webkit_source_id_ = webkit_source_.id();
+  }
+
+  MockConstraintFactory* constraint_factory() { return &constraint_factory_; }
+
+  blink::WebMediaStreamTrack StartSource() {
+    bool enabled = true;
+    // CreateVideoTrack will trigger OnConstraintsApplied.
+    return MediaStreamVideoTrack::CreateVideoTrack(
+        source_, constraint_factory_.CreateWebMediaConstraints(),
+        base::Bind(&MediaStreamVideoCapturerSourceOldConstraintsTest::
+                       OnConstraintsApplied,
+                   base::Unretained(this)),
+        enabled);
+  }
+
+  blink::WebMediaStreamTrack StartSource(
+      const VideoTrackAdapterSettings& adapter_settings,
+      const base::Optional<bool>& noise_reduction,
+      bool is_screencast,
+      double min_frame_rate) {
+    bool enabled = true;
+    // CreateVideoTrack will trigger OnConstraintsApplied.
+    return MediaStreamVideoTrack::CreateVideoTrack(
+        source_, adapter_settings, noise_reduction, is_screencast,
+        min_frame_rate,
+        base::Bind(&MediaStreamVideoCapturerSourceOldConstraintsTest::
+                       OnConstraintsApplied,
+                   base::Unretained(this)),
+        enabled);
+  }
+
+  MockVideoCapturerSource& mock_delegate() { return *delegate_; }
+
+  const char* GetPowerLineFrequencyForTesting() const {
+    return source_->GetPowerLineFrequencyForTesting();
+  }
+
+  void OnSourceStopped(const blink::WebMediaStreamSource& source) {
+    source_stopped_ = true;
+    EXPECT_EQ(source.id(), webkit_source_id_);
+  }
+  void OnStarted(bool result) { source_->OnRunStateChanged(result); }
+
+ protected:
+  void OnConstraintsApplied(MediaStreamSource* source,
+                            MediaStreamRequestResult result,
+                            const blink::WebString& result_name) {}
+
+  // A ChildProcess and a MessageLoopForUI are both needed to fool the Tracks
+  // and Sources below into believing they are on the right threads.
+  base::MessageLoopForUI message_loop_;
+  std::unique_ptr<ChildProcess> child_process_;
+
+  blink::WebMediaStreamSource webkit_source_;
+  MediaStreamVideoCapturerSource* source_;  // owned by |webkit_source_|.
+  MockVideoCapturerSource* delegate_;       // owned by |source|.
+  blink::WebString webkit_source_id_;
+  bool source_stopped_;
+  MockConstraintFactory constraint_factory_;
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(MediaStreamVideoCapturerSourceOldConstraintsTest,
+       TabCaptureFixedResolutionByDefault) {
   StreamDeviceInfo device_info;
   device_info.device.type = MEDIA_TAB_VIDEO_CAPTURE;
   InitWithDeviceInfo(device_info);
@@ -183,13 +405,8 @@
   EXPECT_CALL(mock_delegate(), StopCapture());
 }
 
-// This test does not apply with spec-compliant constraints.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoCapturerSourceTest,
-       DesktopCaptureAllowAnyResolutionChangeByDefaultOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoCapturerSourceOldConstraintsTest,
+       DesktopCaptureAllowAnyResolutionChangeByDefault) {
   StreamDeviceInfo device_info;
   device_info.device.type = MEDIA_DESKTOP_VIDEO_CAPTURE;
   InitWithDeviceInfo(device_info);
@@ -214,13 +431,8 @@
   EXPECT_CALL(mock_delegate(), StopCapture());
 }
 
-// This test does not apply with spec-compliant constraints.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoCapturerSourceTest,
-       TabCaptureConstraintsImplyFixedAspectRatioOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoCapturerSourceOldConstraintsTest,
+       TabCaptureConstraintsImplyFixedAspectRatio) {
   StreamDeviceInfo device_info;
   device_info.device.type = MEDIA_TAB_VIDEO_CAPTURE;
   InitWithDeviceInfo(device_info);
@@ -252,13 +464,8 @@
   EXPECT_CALL(mock_delegate(), StopCapture());
 }
 
-// This test does not apply with spec-compliant constraints.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoCapturerSourceTest,
-       TabCaptureConstraintsImplyAllowingAnyResolutionChangeOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoCapturerSourceOldConstraintsTest,
+       TabCaptureConstraintsImplyAllowingAnyResolutionChange) {
   StreamDeviceInfo device_info;
   device_info.device.type = MEDIA_TAB_VIDEO_CAPTURE;
   InitWithDeviceInfo(device_info);
@@ -290,13 +497,8 @@
   EXPECT_CALL(mock_delegate(), StopCapture());
 }
 
-// This test does not apply with spec-compliant constraints.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoCapturerSourceTest,
-       DeviceCaptureConstraintsSupportPowerLineFrequencyOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoCapturerSourceOldConstraintsTest,
+       DeviceCaptureConstraintsSupportPowerLineFrequency) {
   for (int frequency = -100; frequency < 100; ++frequency) {
     StreamDeviceInfo device_info;
     device_info.device.type = MEDIA_DEVICE_VIDEO_CAPTURE;
@@ -335,17 +537,14 @@
   }
 }
 
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoCapturerSourceTest, EndedOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoCapturerSourceOldConstraintsTest, Ended) {
   std::unique_ptr<MockVideoCapturerSource> delegate(
       new MockVideoCapturerSource());
   delegate_ = delegate.get();
   source_ = new MediaStreamVideoCapturerSource(
-      base::Bind(&MediaStreamVideoCapturerSourceTest::OnSourceStopped,
-                 base::Unretained(this)),
+      base::Bind(
+          &MediaStreamVideoCapturerSourceOldConstraintsTest::OnSourceStopped,
+          base::Unretained(this)),
       std::move(delegate));
   webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
                             blink::WebMediaStreamSource::TypeVideo,
@@ -376,86 +575,8 @@
   EXPECT_TRUE(source_stopped_);
 }
 
-TEST_F(MediaStreamVideoCapturerSourceTest, StartAndStop) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  std::unique_ptr<MockVideoCapturerSource> delegate(
-      new MockVideoCapturerSource());
-  delegate_ = delegate.get();
-  EXPECT_CALL(*delegate_, GetPreferredFormats());
-  source_ = new MediaStreamVideoCapturerSource(
-      base::Bind(&MediaStreamVideoCapturerSourceTest::OnSourceStopped,
-                 base::Unretained(this)),
-      std::move(delegate));
-  webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
-                            blink::WebMediaStreamSource::TypeVideo,
-                            blink::WebString::fromASCII("dummy_source_name"),
-                            false /* remote */);
-  webkit_source_.setExtraData(source_);
-  webkit_source_id_ = webkit_source_.id();
-
-  InSequence s;
-  EXPECT_CALL(mock_delegate(), StartCapture(_, _, _));
-  blink::WebMediaStreamTrack track = StartSource(
-      VideoTrackAdapterSettings(), base::Optional<bool>(), false, 0.0);
-  base::RunLoop().RunUntilIdle();
-
-  OnStarted(true);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
-            webkit_source_.getReadyState());
-
-  EXPECT_FALSE(source_stopped_);
-
-  EXPECT_CALL(mock_delegate(), StopCapture());
-  OnStarted(false);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
-            webkit_source_.getReadyState());
-  // Verify that MediaStreamSource::SourceStoppedCallback has been triggered.
-  EXPECT_TRUE(source_stopped_);
-}
-
-class FakeMediaStreamVideoSink : public MediaStreamVideoSink {
- public:
-  FakeMediaStreamVideoSink(base::TimeTicks* capture_time,
-                           media::VideoFrameMetadata* metadata,
-                           base::Closure got_frame_cb)
-      : capture_time_(capture_time),
-        metadata_(metadata),
-        got_frame_cb_(got_frame_cb) {}
-
-  void ConnectToTrack(const blink::WebMediaStreamTrack& track) {
-    MediaStreamVideoSink::ConnectToTrack(
-        track, base::Bind(&FakeMediaStreamVideoSink::OnVideoFrame,
-                          base::Unretained(this)),
-        true);
-  }
-
-  void DisconnectFromTrack() {
-    MediaStreamVideoSink::DisconnectFromTrack();
-  }
-
-  void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame,
-                    base::TimeTicks capture_time) {
-    *capture_time_ = capture_time;
-    metadata_->Clear();
-    metadata_->MergeMetadataFrom(frame->metadata());
-    base::ResetAndReturn(&got_frame_cb_).Run();
-  }
-
- private:
-  base::TimeTicks* const capture_time_;
-  media::VideoFrameMetadata* const metadata_;
-  base::Closure got_frame_cb_;
-};
-
-TEST_F(MediaStreamVideoCapturerSourceTest,
-       CaptureTimeAndMetadataPlumbingOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoCapturerSourceOldConstraintsTest,
+       CaptureTimeAndMetadataPlumbing) {
   StreamDeviceInfo device_info;
   device_info.device.type = MEDIA_DESKTOP_VIDEO_CAPTURE;
   InitWithDeviceInfo(device_info);
@@ -496,60 +617,4 @@
   EXPECT_EQ(30.0, metadata_value);
 }
 
-TEST_F(MediaStreamVideoCapturerSourceTest, CaptureTimeAndMetadataPlumbing) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  std::unique_ptr<MockVideoCapturerSource> delegate(
-      new MockVideoCapturerSource());
-  delegate_ = delegate.get();
-  EXPECT_CALL(*delegate_, GetPreferredFormats());
-  source_ = new MediaStreamVideoCapturerSource(
-      base::Bind(&MediaStreamVideoCapturerSourceTest::OnSourceStopped,
-                 base::Unretained(this)),
-      std::move(delegate));
-  webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
-                            blink::WebMediaStreamSource::TypeVideo,
-                            blink::WebString::fromASCII("dummy_source_name"),
-                            false /* remote */);
-  webkit_source_.setExtraData(source_);
-  webkit_source_id_ = webkit_source_.id();
-
-  VideoCaptureDeliverFrameCB deliver_frame_cb;
-  media::VideoCapturerSource::RunningCallback running_cb;
-
-  InSequence s;
-  //  EXPECT_CALL(mock_delegate(), GetCurrentSupportedFormats(_, _, _, _));
-  EXPECT_CALL(mock_delegate(), StartCapture(_, _, _))
-      .WillOnce(testing::DoAll(testing::SaveArg<1>(&deliver_frame_cb),
-                               testing::SaveArg<2>(&running_cb)));
-  EXPECT_CALL(mock_delegate(), RequestRefreshFrame());
-  EXPECT_CALL(mock_delegate(), StopCapture());
-  blink::WebMediaStreamTrack track = StartSource(
-      VideoTrackAdapterSettings(), base::Optional<bool>(), false, 0.0);
-  running_cb.Run(true);
-
-  base::RunLoop run_loop;
-  base::TimeTicks reference_capture_time =
-      base::TimeTicks::FromInternalValue(60013);
-  base::TimeTicks capture_time;
-  media::VideoFrameMetadata metadata;
-  FakeMediaStreamVideoSink fake_sink(
-      &capture_time, &metadata,
-      media::BindToCurrentLoop(run_loop.QuitClosure()));
-  fake_sink.ConnectToTrack(track);
-  const scoped_refptr<media::VideoFrame> frame =
-      media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2));
-  frame->metadata()->SetDouble(media::VideoFrameMetadata::FRAME_RATE, 30.0);
-  child_process_->io_task_runner()->PostTask(
-      FROM_HERE, base::Bind(deliver_frame_cb, frame, reference_capture_time));
-  run_loop.Run();
-  fake_sink.DisconnectFromTrack();
-  EXPECT_EQ(reference_capture_time, capture_time);
-  double metadata_value;
-  EXPECT_TRUE(metadata.GetDouble(media::VideoFrameMetadata::FRAME_RATE,
-                                 &metadata_value));
-  EXPECT_EQ(30.0, metadata_value);
-}
-
 }  // namespace content
diff --git a/content/renderer/media/media_stream_video_source_unittest.cc b/content/renderer/media/media_stream_video_source_unittest.cc
index 59c416f..7e684b61 100644
--- a/content/renderer/media/media_stream_video_source_unittest.cc
+++ b/content/renderer/media/media_stream_video_source_unittest.cc
@@ -42,12 +42,353 @@
         number_of_failed_constraints_applied_(0),
         result_(MEDIA_DEVICE_OK),
         result_name_(""),
-        mock_source_(new MockMediaStreamVideoSource(true)),
-        mock_source2_(new MockMediaStreamVideoSource(
+        mock_source_(new MockMediaStreamVideoSource(
             media::VideoCaptureFormat(gfx::Size(1280, 720),
                                       1000.0,
                                       media::PIXEL_FORMAT_I420),
             false)) {
+    scoped_feature_list_.InitAndDisableFeature(
+        features::kMediaStreamOldVideoConstraints);
+
+    media::VideoCaptureFormats formats;
+    formats.push_back(media::VideoCaptureFormat(gfx::Size(1280, 720), 30,
+                                                media::PIXEL_FORMAT_I420));
+    formats.push_back(media::VideoCaptureFormat(gfx::Size(640, 480), 30,
+                                                media::PIXEL_FORMAT_I420));
+    formats.push_back(media::VideoCaptureFormat(gfx::Size(352, 288), 30,
+                                                media::PIXEL_FORMAT_I420));
+    formats.push_back(media::VideoCaptureFormat(gfx::Size(320, 240), 30,
+                                                media::PIXEL_FORMAT_I420));
+    webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
+                              blink::WebMediaStreamSource::TypeVideo,
+                              blink::WebString::fromASCII("dummy_source_name"),
+                              false /* remote */);
+    webkit_source_.setExtraData(mock_source_);
+  }
+
+  void TearDown() override {
+    webkit_source_.reset();
+    blink::WebHeap::collectAllGarbageForTesting();
+  }
+
+ protected:
+  // Create a track that's associated with |webkit_source_|.
+  blink::WebMediaStreamTrack CreateTrack(const std::string& id) {
+    bool enabled = true;
+    return MediaStreamVideoTrack::CreateVideoTrack(
+        mock_source_,
+        base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied,
+                   base::Unretained(this)),
+        enabled);
+  }
+
+  blink::WebMediaStreamTrack CreateTrack(
+      const std::string& id,
+      const VideoTrackAdapterSettings& adapter_settings,
+      const base::Optional<bool>& noise_reduction,
+      bool is_screencast,
+      double min_frame_rate) {
+    bool enabled = true;
+    return MediaStreamVideoTrack::CreateVideoTrack(
+        mock_source_, adapter_settings, noise_reduction, is_screencast,
+        min_frame_rate,
+        base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied,
+                   base::Unretained(this)),
+        enabled);
+  }
+
+  blink::WebMediaStreamTrack CreateTrackAndStartSource(int width,
+                                                       int height,
+                                                       double frame_rate) {
+    DCHECK(!IsOldVideoConstraints());
+    blink::WebMediaStreamTrack track = CreateTrack(
+        "123",
+        VideoTrackAdapterSettings(width, height, 0.0, HUGE_VAL, frame_rate),
+        base::Optional<bool>(), false, 0.0);
+
+    EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
+    mock_source_->StartMockedSource();
+    // Once the source has started successfully we expect that the
+    // ConstraintsCallback in MediaStreamSource::AddTrack completes.
+    EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
+    return track;
+  }
+
+  int NumberOfSuccessConstraintsCallbacks() const {
+    return number_of_successful_constraints_applied_;
+  }
+
+  int NumberOfFailedConstraintsCallbacks() const {
+    return number_of_failed_constraints_applied_;
+  }
+
+  content::MediaStreamRequestResult error_type() const { return result_; }
+  blink::WebString error_name() const { return result_name_; }
+
+  MockMediaStreamVideoSource* mock_source() { return mock_source_; }
+
+  const blink::WebMediaStreamSource& webkit_source() { return webkit_source_; }
+
+  void TestSourceCropFrame(int capture_width,
+                           int capture_height,
+                           int expected_width,
+                           int expected_height) {
+    DCHECK(!IsOldVideoConstraints());
+    // Configure the track to crop to the expected resolution.
+    blink::WebMediaStreamTrack track =
+        CreateTrackAndStartSource(expected_width, expected_height, 30.0);
+
+    // Produce frames at the capture resolution.
+    MockMediaStreamVideoSink sink;
+    sink.ConnectToTrack(track);
+    DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink);
+    EXPECT_EQ(1, sink.number_of_frames());
+
+    // Expect the delivered frame to be cropped.
+    EXPECT_EQ(expected_height, sink.frame_size().height());
+    EXPECT_EQ(expected_width, sink.frame_size().width());
+    sink.DisconnectFromTrack();
+  }
+
+  void DeliverVideoFrameAndWaitForRenderer(int width,
+                                           int height,
+                                           MockMediaStreamVideoSink* sink) {
+    base::RunLoop run_loop;
+    base::Closure quit_closure = run_loop.QuitClosure();
+    EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure));
+    scoped_refptr<media::VideoFrame> frame =
+        media::VideoFrame::CreateBlackFrame(gfx::Size(width, height));
+    mock_source()->DeliverVideoFrame(frame);
+    run_loop.Run();
+  }
+
+  void DeliverVideoFrameAndWaitForTwoRenderers(
+      int width,
+      int height,
+      MockMediaStreamVideoSink* sink1,
+      MockMediaStreamVideoSink* sink2) {
+    base::RunLoop run_loop;
+    base::Closure quit_closure = run_loop.QuitClosure();
+    EXPECT_CALL(*sink1, OnVideoFrame());
+    EXPECT_CALL(*sink2, OnVideoFrame()).WillOnce(RunClosure(quit_closure));
+    scoped_refptr<media::VideoFrame> frame =
+        media::VideoFrame::CreateBlackFrame(gfx::Size(width, height));
+    mock_source()->DeliverVideoFrame(frame);
+    run_loop.Run();
+  }
+
+  void TestTwoTracksWithDifferentSettings(int capture_width,
+                                          int capture_height,
+                                          int expected_width1,
+                                          int expected_height1,
+                                          int expected_width2,
+                                          int expected_height2) {
+    blink::WebMediaStreamTrack track1 =
+        CreateTrackAndStartSource(expected_width1, expected_height1,
+                                  MediaStreamVideoSource::kDefaultFrameRate);
+
+    blink::WebMediaStreamTrack track2 =
+        CreateTrack("dummy",
+                    VideoTrackAdapterSettings(
+                        expected_width2, expected_height2, 0.0, HUGE_VAL,
+                        MediaStreamVideoSource::kDefaultFrameRate),
+                    base::Optional<bool>(), false, 0.0);
+
+    MockMediaStreamVideoSink sink1;
+    sink1.ConnectToTrack(track1);
+    EXPECT_EQ(0, sink1.number_of_frames());
+
+    MockMediaStreamVideoSink sink2;
+    sink2.ConnectToTrack(track2);
+    EXPECT_EQ(0, sink2.number_of_frames());
+
+    DeliverVideoFrameAndWaitForTwoRenderers(capture_width, capture_height,
+                                            &sink1, &sink2);
+
+    EXPECT_EQ(1, sink1.number_of_frames());
+    EXPECT_EQ(expected_width1, sink1.frame_size().width());
+    EXPECT_EQ(expected_height1, sink1.frame_size().height());
+
+    EXPECT_EQ(1, sink2.number_of_frames());
+    EXPECT_EQ(expected_width2, sink2.frame_size().width());
+    EXPECT_EQ(expected_height2, sink2.frame_size().height());
+
+    sink1.DisconnectFromTrack();
+    sink2.DisconnectFromTrack();
+  }
+
+  void ReleaseTrackAndSourceOnAddTrackCallback(
+      const blink::WebMediaStreamTrack& track_to_release) {
+    track_to_release_ = track_to_release;
+  }
+
+ private:
+  void OnConstraintsApplied(MediaStreamSource* source,
+                            MediaStreamRequestResult result,
+                            const blink::WebString& result_name) {
+    ASSERT_EQ(source, webkit_source().getExtraData());
+
+    if (result == MEDIA_DEVICE_OK) {
+      ++number_of_successful_constraints_applied_;
+    } else {
+      result_ = result;
+      result_name_ = result_name;
+      ++number_of_failed_constraints_applied_;
+    }
+
+    if (!track_to_release_.isNull()) {
+      mock_source_ = nullptr;
+      webkit_source_.reset();
+      track_to_release_.reset();
+    }
+  }
+  const base::MessageLoopForUI message_loop_;
+  const std::unique_ptr<ChildProcess> child_process_;
+  blink::WebMediaStreamTrack track_to_release_;
+  int number_of_successful_constraints_applied_;
+  int number_of_failed_constraints_applied_;
+  content::MediaStreamRequestResult result_;
+  blink::WebString result_name_;
+  blink::WebMediaStreamSource webkit_source_;
+  // |mock_source_| is owned by |webkit_source_|.
+  MockMediaStreamVideoSource* mock_source_;
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) {
+  blink::WebMediaStreamTrack track = CreateTrack("123");
+  mock_source()->StartMockedSource();
+  EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
+}
+
+TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) {
+  blink::WebMediaStreamTrack track1 = CreateTrack("123");
+  blink::WebMediaStreamTrack track2 = CreateTrack("123");
+  EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
+  mock_source()->StartMockedSource();
+  EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
+}
+
+TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) {
+  blink::WebMediaStreamTrack track1 = CreateTrack("123");
+  mock_source()->StartMockedSource();
+  EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
+  blink::WebMediaStreamTrack track2 = CreateTrack("123");
+  EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
+}
+
+TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) {
+  blink::WebMediaStreamTrack track = CreateTrack("123");
+  mock_source()->FailToStartMockedSource();
+  EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
+}
+
+TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) {
+  TestSourceCropFrame(1280, 720, 960, 720);
+}
+
+TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) {
+  blink::WebMediaStreamTrack track = CreateTrack("123");
+  ReleaseTrackAndSourceOnAddTrackCallback(track);
+  mock_source()->StartMockedSource();
+  EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
+}
+
+TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) {
+  TestTwoTracksWithDifferentSettings(640, 480, 640, 480, 640, 360);
+}
+
+TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) {
+  TestTwoTracksWithDifferentSettings(1280, 720, 1280, 720, 640, 360);
+}
+
+TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) {
+  MockConstraintFactory factory;
+  factory.AddAdvanced().width.setMax(800);
+  factory.AddAdvanced().height.setMax(700);
+
+  // Expect the source to start capture with the supported resolution.
+  // Disable frame-rate adjustment in spec-compliant mode to ensure no frames
+  // are dropped.
+  blink::WebMediaStreamTrack track = CreateTrackAndStartSource(800, 700, 0.0);
+
+  MockMediaStreamVideoSink sink;
+  sink.ConnectToTrack(track);
+  EXPECT_EQ(0, sink.number_of_frames());
+  DeliverVideoFrameAndWaitForRenderer(320, 240, &sink);
+  EXPECT_EQ(1, sink.number_of_frames());
+  // Expect the delivered frame to be passed unchanged since its smaller than
+  // max requested.
+  EXPECT_EQ(320, sink.frame_size().width());
+  EXPECT_EQ(240, sink.frame_size().height());
+
+  DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
+  EXPECT_EQ(2, sink.number_of_frames());
+  // Expect the delivered frame to be passed unchanged since its smaller than
+  // max requested.
+  EXPECT_EQ(640, sink.frame_size().width());
+  EXPECT_EQ(480, sink.frame_size().height());
+
+  DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink);
+  EXPECT_EQ(3, sink.number_of_frames());
+  // Expect a frame to be cropped since its larger than max requested.
+  EXPECT_EQ(800, sink.frame_size().width());
+  EXPECT_EQ(700, sink.frame_size().height());
+
+  sink.DisconnectFromTrack();
+}
+
+// Test that a source producing no frames change the source ReadyState to muted.
+// that in a reasonable time frame the muted state turns to false.
+TEST_F(MediaStreamVideoSourceTest, MutedSource) {
+  // Setup the source for support a frame rate of 999 fps in order to test
+  // the muted event faster. This is since the frame monitoring uses
+  // PostDelayedTask that is dependent on the source frame rate.
+  // Note that media::limits::kMaxFramesPerSecond is 1000.
+  blink::WebMediaStreamTrack track = CreateTrackAndStartSource(
+      640, 480, media::limits::kMaxFramesPerSecond - 2);
+  MockMediaStreamVideoSink sink;
+  sink.ConnectToTrack(track);
+  EXPECT_EQ(track.source().getReadyState(),
+            blink::WebMediaStreamSource::ReadyStateLive);
+
+  base::RunLoop run_loop;
+  base::Closure quit_closure = run_loop.QuitClosure();
+  bool muted_state = false;
+  EXPECT_CALL(*mock_source(), DoSetMutedState(_))
+      .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
+  run_loop.Run();
+  EXPECT_EQ(muted_state, true);
+
+  EXPECT_EQ(track.source().getReadyState(),
+            blink::WebMediaStreamSource::ReadyStateMuted);
+
+  base::RunLoop run_loop2;
+  base::Closure quit_closure2 = run_loop2.QuitClosure();
+  EXPECT_CALL(*mock_source(), DoSetMutedState(_))
+      .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2)));
+  DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
+  run_loop2.Run();
+
+  EXPECT_EQ(muted_state, false);
+  EXPECT_EQ(track.source().getReadyState(),
+            blink::WebMediaStreamSource::ReadyStateLive);
+
+  sink.DisconnectFromTrack();
+}
+
+class MediaStreamVideoSourceOldConstraintsTest : public ::testing::Test {
+ public:
+  MediaStreamVideoSourceOldConstraintsTest()
+      : child_process_(new ChildProcess()),
+        number_of_successful_constraints_applied_(0),
+        number_of_failed_constraints_applied_(0),
+        result_(MEDIA_DEVICE_OK),
+        result_name_(""),
+        mock_source_(new MockMediaStreamVideoSource(true)) {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kMediaStreamOldVideoConstraints);
+
     media::VideoCaptureFormats formats;
     formats.push_back(media::VideoCaptureFormat(
         gfx::Size(1280, 720), 30, media::PIXEL_FORMAT_I420));
@@ -63,16 +404,10 @@
                               blink::WebString::fromASCII("dummy_source_name"),
                               false /* remote */);
     webkit_source_.setExtraData(mock_source_);
-    webkit_source2_.initialize(blink::WebString::fromASCII("dummy_source_id"),
-                               blink::WebMediaStreamSource::TypeVideo,
-                               blink::WebString::fromASCII("dummy_source_name"),
-                               false /* remote */);
-    webkit_source2_.setExtraData(mock_source2_);
   }
 
   void TearDown() override {
     webkit_source_.reset();
-    webkit_source2_.reset();
     blink::WebHeap::collectAllGarbageForTesting();
   }
 
@@ -84,32 +419,9 @@
     bool enabled = true;
     return MediaStreamVideoTrack::CreateVideoTrack(
         mock_source_, constraints,
-        base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied,
-                   base::Unretained(this)),
-        enabled);
-  }
-
-  blink::WebMediaStreamTrack CreateTrack(const std::string& id) {
-    bool enabled = true;
-    return MediaStreamVideoTrack::CreateVideoTrack(
-        mock_source2_,
-        base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied,
-                   base::Unretained(this)),
-        enabled);
-  }
-
-  blink::WebMediaStreamTrack CreateTrack(
-      const std::string& id,
-      const VideoTrackAdapterSettings& adapter_settings,
-      const base::Optional<bool>& noise_reduction,
-      bool is_screencast,
-      double min_frame_rate) {
-    bool enabled = true;
-    return MediaStreamVideoTrack::CreateVideoTrack(
-        mock_source2_, adapter_settings, noise_reduction, is_screencast,
-        min_frame_rate,
-        base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied,
-                   base::Unretained(this)),
+        base::Bind(
+            &MediaStreamVideoSourceOldConstraintsTest::OnConstraintsApplied,
+            base::Unretained(this)),
         enabled);
   }
 
@@ -135,23 +447,6 @@
     return track;
   }
 
-  blink::WebMediaStreamTrack CreateTrackAndStartSource(int width,
-                                                       int height,
-                                                       double frame_rate) {
-    DCHECK(!IsOldVideoConstraints());
-    blink::WebMediaStreamTrack track = CreateTrack(
-        "123",
-        VideoTrackAdapterSettings(width, height, 0.0, HUGE_VAL, frame_rate),
-        base::Optional<bool>(), false, 0.0);
-
-    EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
-    mock_source2_->StartMockedSource();
-    // Once the source has started successfully we expect that the
-    // ConstraintsCallback in MediaStreamSource::AddTrack completes.
-    EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
-    return track;
-  }
-
   int NumberOfSuccessConstraintsCallbacks() const {
     return number_of_successful_constraints_applied_;
   }
@@ -163,13 +458,9 @@
   content::MediaStreamRequestResult error_type() const { return result_; }
   blink::WebString error_name() const { return result_name_; }
 
-  MockMediaStreamVideoSource* mock_source() {
-    return IsOldVideoConstraints() ? mock_source_ : mock_source2_;
-  }
+  MockMediaStreamVideoSource* mock_source() { return mock_source_; }
 
-  const blink::WebMediaStreamSource& webkit_source() {
-    return IsOldVideoConstraints() ? webkit_source_ : webkit_source2_;
-  }
+  const blink::WebMediaStreamSource& webkit_source() { return webkit_source_; }
 
   // Test that the source crops/scales to the requested width and
   // height even though the camera delivers a larger frame.
@@ -194,27 +485,6 @@
     sink.DisconnectFromTrack();
   }
 
-  void TestSourceCropFrame(int capture_width,
-                           int capture_height,
-                           int expected_width,
-                           int expected_height) {
-    DCHECK(!IsOldVideoConstraints());
-    // Configure the track to crop to the expected resolution.
-    blink::WebMediaStreamTrack track =
-        CreateTrackAndStartSource(expected_width, expected_height, 30.0);
-
-    // Produce frames at the capture resolution.
-    MockMediaStreamVideoSink sink;
-    sink.ConnectToTrack(track);
-    DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink);
-    EXPECT_EQ(1, sink.number_of_frames());
-
-    // Expect the delivered frame to be cropped.
-    EXPECT_EQ(expected_height, sink.frame_size().height());
-    EXPECT_EQ(expected_width, sink.frame_size().width());
-    sink.DisconnectFromTrack();
-  }
-
   void DeliverVideoFrameAndWaitForRenderer(int width, int height,
                                            MockMediaStreamVideoSink* sink) {
     base::RunLoop run_loop;
@@ -283,45 +553,6 @@
     sink2.DisconnectFromTrack();
   }
 
-  void TestTwoTracksWithDifferentSettings(int capture_width,
-                                          int capture_height,
-                                          int expected_width1,
-                                          int expected_height1,
-                                          int expected_width2,
-                                          int expected_height2) {
-    blink::WebMediaStreamTrack track1 =
-        CreateTrackAndStartSource(expected_width1, expected_height1,
-                                  MediaStreamVideoSource::kDefaultFrameRate);
-
-    blink::WebMediaStreamTrack track2 =
-        CreateTrack("dummy",
-                    VideoTrackAdapterSettings(
-                        expected_width2, expected_height2, 0.0, HUGE_VAL,
-                        MediaStreamVideoSource::kDefaultFrameRate),
-                    base::Optional<bool>(), false, 0.0);
-
-    MockMediaStreamVideoSink sink1;
-    sink1.ConnectToTrack(track1);
-    EXPECT_EQ(0, sink1.number_of_frames());
-
-    MockMediaStreamVideoSink sink2;
-    sink2.ConnectToTrack(track2);
-    EXPECT_EQ(0, sink2.number_of_frames());
-
-    DeliverVideoFrameAndWaitForTwoRenderers(capture_width, capture_height,
-                                            &sink1, &sink2);
-
-    EXPECT_EQ(1, sink1.number_of_frames());
-    EXPECT_EQ(expected_width1, sink1.frame_size().width());
-    EXPECT_EQ(expected_height1, sink1.frame_size().height());
-
-    EXPECT_EQ(1, sink2.number_of_frames());
-    EXPECT_EQ(expected_width2, sink2.frame_size().width());
-    EXPECT_EQ(expected_height2, sink2.frame_size().height());
-
-    sink1.DisconnectFromTrack();
-    sink2.DisconnectFromTrack();
-  }
   void SetSourceSupportedFormats(const media::VideoCaptureFormats& formats) {
     mock_source_->SetSupportedFormats(formats);
   }
@@ -348,8 +579,6 @@
     if (!track_to_release_.isNull()) {
       mock_source_ = nullptr;
       webkit_source_.reset();
-      mock_source2_ = nullptr;
-      webkit_source2_.reset();
       track_to_release_.reset();
     }
   }
@@ -363,16 +592,11 @@
   blink::WebMediaStreamSource webkit_source_;
   // |mock_source_| is owned by |webkit_source_|.
   MockMediaStreamVideoSource* mock_source_;
-  blink::WebMediaStreamSource webkit_source2_;
-  // |mock_source2_| is owned by |webkit_source2_|.
-  MockMediaStreamVideoSource* mock_source2_;
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSourceOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, AddTrackAndStartSource) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
   blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
@@ -381,21 +605,9 @@
   EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
 }
 
-TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  blink::WebMediaStreamTrack track = CreateTrack("123");
-  mock_source()->StartMockedSource();
-  EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
-}
-
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       AddTwoTracksBeforeSourceStartsOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       AddTwoTracksBeforeSourceStarts) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
   blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
@@ -406,22 +618,8 @@
   EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
 }
 
-TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  blink::WebMediaStreamTrack track1 = CreateTrack("123");
-  blink::WebMediaStreamTrack track2 = CreateTrack("123");
-  EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
-  mock_source()->StartMockedSource();
-  EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
-}
-
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStartsOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, AddTrackAfterSourceStarts) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
   blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
@@ -432,22 +630,8 @@
   EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
 }
 
-TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  blink::WebMediaStreamTrack track1 = CreateTrack("123");
-  mock_source()->StartMockedSource();
-  EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
-  blink::WebMediaStreamTrack track2 = CreateTrack("123");
-  EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
-}
-
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSourceOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, AddTrackAndFailToStartSource) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
   blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
@@ -456,22 +640,10 @@
   EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
 }
 
-TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  blink::WebMediaStreamTrack track = CreateTrack("123");
-  mock_source()->FailToStartMockedSource();
-  EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
-}
-
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       AddTwoTracksBeforeGetSupportedFormatsOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       AddTwoTracksBeforeGetSupportedFormats) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
   blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
@@ -485,10 +657,7 @@
 // and the capture device support CIF.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5FpsOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryConstraintCif5Fps) {
   MockConstraintFactory factory;
   factory.basic().width.setMax(352);
   factory.basic().height.setMax(288);
@@ -501,10 +670,7 @@
 // optional constraint is set to 720P.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, MandatoryMinVgaOptional720POldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryMinVgaOptional720P) {
   MockConstraintFactory factory;
   factory.basic().width.setMin(640);
   factory.basic().height.setMin(480);
@@ -518,10 +684,7 @@
 // mandatory constraint is exactly width 1280.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, MandatoryExact720POldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryExact720P) {
   MockConstraintFactory factory;
   factory.basic().width.setExact(1280);
   CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30);
@@ -531,10 +694,7 @@
 // require it even if an optional constraint request a higher resolution
 // that don't have this aspect ratio.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryAspectRatio4To3) {
   MockConstraintFactory factory;
   factory.basic().width.setMin(640);
   factory.basic().height.setMin(480);
@@ -544,18 +704,8 @@
   TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 960, 720);
 }
 
-TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  TestSourceCropFrame(1280, 720, 960, 720);
-}
-
 // Test that AddTrack succeeds if the mandatory min aspect ratio it set to 2.
-TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryAspectRatio2) {
   MockConstraintFactory factory;
   factory.basic().aspectRatio.setMin(2.0);
 
@@ -564,20 +714,10 @@
                       factory.CreateWebMediaConstraints(), 640, 320);
 }
 
-TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  TestSourceCropFrame(1280, 720, 960, 720);
-}
-
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       MinAspectRatioLargerThanMaxAspectRatioOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       MinAspectRatioLargerThanMaxAspectRatio) {
   MockConstraintFactory factory;
   factory.basic().aspectRatio.setMin(2.0);
   factory.basic().aspectRatio.setMax(1.0);
@@ -589,10 +729,7 @@
 
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, MinWidthLargerThanMaxWidthOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MinWidthLargerThanMaxWidth) {
   MockConstraintFactory factory;
   factory.basic().width.setMin(640);
   factory.basic().width.setMax(320);
@@ -604,10 +741,7 @@
 
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, MinHeightLargerThanMaxHeightOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MinHeightLargerThanMaxHeight) {
   MockConstraintFactory factory;
   factory.basic().height.setMin(480);
   factory.basic().height.setMax(360);
@@ -620,11 +754,8 @@
 
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       MinFrameRateLargerThanMaxFrameRateOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       MinFrameRateLargerThanMaxFrameRate) {
   MockConstraintFactory factory;
   factory.basic().frameRate.setMin(25);
   factory.basic().frameRate.setMax(15);
@@ -636,10 +767,7 @@
 
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, ExactWidthNotSupportedOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, ExactWidthNotSupported) {
   MockConstraintFactory factory;
   factory.basic().width.setExact(12000);
   blink::WebMediaStreamTrack track =
@@ -650,10 +778,7 @@
 
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, MinWidthNotSupportedOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MinWidthNotSupported) {
   MockConstraintFactory factory;
   factory.basic().width.setMin(12000);
   blink::WebMediaStreamTrack track =
@@ -665,11 +790,8 @@
 // Test that its safe to release the last reference of a blink track and the
 // source during the callback if adding a track succeeds.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       ReleaseTrackAndSourceOnSuccessCallBackOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       ReleaseTrackAndSourceOnSuccessCallBack) {
   MockConstraintFactory factory;
   blink::WebMediaStreamTrack track =
       CreateTrack("123", factory.CreateWebMediaConstraints());
@@ -679,25 +801,12 @@
   EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
 }
 
-TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  blink::WebMediaStreamTrack track = CreateTrack("123");
-  ReleaseTrackAndSourceOnAddTrackCallback(track);
-  mock_source()->StartMockedSource();
-  EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
-}
-
 // Test that its safe to release the last reference of a blink track and the
 // source during the callback if adding a track fails.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       ReleaseTrackAndSourceOnFailureCallBackOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       ReleaseTrackAndSourceOnFailureCallBack) {
   MockConstraintFactory factory;
   factory.basic().width.setMin(99999);
   {
@@ -713,10 +822,7 @@
 // supported.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, OptionalAspectRatioTooHighOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, OptionalAspectRatioTooHigh) {
   MockConstraintFactory factory;
   factory.AddAdvanced().aspectRatio.setMin(2.0);
   blink::WebMediaStreamTrack track =
@@ -733,10 +839,7 @@
 // that is the only supported.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, DefaultCapabilityOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, DefaultCapability) {
   media::VideoCaptureFormats formats;
   formats.push_back(media::VideoCaptureFormat(
       gfx::Size(MediaStreamVideoSource::kDefaultWidth,
@@ -752,10 +855,7 @@
 
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraintOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, InvalidMandatoryConstraint) {
   MockConstraintFactory factory;
   // Use a constraint that is only known for audio.
   factory.basic().echoCancellation.setExact(true);
@@ -770,10 +870,7 @@
 // Test that the source ignores an unknown optional constraint.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraintOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, InvalidOptionalConstraint) {
   MockConstraintFactory factory;
   factory.AddAdvanced().echoCancellation.setExact(true);
 
@@ -786,11 +883,8 @@
 // constraints for screencast.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       ScreencastResolutionWithConstraintOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       ScreencastResolutionWithConstraint) {
   media::VideoCaptureFormats formats;
   formats.push_back(media::VideoCaptureFormat(gfx::Size(480, 270), 30,
                                               media::PIXEL_FORMAT_I420));
@@ -808,10 +902,7 @@
 // Test that optional constraints are applied in order.
 // Does not apply with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, OptionalConstraintsOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, OptionalConstraints) {
   MockConstraintFactory factory;
   // Min width of 2056 pixels can not be fulfilled.
   factory.AddAdvanced().width.setMin(2056);
@@ -825,11 +916,8 @@
 // height even though the camera delivers a larger frame.
 // Redundant with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       DeliverCroppedVideoFrameOptional640360OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       DeliverCroppedVideoFrameOptional640360) {
   MockConstraintFactory factory;
   factory.AddAdvanced().width.setMax(640);
   factory.AddAdvanced().height.setMax(360);
@@ -838,11 +926,8 @@
 
 // Redundant with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       DeliverCroppedVideoFrameMandatory640360OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       DeliverCroppedVideoFrameMandatory640360) {
   MockConstraintFactory factory;
   factory.basic().width.setMax(640);
   factory.basic().height.setMax(360);
@@ -851,11 +936,8 @@
 
 // Redundant with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       DeliverCroppedVideoFrameMandatory732489OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       DeliverCroppedVideoFrameMandatory732489) {
   MockConstraintFactory factory;
   factory.basic().width.setMax(732);
   factory.basic().height.setMax(489);
@@ -868,11 +950,8 @@
 // height even though the requested frame has odd size.
 // Redundant with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       DeliverCroppedVideoFrame637359OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       DeliverCroppedVideoFrame637359) {
   MockConstraintFactory factory;
   factory.AddAdvanced().width.setMax(637);
   factory.AddAdvanced().height.setMax(359);
@@ -881,11 +960,8 @@
 
 // Redundant with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       DeliverCroppedVideoFrame320320OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       DeliverCroppedVideoFrame320320) {
   MockConstraintFactory factory;
   factory.basic().width.setMax(320);
   factory.basic().height.setMax(320);
@@ -896,11 +972,8 @@
 
 // Redundant with spec-compliant constraints.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       DeliverSmallerSizeWhenTooLargeMaxOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       DeliverSmallerSizeWhenTooLargeMax) {
   MockConstraintFactory factory;
   factory.AddAdvanced().width.setMax(1920);
   factory.AddAdvanced().height.setMax(1080);
@@ -911,10 +984,7 @@
 }
 
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGAOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, TwoTracksWithVGAAndWVGA) {
   MockConstraintFactory factory1;
   factory1.AddAdvanced().width.setMax(640);
   factory1.AddAdvanced().height.setMax(480);
@@ -927,19 +997,9 @@
                                         640, 480, 640, 480, 640, 360);
 }
 
-TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  TestTwoTracksWithDifferentSettings(640, 480, 640, 480, 640, 360);
-}
-
 // Redundant with spec-compliant constraints
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGAOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, TwoTracksWith720AndWVGA) {
   MockConstraintFactory factory1;
   factory1.AddAdvanced().width.setMin(1280);
   factory1.AddAdvanced().height.setMin(720);
@@ -953,19 +1013,9 @@
                                         1280, 720, 1280, 720, 640, 360);
 }
 
-TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  TestTwoTracksWithDifferentSettings(1280, 720, 1280, 720, 640, 360);
-}
-
 // Redundant with spec-compliant constraints
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndW700H700OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, TwoTracksWith720AndW700H700) {
   MockConstraintFactory factory1;
   factory1.AddAdvanced().width.setMin(1280);
   factory1.AddAdvanced().height.setMin(720);
@@ -981,11 +1031,8 @@
 
 // Redundant with spec-compliant constraints
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       TwoTracksWith720AndMaxAspectRatio4To3OldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       TwoTracksWith720AndMaxAspectRatio4To3) {
   MockConstraintFactory factory1;
   factory1.AddAdvanced().width.setMin(1280);
   factory1.AddAdvanced().height.setMin(720);
@@ -1000,11 +1047,8 @@
 
 // Redundant with spec-compliant constraints
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       TwoTracksWithVgaAndMinAspectRatioOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       TwoTracksWithVgaAndMinAspectRatio) {
   MockConstraintFactory factory1;
   factory1.AddAdvanced().width.setMax(640);
   factory1.AddAdvanced().height.setMax(480);
@@ -1019,11 +1063,8 @@
 
 // Does not apply with spec-compliant constraints
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       TwoTracksWithSecondTrackFrameRateHigherThanFirstOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       TwoTracksWithSecondTrackFrameRateHigherThanFirst) {
   MockConstraintFactory factory1;
   factory1.basic().frameRate.setMin(15);
   factory1.basic().frameRate.setMax(15);
@@ -1044,10 +1085,7 @@
 // tracks sinks get the new frame size unless constraints force the frame to be
 // cropped.
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSizeOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, SourceChangeFrameSize) {
   MockConstraintFactory factory;
   factory.AddAdvanced().width.setMax(800);
   factory.AddAdvanced().height.setMax(700);
@@ -1084,52 +1122,8 @@
   sink.DisconnectFromTrack();
 }
 
-TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  MockConstraintFactory factory;
-  factory.AddAdvanced().width.setMax(800);
-  factory.AddAdvanced().height.setMax(700);
-
-  // Expect the source to start capture with the supported resolution.
-  // Disable frame-rate adjustment in spec-compliant mode to ensure no frames
-  // are dropped.
-  blink::WebMediaStreamTrack track = CreateTrackAndStartSource(800, 700, 0.0);
-
-  MockMediaStreamVideoSink sink;
-  sink.ConnectToTrack(track);
-  EXPECT_EQ(0, sink.number_of_frames());
-  DeliverVideoFrameAndWaitForRenderer(320, 240, &sink);
-  EXPECT_EQ(1, sink.number_of_frames());
-  // Expect the delivered frame to be passed unchanged since its smaller than
-  // max requested.
-  EXPECT_EQ(320, sink.frame_size().width());
-  EXPECT_EQ(240, sink.frame_size().height());
-
-  DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
-  EXPECT_EQ(2, sink.number_of_frames());
-  // Expect the delivered frame to be passed unchanged since its smaller than
-  // max requested.
-  EXPECT_EQ(640, sink.frame_size().width());
-  EXPECT_EQ(480, sink.frame_size().height());
-
-  DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink);
-  EXPECT_EQ(3, sink.number_of_frames());
-  // Expect a frame to be cropped since its larger than max requested.
-  EXPECT_EQ(800, sink.frame_size().width());
-  EXPECT_EQ(700, sink.frame_size().height());
-
-  sink.DisconnectFromTrack();
-}
-
 // Test that the constraint negotiation can handle 0.0 fps as frame rate.
-// Does not apply to spec-compliant constraints.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, Use0FpsSupportedFormatOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, Use0FpsSupportedFormat) {
   media::VideoCaptureFormats formats;
   formats.push_back(media::VideoCaptureFormat(gfx::Size(640, 480), 0.0f,
                                               media::PIXEL_FORMAT_I420));
@@ -1158,11 +1152,7 @@
 
 // Test that a source producing no frames change the source ReadyState to muted.
 // that in a reasonable time frame the muted state turns to false.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest, MutedSourceOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest, MutedSource) {
   // Setup the source for support a frame rate of 999 fps in order to test
   // the muted event faster. This is since the frame monitoring uses
   // PostDelayedTask that is dependent on the source frame rate.
@@ -1208,56 +1198,9 @@
   sink.DisconnectFromTrack();
 }
 
-// Test that a source producing no frames change the source ReadyState to muted.
-// that in a reasonable time frame the muted state turns to false.
-TEST_F(MediaStreamVideoSourceTest, MutedSource) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  // Setup the source for support a frame rate of 999 fps in order to test
-  // the muted event faster. This is since the frame monitoring uses
-  // PostDelayedTask that is dependent on the source frame rate.
-  // Note that media::limits::kMaxFramesPerSecond is 1000.
-  blink::WebMediaStreamTrack track = CreateTrackAndStartSource(
-      640, 480, media::limits::kMaxFramesPerSecond - 2);
-  MockMediaStreamVideoSink sink;
-  sink.ConnectToTrack(track);
-  EXPECT_EQ(track.source().getReadyState(),
-            blink::WebMediaStreamSource::ReadyStateLive);
-
-  base::RunLoop run_loop;
-  base::Closure quit_closure = run_loop.QuitClosure();
-  bool muted_state = false;
-  EXPECT_CALL(*mock_source(), DoSetMutedState(_))
-      .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
-  run_loop.Run();
-  EXPECT_EQ(muted_state, true);
-
-  EXPECT_EQ(track.source().getReadyState(),
-            blink::WebMediaStreamSource::ReadyStateMuted);
-
-  base::RunLoop run_loop2;
-  base::Closure quit_closure2 = run_loop2.QuitClosure();
-  EXPECT_CALL(*mock_source(), DoSetMutedState(_))
-      .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2)));
-  DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
-  run_loop2.Run();
-
-  EXPECT_EQ(muted_state, false);
-  EXPECT_EQ(track.source().getReadyState(),
-            blink::WebMediaStreamSource::ReadyStateLive);
-
-  sink.DisconnectFromTrack();
-}
-
 // Test that an optional constraint with an invalid aspect ratio is ignored.
-// Does not apply with spec-compliant constraints.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       InvalidOptionalAspectRatioIgnoredOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       InvalidOptionalAspectRatioIgnored) {
   MockConstraintFactory factory;
   factory.AddAdvanced().aspectRatio.setMax(0.0);
   blink::WebMediaStreamTrack track =
@@ -1268,12 +1211,8 @@
 
 // Test that setting an invalid mandatory aspect ratio fails.
 // Does not apply with spec-compliant constraints.
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoSourceTest,
-       InvalidMandatoryAspectRatioFailsOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoSourceOldConstraintsTest,
+       InvalidMandatoryAspectRatioFails) {
   MockConstraintFactory factory;
   factory.basic().aspectRatio.setMax(0.0);
   blink::WebMediaStreamTrack track =
diff --git a/content/renderer/media/media_stream_video_track_unittest.cc b/content/renderer/media/media_stream_video_track_unittest.cc
index 7e6bb3b..410207c8a 100644
--- a/content/renderer/media/media_stream_video_track_unittest.cc
+++ b/content/renderer/media/media_stream_video_track_unittest.cc
@@ -37,7 +37,10 @@
   MediaStreamVideoTrackTest()
       : child_process_(new ChildProcess()),
         mock_source_(nullptr),
-        source_started_(false) {}
+        source_started_(false) {
+    scoped_feature_list_.InitAndDisableFeature(
+        features::kMediaStreamOldVideoConstraints);
+  }
 
   ~MediaStreamVideoTrackTest() override {}
 
@@ -120,6 +123,7 @@
   // |mock_source_| is owned by |webkit_source_|.
   MockMediaStreamVideoSource* mock_source_;
   bool source_started_;
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
@@ -260,31 +264,7 @@
   sink2.DisconnectFromTrack();
 }
 
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoTrackTest,
-       CheckTrackRequestsFrameOldConstraintsOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  UpdateVideoSourceToRespondToRequestRefreshFrame();
-  blink::WebMediaStreamTrack track = CreateTrack();
-
-  // Add sink and expect to get a frame.
-  MockMediaStreamVideoSink sink;
-  base::RunLoop run_loop;
-  base::Closure quit_closure = run_loop.QuitClosure();
-  EXPECT_CALL(sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure));
-  sink.ConnectToTrack(track);
-  run_loop.Run();
-  EXPECT_EQ(1, sink.number_of_frames());
-
-  sink.DisconnectFromTrack();
-}
-
 TEST_F(MediaStreamVideoTrackTest, CheckTrackRequestsFrame) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
   InitializeSource();
   UpdateVideoSourceToRespondToRequestRefreshFrame();
   blink::WebMediaStreamTrack track = CreateTrack();
@@ -301,11 +281,7 @@
   sink.DisconnectFromTrack();
 }
 
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoTrackTest, GetSettingsOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoTrackTest, GetSettings) {
   InitializeSource();
   blink::WebMediaStreamTrack track = CreateTrack();
   MediaStreamVideoTrack* const native_track =
@@ -319,10 +295,230 @@
   EXPECT_EQ(blink::WebMediaStreamTrack::FacingMode::None, settings.facingMode);
 }
 
-TEST_F(MediaStreamVideoTrackTest, GetSettings) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
+// TODO(guidou): Remove this test. http://crbug.com/706408
+class MediaStreamVideoTrackOldConstraintsTest : public ::testing::Test {
+ public:
+  MediaStreamVideoTrackOldConstraintsTest()
+      : child_process_(new ChildProcess()),
+        mock_source_(nullptr),
+        source_started_(false) {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kMediaStreamOldVideoConstraints);
+  }
+
+  ~MediaStreamVideoTrackOldConstraintsTest() override {}
+
+  void TearDown() override {
+    blink_source_.reset();
+    blink::WebHeap::collectAllGarbageForTesting();
+  }
+
+  void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) {
+    base::RunLoop run_loop;
+    base::Closure quit_closure = run_loop.QuitClosure();
+    EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure));
+    const scoped_refptr<media::VideoFrame> frame =
+        media::VideoFrame::CreateColorFrame(
+            gfx::Size(MediaStreamVideoSource::kDefaultWidth,
+                      MediaStreamVideoSource::kDefaultHeight),
+            kColorValue, kColorValue, kColorValue, base::TimeDelta());
+    mock_source()->DeliverVideoFrame(frame);
+    run_loop.Run();
+  }
+
+ protected:
+  base::MessageLoop* io_message_loop() const {
+    return child_process_->io_message_loop();
+  }
+
+  void InitializeSource() {
+    blink_source_.reset();
+    mock_source_ = IsOldVideoConstraints()
+                       ? new MockMediaStreamVideoSource(false)
+                       : new MockMediaStreamVideoSource(
+                             media::VideoCaptureFormat(
+                                 gfx::Size(kMockSourceWidth, kMockSourceHeight),
+                                 30.0, media::PIXEL_FORMAT_I420),
+                             false);
+    blink_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
+                             blink::WebMediaStreamSource::TypeVideo,
+                             blink::WebString::fromASCII("dummy_source_name"),
+                             false /* remote */);
+    blink_source_.setExtraData(mock_source_);
+  }
+
+  // Create a track that's associated with |mock_source_|.
+  blink::WebMediaStreamTrack CreateTrack() {
+    const bool enabled = true;
+    blink::WebMediaStreamTrack track = MediaStreamVideoTrack::CreateVideoTrack(
+        mock_source_, MediaStreamSource::ConstraintsCallback(), enabled);
+    if (!source_started_) {
+      mock_source_->StartMockedSource();
+      source_started_ = true;
+    }
+    return track;
+  }
+
+  void UpdateVideoSourceToRespondToRequestRefreshFrame() {
+    blink_source_.reset();
+    mock_source_ = IsOldVideoConstraints()
+                       ? new MockMediaStreamVideoSource(false, true)
+                       : new MockMediaStreamVideoSource(
+                             media::VideoCaptureFormat(
+                                 gfx::Size(kMockSourceWidth, kMockSourceHeight),
+                                 30.0, media::PIXEL_FORMAT_I420),
+                             true);
+    blink_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
+                             blink::WebMediaStreamSource::TypeVideo,
+                             blink::WebString::fromASCII("dummy_source_name"),
+                             false /* remote */);
+    blink_source_.setExtraData(mock_source_);
+  }
+
+  MockMediaStreamVideoSource* mock_source() { return mock_source_; }
+  const blink::WebMediaStreamSource& blink_source() const {
+    return blink_source_;
+  }
+
+ private:
+  const base::MessageLoopForUI message_loop_;
+  const std::unique_ptr<ChildProcess> child_process_;
+  blink::WebMediaStreamSource blink_source_;
+  // |mock_source_| is owned by |webkit_source_|.
+  MockMediaStreamVideoSource* mock_source_;
+  bool source_started_;
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(MediaStreamVideoTrackOldConstraintsTest, AddAndRemoveSink) {
+  InitializeSource();
+  MockMediaStreamVideoSink sink;
+  blink::WebMediaStreamTrack track = CreateTrack();
+  sink.ConnectToTrack(track);
+
+  DeliverVideoFrameAndWaitForRenderer(&sink);
+  EXPECT_EQ(1, sink.number_of_frames());
+
+  DeliverVideoFrameAndWaitForRenderer(&sink);
+
+  sink.DisconnectFromTrack();
+
+  scoped_refptr<media::VideoFrame> frame = media::VideoFrame::CreateBlackFrame(
+      gfx::Size(MediaStreamVideoSource::kDefaultWidth,
+                MediaStreamVideoSource::kDefaultHeight));
+  mock_source()->DeliverVideoFrame(frame);
+  // Wait for the IO thread to complete delivering frames.
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(2, sink.number_of_frames());
+}
+
+// Checks that the callback given to the track is reset on the right thread.
+TEST_F(MediaStreamVideoTrackOldConstraintsTest, ResetCallbackOnThread) {
+  InitializeSource();
+  MockMediaStreamVideoSink sink;
+  blink::WebMediaStreamTrack track = CreateTrack();
+
+  base::RunLoop run_loop;
+  bool correct = false;
+  sink.ConnectToTrackWithCallback(
+      track, base::Bind(&CheckThreadVideoFrameReceiver,
+                        base::Owned(new CheckThreadHelper(
+                            run_loop.QuitClosure(), &correct))));
+  sink.DisconnectFromTrack();
+  run_loop.Run();
+  EXPECT_TRUE(correct) << "Not called on correct thread.";
+}
+
+TEST_F(MediaStreamVideoTrackOldConstraintsTest, SetEnabled) {
+  InitializeSource();
+  MockMediaStreamVideoSink sink;
+  blink::WebMediaStreamTrack track = CreateTrack();
+  sink.ConnectToTrack(track);
+
+  MediaStreamVideoTrack* video_track =
+      MediaStreamVideoTrack::GetVideoTrack(track);
+
+  DeliverVideoFrameAndWaitForRenderer(&sink);
+  EXPECT_EQ(1, sink.number_of_frames());
+  EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
+
+  video_track->SetEnabled(false);
+  EXPECT_FALSE(sink.enabled());
+
+  DeliverVideoFrameAndWaitForRenderer(&sink);
+  EXPECT_EQ(2, sink.number_of_frames());
+  EXPECT_EQ(kBlackValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
+
+  video_track->SetEnabled(true);
+  EXPECT_TRUE(sink.enabled());
+  DeliverVideoFrameAndWaitForRenderer(&sink);
+  EXPECT_EQ(3, sink.number_of_frames());
+  EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
+  sink.DisconnectFromTrack();
+}
+
+TEST_F(MediaStreamVideoTrackOldConstraintsTest, SourceStopped) {
+  InitializeSource();
+  MockMediaStreamVideoSink sink;
+  blink::WebMediaStreamTrack track = CreateTrack();
+  sink.ConnectToTrack(track);
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
+
+  mock_source()->StopSource();
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state());
+  sink.DisconnectFromTrack();
+}
+
+TEST_F(MediaStreamVideoTrackOldConstraintsTest, StopLastTrack) {
+  InitializeSource();
+  MockMediaStreamVideoSink sink1;
+  blink::WebMediaStreamTrack track1 = CreateTrack();
+  sink1.ConnectToTrack(track1);
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink1.state());
+
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
+            blink_source().getReadyState());
+
+  MockMediaStreamVideoSink sink2;
+  blink::WebMediaStreamTrack track2 = CreateTrack();
+  sink2.ConnectToTrack(track2);
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink2.state());
+
+  MediaStreamVideoTrack* const native_track1 =
+      MediaStreamVideoTrack::GetVideoTrack(track1);
+  native_track1->Stop();
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink1.state());
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
+            blink_source().getReadyState());
+  sink1.DisconnectFromTrack();
+
+  MediaStreamVideoTrack* const native_track2 =
+      MediaStreamVideoTrack::GetVideoTrack(track2);
+  native_track2->Stop();
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink2.state());
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
+            blink_source().getReadyState());
+  sink2.DisconnectFromTrack();
+}
+
+TEST_F(MediaStreamVideoTrackOldConstraintsTest,
+       CheckTrackRequestsFrameOldConstraintsOldConstraints) {
+  UpdateVideoSourceToRespondToRequestRefreshFrame();
+  blink::WebMediaStreamTrack track = CreateTrack();
+
+  // Add sink and expect to get a frame.
+  MockMediaStreamVideoSink sink;
+  base::RunLoop run_loop;
+  base::Closure quit_closure = run_loop.QuitClosure();
+  EXPECT_CALL(sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure));
+  sink.ConnectToTrack(track);
+  run_loop.Run();
+  EXPECT_EQ(1, sink.number_of_frames());
+
+  sink.DisconnectFromTrack();
+}
+
+TEST_F(MediaStreamVideoTrackOldConstraintsTest, GetSettingsOldConstraints) {
   InitializeSource();
   blink::WebMediaStreamTrack track = CreateTrack();
   MediaStreamVideoTrack* const native_track =
diff --git a/content/renderer/media/render_media_client.cc b/content/renderer/media/render_media_client.cc
index bc185548..c3d146761 100644
--- a/content/renderer/media/render_media_client.cc
+++ b/content/renderer/media/render_media_client.cc
@@ -16,104 +16,32 @@
 namespace content {
 
 void RenderMediaClient::Initialize() {
-  GetInstance();
+  static RenderMediaClient* client = new RenderMediaClient();
+  media::SetMediaClient(client);
 }
 
-RenderMediaClient::RenderMediaClient()
-    : has_updated_(false),
-      is_update_needed_(true),
-      tick_clock_(new base::DefaultTickClock()) {
-  media::SetMediaClient(this);
-}
+RenderMediaClient::RenderMediaClient() {}
 
 RenderMediaClient::~RenderMediaClient() {
 }
 
-void RenderMediaClient::AddKeySystemsInfoForUMA(
-    std::vector<media::KeySystemInfoForUMA>* key_systems_info_for_uma) {
-  DVLOG(2) << __func__;
-#if defined(WIDEVINE_CDM_AVAILABLE)
-  key_systems_info_for_uma->push_back(media::KeySystemInfoForUMA(
-      kWidevineKeySystem, kWidevineKeySystemNameForUMA));
-#endif  // WIDEVINE_CDM_AVAILABLE
+void RenderMediaClient::AddSupportedKeySystems(
+    std::vector<std::unique_ptr<media::KeySystemProperties>>* key_systems) {
+  GetContentClient()->renderer()->AddSupportedKeySystems(key_systems);
 }
 
 bool RenderMediaClient::IsKeySystemsUpdateNeeded() {
-  DVLOG(2) << __func__;
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  // Always needs update if we have never updated, regardless the
-  // |last_update_time_ticks_|'s initial value.
-  if (!has_updated_) {
-    DCHECK(is_update_needed_);
-    return true;
-  }
-
-  if (!is_update_needed_)
-    return false;
-
-  // The update could be expensive. For example, it could involve a sync IPC to
-  // the browser process. Use a minimum update interval to avoid unnecessarily
-  // frequent update.
-  static const int kMinUpdateIntervalInMilliseconds = 1000;
-  if ((tick_clock_->NowTicks() - last_update_time_ticks_).InMilliseconds() <
-      kMinUpdateIntervalInMilliseconds) {
-    return false;
-  }
-
-  return true;
-}
-
-void RenderMediaClient::AddSupportedKeySystems(
-    std::vector<std::unique_ptr<media::KeySystemProperties>>*
-        key_systems_properties) {
-  DVLOG(2) << __func__;
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  GetContentClient()->renderer()->AddSupportedKeySystems(
-      key_systems_properties);
-
-  has_updated_ = true;
-  last_update_time_ticks_ = tick_clock_->NowTicks();
-
-  // Check whether all potentially supported key systems are supported. If so,
-  // no need to update again.
-#if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
-  for (const auto& properties : *key_systems_properties) {
-    if (properties->GetKeySystemName() == kWidevineKeySystem)
-      is_update_needed_ = false;
-  }
-#else
-  is_update_needed_ = false;
-#endif
-}
-
-void RenderMediaClient::RecordRapporURL(const std::string& metric,
-                                        const GURL& url) {
-  GetContentClient()->renderer()->RecordRapporURL(metric, url);
+  return GetContentClient()->renderer()->IsKeySystemsUpdateNeeded();
 }
 
 bool RenderMediaClient::IsSupportedAudioConfig(
     const media::AudioConfig& config) {
-  // Render media client does not customize decoder support. Defer to media/.
-  return ::media::IsSupportedAudioConfig(config);
+  return GetContentClient()->renderer()->IsSupportedAudioConfig(config);
 }
 
 bool RenderMediaClient::IsSupportedVideoConfig(
     const media::VideoConfig& config) {
-  // Render media client does not customize decoder support. Defer to media/.
-  return ::media::IsSupportedVideoConfig(config);
-}
-
-void RenderMediaClient::SetTickClockForTesting(
-    std::unique_ptr<base::TickClock> tick_clock) {
-  tick_clock_.swap(tick_clock);
-}
-
-// static
-RenderMediaClient* RenderMediaClient::GetInstance() {
-  static RenderMediaClient* client = new RenderMediaClient();
-  return client;
+  return GetContentClient()->renderer()->IsSupportedVideoConfig(config);
 }
 
 }  // namespace content
diff --git a/content/renderer/media/render_media_client.h b/content/renderer/media/render_media_client.h
index e2604e6..c439e6e 100644
--- a/content/renderer/media/render_media_client.h
+++ b/content/renderer/media/render_media_client.h
@@ -5,17 +5,13 @@
 #ifndef CONTENT_RENDERER_MEDIA_RENDER_MEDIA_CLIENT_H_
 #define CONTENT_RENDERER_MEDIA_RENDER_MEDIA_CLIENT_H_
 
-#include <memory>
-
-#include "base/threading/thread_checker.h"
-#include "base/time/tick_clock.h"
-#include "base/time/time.h"
 #include "content/common/content_export.h"
 #include "media/base/media_client.h"
-#include "widevine_cdm_version.h"  // In SHARED_INTERMEDIATE_DIR.
 
 namespace content {
 
+// RenderMediaClient is purely plumbing to make content embedder customizations
+// visible to the lower media layer.
 class CONTENT_EXPORT RenderMediaClient : public media::MediaClient {
  public:
   // Initialize RenderMediaClient and SetMediaClient(). Note that the instance
@@ -23,40 +19,17 @@
   static void Initialize();
 
   // MediaClient implementation.
-  void AddKeySystemsInfoForUMA(
-      std::vector<media::KeySystemInfoForUMA>* key_systems_info_for_uma) final;
-  bool IsKeySystemsUpdateNeeded() final;
   void AddSupportedKeySystems(
-      std::vector<std::unique_ptr<media::KeySystemProperties>>*
-          key_systems_properties) final;
-  void RecordRapporURL(const std::string& metric, const GURL& url) final;
-  bool IsSupportedAudioConfig(const media::AudioConfig& config) override;
-  bool IsSupportedVideoConfig(const media::VideoConfig& config) override;
-
-  void SetTickClockForTesting(std::unique_ptr<base::TickClock> tick_clock);
+      std::vector<std::unique_ptr<media::KeySystemProperties>>* key_systems)
+      final;
+  bool IsKeySystemsUpdateNeeded() final;
+  bool IsSupportedAudioConfig(const media::AudioConfig& config) final;
+  bool IsSupportedVideoConfig(const media::VideoConfig& config) final;
 
  private:
-  friend class RenderMediaClientTest;
-
   RenderMediaClient();
   ~RenderMediaClient() override;
 
-  static RenderMediaClient* GetInstance();
-
-  // Makes sure all methods are called from the same thread.
-  base::ThreadChecker thread_checker_;
-
-  // Whether AddSupportedKeySystems() has ever been called.
-  bool has_updated_;
-
-  // Whether a future update is needed. For example, when some potentially
-  // supported key systems are NOT supported yet. This could happen when the
-  // required component for a key system is not yet available.
-  bool is_update_needed_;
-
-  base::TimeTicks last_update_time_ticks_;
-  std::unique_ptr<base::TickClock> tick_clock_;
-
   DISALLOW_COPY_AND_ASSIGN(RenderMediaClient);
 };
 
diff --git a/content/renderer/media/render_media_client_unittest.cc b/content/renderer/media/render_media_client_unittest.cc
deleted file mode 100644
index 21e3bb8..0000000
--- a/content/renderer/media/render_media_client_unittest.cc
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright 2014 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 <string>
-#include <vector>
-
-#include "base/test/simple_test_tick_clock.h"
-#include "content/public/renderer/content_renderer_client.h"
-#include "content/renderer/media/render_media_client.h"
-#include "content/test/test_content_client.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#include "widevine_cdm_version.h"  // In SHARED_INTERMEDIATE_DIR.
-
-namespace content {
-
-namespace {
-
-class TestKeySystemProperties : public media::KeySystemProperties {
- public:
-  TestKeySystemProperties(const std::string& key_system_name)
-      : key_system_name_(key_system_name) {}
-
-  std::string GetKeySystemName() const override { return key_system_name_; }
-  bool IsSupportedInitDataType(
-      media::EmeInitDataType init_data_type) const override {
-    return false;
-  }
-  media::SupportedCodecs GetSupportedCodecs() const override {
-    return media::EME_CODEC_NONE;
-  }
-  media::EmeConfigRule GetRobustnessConfigRule(
-      media::EmeMediaType media_type,
-      const std::string& requested_robustness) const override {
-    return requested_robustness.empty() ? media::EmeConfigRule::SUPPORTED
-                                        : media::EmeConfigRule::NOT_SUPPORTED;
-  }
-  media::EmeSessionTypeSupport GetPersistentLicenseSessionSupport()
-      const override {
-    return media::EmeSessionTypeSupport::NOT_SUPPORTED;
-  }
-  media::EmeSessionTypeSupport GetPersistentReleaseMessageSessionSupport()
-      const override {
-    return media::EmeSessionTypeSupport::NOT_SUPPORTED;
-  }
-  media::EmeFeatureSupport GetPersistentStateSupport() const override {
-    return media::EmeFeatureSupport::NOT_SUPPORTED;
-  }
-  media::EmeFeatureSupport GetDistinctiveIdentifierSupport() const override {
-    return media::EmeFeatureSupport::NOT_SUPPORTED;
-  }
-
- private:
-  const std::string key_system_name_;
-};
-
-class TestContentRendererClient : public ContentRendererClient {
- public:
-  TestContentRendererClient() : is_extra_key_system_enabled_(false) {}
-
-  // ContentRendererClient implementation.
-  void AddSupportedKeySystems(
-      std::vector<std::unique_ptr<media::KeySystemProperties>>*
-          key_systems_properties) override {
-    key_systems_properties->emplace_back(
-        new TestKeySystemProperties("test.keysystem"));
-
-#if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
-    if (is_extra_key_system_enabled_) {
-      key_systems_properties->emplace_back(
-          new TestKeySystemProperties(kWidevineKeySystem));
-    }
-#endif
-  }
-
-  void EnableExtraKeySystem() { is_extra_key_system_enabled_ = true; }
-
- private:
-  // Whether a platform-specific extra key system is "supported" by |this|.
-  bool is_extra_key_system_enabled_;
-};
-
-#if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
-bool ContainsWidevine(
-    const std::vector<std::unique_ptr<media::KeySystemProperties>>&
-        key_systems_properties) {
-  for (const auto& key_system_properties : key_systems_properties) {
-    if (key_system_properties->GetKeySystemName() == kWidevineKeySystem)
-      return true;
-  }
-  return false;
-}
-#endif
-
-}  // namespace
-
-class RenderMediaClientTest : public testing::Test {
- protected:
-  RenderMediaClientTest()
-      : render_media_client_(RenderMediaClient::GetInstance()) {
-    SetContentClient(&test_content_client_);
-    SetRendererClientForTesting(&test_content_renderer_client_);
-  }
-
-  void EnableExtraKeySystem() {
-    test_content_renderer_client_.EnableExtraKeySystem();
-  }
-
-  RenderMediaClient* render_media_client_;
-
- private:
-  typedef base::hash_map<std::string, std::string> KeySystemNameForUMAMap;
-
-  TestContentClient test_content_client_;
-  TestContentRendererClient test_content_renderer_client_;
-  KeySystemNameForUMAMap key_system_name_for_uma_map_;
-};
-
-TEST_F(RenderMediaClientTest, KeySystemNameForUMA) {
-  std::vector<media::KeySystemInfoForUMA> key_systems_info_for_uma;
-  render_media_client_->AddKeySystemsInfoForUMA(&key_systems_info_for_uma);
-
-  std::string widevine_uma_name;
-  std::string clearkey_uma_name;
-  for (const media::KeySystemInfoForUMA& info : key_systems_info_for_uma) {
-    if (info.key_system == "com.widevine.alpha")
-      widevine_uma_name = info.key_system_name_for_uma;
-    if (info.key_system == "org.w3.clearkey")
-      clearkey_uma_name = info.key_system_name_for_uma;
-  }
-
-#if defined(WIDEVINE_CDM_AVAILABLE)
-  EXPECT_EQ("Widevine", widevine_uma_name);
-#else
-  EXPECT_TRUE(widevine_uma_name.empty());
-#endif
-
-  EXPECT_TRUE(clearkey_uma_name.empty()) << "Clear Key is added by media/ and "
-                                            "should not be added by the "
-                                            "MediaClient.";
-}
-
-TEST_F(RenderMediaClientTest, IsKeySystemsUpdateNeeded) {
-  base::SimpleTestTickClock* tick_clock = new base::SimpleTestTickClock();
-  render_media_client_->SetTickClockForTesting(
-      std::unique_ptr<base::TickClock>(tick_clock));
-
-  // IsKeySystemsUpdateNeeded() always returns true after construction.
-  EXPECT_TRUE(render_media_client_->IsKeySystemsUpdateNeeded());
-
-  std::vector<std::unique_ptr<media::KeySystemProperties>>
-      key_systems_properties;
-  render_media_client_->AddSupportedKeySystems(&key_systems_properties);
-
-  // No update needed immediately after AddSupportedKeySystems() call.
-  EXPECT_FALSE(render_media_client_->IsKeySystemsUpdateNeeded());
-
-#if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
-  // Widevine not supported because extra key system isn't enabled.
-  EXPECT_FALSE(ContainsWidevine(key_systems_properties));
-
-  // This is timing related. The update interval for Widevine is 1000 ms.
-  EXPECT_FALSE(render_media_client_->IsKeySystemsUpdateNeeded());
-  tick_clock->Advance(base::TimeDelta::FromMilliseconds(990));
-  EXPECT_FALSE(render_media_client_->IsKeySystemsUpdateNeeded());
-  tick_clock->Advance(base::TimeDelta::FromMilliseconds(10));
-  EXPECT_TRUE(render_media_client_->IsKeySystemsUpdateNeeded());
-
-  EnableExtraKeySystem();
-
-  key_systems_properties.clear();
-  render_media_client_->AddSupportedKeySystems(&key_systems_properties);
-  EXPECT_TRUE(ContainsWidevine(key_systems_properties));
-
-  EXPECT_FALSE(render_media_client_->IsKeySystemsUpdateNeeded());
-  tick_clock->Advance(base::TimeDelta::FromMilliseconds(1000));
-  EXPECT_FALSE(render_media_client_->IsKeySystemsUpdateNeeded());
-  tick_clock->Advance(base::TimeDelta::FromMilliseconds(1000));
-  EXPECT_FALSE(render_media_client_->IsKeySystemsUpdateNeeded());
-#endif
-}
-
-}  // namespace content
diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
index a3176ee..398cfbe 100644
--- a/content/renderer/media/webmediaplayer_ms.cc
+++ b/content/renderer/media/webmediaplayer_ms.cc
@@ -248,7 +248,8 @@
   if (frame) {
     // Report UMA and RAPPOR metrics.
     GURL url = source.isURL() ? GURL(source.getAsURL()) : GURL();
-    media::ReportMetrics(load_type, url, frame_->getSecurityOrigin());
+    media::ReportMetrics(load_type, url, frame_->getSecurityOrigin(),
+                         media_log_);
 
     audio_renderer_ = renderer_factory_->GetAudioRenderer(
         web_stream, frame->GetRoutingID(), initial_audio_output_device_id_,
diff --git a/content/renderer/media/webrtc/media_stream_video_webrtc_sink_unittest.cc b/content/renderer/media/webrtc/media_stream_video_webrtc_sink_unittest.cc
index a5a9874..9f2d82a 100644
--- a/content/renderer/media/webrtc/media_stream_video_webrtc_sink_unittest.cc
+++ b/content/renderer/media/webrtc/media_stream_video_webrtc_sink_unittest.cc
@@ -18,7 +18,10 @@
 
 class MediaStreamVideoWebRtcSinkTest : public ::testing::Test {
  public:
-  MediaStreamVideoWebRtcSinkTest() {}
+  MediaStreamVideoWebRtcSinkTest() {
+    scoped_feature_list_.InitAndDisableFeature(
+        features::kMediaStreamOldVideoConstraints);
+  }
 
   void SetVideoTrack() {
     registry_.Init("stream URL");
@@ -61,14 +64,78 @@
   // and Sources in |registry_| into believing they are on the right threads.
   base::MessageLoopForUI message_loop_;
   const ChildProcess child_process_;
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
+TEST_F(MediaStreamVideoWebRtcSinkTest, NoiseReductionDefaultsToNotSet) {
+  SetVideoTrack();
+  MediaStreamVideoWebRtcSink my_sink(track_, &dependency_factory_);
+  EXPECT_TRUE(my_sink.webrtc_video_track());
+  EXPECT_FALSE(my_sink.SourceNeedsDenoisingForTesting());
+}
+
 // TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoWebRtcSinkTest,
-       NoiseReductionDefaultsToNotSetOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoWebRtcSinkTest, NoiseReductionConstraintPassThrough) {
+  SetVideoTrack(base::Optional<bool>(true));
+  MediaStreamVideoWebRtcSink my_sink(track_, &dependency_factory_);
+  EXPECT_TRUE(my_sink.SourceNeedsDenoisingForTesting());
+  EXPECT_TRUE(*(my_sink.SourceNeedsDenoisingForTesting()));
+}
+
+// TODO(guidou): Remove this test. http://crbug.com/706408
+class MediaStreamVideoWebRtcSinkOldConstraintsTest : public ::testing::Test {
+ public:
+  MediaStreamVideoWebRtcSinkOldConstraintsTest() {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kMediaStreamOldVideoConstraints);
+  }
+
+  void SetVideoTrack() {
+    registry_.Init("stream URL");
+    registry_.AddVideoTrack("test video track");
+    blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+    registry_.test_stream().videoTracks(video_tracks);
+    track_ = video_tracks[0];
+    // TODO(hta): Verify that track_ is valid. When constraints produce
+    // no valid format, using the track will cause a crash.
+  }
+
+  void SetVideoTrack(blink::WebMediaConstraints constraints) {
+    registry_.Init("stream URL");
+    registry_.AddVideoTrack("test video track", constraints);
+    blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+    registry_.test_stream().videoTracks(video_tracks);
+    track_ = video_tracks[0];
+    // TODO(hta): Verify that track_ is valid. When constraints produce
+    // no valid format, using the track will cause a crash.
+  }
+
+  void SetVideoTrack(const base::Optional<bool>& noise_reduction) {
+    registry_.Init("stream URL");
+    registry_.AddVideoTrack("test video track", VideoTrackAdapterSettings(),
+                            noise_reduction, false, 0.0);
+    blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+    registry_.test_stream().videoTracks(video_tracks);
+    track_ = video_tracks[0];
+    // TODO(hta): Verify that track_ is valid. When constraints produce
+    // no valid format, using the track will cause a crash.
+  }
+
+ protected:
+  blink::WebMediaStreamTrack track_;
+  MockPeerConnectionDependencyFactory dependency_factory_;
+
+ private:
+  MockMediaStreamRegistry registry_;
+  // A ChildProcess and a MessageLoopForUI are both needed to fool the Tracks
+  // and Sources in |registry_| into believing they are on the right threads.
+  base::MessageLoopForUI message_loop_;
+  const ChildProcess child_process_;
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(MediaStreamVideoWebRtcSinkOldConstraintsTest,
+       NoiseReductionDefaultsToNotSet) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
   SetVideoTrack(constraints);
@@ -77,23 +144,8 @@
   EXPECT_FALSE(my_sink.SourceNeedsDenoisingForTesting());
 }
 
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoWebRtcSinkTest, NoiseReductionDefaultsToNotSet) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  SetVideoTrack();
-  MediaStreamVideoWebRtcSink my_sink(track_, &dependency_factory_);
-  EXPECT_TRUE(my_sink.webrtc_video_track());
-  EXPECT_FALSE(my_sink.SourceNeedsDenoisingForTesting());
-}
-
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoWebRtcSinkTest,
-       NoiseReductionConstraintPassThroughOldConstraints) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kMediaStreamOldVideoConstraints);
+TEST_F(MediaStreamVideoWebRtcSinkOldConstraintsTest,
+       NoiseReductionConstraintPassThrough) {
   MockConstraintFactory factory;
   factory.basic().googNoiseReduction.setExact(true);
   SetVideoTrack(factory.CreateWebMediaConstraints());
@@ -102,16 +154,5 @@
   EXPECT_TRUE(*(my_sink.SourceNeedsDenoisingForTesting()));
 }
 
-// TODO(guidou): Remove this test. http://crbug.com/706408
-TEST_F(MediaStreamVideoWebRtcSinkTest, NoiseReductionConstraintPassThrough) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndDisableFeature(
-      features::kMediaStreamOldVideoConstraints);
-  SetVideoTrack(base::Optional<bool>(true));
-  MediaStreamVideoWebRtcSink my_sink(track_, &dependency_factory_);
-  EXPECT_TRUE(my_sink.SourceNeedsDenoisingForTesting());
-  EXPECT_TRUE(*(my_sink.SourceNeedsDenoisingForTesting()));
-}
-
 }  // namespace
 }  // namespace content
diff --git a/content/renderer/media_recorder/h264_encoder.cc b/content/renderer/media_recorder/h264_encoder.cc
new file mode 100644
index 0000000..e1fb9f84
--- /dev/null
+++ b/content/renderer/media_recorder/h264_encoder.cc
@@ -0,0 +1,179 @@
+// 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 "content/renderer/media_recorder/h264_encoder.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/threading/thread.h"
+#include "base/trace_event/trace_event.h"
+#include "media/base/video_frame.h"
+#include "third_party/openh264/src/codec/api/svc/codec_app_def.h"
+#include "third_party/openh264/src/codec/api/svc/codec_def.h"
+#include "ui/gfx/geometry/size.h"
+
+using media::VideoFrame;
+
+namespace content {
+
+void H264Encoder::ISVCEncoderDeleter::operator()(ISVCEncoder* codec) {
+  if (!codec)
+    return;
+  const int uninit_ret = codec->Uninitialize();
+  CHECK_EQ(cmResultSuccess, uninit_ret);
+  WelsDestroySVCEncoder(codec);
+}
+
+// static
+void H264Encoder::ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
+                                  ScopedISVCEncoderPtr encoder) {
+  DCHECK(encoding_thread->IsRunning());
+  encoding_thread->Stop();
+  // Both |encoding_thread| and |encoder| will be destroyed at end-of-scope.
+}
+
+H264Encoder::H264Encoder(
+    const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+    int32_t bits_per_second)
+    : Encoder(on_encoded_video_callback, bits_per_second) {
+  DCHECK(encoding_thread_->IsRunning());
+}
+
+H264Encoder::~H264Encoder() {
+  main_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&H264Encoder::ShutdownEncoder, base::Passed(&encoding_thread_),
+                 base::Passed(&openh264_encoder_)));
+}
+
+void H264Encoder::EncodeOnEncodingTaskRunner(
+    scoped_refptr<VideoFrame> frame,
+    base::TimeTicks capture_timestamp) {
+  TRACE_EVENT0("video", "H264Encoder::EncodeOnEncodingTaskRunner");
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+
+  const gfx::Size frame_size = frame->visible_rect().size();
+  if (!openh264_encoder_ || configured_size_ != frame_size) {
+    ConfigureEncoderOnEncodingTaskRunner(frame_size);
+    first_frame_timestamp_ = capture_timestamp;
+  }
+
+  SSourcePicture picture = {};
+  picture.iPicWidth = frame_size.width();
+  picture.iPicHeight = frame_size.height();
+  picture.iColorFormat = EVideoFormatType::videoFormatI420;
+  picture.uiTimeStamp =
+      (capture_timestamp - first_frame_timestamp_).InMilliseconds();
+  picture.iStride[0] = frame->stride(VideoFrame::kYPlane);
+  picture.iStride[1] = frame->stride(VideoFrame::kUPlane);
+  picture.iStride[2] = frame->stride(VideoFrame::kVPlane);
+  picture.pData[0] = frame->visible_data(VideoFrame::kYPlane);
+  picture.pData[1] = frame->visible_data(VideoFrame::kUPlane);
+  picture.pData[2] = frame->visible_data(VideoFrame::kVPlane);
+
+  SFrameBSInfo info = {};
+  if (openh264_encoder_->EncodeFrame(&picture, &info) != cmResultSuccess) {
+    NOTREACHED() << "OpenH264 encoding failed";
+    return;
+  }
+  const media::WebmMuxer::VideoParameters video_params(frame);
+  frame = nullptr;
+
+  std::unique_ptr<std::string> data(new std::string);
+  const uint8_t kNALStartCode[4] = {0, 0, 0, 1};
+  for (int layer = 0; layer < info.iLayerNum; ++layer) {
+    const SLayerBSInfo& layerInfo = info.sLayerInfo[layer];
+    // Iterate NAL units making up this layer, noting fragments.
+    size_t layer_len = 0;
+    for (int nal = 0; nal < layerInfo.iNalCount; ++nal) {
+      // The following DCHECKs make sure that the header of each NAL unit is OK.
+      DCHECK_GE(layerInfo.pNalLengthInByte[nal], 4);
+      DCHECK_EQ(kNALStartCode[0], layerInfo.pBsBuf[layer_len + 0]);
+      DCHECK_EQ(kNALStartCode[1], layerInfo.pBsBuf[layer_len + 1]);
+      DCHECK_EQ(kNALStartCode[2], layerInfo.pBsBuf[layer_len + 2]);
+      DCHECK_EQ(kNALStartCode[3], layerInfo.pBsBuf[layer_len + 3]);
+
+      layer_len += layerInfo.pNalLengthInByte[nal];
+    }
+    // Copy the entire layer's data (including NAL start codes).
+    data->append(reinterpret_cast<char*>(layerInfo.pBsBuf), layer_len);
+  }
+
+  const bool is_key_frame = info.eFrameType == videoFrameTypeIDR;
+  origin_task_runner_->PostTask(
+      FROM_HERE, base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_,
+                            video_params, base::Passed(&data), nullptr,
+                            capture_timestamp, is_key_frame));
+}
+
+void H264Encoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) {
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+  ISVCEncoder* temp_encoder = nullptr;
+  if (WelsCreateSVCEncoder(&temp_encoder) != 0) {
+    NOTREACHED() << "Failed to create OpenH264 encoder";
+    return;
+  }
+  openh264_encoder_.reset(temp_encoder);
+  configured_size_ = size;
+
+#if DCHECK_IS_ON()
+  int trace_level = WELS_LOG_INFO;
+  openh264_encoder_->SetOption(ENCODER_OPTION_TRACE_LEVEL, &trace_level);
+#endif
+
+  SEncParamExt init_params;
+  openh264_encoder_->GetDefaultParams(&init_params);
+  init_params.iUsageType = CAMERA_VIDEO_REAL_TIME;
+
+  DCHECK_EQ(AUTO_REF_PIC_COUNT, init_params.iNumRefFrame);
+  DCHECK(!init_params.bSimulcastAVC);
+
+  init_params.uiIntraPeriod = 100;  // Same as for VpxEncoder.
+  init_params.iPicWidth = size.width();
+  init_params.iPicHeight = size.height();
+
+  DCHECK_EQ(RC_QUALITY_MODE, init_params.iRCMode);
+  DCHECK_EQ(0, init_params.iPaddingFlag);
+  DCHECK_EQ(UNSPECIFIED_BIT_RATE, init_params.iTargetBitrate);
+  DCHECK_EQ(UNSPECIFIED_BIT_RATE, init_params.iMaxBitrate);
+  if (bits_per_second_ > 0) {
+    init_params.iRCMode = RC_BITRATE_MODE;
+    init_params.iTargetBitrate = bits_per_second_;
+  } else {
+    init_params.iRCMode = RC_OFF_MODE;
+  }
+
+  // Threading model: Set to 1 due to https://crbug.com/583348.
+  init_params.iMultipleThreadIdc = 1;
+
+  // TODO(mcasas): consider reducing complexity if there are few CPUs available.
+  init_params.iComplexityMode = MEDIUM_COMPLEXITY;
+  DCHECK(!init_params.bEnableDenoise);
+  DCHECK(init_params.bEnableFrameSkip);
+
+  // The base spatial layer 0 is the only one we use.
+  DCHECK_EQ(1, init_params.iSpatialLayerNum);
+  init_params.sSpatialLayers[0].iVideoWidth = init_params.iPicWidth;
+  init_params.sSpatialLayers[0].iVideoHeight = init_params.iPicHeight;
+  init_params.sSpatialLayers[0].iSpatialBitrate = init_params.iTargetBitrate;
+
+  // When uiSliceMode = SM_FIXEDSLCNUM_SLICE, uiSliceNum = 0 means auto design
+  // it with cpu core number.
+  // TODO(sprang): Set to 0 when we understand why the rate controller borks
+  // when uiSliceNum > 1. See https://github.com/cisco/openh264/issues/2591
+  init_params.sSpatialLayers[0].sSliceArgument.uiSliceNum = 1;
+  init_params.sSpatialLayers[0].sSliceArgument.uiSliceMode =
+      SM_FIXEDSLCNUM_SLICE;
+
+  if (openh264_encoder_->InitializeExt(&init_params) != cmResultSuccess) {
+    NOTREACHED() << "Failed to initialize OpenH264 encoder";
+    return;
+  }
+
+  int pixel_format = EVideoFormatType::videoFormatI420;
+  openh264_encoder_->SetOption(ENCODER_OPTION_DATAFORMAT, &pixel_format);
+}
+
+}  // namespace content
diff --git a/content/renderer/media_recorder/h264_encoder.h b/content/renderer/media_recorder/h264_encoder.h
new file mode 100644
index 0000000..adcdf72b
--- /dev/null
+++ b/content/renderer/media_recorder/h264_encoder.h
@@ -0,0 +1,58 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_RECORDER_H264_ENCODER_H_
+#define CONTENT_RENDERER_MEDIA_RECORDER_H264_ENCODER_H_
+
+#include "content/public/common/features.h"
+
+#if !BUILDFLAG(RTC_USE_H264)
+#error RTC_USE_H264 should be defined.
+#endif  // #if BUILDFLAG(RTC_USE_H264)
+
+#include "base/time/time.h"
+#include "content/renderer/media_recorder/video_track_recorder.h"
+#include "third_party/openh264/src/codec/api/svc/codec_api.h"
+
+namespace content {
+
+// Class encapsulating all openh264 interactions for H264 encoding.
+class H264Encoder final : public VideoTrackRecorder::Encoder {
+ public:
+  struct ISVCEncoderDeleter {
+    void operator()(ISVCEncoder* codec);
+  };
+  typedef std::unique_ptr<ISVCEncoder, ISVCEncoderDeleter> ScopedISVCEncoderPtr;
+
+  static void ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
+                              ScopedISVCEncoderPtr encoder);
+
+  H264Encoder(
+      const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+      int32_t bits_per_second);
+
+ private:
+  // VideoTrackRecorder::Encoder implementation.
+  ~H264Encoder() override;
+  void EncodeOnEncodingTaskRunner(scoped_refptr<media::VideoFrame> frame,
+                                  base::TimeTicks capture_timestamp) override;
+
+  void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size);
+
+  // |openh264_encoder_| is a special scoped pointer to guarantee proper
+  // destruction, also when reconfiguring due to parameters change. Only used on
+  // VideoTrackRecorder::Encoder::encoding_thread_.
+  gfx::Size configured_size_;
+  ScopedISVCEncoderPtr openh264_encoder_;
+
+  // The |VideoFrame::timestamp()| of the first received frame. Only used on
+  // VideoTrackRecorder::Encoder::encoding_thread_.
+  base::TimeTicks first_frame_timestamp_;
+
+  DISALLOW_COPY_AND_ASSIGN(H264Encoder);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MEDIA_RECORDER_H264_ENCODER_H_
diff --git a/content/renderer/media_recorder/vea_encoder.cc b/content/renderer/media_recorder/vea_encoder.cc
new file mode 100644
index 0000000..6bff812
--- /dev/null
+++ b/content/renderer/media_recorder/vea_encoder.cc
@@ -0,0 +1,247 @@
+// 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 "content/renderer/media_recorder/vea_encoder.h"
+
+#include <string>
+
+#include "content/renderer/media/renderer_gpu_video_accelerator_factories.h"
+#include "content/renderer/render_thread_impl.h"
+#include "media/base/bind_to_current_loop.h"
+#include "media/base/video_frame.h"
+#include "third_party/libyuv/include/libyuv.h"
+#include "ui/gfx/geometry/size.h"
+
+using media::VideoFrame;
+using video_track_recorder::kVEAEncoderMinResolutionWidth;
+using video_track_recorder::kVEAEncoderMinResolutionHeight;
+
+namespace content {
+
+namespace {
+
+// HW encoders expect a nonzero bitrate, so |kVEADefaultBitratePerPixel| is used
+// to estimate bits per second for ~30 fps with ~1/16 compression rate.
+const int kVEADefaultBitratePerPixel = 2;
+// Number of output buffers used to copy the encoded data coming from HW
+// encoders.
+const int kVEAEncoderOutputBufferCount = 4;
+
+}  // anonymous namespace
+
+VEAEncoder::VEAEncoder(
+    const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+    const VideoTrackRecorder::OnErrorCB& on_error_callback,
+    int32_t bits_per_second,
+    media::VideoCodecProfile codec,
+    const gfx::Size& size)
+    : Encoder(on_encoded_video_callback,
+              bits_per_second > 0 ? bits_per_second
+                                  : size.GetArea() * kVEADefaultBitratePerPixel,
+              RenderThreadImpl::current()->GetGpuFactories()->GetTaskRunner()),
+      gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()),
+      codec_(codec),
+      error_notified_(false),
+      on_error_callback_(on_error_callback) {
+  DCHECK(gpu_factories_);
+  DCHECK_GE(size.width(), kVEAEncoderMinResolutionWidth);
+  DCHECK_GE(size.height(), kVEAEncoderMinResolutionHeight);
+
+  encoding_task_runner_->PostTask(
+      FROM_HERE, base::Bind(&VEAEncoder::ConfigureEncoderOnEncodingTaskRunner,
+                            this, size));
+}
+
+VEAEncoder::~VEAEncoder() {
+  base::WaitableEvent release_waiter(
+      base::WaitableEvent::ResetPolicy::MANUAL,
+      base::WaitableEvent::InitialState::NOT_SIGNALED);
+  // base::Unretained is safe because the class will be alive until
+  // |release_waiter| is signaled.
+  // TODO(emircan): Consider refactoring media::VideoEncodeAccelerator to avoid
+  // using naked pointers and using DeleteSoon() here, see
+  // http://crbug.com/701627.
+  // It is currently unsafe because |video_encoder_| might be in use on another
+  // function on |encoding_task_runner_|, see http://crbug.com/701030.
+  encoding_task_runner_->PostTask(
+      FROM_HERE, base::Bind(&VEAEncoder::DestroyOnEncodingTaskRunner,
+                            base::Unretained(this), &release_waiter));
+  release_waiter.Wait();
+}
+
+void VEAEncoder::RequireBitstreamBuffers(unsigned int /*input_count*/,
+                                         const gfx::Size& input_coded_size,
+                                         size_t output_buffer_size) {
+  DVLOG(3) << __func__;
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+
+  vea_requested_input_coded_size_ = input_coded_size;
+  output_buffers_.clear();
+  std::queue<std::unique_ptr<base::SharedMemory>>().swap(input_buffers_);
+
+  for (int i = 0; i < kVEAEncoderOutputBufferCount; ++i) {
+    std::unique_ptr<base::SharedMemory> shm =
+        gpu_factories_->CreateSharedMemory(output_buffer_size);
+    if (shm)
+      output_buffers_.push_back(base::WrapUnique(shm.release()));
+  }
+
+  for (size_t i = 0; i < output_buffers_.size(); ++i)
+    UseOutputBitstreamBufferId(i);
+}
+
+void VEAEncoder::BitstreamBufferReady(int32_t bitstream_buffer_id,
+                                      size_t payload_size,
+                                      bool keyframe,
+                                      base::TimeDelta timestamp) {
+  DVLOG(3) << __func__;
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+
+  base::SharedMemory* output_buffer =
+      output_buffers_[bitstream_buffer_id].get();
+
+  std::unique_ptr<std::string> data(new std::string);
+  data->append(reinterpret_cast<char*>(output_buffer->memory()), payload_size);
+
+  const auto front_frame = frames_in_encode_.front();
+  frames_in_encode_.pop();
+  origin_task_runner_->PostTask(
+      FROM_HERE, base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_,
+                            front_frame.first, base::Passed(&data), nullptr,
+                            front_frame.second, keyframe));
+  UseOutputBitstreamBufferId(bitstream_buffer_id);
+}
+
+void VEAEncoder::NotifyError(media::VideoEncodeAccelerator::Error error) {
+  DVLOG(3) << __func__;
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+  on_error_callback_.Run();
+  error_notified_ = true;
+}
+
+void VEAEncoder::UseOutputBitstreamBufferId(int32_t bitstream_buffer_id) {
+  DVLOG(3) << __func__;
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+
+  video_encoder_->UseOutputBitstreamBuffer(media::BitstreamBuffer(
+      bitstream_buffer_id, output_buffers_[bitstream_buffer_id]->handle(),
+      output_buffers_[bitstream_buffer_id]->mapped_size()));
+}
+
+void VEAEncoder::FrameFinished(std::unique_ptr<base::SharedMemory> shm) {
+  DVLOG(3) << __func__;
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+  input_buffers_.push(std::move(shm));
+}
+
+void VEAEncoder::EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame,
+                                            base::TimeTicks capture_timestamp) {
+  DVLOG(3) << __func__;
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+
+  if (input_visible_size_ != frame->visible_rect().size() && video_encoder_)
+    video_encoder_.reset();
+
+  if (!video_encoder_)
+    ConfigureEncoderOnEncodingTaskRunner(frame->visible_rect().size());
+
+  if (error_notified_) {
+    DVLOG(3) << "An error occurred in VEA encoder";
+    return;
+  }
+
+  // Drop frames if there is no output buffers available.
+  if (output_buffers_.empty()) {
+    // TODO(emircan): Investigate if resetting encoder would help.
+    DVLOG(3) << "Might drop frame.";
+    last_frame_.reset(new std::pair<scoped_refptr<VideoFrame>, base::TimeTicks>(
+        frame, capture_timestamp));
+    return;
+  }
+
+  // If first frame hasn't been encoded, do it first.
+  if (last_frame_) {
+    std::unique_ptr<VideoFrameAndTimestamp> last_frame(last_frame_.release());
+    EncodeOnEncodingTaskRunner(last_frame->first, last_frame->second);
+  }
+
+  // Lower resolutions may fall back to SW encoder in some platforms, i.e. Mac.
+  // In that case, the encoder expects more frames before returning result.
+  // Therefore, a copy is necessary to release the current frame.
+  // Only STORAGE_SHMEM backed frames can be shared with GPU process, therefore
+  // a copy is required for other storage types.
+  scoped_refptr<media::VideoFrame> video_frame = frame;
+  if (video_frame->storage_type() != VideoFrame::STORAGE_SHMEM ||
+      vea_requested_input_coded_size_ != frame->coded_size() ||
+      input_visible_size_.width() < kVEAEncoderMinResolutionWidth ||
+      input_visible_size_.height() < kVEAEncoderMinResolutionHeight) {
+    // Create SharedMemory backed input buffers as necessary. These SharedMemory
+    // instances will be shared with GPU process.
+    std::unique_ptr<base::SharedMemory> input_buffer;
+    const size_t desired_mapped_size = media::VideoFrame::AllocationSize(
+        media::PIXEL_FORMAT_I420, vea_requested_input_coded_size_);
+    if (input_buffers_.empty()) {
+      input_buffer = gpu_factories_->CreateSharedMemory(desired_mapped_size);
+    } else {
+      do {
+        input_buffer = std::move(input_buffers_.front());
+        input_buffers_.pop();
+      } while (!input_buffers_.empty() &&
+               input_buffer->mapped_size() < desired_mapped_size);
+      if (!input_buffer || input_buffer->mapped_size() < desired_mapped_size)
+        return;
+    }
+
+    video_frame = media::VideoFrame::WrapExternalSharedMemory(
+        media::PIXEL_FORMAT_I420, vea_requested_input_coded_size_,
+        gfx::Rect(input_visible_size_), input_visible_size_,
+        reinterpret_cast<uint8_t*>(input_buffer->memory()),
+        input_buffer->mapped_size(), input_buffer->handle(), 0,
+        frame->timestamp());
+    video_frame->AddDestructionObserver(media::BindToCurrentLoop(
+        base::Bind(&VEAEncoder::FrameFinished, this,
+                   base::Passed(std::move(input_buffer)))));
+    libyuv::I420Copy(frame->visible_data(media::VideoFrame::kYPlane),
+                     frame->stride(media::VideoFrame::kYPlane),
+                     frame->visible_data(media::VideoFrame::kUPlane),
+                     frame->stride(media::VideoFrame::kUPlane),
+                     frame->visible_data(media::VideoFrame::kVPlane),
+                     frame->stride(media::VideoFrame::kVPlane),
+                     video_frame->visible_data(media::VideoFrame::kYPlane),
+                     video_frame->stride(media::VideoFrame::kYPlane),
+                     video_frame->visible_data(media::VideoFrame::kUPlane),
+                     video_frame->stride(media::VideoFrame::kUPlane),
+                     video_frame->visible_data(media::VideoFrame::kVPlane),
+                     video_frame->stride(media::VideoFrame::kVPlane),
+                     input_visible_size_.width(), input_visible_size_.height());
+  }
+  frames_in_encode_.push(std::make_pair(
+      media::WebmMuxer::VideoParameters(frame), capture_timestamp));
+
+  video_encoder_->Encode(video_frame, false);
+}
+
+void VEAEncoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) {
+  DVLOG(3) << __func__;
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+  DCHECK(gpu_factories_->GetTaskRunner()->BelongsToCurrentThread());
+  DCHECK_GT(bits_per_second_, 0);
+
+  input_visible_size_ = size;
+  video_encoder_ = gpu_factories_->CreateVideoEncodeAccelerator();
+  if (!video_encoder_ ||
+      !video_encoder_->Initialize(media::PIXEL_FORMAT_I420, input_visible_size_,
+                                  codec_, bits_per_second_, this)) {
+    NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
+  }
+}
+
+void VEAEncoder::DestroyOnEncodingTaskRunner(
+    base::WaitableEvent* async_waiter) {
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+  video_encoder_.reset();
+  async_waiter->Signal();
+}
+
+}  // namespace content
diff --git a/content/renderer/media_recorder/vea_encoder.h b/content/renderer/media_recorder/vea_encoder.h
new file mode 100644
index 0000000..3f27f56
--- /dev/null
+++ b/content/renderer/media_recorder/vea_encoder.h
@@ -0,0 +1,99 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_RECORDER_VEA_ENCODER_H_
+#define CONTENT_RENDERER_MEDIA_RECORDER_VEA_ENCODER_H_
+
+#include <queue>
+
+#include "content/renderer/media_recorder/video_track_recorder.h"
+#include "media/video/video_encode_accelerator.h"
+#include "ui/gfx/geometry/size.h"
+
+namespace base {
+class WaitableEvent;
+}  // namespace base
+
+namespace media {
+class GpuVideoAcceleratorFactories;
+}  // namespace media
+
+namespace content {
+
+// Class encapsulating VideoEncodeAccelerator interactions.
+// This class is created and destroyed on its owner thread. All other methods
+// operate on the task runner pointed by GpuFactories.
+class VEAEncoder final : public VideoTrackRecorder::Encoder,
+                         public media::VideoEncodeAccelerator::Client {
+ public:
+  VEAEncoder(
+      const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+      const VideoTrackRecorder::OnErrorCB& on_error_callback,
+      int32_t bits_per_second,
+      media::VideoCodecProfile codec,
+      const gfx::Size& size);
+
+  // media::VideoEncodeAccelerator::Client implementation.
+  void RequireBitstreamBuffers(unsigned int input_count,
+                               const gfx::Size& input_coded_size,
+                               size_t output_buffer_size) override;
+  void BitstreamBufferReady(int32_t bitstream_buffer_id,
+                            size_t payload_size,
+                            bool key_frame,
+                            base::TimeDelta timestamp) override;
+  void NotifyError(media::VideoEncodeAccelerator::Error error) override;
+
+ private:
+  using VideoFrameAndTimestamp =
+      std::pair<scoped_refptr<media::VideoFrame>, base::TimeTicks>;
+  using VideoParamsAndTimestamp =
+      std::pair<media::WebmMuxer::VideoParameters, base::TimeTicks>;
+
+  void UseOutputBitstreamBufferId(int32_t bitstream_buffer_id);
+  void FrameFinished(std::unique_ptr<base::SharedMemory> shm);
+
+  // VideoTrackRecorder::Encoder implementation.
+  ~VEAEncoder() override;
+  void EncodeOnEncodingTaskRunner(scoped_refptr<media::VideoFrame> frame,
+                                  base::TimeTicks capture_timestamp) override;
+
+  void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size);
+
+  void DestroyOnEncodingTaskRunner(base::WaitableEvent* async_waiter);
+
+  media::GpuVideoAcceleratorFactories* const gpu_factories_;
+
+  const media::VideoCodecProfile codec_;
+
+  // The underlying VEA to perform encoding on.
+  std::unique_ptr<media::VideoEncodeAccelerator> video_encoder_;
+
+  // Shared memory buffers for output with the VEA.
+  std::vector<std::unique_ptr<base::SharedMemory>> output_buffers_;
+
+  // Shared memory buffers for output with the VEA as FIFO.
+  std::queue<std::unique_ptr<base::SharedMemory>> input_buffers_;
+
+  // Tracks error status.
+  bool error_notified_;
+
+  // Tracks the last frame that we delay the encode.
+  std::unique_ptr<VideoFrameAndTimestamp> last_frame_;
+
+  // Size used to initialize encoder.
+  gfx::Size input_visible_size_;
+
+  // Coded size that encoder requests as input.
+  gfx::Size vea_requested_input_coded_size_;
+
+  // Frames and corresponding timestamps in encode as FIFO.
+  std::queue<VideoParamsAndTimestamp> frames_in_encode_;
+
+  // This callback can be exercised on any thread.
+  const VideoTrackRecorder::OnErrorCB on_error_callback_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MEDIA_RECORDER_VEA_ENCODER_H_
diff --git a/content/renderer/media_recorder/video_track_recorder.cc b/content/renderer/media_recorder/video_track_recorder.cc
index bc6b59e5..6bb0e8c7 100644
--- a/content/renderer/media_recorder/video_track_recorder.cc
+++ b/content/renderer/media_recorder/video_track_recorder.cc
@@ -10,14 +10,14 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
-#include "base/sys_info.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
-#include "base/trace_event/trace_event.h"
 #include "cc/paint/skia_paint_canvas.h"
 #include "content/renderer/media/renderer_gpu_video_accelerator_factories.h"
+#include "content/renderer/media_recorder/vea_encoder.h"
+#include "content/renderer/media_recorder/vpx_encoder.h"
 #include "content/renderer/render_thread_impl.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/video_frame.h"
@@ -30,21 +30,10 @@
 #include "ui/gfx/geometry/size.h"
 
 #if BUILDFLAG(RTC_USE_H264)
-#include "third_party/openh264/src/codec/api/svc/codec_api.h"
-#include "third_party/openh264/src/codec/api/svc/codec_app_def.h"
-#include "third_party/openh264/src/codec/api/svc/codec_def.h"
+#include "content/renderer/media_recorder/h264_encoder.h"
 #endif  // #if BUILDFLAG(RTC_USE_H264)
 
-extern "C" {
-// VPX_CODEC_DISABLE_COMPAT excludes parts of the libvpx API that provide
-// backwards compatibility for legacy applications using the library.
-#define VPX_CODEC_DISABLE_COMPAT 1
-#include "third_party/libvpx/source/libvpx/vpx/vp8cx.h"
-#include "third_party/libvpx/source/libvpx/vpx/vpx_encoder.h"
-}
-
 using media::VideoFrame;
-using media::VideoFrameMetadata;
 using video_track_recorder::kVEAEncoderMinResolutionWidth;
 using video_track_recorder::kVEAEncoderMinResolutionHeight;
 
@@ -52,13 +41,6 @@
 
 namespace {
 
-// HW encoders expect a nonzero bitrate, so |kVEADefaultBitratePerPixel| is used
-// to estimate bits per second for ~30 fps with ~1/16 compression rate.
-const int kVEADefaultBitratePerPixel = 2;
-// Number of output buffers used to copy the encoded data coming from HW
-// encoders.
-const int kVEAEncoderOutputBufferCount = 4;
-
 using CodecId = VideoTrackRecorder::CodecId;
 
 static const struct {
@@ -160,92 +142,26 @@
 
 }  // anonymous namespace
 
-// Base class to describe a generic Encoder, encapsulating all actual encoder
-// (re)configurations, encoding and delivery of received frames. This class is
-// ref-counted to allow the MediaStreamVideoTrack to hold a reference to it (via
-// the callback that MediaStreamVideoSink passes along) and to jump back and
-// forth to an internal encoder thread. Moreover, this class:
-// - is created on its parent's thread (usually the main Render thread),
-// that is, |main_task_runner_|.
-// - receives VideoFrames on |origin_task_runner_| and runs OnEncodedVideoCB on
-// that thread as well. This task runner is cached on first frame arrival, and
-// is supposed to be the render IO thread (but this is not enforced);
-// - uses an internal |encoding_task_runner_| for actual encoder interactions,
-// namely configuration, encoding (which might take some time) and destruction.
-// This task runner can be passed on the creation. If nothing is passed, a new
-// encoding thread is created and used.
-class VideoTrackRecorder::Encoder : public base::RefCountedThreadSafe<Encoder> {
- public:
-  Encoder(const OnEncodedVideoCB& on_encoded_video_callback,
-          int32_t bits_per_second,
-          scoped_refptr<base::SingleThreadTaskRunner> encoding_task_runner =
-              nullptr)
-      : main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
-        encoding_task_runner_(encoding_task_runner),
-        paused_(false),
-        on_encoded_video_callback_(on_encoded_video_callback),
-        bits_per_second_(bits_per_second) {
-    DCHECK(!on_encoded_video_callback_.is_null());
-    if (encoding_task_runner_)
-      return;
-    encoding_thread_.reset(new base::Thread("EncodingThread"));
-    encoding_thread_->Start();
-    encoding_task_runner_ = encoding_thread_->task_runner();
-  }
+VideoTrackRecorder::Encoder::Encoder(
+    const OnEncodedVideoCB& on_encoded_video_callback,
+    int32_t bits_per_second,
+    scoped_refptr<base::SingleThreadTaskRunner> encoding_task_runner)
+    : main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+      encoding_task_runner_(encoding_task_runner),
+      paused_(false),
+      on_encoded_video_callback_(on_encoded_video_callback),
+      bits_per_second_(bits_per_second) {
+  DCHECK(!on_encoded_video_callback_.is_null());
+  if (encoding_task_runner_)
+    return;
+  encoding_thread_.reset(new base::Thread("EncodingThread"));
+  encoding_thread_->Start();
+  encoding_task_runner_ = encoding_thread_->task_runner();
+}
 
-  // Start encoding |frame|, returning via |on_encoded_video_callback_|. This
-  // call will also trigger an encode configuration upon first frame arrival
-  // or parameter change, and an EncodeOnEncodingTaskRunner() to actually
-  // encode the frame. If the |frame|'s data is not directly available (e.g.
-  // it's a texture) then RetrieveFrameOnMainThread() is called, and if even
-  // that fails, black frames are sent instead.
-  void StartFrameEncode(const scoped_refptr<VideoFrame>& frame,
-                        base::TimeTicks capture_timestamp);
-  void RetrieveFrameOnMainThread(const scoped_refptr<VideoFrame>& video_frame,
-                                 base::TimeTicks capture_timestamp);
-
-  void SetPaused(bool paused);
-  virtual bool CanEncodeAlphaChannel() { return false; }
-
- protected:
-  friend class base::RefCountedThreadSafe<Encoder>;
-  virtual ~Encoder() {
-    main_task_runner_->DeleteSoon(FROM_HERE, video_renderer_.release());
-  }
-
-  virtual void EncodeOnEncodingTaskRunner(
-      scoped_refptr<VideoFrame> frame,
-      base::TimeTicks capture_timestamp) = 0;
-
-  // Used to shutdown properly on the same thread we were created.
-  const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
-
-  // Task runner where frames to encode and reply callbacks must happen.
-  scoped_refptr<base::SingleThreadTaskRunner> origin_task_runner_;
-
-  // Task runner where encoding interactions happen.
-  scoped_refptr<base::SingleThreadTaskRunner> encoding_task_runner_;
-
-  // Optional thread for encoding. Active for the lifetime of VpxEncoder.
-  std::unique_ptr<base::Thread> encoding_thread_;
-
-  // While |paused_|, frames are not encoded. Used only from |encoding_thread_|.
-  bool paused_;
-
-  // This callback should be exercised on IO thread.
-  const OnEncodedVideoCB on_encoded_video_callback_;
-
-  // Target bitrate for video encoding. If 0, a standard bitrate is used.
-  const int32_t bits_per_second_;
-
-  // Used to retrieve incoming opaque VideoFrames (i.e. VideoFrames backed by
-  // textures). Created on-demand on |main_task_runner_|.
-  std::unique_ptr<media::SkCanvasVideoRenderer> video_renderer_;
-  SkBitmap bitmap_;
-  std::unique_ptr<cc::PaintCanvas> canvas_;
-
-  DISALLOW_COPY_AND_ASSIGN(Encoder);
-};
+VideoTrackRecorder::Encoder::~Encoder() {
+  main_task_runner_->DeleteSoon(FROM_HERE, video_renderer_.release());
+}
 
 void VideoTrackRecorder::Encoder::StartFrameEncode(
     const scoped_refptr<VideoFrame>& video_frame,
@@ -361,31 +277,8 @@
                             capture_timestamp));
 }
 
-void VideoTrackRecorder::Encoder::SetPaused(bool paused) {
-  if (!encoding_task_runner_->BelongsToCurrentThread()) {
-    encoding_task_runner_->PostTask(
-        FROM_HERE, base::Bind(&Encoder::SetPaused, this, paused));
-    return;
-  }
-  paused_ = paused;
-}
-
-namespace {
-
-// Originally from remoting/codec/scoped_vpx_codec.h.
-// TODO(mcasas): Refactor into a common location.
-struct VpxCodecDeleter {
-  void operator()(vpx_codec_ctx_t* codec) {
-    if (!codec)
-      return;
-    vpx_codec_err_t ret = vpx_codec_destroy(codec);
-    CHECK_EQ(ret, VPX_CODEC_OK);
-    delete codec;
-  }
-};
-typedef std::unique_ptr<vpx_codec_ctx_t, VpxCodecDeleter> ScopedVpxCodecCtxPtr;
-
-static void OnFrameEncodeCompleted(
+// static
+void VideoTrackRecorder::Encoder::OnFrameEncodeCompleted(
     const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_cb,
     const media::WebmMuxer::VideoParameters& params,
     std::unique_ptr<std::string> data,
@@ -398,837 +291,19 @@
                           capture_timestamp, keyframe);
 }
 
-static int GetNumberOfThreadsForEncoding() {
-  // Do not saturate CPU utilization just for encoding. On a lower-end system
-  // with only 1 or 2 cores, use only one thread for encoding. On systems with
-  // more cores, allow half of the cores to be used for encoding.
-  return std::min(8, (base::SysInfo::NumberOfProcessors() + 1) / 2);
-}
-
-// Class encapsulating VideoEncodeAccelerator interactions.
-// This class is created and destroyed in its owner thread. All other methods
-// operate on the task runner pointed by GpuFactories.
-class VEAEncoder final : public VideoTrackRecorder::Encoder,
-                         public media::VideoEncodeAccelerator::Client {
- public:
-  VEAEncoder(
-      const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
-      const VideoTrackRecorder::OnErrorCB& on_error_callback,
-      int32_t bits_per_second,
-      media::VideoCodecProfile codec,
-      const gfx::Size& size);
-
-  // media::VideoEncodeAccelerator::Client implementation.
-  void RequireBitstreamBuffers(unsigned int input_count,
-                               const gfx::Size& input_coded_size,
-                               size_t output_buffer_size) override;
-  void BitstreamBufferReady(int32_t bitstream_buffer_id,
-                            size_t payload_size,
-                            bool key_frame,
-                            base::TimeDelta timestamp) override;
-  void NotifyError(media::VideoEncodeAccelerator::Error error) override;
-
- private:
-  using VideoFrameAndTimestamp =
-      std::pair<scoped_refptr<media::VideoFrame>, base::TimeTicks>;
-  using VideoParamsAndTimestamp =
-      std::pair<media::WebmMuxer::VideoParameters, base::TimeTicks>;
-
-  void UseOutputBitstreamBufferId(int32_t bitstream_buffer_id);
-  void FrameFinished(std::unique_ptr<base::SharedMemory> shm);
-
-  // VideoTrackRecorder::Encoder implementation.
-  ~VEAEncoder() override;
-  void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame,
-                                  base::TimeTicks capture_timestamp) override;
-
-  void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size);
-
-  void DestroyOnEncodingTaskRunner(base::WaitableEvent* async_waiter);
-
-  media::GpuVideoAcceleratorFactories* const gpu_factories_;
-
-  const media::VideoCodecProfile codec_;
-
-  // The underlying VEA to perform encoding on.
-  std::unique_ptr<media::VideoEncodeAccelerator> video_encoder_;
-
-  // Shared memory buffers for output with the VEA.
-  std::vector<std::unique_ptr<base::SharedMemory>> output_buffers_;
-
-  // Shared memory buffers for output with the VEA as FIFO.
-  std::queue<std::unique_ptr<base::SharedMemory>> input_buffers_;
-
-  // Tracks error status.
-  bool error_notified_;
-
-  // Tracks the last frame that we delay the encode.
-  std::unique_ptr<VideoFrameAndTimestamp> last_frame_;
-
-  // Size used to initialize encoder.
-  gfx::Size input_visible_size_;
-
-  // Coded size that encoder requests as input.
-  gfx::Size vea_requested_input_coded_size_;
-
-  // Frames and corresponding timestamps in encode as FIFO.
-  std::queue<VideoParamsAndTimestamp> frames_in_encode_;
-
-  // This callback can be exercised on any thread.
-  const VideoTrackRecorder::OnErrorCB on_error_callback_;
-};
-
-// Class encapsulating all libvpx interactions for VP8/VP9 encoding.
-class VpxEncoder final : public VideoTrackRecorder::Encoder {
- public:
-  static void ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
-                              ScopedVpxCodecCtxPtr encoder);
-
-  VpxEncoder(
-      bool use_vp9,
-      const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
-      int32_t bits_per_second);
-
- private:
-  // VideoTrackRecorder::Encoder implementation.
-  ~VpxEncoder() override;
-  void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame,
-                                  base::TimeTicks capture_timestamp) override;
-  bool CanEncodeAlphaChannel() override { return true; }
-
-  void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size,
-                                            vpx_codec_enc_cfg_t* codec_config,
-                                            ScopedVpxCodecCtxPtr* encoder);
-  void DoEncode(vpx_codec_ctx_t* const encoder,
-                const gfx::Size& frame_size,
-                uint8_t* const data,
-                uint8_t* const y_plane,
-                int y_stride,
-                uint8_t* const u_plane,
-                int u_stride,
-                uint8_t* const v_plane,
-                int v_stride,
-                const base::TimeDelta& duration,
-                bool force_keyframe,
-                std::string* const output_data,
-                bool* const keyframe);
-
-  // Returns true if |codec_config| has been filled in at least once.
-  bool IsInitialized(const vpx_codec_enc_cfg_t& codec_config) const;
-
-  // Estimate the frame duration from |frame| and |last_frame_timestamp_|.
-  base::TimeDelta EstimateFrameDuration(const scoped_refptr<VideoFrame>& frame);
-
-  // Force usage of VP9 for encoding, instead of VP8 which is the default.
-  const bool use_vp9_;
-
-  // VPx internal objects: configuration and encoder. |encoder_| is a special
-  // scoped pointer to guarantee proper destruction, particularly when
-  // reconfiguring due to parameters change. Only used on |encoding_thread_|.
-  vpx_codec_enc_cfg_t codec_config_;
-  ScopedVpxCodecCtxPtr encoder_;
-
-  vpx_codec_enc_cfg_t alpha_codec_config_;
-  ScopedVpxCodecCtxPtr alpha_encoder_;
-
-  std::vector<uint8_t> alpha_dummy_planes_;
-  size_t v_plane_offset_;
-  size_t u_plane_stride_;
-  size_t v_plane_stride_;
-  bool last_frame_had_alpha_ = false;
-
-  // The |VideoFrame::timestamp()| of the last encoded frame.  This is used to
-  // predict the duration of the next frame. Only used on |encoding_thread_|.
-  base::TimeDelta last_frame_timestamp_;
-
-  DISALLOW_COPY_AND_ASSIGN(VpxEncoder);
-};
-
-#if BUILDFLAG(RTC_USE_H264)
-
-struct ISVCEncoderDeleter {
-  void operator()(ISVCEncoder* codec) {
-    if (!codec)
-      return;
-    const int uninit_ret = codec->Uninitialize();
-    CHECK_EQ(cmResultSuccess, uninit_ret);
-    WelsDestroySVCEncoder(codec);
-  }
-};
-typedef std::unique_ptr<ISVCEncoder, ISVCEncoderDeleter> ScopedISVCEncoderPtr;
-
-// Class encapsulating all openh264 interactions for H264 encoding.
-class H264Encoder final : public VideoTrackRecorder::Encoder {
- public:
-  static void ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
-                              ScopedISVCEncoderPtr encoder);
-
-  H264Encoder(
-      const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
-      int32_t bits_per_second);
-
- private:
-  // VideoTrackRecorder::Encoder implementation.
-  ~H264Encoder() override;
-  void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame,
-                              base::TimeTicks capture_timestamp) override;
-
-  void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size);
-
-  // |openh264_encoder_| is a special scoped pointer to guarantee proper
-  // destruction, also when reconfiguring due to parameters change. Only used on
-  // |encoding_thread_|.
-  gfx::Size configured_size_;
-  ScopedISVCEncoderPtr openh264_encoder_;
-
-  // The |VideoFrame::timestamp()| of the first received frame. Only used on
-  // |encoding_thread_|.
-  base::TimeTicks first_frame_timestamp_;
-
-  DISALLOW_COPY_AND_ASSIGN(H264Encoder);
-};
-
-#endif  // #if BUILDFLAG(RTC_USE_H264)
-
-VEAEncoder::VEAEncoder(
-    const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
-    const VideoTrackRecorder::OnErrorCB& on_error_callback,
-    int32_t bits_per_second,
-    media::VideoCodecProfile codec,
-    const gfx::Size& size)
-    : Encoder(on_encoded_video_callback,
-              bits_per_second > 0 ? bits_per_second
-                                  : size.GetArea() * kVEADefaultBitratePerPixel,
-              RenderThreadImpl::current()->GetGpuFactories()->GetTaskRunner()),
-      gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()),
-      codec_(codec),
-      error_notified_(false),
-      on_error_callback_(on_error_callback) {
-  DCHECK(gpu_factories_);
-  DCHECK_GE(size.width(), kVEAEncoderMinResolutionWidth);
-  DCHECK_GE(size.height(), kVEAEncoderMinResolutionHeight);
-
-  encoding_task_runner_->PostTask(
-      FROM_HERE, base::Bind(&VEAEncoder::ConfigureEncoderOnEncodingTaskRunner,
-                            this, size));
-}
-
-VEAEncoder::~VEAEncoder() {
-  base::WaitableEvent release_waiter(
-      base::WaitableEvent::ResetPolicy::MANUAL,
-      base::WaitableEvent::InitialState::NOT_SIGNALED);
-  // base::Unretained is safe because the class will be alive until
-  // |release_waiter| is signaled.
-  // TODO(emircan): Consider refactoring media::VideoEncodeAccelerator to avoid
-  // using naked pointers and using DeleteSoon() here, see
-  // http://crbug.com/701627.
-  // It is currently unsafe because |video_encoder_| might be in use on another
-  // function on |encoding_task_runner_|, see http://crbug.com/701030.
-  encoding_task_runner_->PostTask(
-      FROM_HERE, base::Bind(&VEAEncoder::DestroyOnEncodingTaskRunner,
-                            base::Unretained(this), &release_waiter));
-  release_waiter.Wait();
-}
-
-void VEAEncoder::RequireBitstreamBuffers(unsigned int /*input_count*/,
-                                         const gfx::Size& input_coded_size,
-                                         size_t output_buffer_size) {
-  DVLOG(3) << __func__;
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
-  vea_requested_input_coded_size_ = input_coded_size;
-  output_buffers_.clear();
-  std::queue<std::unique_ptr<base::SharedMemory>>().swap(input_buffers_);
-
-  for (int i = 0; i < kVEAEncoderOutputBufferCount; ++i) {
-    std::unique_ptr<base::SharedMemory> shm =
-        gpu_factories_->CreateSharedMemory(output_buffer_size);
-    if (shm)
-      output_buffers_.push_back(base::WrapUnique(shm.release()));
-  }
-
-  for (size_t i = 0; i < output_buffers_.size(); ++i)
-    UseOutputBitstreamBufferId(i);
-}
-
-void VEAEncoder::BitstreamBufferReady(int32_t bitstream_buffer_id,
-                                      size_t payload_size,
-                                      bool keyframe,
-                                      base::TimeDelta timestamp) {
-  DVLOG(3) << __func__;
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
-  base::SharedMemory* output_buffer =
-      output_buffers_[bitstream_buffer_id].get();
-
-  std::unique_ptr<std::string> data(new std::string);
-  data->append(reinterpret_cast<char*>(output_buffer->memory()), payload_size);
-
-  const auto front_frame = frames_in_encode_.front();
-  frames_in_encode_.pop();
-  origin_task_runner_->PostTask(
-      FROM_HERE, base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_,
-                            front_frame.first, base::Passed(&data), nullptr,
-                            front_frame.second, keyframe));
-  UseOutputBitstreamBufferId(bitstream_buffer_id);
-}
-
-void VEAEncoder::NotifyError(media::VideoEncodeAccelerator::Error error) {
-  DVLOG(3) << __func__;
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-  on_error_callback_.Run();
-  error_notified_ = true;
-}
-
-void VEAEncoder::UseOutputBitstreamBufferId(int32_t bitstream_buffer_id) {
-  DVLOG(3) << __func__;
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
-  video_encoder_->UseOutputBitstreamBuffer(media::BitstreamBuffer(
-      bitstream_buffer_id, output_buffers_[bitstream_buffer_id]->handle(),
-      output_buffers_[bitstream_buffer_id]->mapped_size()));
-}
-
-void VEAEncoder::FrameFinished(std::unique_ptr<base::SharedMemory> shm) {
-  DVLOG(3) << __func__;
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-  input_buffers_.push(std::move(shm));
-}
-
-void VEAEncoder::EncodeOnEncodingTaskRunner(
-   scoped_refptr<VideoFrame> frame,
-    base::TimeTicks capture_timestamp) {
-  DVLOG(3) << __func__;
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
-  if (input_visible_size_ != frame->visible_rect().size() && video_encoder_)
-    video_encoder_.reset();
-
-  if (!video_encoder_)
-    ConfigureEncoderOnEncodingTaskRunner(frame->visible_rect().size());
-
-  if (error_notified_) {
-    DVLOG(3) << "An error occurred in VEA encoder";
+void VideoTrackRecorder::Encoder::SetPaused(bool paused) {
+  if (!encoding_task_runner_->BelongsToCurrentThread()) {
+    encoding_task_runner_->PostTask(
+        FROM_HERE, base::Bind(&Encoder::SetPaused, this, paused));
     return;
   }
-
-  // Drop frames if there is no output buffers available.
-  if (output_buffers_.empty()) {
-    // TODO(emircan): Investigate if resetting encoder would help.
-    DVLOG(3) << "Might drop frame.";
-    last_frame_.reset(
-        new std::pair<scoped_refptr<VideoFrame>, base::TimeTicks>(
-            frame, capture_timestamp));
-    return;
-  }
-
-  // If first frame hasn't been encoded, do it first.
-  if (last_frame_) {
-    std::unique_ptr<VideoFrameAndTimestamp> last_frame(last_frame_.release());
-    EncodeOnEncodingTaskRunner(last_frame->first, last_frame->second);
-  }
-
-  // Lower resolutions may fall back to SW encoder in some platforms, i.e. Mac.
-  // In that case, the encoder expects more frames before returning result.
-  // Therefore, a copy is necessary to release the current frame.
-  // Only STORAGE_SHMEM backed frames can be shared with GPU process, therefore
-  // a copy is required for other storage types.
-  scoped_refptr<media::VideoFrame> video_frame = frame;
-  if (video_frame->storage_type() != VideoFrame::STORAGE_SHMEM ||
-      vea_requested_input_coded_size_ != frame->coded_size() ||
-      input_visible_size_.width() < kVEAEncoderMinResolutionWidth ||
-      input_visible_size_.height() < kVEAEncoderMinResolutionHeight) {
-    // Create SharedMemory backed input buffers as necessary. These SharedMemory
-    // instances will be shared with GPU process.
-    std::unique_ptr<base::SharedMemory> input_buffer;
-    const size_t desired_mapped_size = media::VideoFrame::AllocationSize(
-        media::PIXEL_FORMAT_I420, vea_requested_input_coded_size_);
-    if (input_buffers_.empty()) {
-      input_buffer = gpu_factories_->CreateSharedMemory(desired_mapped_size);
-    } else {
-      do {
-        input_buffer = std::move(input_buffers_.front());
-        input_buffers_.pop();
-      } while (!input_buffers_.empty() &&
-               input_buffer->mapped_size() < desired_mapped_size);
-      if (!input_buffer || input_buffer->mapped_size() < desired_mapped_size)
-        return;
-    }
-
-    video_frame = media::VideoFrame::WrapExternalSharedMemory(
-        media::PIXEL_FORMAT_I420, vea_requested_input_coded_size_,
-        gfx::Rect(input_visible_size_), input_visible_size_,
-        reinterpret_cast<uint8_t*>(input_buffer->memory()),
-        input_buffer->mapped_size(), input_buffer->handle(), 0,
-        frame->timestamp());
-    video_frame->AddDestructionObserver(media::BindToCurrentLoop(
-        base::Bind(&VEAEncoder::FrameFinished, this,
-                   base::Passed(std::move(input_buffer)))));
-    libyuv::I420Copy(frame->visible_data(media::VideoFrame::kYPlane),
-                     frame->stride(media::VideoFrame::kYPlane),
-                     frame->visible_data(media::VideoFrame::kUPlane),
-                     frame->stride(media::VideoFrame::kUPlane),
-                     frame->visible_data(media::VideoFrame::kVPlane),
-                     frame->stride(media::VideoFrame::kVPlane),
-                     video_frame->visible_data(media::VideoFrame::kYPlane),
-                     video_frame->stride(media::VideoFrame::kYPlane),
-                     video_frame->visible_data(media::VideoFrame::kUPlane),
-                     video_frame->stride(media::VideoFrame::kUPlane),
-                     video_frame->visible_data(media::VideoFrame::kVPlane),
-                     video_frame->stride(media::VideoFrame::kVPlane),
-                     input_visible_size_.width(), input_visible_size_.height());
-  }
-  frames_in_encode_.push(std::make_pair(
-      media::WebmMuxer::VideoParameters(frame), capture_timestamp));
-
-  video_encoder_->Encode(video_frame, false);
+  paused_ = paused;
 }
 
-void VEAEncoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) {
-  DVLOG(3) << __func__;
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-  DCHECK(gpu_factories_->GetTaskRunner()->BelongsToCurrentThread());
-  DCHECK_GT(bits_per_second_, 0);
-
-  input_visible_size_ = size;
-  video_encoder_ = gpu_factories_->CreateVideoEncodeAccelerator();
-  if (!video_encoder_ ||
-      !video_encoder_->Initialize(media::PIXEL_FORMAT_I420, input_visible_size_,
-                                  codec_, bits_per_second_, this)) {
-    NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
-  }
+bool VideoTrackRecorder::Encoder::CanEncodeAlphaChannel() {
+  return false;
 }
 
-void VEAEncoder::DestroyOnEncodingTaskRunner(
-    base::WaitableEvent* async_waiter) {
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-  video_encoder_.reset();
-  async_waiter->Signal();
-}
-
-// static
-void VpxEncoder::ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
-                                 ScopedVpxCodecCtxPtr encoder) {
-  DCHECK(encoding_thread->IsRunning());
-  encoding_thread->Stop();
-  // Both |encoding_thread| and |encoder| will be destroyed at end-of-scope.
-}
-
-VpxEncoder::VpxEncoder(
-    bool use_vp9,
-    const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
-    int32_t bits_per_second)
-    : Encoder(on_encoded_video_callback, bits_per_second),
-      use_vp9_(use_vp9) {
-  codec_config_.g_timebase.den = 0;  // Not initialized.
-  alpha_codec_config_.g_timebase.den = 0;  // Not initialized.
-  DCHECK(encoding_thread_->IsRunning());
-}
-
-VpxEncoder::~VpxEncoder() {
-  main_task_runner_->PostTask(FROM_HERE,
-                              base::Bind(&VpxEncoder::ShutdownEncoder,
-                                         base::Passed(&encoding_thread_),
-                                         base::Passed(&encoder_)));
-}
-
-void VpxEncoder::EncodeOnEncodingTaskRunner(
-    scoped_refptr<VideoFrame> frame,
-    base::TimeTicks capture_timestamp) {
-  TRACE_EVENT0("video", "VpxEncoder::EncodeOnEncodingTaskRunner");
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
-  const gfx::Size frame_size = frame->visible_rect().size();
-  const base::TimeDelta duration = EstimateFrameDuration(frame);
-  const media::WebmMuxer::VideoParameters video_params(frame);
-
-  if (!IsInitialized(codec_config_) ||
-      gfx::Size(codec_config_.g_w, codec_config_.g_h) != frame_size) {
-    ConfigureEncoderOnEncodingTaskRunner(frame_size, &codec_config_, &encoder_);
-  }
-
-  const bool frame_has_alpha = frame->format() == media::PIXEL_FORMAT_YV12A;
-  if (frame_has_alpha && (!IsInitialized(alpha_codec_config_) ||
-                          gfx::Size(alpha_codec_config_.g_w,
-                                    alpha_codec_config_.g_h) != frame_size)) {
-    ConfigureEncoderOnEncodingTaskRunner(frame_size, &alpha_codec_config_,
-                                         &alpha_encoder_);
-    u_plane_stride_ = media::VideoFrame::RowBytes(
-        VideoFrame::kUPlane, frame->format(), frame_size.width());
-    v_plane_stride_ = media::VideoFrame::RowBytes(
-        VideoFrame::kVPlane, frame->format(), frame_size.width());
-    v_plane_offset_ = media::VideoFrame::PlaneSize(
-                          frame->format(), VideoFrame::kUPlane, frame_size)
-                          .GetArea();
-    alpha_dummy_planes_.resize(
-        v_plane_offset_ + media::VideoFrame::PlaneSize(
-                              frame->format(), VideoFrame::kVPlane, frame_size)
-                              .GetArea());
-    // It is more expensive to encode 0x00, so use 0x80 instead.
-    std::fill(alpha_dummy_planes_.begin(), alpha_dummy_planes_.end(), 0x80);
-  }
-  // If we introduced a new alpha frame, force keyframe.
-  const bool force_keyframe = frame_has_alpha && !last_frame_had_alpha_;
-  last_frame_had_alpha_ = frame_has_alpha;
-
-  std::unique_ptr<std::string> data(new std::string);
-  bool keyframe = false;
-  DoEncode(encoder_.get(), frame_size, frame->data(VideoFrame::kYPlane),
-           frame->visible_data(VideoFrame::kYPlane),
-           frame->stride(VideoFrame::kYPlane),
-           frame->visible_data(VideoFrame::kUPlane),
-           frame->stride(VideoFrame::kUPlane),
-           frame->visible_data(VideoFrame::kVPlane),
-           frame->stride(VideoFrame::kVPlane), duration, force_keyframe,
-           data.get(), &keyframe);
-
-  std::unique_ptr<std::string> alpha_data(new std::string);
-  if (frame_has_alpha) {
-    bool alpha_keyframe = false;
-    DoEncode(alpha_encoder_.get(), frame_size, frame->data(VideoFrame::kAPlane),
-             frame->visible_data(VideoFrame::kAPlane),
-             frame->stride(VideoFrame::kAPlane), alpha_dummy_planes_.data(),
-             u_plane_stride_, alpha_dummy_planes_.data() + v_plane_offset_,
-             v_plane_stride_, duration, keyframe, alpha_data.get(),
-             &alpha_keyframe);
-    DCHECK_EQ(keyframe, alpha_keyframe);
-  }
-  frame = nullptr;
-
-  origin_task_runner_->PostTask(
-      FROM_HERE,
-      base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_,
-                 video_params, base::Passed(&data), base::Passed(&alpha_data),
-                 capture_timestamp, keyframe));
-}
-
-void VpxEncoder::DoEncode(vpx_codec_ctx_t* const encoder,
-                          const gfx::Size& frame_size,
-                          uint8_t* const data,
-                          uint8_t* const y_plane,
-                          int y_stride,
-                          uint8_t* const u_plane,
-                          int u_stride,
-                          uint8_t* const v_plane,
-                          int v_stride,
-                          const base::TimeDelta& duration,
-                          bool force_keyframe,
-                          std::string* const output_data,
-                          bool* const keyframe) {
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
-  vpx_image_t vpx_image;
-  vpx_image_t* const result =
-      vpx_img_wrap(&vpx_image, VPX_IMG_FMT_I420, frame_size.width(),
-                   frame_size.height(), 1 /* align */, data);
-  DCHECK_EQ(result, &vpx_image);
-  vpx_image.planes[VPX_PLANE_Y] = y_plane;
-  vpx_image.planes[VPX_PLANE_U] = u_plane;
-  vpx_image.planes[VPX_PLANE_V] = v_plane;
-  vpx_image.stride[VPX_PLANE_Y] = y_stride;
-  vpx_image.stride[VPX_PLANE_U] = u_stride;
-  vpx_image.stride[VPX_PLANE_V] = v_stride;
-
-  const vpx_codec_flags_t flags = force_keyframe ? VPX_EFLAG_FORCE_KF : 0;
-  // Encode the frame.  The presentation time stamp argument here is fixed to
-  // zero to force the encoder to base its single-frame bandwidth calculations
-  // entirely on |predicted_frame_duration|.
-  const vpx_codec_err_t ret =
-      vpx_codec_encode(encoder, &vpx_image, 0 /* pts */,
-                       duration.InMicroseconds(), flags, VPX_DL_REALTIME);
-  DCHECK_EQ(ret, VPX_CODEC_OK)
-      << vpx_codec_err_to_string(ret) << ", #" << vpx_codec_error(encoder)
-      << " -" << vpx_codec_error_detail(encoder);
-
-  *keyframe = false;
-  vpx_codec_iter_t iter = NULL;
-  const vpx_codec_cx_pkt_t* pkt = NULL;
-  while ((pkt = vpx_codec_get_cx_data(encoder, &iter)) != NULL) {
-    if (pkt->kind != VPX_CODEC_CX_FRAME_PKT)
-      continue;
-    output_data->assign(static_cast<char*>(pkt->data.frame.buf),
-                        pkt->data.frame.sz);
-    *keyframe = (pkt->data.frame.flags & VPX_FRAME_IS_KEY) != 0;
-    break;
-  }
-}
-
-void VpxEncoder::ConfigureEncoderOnEncodingTaskRunner(
-    const gfx::Size& size,
-    vpx_codec_enc_cfg_t* codec_config,
-    ScopedVpxCodecCtxPtr* encoder) {
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-  if (IsInitialized(*codec_config)) {
-    // TODO(mcasas) VP8 quirk/optimisation: If the new |size| is strictly less-
-    // than-or-equal than the old size, in terms of area, the existing encoder
-    // instance could be reused after changing |codec_config->{g_w,g_h}|.
-    DVLOG(1) << "Destroying/Re-Creating encoder for new frame size: "
-             << gfx::Size(codec_config->g_w, codec_config->g_h).ToString()
-             << " --> " << size.ToString() << (use_vp9_ ? " vp9" : " vp8");
-    encoder->reset();
-  }
-
-  const vpx_codec_iface_t* codec_interface =
-      use_vp9_ ? vpx_codec_vp9_cx() : vpx_codec_vp8_cx();
-  vpx_codec_err_t result = vpx_codec_enc_config_default(
-      codec_interface, codec_config, 0 /* reserved */);
-  DCHECK_EQ(VPX_CODEC_OK, result);
-
-  DCHECK_EQ(320u, codec_config->g_w);
-  DCHECK_EQ(240u, codec_config->g_h);
-  DCHECK_EQ(256u, codec_config->rc_target_bitrate);
-  // Use the selected bitrate or adjust default bit rate to account for the
-  // actual size.  Note: |rc_target_bitrate| units are kbit per second.
-  if (bits_per_second_ > 0) {
-    codec_config->rc_target_bitrate = bits_per_second_ / 1000;
-  } else {
-    codec_config->rc_target_bitrate = size.GetArea() *
-                                      codec_config->rc_target_bitrate /
-                                      codec_config->g_w / codec_config->g_h;
-  }
-  // Both VP8/VP9 configuration should be Variable BitRate by default.
-  DCHECK_EQ(VPX_VBR, codec_config->rc_end_usage);
-  if (use_vp9_) {
-    // Number of frames to consume before producing output.
-    codec_config->g_lag_in_frames = 0;
-
-    // DCHECK that the profile selected by default is I420 (magic number 0).
-    DCHECK_EQ(0u, codec_config->g_profile);
-  } else {
-    // VP8 always produces frames instantaneously.
-    DCHECK_EQ(0u, codec_config->g_lag_in_frames);
-  }
-
-  DCHECK(size.width());
-  DCHECK(size.height());
-  codec_config->g_w = size.width();
-  codec_config->g_h = size.height();
-  codec_config->g_pass = VPX_RC_ONE_PASS;
-
-  // Timebase is the smallest interval used by the stream, can be set to the
-  // frame rate or to e.g. microseconds.
-  codec_config->g_timebase.num = 1;
-  codec_config->g_timebase.den = base::Time::kMicrosecondsPerSecond;
-
-  // Let the encoder decide where to place the Keyframes, between min and max.
-  // In VPX_KF_AUTO mode libvpx will sometimes emit keyframes regardless of min/
-  // max distance out of necessity.
-  // Note that due to http://crbug.com/440223, it might be necessary to force a
-  // key frame after 10,000frames since decoding fails after 30,000 non-key
-  // frames.
-  // Forcing a keyframe in regular intervals also allows seeking in the
-  // resulting recording with decent performance.
-  codec_config->kf_mode = VPX_KF_AUTO;
-  codec_config->kf_min_dist = 0;
-  codec_config->kf_max_dist = 100;
-
-  codec_config->g_threads = GetNumberOfThreadsForEncoding();
-
-  // Number of frames to consume before producing output.
-  codec_config->g_lag_in_frames = 0;
-
-  encoder->reset(new vpx_codec_ctx_t);
-  const vpx_codec_err_t ret = vpx_codec_enc_init(
-      encoder->get(), codec_interface, codec_config, 0 /* flags */);
-  DCHECK_EQ(VPX_CODEC_OK, ret);
-
-  if (use_vp9_) {
-    // Values of VP8E_SET_CPUUSED greater than 0 will increase encoder speed at
-    // the expense of quality up to a maximum value of 8 for VP9, by tuning the
-    // target time spent encoding the frame. Go from 8 to 5 (values for real
-    // time encoding) depending on the amount of cores available in the system.
-    const int kCpuUsed =
-        std::max(5, 8 - base::SysInfo::NumberOfProcessors() / 2);
-    result = vpx_codec_control(encoder->get(), VP8E_SET_CPUUSED, kCpuUsed);
-    DLOG_IF(WARNING, VPX_CODEC_OK != result) << "VP8E_SET_CPUUSED failed";
-  }
-}
-
-bool VpxEncoder::IsInitialized(const vpx_codec_enc_cfg_t& codec_config) const {
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-  return codec_config.g_timebase.den != 0;
-}
-
-base::TimeDelta VpxEncoder::EstimateFrameDuration(
-    const scoped_refptr<VideoFrame>& frame) {
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
-  using base::TimeDelta;
-  TimeDelta predicted_frame_duration;
-  if (!frame->metadata()->GetTimeDelta(VideoFrameMetadata::FRAME_DURATION,
-                                       &predicted_frame_duration) ||
-      predicted_frame_duration <= TimeDelta()) {
-    // The source of the video frame did not provide the frame duration.  Use
-    // the actual amount of time between the current and previous frame as a
-    // prediction for the next frame's duration.
-    // TODO(mcasas): This duration estimation could lead to artifacts if the
-    // cadence of the received stream is compromised (e.g. camera freeze, pause,
-    // remote packet loss).  Investigate using GetFrameRate() in this case.
-    predicted_frame_duration = frame->timestamp() - last_frame_timestamp_;
-  }
-  last_frame_timestamp_ = frame->timestamp();
-  // Make sure |predicted_frame_duration| is in a safe range of values.
-  const TimeDelta kMaxFrameDuration = TimeDelta::FromSecondsD(1.0 / 8);
-  const TimeDelta kMinFrameDuration = TimeDelta::FromMilliseconds(1);
-  return std::min(kMaxFrameDuration, std::max(predicted_frame_duration,
-                                              kMinFrameDuration));
-}
-
-#if BUILDFLAG(RTC_USE_H264)
-
-// static
-void H264Encoder::ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
-                                  ScopedISVCEncoderPtr encoder) {
-  DCHECK(encoding_thread->IsRunning());
-  encoding_thread->Stop();
-  // Both |encoding_thread| and |encoder| will be destroyed at end-of-scope.
-}
-
-H264Encoder::H264Encoder(
-    const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
-    int32_t bits_per_second)
-    : Encoder(on_encoded_video_callback, bits_per_second) {
-  DCHECK(encoding_thread_->IsRunning());
-}
-
-H264Encoder::~H264Encoder() {
-  main_task_runner_->PostTask(FROM_HERE,
-                              base::Bind(&H264Encoder::ShutdownEncoder,
-                                         base::Passed(&encoding_thread_),
-                                         base::Passed(&openh264_encoder_)));
-}
-
-void H264Encoder::EncodeOnEncodingTaskRunner(
-    scoped_refptr<VideoFrame> frame,
-    base::TimeTicks capture_timestamp) {
-  TRACE_EVENT0("video", "H264Encoder::EncodeOnEncodingTaskRunner");
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
-  const gfx::Size frame_size = frame->visible_rect().size();
-  if (!openh264_encoder_ || configured_size_ != frame_size) {
-    ConfigureEncoderOnEncodingTaskRunner(frame_size);
-    first_frame_timestamp_ = capture_timestamp;
-  }
-
-  SSourcePicture picture = {};
-  picture.iPicWidth = frame_size.width();
-  picture.iPicHeight = frame_size.height();
-  picture.iColorFormat = EVideoFormatType::videoFormatI420;
-  picture.uiTimeStamp =
-      (capture_timestamp - first_frame_timestamp_).InMilliseconds();
-  picture.iStride[0] = frame->stride(VideoFrame::kYPlane);
-  picture.iStride[1] = frame->stride(VideoFrame::kUPlane);
-  picture.iStride[2] = frame->stride(VideoFrame::kVPlane);
-  picture.pData[0] = frame->visible_data(VideoFrame::kYPlane);
-  picture.pData[1] = frame->visible_data(VideoFrame::kUPlane);
-  picture.pData[2] = frame->visible_data(VideoFrame::kVPlane);
-
-  SFrameBSInfo info = {};
-  if (openh264_encoder_->EncodeFrame(&picture, &info) != cmResultSuccess) {
-    NOTREACHED() << "OpenH264 encoding failed";
-    return;
-  }
-  const media::WebmMuxer::VideoParameters video_params(frame);
-  frame = nullptr;
-
-  std::unique_ptr<std::string> data(new std::string);
-  const uint8_t kNALStartCode[4] = {0, 0, 0, 1};
-  for (int layer = 0; layer < info.iLayerNum; ++layer) {
-    const SLayerBSInfo& layerInfo = info.sLayerInfo[layer];
-    // Iterate NAL units making up this layer, noting fragments.
-    size_t layer_len = 0;
-    for (int nal = 0; nal < layerInfo.iNalCount; ++nal) {
-      // The following DCHECKs make sure that the header of each NAL unit is OK.
-      DCHECK_GE(layerInfo.pNalLengthInByte[nal], 4);
-      DCHECK_EQ(kNALStartCode[0], layerInfo.pBsBuf[layer_len+0]);
-      DCHECK_EQ(kNALStartCode[1], layerInfo.pBsBuf[layer_len+1]);
-      DCHECK_EQ(kNALStartCode[2], layerInfo.pBsBuf[layer_len+2]);
-      DCHECK_EQ(kNALStartCode[3], layerInfo.pBsBuf[layer_len+3]);
-
-      layer_len += layerInfo.pNalLengthInByte[nal];
-    }
-    // Copy the entire layer's data (including NAL start codes).
-    data->append(reinterpret_cast<char*>(layerInfo.pBsBuf), layer_len);
-  }
-
-  const bool is_key_frame = info.eFrameType == videoFrameTypeIDR;
-  origin_task_runner_->PostTask(
-      FROM_HERE, base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_,
-                            video_params, base::Passed(&data), nullptr,
-                            capture_timestamp, is_key_frame));
-}
-
-void H264Encoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) {
-  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-  ISVCEncoder* temp_encoder = nullptr;
-  if (WelsCreateSVCEncoder(&temp_encoder) != 0) {
-    NOTREACHED() << "Failed to create OpenH264 encoder";
-    return;
-  }
-  openh264_encoder_.reset(temp_encoder);
-  configured_size_ = size;
-
-#if DCHECK_IS_ON()
-  int trace_level = WELS_LOG_INFO;
-  openh264_encoder_->SetOption(ENCODER_OPTION_TRACE_LEVEL, &trace_level);
-#endif
-
-  SEncParamExt init_params;
-  openh264_encoder_->GetDefaultParams(&init_params);
-  init_params.iUsageType = CAMERA_VIDEO_REAL_TIME;
-
-  DCHECK_EQ(AUTO_REF_PIC_COUNT, init_params.iNumRefFrame);
-  DCHECK(!init_params.bSimulcastAVC);
-
-  init_params.uiIntraPeriod = 100;  // Same as for VpxEncoder.
-  init_params.iPicWidth = size.width();
-  init_params.iPicHeight = size.height();
-
-  DCHECK_EQ(RC_QUALITY_MODE, init_params.iRCMode);
-  DCHECK_EQ(0, init_params.iPaddingFlag);
-  DCHECK_EQ(UNSPECIFIED_BIT_RATE, init_params.iTargetBitrate);
-  DCHECK_EQ(UNSPECIFIED_BIT_RATE, init_params.iMaxBitrate);
-  if (bits_per_second_ > 0) {
-    init_params.iRCMode = RC_BITRATE_MODE;
-    init_params.iTargetBitrate = bits_per_second_;
-  } else {
-    init_params.iRCMode = RC_OFF_MODE;
-  }
-
-  // Threading model: Set to 1 due to https://crbug.com/583348.
-  init_params.iMultipleThreadIdc = 1;
-
-  // TODO(mcasas): consider reducing complexity if there are few CPUs available.
-  init_params.iComplexityMode = MEDIUM_COMPLEXITY;
-  DCHECK(!init_params.bEnableDenoise);
-  DCHECK(init_params.bEnableFrameSkip);
-
-  // The base spatial layer 0 is the only one we use.
-  DCHECK_EQ(1, init_params.iSpatialLayerNum);
-  init_params.sSpatialLayers[0].iVideoWidth        = init_params.iPicWidth;
-  init_params.sSpatialLayers[0].iVideoHeight       = init_params.iPicHeight;
-  init_params.sSpatialLayers[0].iSpatialBitrate    = init_params.iTargetBitrate;
-
-  // When uiSliceMode = SM_FIXEDSLCNUM_SLICE, uiSliceNum = 0 means auto design
-  // it with cpu core number.
-  // TODO(sprang): Set to 0 when we understand why the rate controller borks
-  // when uiSliceNum > 1. See https://github.com/cisco/openh264/issues/2591
-  init_params.sSpatialLayers[0].sSliceArgument.uiSliceNum = 1;
-  init_params.sSpatialLayers[0].sSliceArgument.uiSliceMode =
-      SM_FIXEDSLCNUM_SLICE;
-
-  if (openh264_encoder_->InitializeExt(&init_params) != cmResultSuccess) {
-    NOTREACHED() << "Failed to initialize OpenH264 encoder";
-    return;
-  }
-
-  int pixel_format = EVideoFormatType::videoFormatI420;
-  openh264_encoder_->SetOption(ENCODER_OPTION_DATAFORMAT, &pixel_format);
-}
-#endif //#if BUILDFLAG(RTC_USE_H264)
-
-}  // anonymous namespace
-
 // static
 VideoTrackRecorder::CodecId VideoTrackRecorder::GetPreferredCodecId() {
   return GetCodecEnumerator()->GetPreferredCodecId();
@@ -1366,9 +441,4 @@
       false);
 }
 
-bool VideoTrackRecorder::CanEncodeAlphaChannelForTesting() {
-  DCHECK(encoder_);
-  return encoder_->CanEncodeAlphaChannel();
-}
-
 }  // namespace content
diff --git a/content/renderer/media_recorder/video_track_recorder.h b/content/renderer/media_recorder/video_track_recorder.h
index 542c3b7..53a871f 100644
--- a/content/renderer/media_recorder/video_track_recorder.h
+++ b/content/renderer/media_recorder/video_track_recorder.h
@@ -16,8 +16,18 @@
 #include "content/public/renderer/media_stream_video_sink.h"
 #include "media/muxers/webm_muxer.h"
 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+
+namespace base {
+class Thread;
+}  // namespace base
+
+namespace cc {
+class PaintCanvas;
+}  // namespace cc
 
 namespace media {
+class SkCanvasVideoRenderer;
 class VideoFrame;
 }  // namespace media
 
@@ -46,7 +56,6 @@
 #endif
     LAST
   };
-  class Encoder;
 
   using OnEncodedVideoCB =
       base::Callback<void(const media::WebmMuxer::VideoParameters& params,
@@ -56,6 +65,89 @@
                           bool is_key_frame)>;
   using OnErrorCB = base::Closure;
 
+  // Base class to describe a generic Encoder, encapsulating all actual encoder
+  // (re)configurations, encoding and delivery of received frames. This class is
+  // ref-counted to allow the MediaStreamVideoTrack to hold a reference to it
+  // (via the callback that MediaStreamVideoSink passes along) and to jump back
+  // and forth to an internal encoder thread. Moreover, this class:
+  // - is created on its parent's thread (usually the main Render thread), that
+  // is, |main_task_runner_|.
+  // - receives VideoFrames on |origin_task_runner_| and runs OnEncodedVideoCB
+  // on that thread as well. This task runner is cached on first frame arrival,
+  // and is supposed to be the render IO thread (but this is not enforced);
+  // - uses an internal |encoding_task_runner_| for actual encoder interactions,
+  // namely configuration, encoding (which might take some time) and
+  // destruction. This task runner can be passed on the creation. If nothing is
+  // passed, a new encoding thread is created and used.
+  class Encoder : public base::RefCountedThreadSafe<Encoder> {
+   public:
+    Encoder(const OnEncodedVideoCB& on_encoded_video_callback,
+            int32_t bits_per_second,
+            scoped_refptr<base::SingleThreadTaskRunner> encoding_task_runner =
+                nullptr);
+
+    // Start encoding |frame|, returning via |on_encoded_video_callback_|. This
+    // call will also trigger an encode configuration upon first frame arrival
+    // or parameter change, and an EncodeOnEncodingTaskRunner() to actually
+    // encode the frame. If the |frame|'s data is not directly available (e.g.
+    // it's a texture) then RetrieveFrameOnMainThread() is called, and if even
+    // that fails, black frames are sent instead.
+    void StartFrameEncode(const scoped_refptr<media::VideoFrame>& frame,
+                          base::TimeTicks capture_timestamp);
+    void RetrieveFrameOnMainThread(
+        const scoped_refptr<media::VideoFrame>& video_frame,
+        base::TimeTicks capture_timestamp);
+
+    static void OnFrameEncodeCompleted(
+        const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_cb,
+        const media::WebmMuxer::VideoParameters& params,
+        std::unique_ptr<std::string> data,
+        std::unique_ptr<std::string> alpha_data,
+        base::TimeTicks capture_timestamp,
+        bool keyframe);
+
+    void SetPaused(bool paused);
+    virtual bool CanEncodeAlphaChannel();
+
+   protected:
+    friend class base::RefCountedThreadSafe<Encoder>;
+    virtual ~Encoder();
+
+    virtual void EncodeOnEncodingTaskRunner(
+        scoped_refptr<media::VideoFrame> frame,
+        base::TimeTicks capture_timestamp) = 0;
+
+    // Used to shutdown properly on the same thread we were created.
+    const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
+
+    // Task runner where frames to encode and reply callbacks must happen.
+    scoped_refptr<base::SingleThreadTaskRunner> origin_task_runner_;
+
+    // Task runner where encoding interactions happen.
+    scoped_refptr<base::SingleThreadTaskRunner> encoding_task_runner_;
+
+    // Optional thread for encoding. Active for the lifetime of VpxEncoder.
+    std::unique_ptr<base::Thread> encoding_thread_;
+
+    // While |paused_|, frames are not encoded. Used only from
+    // |encoding_thread_|.
+    bool paused_;
+
+    // This callback should be exercised on IO thread.
+    const OnEncodedVideoCB on_encoded_video_callback_;
+
+    // Target bitrate for video encoding. If 0, a standard bitrate is used.
+    const int32_t bits_per_second_;
+
+    // Used to retrieve incoming opaque VideoFrames (i.e. VideoFrames backed by
+    // textures). Created on-demand on |main_task_runner_|.
+    std::unique_ptr<media::SkCanvasVideoRenderer> video_renderer_;
+    SkBitmap bitmap_;
+    std::unique_ptr<cc::PaintCanvas> canvas_;
+
+    DISALLOW_COPY_AND_ASSIGN(Encoder);
+  };
+
   static CodecId GetPreferredCodecId();
 
   VideoTrackRecorder(CodecId codec,
@@ -80,9 +172,6 @@
                          base::TimeTicks capture_time);
   void OnError();
 
-  // TODO(emircan): Remove after refactor, see http://crbug.com/700433.
-  bool CanEncodeAlphaChannelForTesting();
-
   // Used to check that we are destroyed on the same thread we were created.
   base::ThreadChecker main_render_thread_checker_;
 
diff --git a/content/renderer/media_recorder/video_track_recorder_unittest.cc b/content/renderer/media_recorder/video_track_recorder_unittest.cc
index 54af592..3603197 100644
--- a/content/renderer/media_recorder/video_track_recorder_unittest.cc
+++ b/content/renderer/media_recorder/video_track_recorder_unittest.cc
@@ -121,7 +121,7 @@
   void OnError() { video_track_recorder_->OnError(); }
 
   bool CanEncodeAlphaChannel() {
-    return video_track_recorder_->CanEncodeAlphaChannelForTesting();
+    return video_track_recorder_->encoder_->CanEncodeAlphaChannel();
   }
 
   bool HasEncoderInstance() {
diff --git a/content/renderer/media_recorder/vpx_encoder.cc b/content/renderer/media_recorder/vpx_encoder.cc
new file mode 100644
index 0000000..65cb740
--- /dev/null
+++ b/content/renderer/media_recorder/vpx_encoder.cc
@@ -0,0 +1,308 @@
+// 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 "content/renderer/media_recorder/vpx_encoder.h"
+
+#include <algorithm>
+#include <string>
+
+#include "base/bind.h"
+#include "base/sys_info.h"
+#include "base/threading/thread.h"
+#include "base/trace_event/trace_event.h"
+#include "media/base/video_frame.h"
+#include "ui/gfx/geometry/size.h"
+
+using media::VideoFrame;
+using media::VideoFrameMetadata;
+
+namespace content {
+
+void VpxEncoder::VpxCodecDeleter::operator()(vpx_codec_ctx_t* codec) {
+  if (!codec)
+    return;
+  vpx_codec_err_t ret = vpx_codec_destroy(codec);
+  CHECK_EQ(ret, VPX_CODEC_OK);
+  delete codec;
+}
+
+static int GetNumberOfThreadsForEncoding() {
+  // Do not saturate CPU utilization just for encoding. On a lower-end system
+  // with only 1 or 2 cores, use only one thread for encoding. On systems with
+  // more cores, allow half of the cores to be used for encoding.
+  return std::min(8, (base::SysInfo::NumberOfProcessors() + 1) / 2);
+}
+
+// static
+void VpxEncoder::ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
+                                 ScopedVpxCodecCtxPtr encoder) {
+  DCHECK(encoding_thread->IsRunning());
+  encoding_thread->Stop();
+  // Both |encoding_thread| and |encoder| will be destroyed at end-of-scope.
+}
+
+VpxEncoder::VpxEncoder(
+    bool use_vp9,
+    const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+    int32_t bits_per_second)
+    : VideoTrackRecorder::Encoder(on_encoded_video_callback, bits_per_second),
+      use_vp9_(use_vp9) {
+  codec_config_.g_timebase.den = 0;        // Not initialized.
+  alpha_codec_config_.g_timebase.den = 0;  // Not initialized.
+  DCHECK(encoding_thread_->IsRunning());
+}
+
+VpxEncoder::~VpxEncoder() {
+  main_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&VpxEncoder::ShutdownEncoder, base::Passed(&encoding_thread_),
+                 base::Passed(&encoder_)));
+}
+
+bool VpxEncoder::CanEncodeAlphaChannel() {
+  return true;
+}
+
+void VpxEncoder::EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame,
+                                            base::TimeTicks capture_timestamp) {
+  TRACE_EVENT0("video", "VpxEncoder::EncodeOnEncodingTaskRunner");
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+
+  const gfx::Size frame_size = frame->visible_rect().size();
+  const base::TimeDelta duration = EstimateFrameDuration(frame);
+  const media::WebmMuxer::VideoParameters video_params(frame);
+
+  if (!IsInitialized(codec_config_) ||
+      gfx::Size(codec_config_.g_w, codec_config_.g_h) != frame_size) {
+    ConfigureEncoderOnEncodingTaskRunner(frame_size, &codec_config_, &encoder_);
+  }
+
+  const bool frame_has_alpha = frame->format() == media::PIXEL_FORMAT_YV12A;
+  if (frame_has_alpha && (!IsInitialized(alpha_codec_config_) ||
+                          gfx::Size(alpha_codec_config_.g_w,
+                                    alpha_codec_config_.g_h) != frame_size)) {
+    ConfigureEncoderOnEncodingTaskRunner(frame_size, &alpha_codec_config_,
+                                         &alpha_encoder_);
+    u_plane_stride_ = media::VideoFrame::RowBytes(
+        VideoFrame::kUPlane, frame->format(), frame_size.width());
+    v_plane_stride_ = media::VideoFrame::RowBytes(
+        VideoFrame::kVPlane, frame->format(), frame_size.width());
+    v_plane_offset_ = media::VideoFrame::PlaneSize(
+                          frame->format(), VideoFrame::kUPlane, frame_size)
+                          .GetArea();
+    alpha_dummy_planes_.resize(
+        v_plane_offset_ + media::VideoFrame::PlaneSize(
+                              frame->format(), VideoFrame::kVPlane, frame_size)
+                              .GetArea());
+    // It is more expensive to encode 0x00, so use 0x80 instead.
+    std::fill(alpha_dummy_planes_.begin(), alpha_dummy_planes_.end(), 0x80);
+  }
+  // If we introduced a new alpha frame, force keyframe.
+  const bool force_keyframe = frame_has_alpha && !last_frame_had_alpha_;
+  last_frame_had_alpha_ = frame_has_alpha;
+
+  std::unique_ptr<std::string> data(new std::string);
+  bool keyframe = false;
+  DoEncode(encoder_.get(), frame_size, frame->data(VideoFrame::kYPlane),
+           frame->visible_data(VideoFrame::kYPlane),
+           frame->stride(VideoFrame::kYPlane),
+           frame->visible_data(VideoFrame::kUPlane),
+           frame->stride(VideoFrame::kUPlane),
+           frame->visible_data(VideoFrame::kVPlane),
+           frame->stride(VideoFrame::kVPlane), duration, force_keyframe,
+           data.get(), &keyframe);
+
+  std::unique_ptr<std::string> alpha_data(new std::string);
+  if (frame_has_alpha) {
+    bool alpha_keyframe = false;
+    DoEncode(alpha_encoder_.get(), frame_size, frame->data(VideoFrame::kAPlane),
+             frame->visible_data(VideoFrame::kAPlane),
+             frame->stride(VideoFrame::kAPlane), alpha_dummy_planes_.data(),
+             u_plane_stride_, alpha_dummy_planes_.data() + v_plane_offset_,
+             v_plane_stride_, duration, keyframe, alpha_data.get(),
+             &alpha_keyframe);
+    DCHECK_EQ(keyframe, alpha_keyframe);
+  }
+  frame = nullptr;
+
+  origin_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_,
+                 video_params, base::Passed(&data), base::Passed(&alpha_data),
+                 capture_timestamp, keyframe));
+}
+
+void VpxEncoder::DoEncode(vpx_codec_ctx_t* const encoder,
+                          const gfx::Size& frame_size,
+                          uint8_t* const data,
+                          uint8_t* const y_plane,
+                          int y_stride,
+                          uint8_t* const u_plane,
+                          int u_stride,
+                          uint8_t* const v_plane,
+                          int v_stride,
+                          const base::TimeDelta& duration,
+                          bool force_keyframe,
+                          std::string* const output_data,
+                          bool* const keyframe) {
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+
+  vpx_image_t vpx_image;
+  vpx_image_t* const result =
+      vpx_img_wrap(&vpx_image, VPX_IMG_FMT_I420, frame_size.width(),
+                   frame_size.height(), 1 /* align */, data);
+  DCHECK_EQ(result, &vpx_image);
+  vpx_image.planes[VPX_PLANE_Y] = y_plane;
+  vpx_image.planes[VPX_PLANE_U] = u_plane;
+  vpx_image.planes[VPX_PLANE_V] = v_plane;
+  vpx_image.stride[VPX_PLANE_Y] = y_stride;
+  vpx_image.stride[VPX_PLANE_U] = u_stride;
+  vpx_image.stride[VPX_PLANE_V] = v_stride;
+
+  const vpx_codec_flags_t flags = force_keyframe ? VPX_EFLAG_FORCE_KF : 0;
+  // Encode the frame.  The presentation time stamp argument here is fixed to
+  // zero to force the encoder to base its single-frame bandwidth calculations
+  // entirely on |predicted_frame_duration|.
+  const vpx_codec_err_t ret =
+      vpx_codec_encode(encoder, &vpx_image, 0 /* pts */,
+                       duration.InMicroseconds(), flags, VPX_DL_REALTIME);
+  DCHECK_EQ(ret, VPX_CODEC_OK)
+      << vpx_codec_err_to_string(ret) << ", #" << vpx_codec_error(encoder)
+      << " -" << vpx_codec_error_detail(encoder);
+
+  *keyframe = false;
+  vpx_codec_iter_t iter = NULL;
+  const vpx_codec_cx_pkt_t* pkt = NULL;
+  while ((pkt = vpx_codec_get_cx_data(encoder, &iter)) != NULL) {
+    if (pkt->kind != VPX_CODEC_CX_FRAME_PKT)
+      continue;
+    output_data->assign(static_cast<char*>(pkt->data.frame.buf),
+                        pkt->data.frame.sz);
+    *keyframe = (pkt->data.frame.flags & VPX_FRAME_IS_KEY) != 0;
+    break;
+  }
+}
+
+void VpxEncoder::ConfigureEncoderOnEncodingTaskRunner(
+    const gfx::Size& size,
+    vpx_codec_enc_cfg_t* codec_config,
+    ScopedVpxCodecCtxPtr* encoder) {
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+  if (IsInitialized(*codec_config)) {
+    // TODO(mcasas) VP8 quirk/optimisation: If the new |size| is strictly less-
+    // than-or-equal than the old size, in terms of area, the existing encoder
+    // instance could be reused after changing |codec_config->{g_w,g_h}|.
+    DVLOG(1) << "Destroying/Re-Creating encoder for new frame size: "
+             << gfx::Size(codec_config->g_w, codec_config->g_h).ToString()
+             << " --> " << size.ToString() << (use_vp9_ ? " vp9" : " vp8");
+    encoder->reset();
+  }
+
+  const vpx_codec_iface_t* codec_interface =
+      use_vp9_ ? vpx_codec_vp9_cx() : vpx_codec_vp8_cx();
+  vpx_codec_err_t result = vpx_codec_enc_config_default(
+      codec_interface, codec_config, 0 /* reserved */);
+  DCHECK_EQ(VPX_CODEC_OK, result);
+
+  DCHECK_EQ(320u, codec_config->g_w);
+  DCHECK_EQ(240u, codec_config->g_h);
+  DCHECK_EQ(256u, codec_config->rc_target_bitrate);
+  // Use the selected bitrate or adjust default bit rate to account for the
+  // actual size.  Note: |rc_target_bitrate| units are kbit per second.
+  if (bits_per_second_ > 0) {
+    codec_config->rc_target_bitrate = bits_per_second_ / 1000;
+  } else {
+    codec_config->rc_target_bitrate = size.GetArea() *
+                                      codec_config->rc_target_bitrate /
+                                      codec_config->g_w / codec_config->g_h;
+  }
+  // Both VP8/VP9 configuration should be Variable BitRate by default.
+  DCHECK_EQ(VPX_VBR, codec_config->rc_end_usage);
+  if (use_vp9_) {
+    // Number of frames to consume before producing output.
+    codec_config->g_lag_in_frames = 0;
+
+    // DCHECK that the profile selected by default is I420 (magic number 0).
+    DCHECK_EQ(0u, codec_config->g_profile);
+  } else {
+    // VP8 always produces frames instantaneously.
+    DCHECK_EQ(0u, codec_config->g_lag_in_frames);
+  }
+
+  DCHECK(size.width());
+  DCHECK(size.height());
+  codec_config->g_w = size.width();
+  codec_config->g_h = size.height();
+  codec_config->g_pass = VPX_RC_ONE_PASS;
+
+  // Timebase is the smallest interval used by the stream, can be set to the
+  // frame rate or to e.g. microseconds.
+  codec_config->g_timebase.num = 1;
+  codec_config->g_timebase.den = base::Time::kMicrosecondsPerSecond;
+
+  // Let the encoder decide where to place the Keyframes, between min and max.
+  // In VPX_KF_AUTO mode libvpx will sometimes emit keyframes regardless of min/
+  // max distance out of necessity.
+  // Note that due to http://crbug.com/440223, it might be necessary to force a
+  // key frame after 10,000frames since decoding fails after 30,000 non-key
+  // frames.
+  // Forcing a keyframe in regular intervals also allows seeking in the
+  // resulting recording with decent performance.
+  codec_config->kf_mode = VPX_KF_AUTO;
+  codec_config->kf_min_dist = 0;
+  codec_config->kf_max_dist = 100;
+
+  codec_config->g_threads = GetNumberOfThreadsForEncoding();
+
+  // Number of frames to consume before producing output.
+  codec_config->g_lag_in_frames = 0;
+
+  encoder->reset(new vpx_codec_ctx_t);
+  const vpx_codec_err_t ret = vpx_codec_enc_init(
+      encoder->get(), codec_interface, codec_config, 0 /* flags */);
+  DCHECK_EQ(VPX_CODEC_OK, ret);
+
+  if (use_vp9_) {
+    // Values of VP8E_SET_CPUUSED greater than 0 will increase encoder speed at
+    // the expense of quality up to a maximum value of 8 for VP9, by tuning the
+    // target time spent encoding the frame. Go from 8 to 5 (values for real
+    // time encoding) depending on the amount of cores available in the system.
+    const int kCpuUsed =
+        std::max(5, 8 - base::SysInfo::NumberOfProcessors() / 2);
+    result = vpx_codec_control(encoder->get(), VP8E_SET_CPUUSED, kCpuUsed);
+    DLOG_IF(WARNING, VPX_CODEC_OK != result) << "VP8E_SET_CPUUSED failed";
+  }
+}
+
+bool VpxEncoder::IsInitialized(const vpx_codec_enc_cfg_t& codec_config) const {
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+  return codec_config.g_timebase.den != 0;
+}
+
+base::TimeDelta VpxEncoder::EstimateFrameDuration(
+    const scoped_refptr<VideoFrame>& frame) {
+  DCHECK(encoding_task_runner_->BelongsToCurrentThread());
+
+  using base::TimeDelta;
+  TimeDelta predicted_frame_duration;
+  if (!frame->metadata()->GetTimeDelta(VideoFrameMetadata::FRAME_DURATION,
+                                       &predicted_frame_duration) ||
+      predicted_frame_duration <= TimeDelta()) {
+    // The source of the video frame did not provide the frame duration.  Use
+    // the actual amount of time between the current and previous frame as a
+    // prediction for the next frame's duration.
+    // TODO(mcasas): This duration estimation could lead to artifacts if the
+    // cadence of the received stream is compromised (e.g. camera freeze, pause,
+    // remote packet loss).  Investigate using GetFrameRate() in this case.
+    predicted_frame_duration = frame->timestamp() - last_frame_timestamp_;
+  }
+  last_frame_timestamp_ = frame->timestamp();
+  // Make sure |predicted_frame_duration| is in a safe range of values.
+  const TimeDelta kMaxFrameDuration = TimeDelta::FromSecondsD(1.0 / 8);
+  const TimeDelta kMinFrameDuration = TimeDelta::FromMilliseconds(1);
+  return std::min(kMaxFrameDuration,
+                  std::max(predicted_frame_duration, kMinFrameDuration));
+}
+
+}  // namespace content
diff --git a/content/renderer/media_recorder/vpx_encoder.h b/content/renderer/media_recorder/vpx_encoder.h
new file mode 100644
index 0000000..38faf1db
--- /dev/null
+++ b/content/renderer/media_recorder/vpx_encoder.h
@@ -0,0 +1,101 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_RECORDER_VPX_ENCODER_H_
+#define CONTENT_RENDERER_MEDIA_RECORDER_VPX_ENCODER_H_
+
+#include <vector>
+
+#include "content/renderer/media_recorder/video_track_recorder.h"
+
+extern "C" {
+// VPX_CODEC_DISABLE_COMPAT excludes parts of the libvpx API that provide
+// backwards compatibility for legacy applications using the library.
+#define VPX_CODEC_DISABLE_COMPAT 1
+#include "third_party/libvpx/source/libvpx/vpx/vp8cx.h"
+#include "third_party/libvpx/source/libvpx/vpx/vpx_encoder.h"
+}
+
+namespace content {
+
+// Class encapsulating all libvpx interactions for VP8/VP9 encoding.
+class VpxEncoder final : public VideoTrackRecorder::Encoder {
+ public:
+  // Originally from remoting/codec/scoped_vpx_codec.h.
+  // TODO(mcasas): Refactor into a common location.
+  struct VpxCodecDeleter {
+    void operator()(vpx_codec_ctx_t* codec);
+  };
+  typedef std::unique_ptr<vpx_codec_ctx_t, VpxCodecDeleter>
+      ScopedVpxCodecCtxPtr;
+
+  static void ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread,
+                              ScopedVpxCodecCtxPtr encoder);
+
+  VpxEncoder(
+      bool use_vp9,
+      const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+      int32_t bits_per_second);
+
+ private:
+  // VideoTrackRecorder::Encoder implementation.
+  ~VpxEncoder() override;
+  void EncodeOnEncodingTaskRunner(scoped_refptr<media::VideoFrame> frame,
+                                  base::TimeTicks capture_timestamp) override;
+  bool CanEncodeAlphaChannel() override;
+
+  void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size,
+                                            vpx_codec_enc_cfg_t* codec_config,
+                                            ScopedVpxCodecCtxPtr* encoder);
+  void DoEncode(vpx_codec_ctx_t* const encoder,
+                const gfx::Size& frame_size,
+                uint8_t* const data,
+                uint8_t* const y_plane,
+                int y_stride,
+                uint8_t* const u_plane,
+                int u_stride,
+                uint8_t* const v_plane,
+                int v_stride,
+                const base::TimeDelta& duration,
+                bool force_keyframe,
+                std::string* const output_data,
+                bool* const keyframe);
+
+  // Returns true if |codec_config| has been filled in at least once.
+  bool IsInitialized(const vpx_codec_enc_cfg_t& codec_config) const;
+
+  // Estimate the frame duration from |frame| and |last_frame_timestamp_|.
+  base::TimeDelta EstimateFrameDuration(
+      const scoped_refptr<media::VideoFrame>& frame);
+
+  // Force usage of VP9 for encoding, instead of VP8 which is the default.
+  const bool use_vp9_;
+
+  // VPx internal objects: configuration and encoder. |encoder_| is a special
+  // scoped pointer to guarantee proper destruction, particularly when
+  // reconfiguring due to parameters change. Only used on
+  // VideoTrackRecorder::Encoder::encoding_thread_.
+  vpx_codec_enc_cfg_t codec_config_;
+  ScopedVpxCodecCtxPtr encoder_;
+
+  vpx_codec_enc_cfg_t alpha_codec_config_;
+  ScopedVpxCodecCtxPtr alpha_encoder_;
+
+  std::vector<uint8_t> alpha_dummy_planes_;
+  size_t v_plane_offset_;
+  size_t u_plane_stride_;
+  size_t v_plane_stride_;
+  bool last_frame_had_alpha_ = false;
+
+  // The |media::VideoFrame::timestamp()| of the last encoded frame.  This is
+  // used to predict the duration of the next frame. Only used on
+  // VideoTrackRecorder::Encoder::encoding_thread_.
+  base::TimeDelta last_frame_timestamp_;
+
+  DISALLOW_COPY_AND_ASSIGN(VpxEncoder);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MEDIA_RECORDER_VPX_ENCODER_H_
diff --git a/content/renderer/pepper/content_renderer_pepper_host_factory.cc b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
index 16eff2bcc..3423b01e 100644
--- a/content/renderer/pepper/content_renderer_pepper_host_factory.cc
+++ b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
@@ -15,6 +15,7 @@
 #include "content/public/renderer/content_renderer_client.h"
 #include "content/renderer/pepper/pepper_audio_encoder_host.h"
 #include "content/renderer/pepper/pepper_audio_input_host.h"
+#include "content/renderer/pepper/pepper_audio_output_host.h"
 #include "content/renderer/pepper/pepper_camera_device_host.h"
 #include "content/renderer/pepper/pepper_compositor_host.h"
 #include "content/renderer/pepper/pepper_file_chooser_host.h"
@@ -211,6 +212,9 @@
       case PpapiHostMsg_AudioInput_Create::ID:
         return base::MakeUnique<PepperAudioInputHost>(host_, instance,
                                                       resource);
+      case PpapiHostMsg_AudioOutput_Create::ID:
+        return base::MakeUnique<PepperAudioOutputHost>(host_, instance,
+                                                       resource);
       case PpapiHostMsg_FileChooser_Create::ID:
         return base::MakeUnique<PepperFileChooserHost>(host_, instance,
                                                        resource);
diff --git a/content/renderer/pepper/pepper_audio_controller.cc b/content/renderer/pepper/pepper_audio_controller.cc
index 88d80f1..759666e 100644
--- a/content/renderer/pepper/pepper_audio_controller.cc
+++ b/content/renderer/pepper/pepper_audio_controller.cc
@@ -4,6 +4,7 @@
 
 #include "content/renderer/pepper/pepper_audio_controller.h"
 
+#include "content/renderer/pepper/pepper_audio_output_host.h"
 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
 #include "content/renderer/pepper/ppb_audio_impl.h"
 #include "content/renderer/render_frame_impl.h"
@@ -27,15 +28,22 @@
   if (ppb_audios_.count(audio))
     return;
 
-  if (ppb_audios_.empty()) {
-    RenderFrameImpl* render_frame = instance_->render_frame();
-    if (render_frame)
-      render_frame->PepperStartsPlayback(instance_);
-  }
+  StartPlaybackIfFirstInstance();
 
   ppb_audios_.insert(audio);
 }
 
+void PepperAudioController::AddInstance(PepperAudioOutputHost* audio_output) {
+  if (!instance_)
+    return;
+  if (audio_output_hosts_.count(audio_output))
+    return;
+
+  StartPlaybackIfFirstInstance();
+
+  audio_output_hosts_.insert(audio_output);
+}
+
 void PepperAudioController::RemoveInstance(PPB_Audio_Impl* audio) {
   if (!instance_)
     return;
@@ -44,8 +52,19 @@
 
   ppb_audios_.erase(audio);
 
-  if (ppb_audios_.empty())
-    NotifyPlaybackStopsOnEmpty();
+  StopPlaybackIfLastInstance();
+}
+
+void PepperAudioController::RemoveInstance(
+    PepperAudioOutputHost* audio_output) {
+  if (!instance_)
+    return;
+  if (!audio_output_hosts_.count(audio_output))
+    return;
+
+  audio_output_hosts_.erase(audio_output);
+
+  StopPlaybackIfLastInstance();
 }
 
 void PepperAudioController::SetVolume(double volume) {
@@ -54,15 +73,19 @@
 
   for (auto* ppb_audio : ppb_audios_)
     ppb_audio->SetVolume(volume);
+
+  for (auto* audio_output_host : audio_output_hosts_)
+    audio_output_host->SetVolume(volume);
 }
 
 void PepperAudioController::OnPepperInstanceDeleted() {
   DCHECK(instance_);
 
-  if (!ppb_audios_.empty())
+  if (!audio_output_hosts_.empty() || !ppb_audios_.empty())
     NotifyPlaybackStopsOnEmpty();
 
   ppb_audios_.clear();
+  audio_output_hosts_.clear();
   instance_ = nullptr;
 }
 
@@ -74,4 +97,21 @@
     render_frame->PepperStopsPlayback(instance_);
 }
 
+void PepperAudioController::StartPlaybackIfFirstInstance() {
+  DCHECK(instance_);
+
+  if (audio_output_hosts_.empty() && ppb_audios_.empty()) {
+    RenderFrameImpl* render_frame = instance_->render_frame();
+    if (render_frame)
+      render_frame->PepperStartsPlayback(instance_);
+  }
+}
+
+void PepperAudioController::StopPlaybackIfLastInstance() {
+  DCHECK(instance_);
+
+  if (audio_output_hosts_.empty() && ppb_audios_.empty())
+    NotifyPlaybackStopsOnEmpty();
+}
+
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_audio_controller.h b/content/renderer/pepper/pepper_audio_controller.h
index 29241ab..8e8b8741 100644
--- a/content/renderer/pepper/pepper_audio_controller.h
+++ b/content/renderer/pepper/pepper_audio_controller.h
@@ -11,6 +11,7 @@
 
 namespace content {
 
+class PepperAudioOutputHost;
 class PepperPluginInstanceImpl;
 class PPB_Audio_Impl;
 
@@ -25,9 +26,11 @@
 
   // Adds an audio instance to the controller.
   void AddInstance(PPB_Audio_Impl* audio);
+  void AddInstance(PepperAudioOutputHost* audio_output);
 
   // Removes an audio instance from the controller.
   void RemoveInstance(PPB_Audio_Impl* audio);
+  void RemoveInstance(PepperAudioOutputHost* audio_output);
 
   // Sets the volume of all audio instances.
   void SetVolume(double volume);
@@ -42,9 +45,18 @@
   // only be called when |ppb_audios_| turns from non-empty to empty.
   void NotifyPlaybackStopsOnEmpty();
 
-  // All active audio instances.
+  // Helper functions to deal with the first and last audio instance.
+  void StartPlaybackIfFirstInstance();
+  void StopPlaybackIfLastInstance();
+
+  // All active audio instances that are using the old
+  // PPB_Audio interface.
   std::set<PPB_Audio_Impl*> ppb_audios_;
 
+  // All active audio output instances that are using the new
+  // PPB_AudioOutput interface.
+  std::set<PepperAudioOutputHost*> audio_output_hosts_;
+
   // The Pepper instance which this controller is for. Will be null after
   // OnPepperInstanceDeleted() is called.
   PepperPluginInstanceImpl* instance_;
diff --git a/content/renderer/pepper/pepper_audio_output_host.cc b/content/renderer/pepper/pepper_audio_output_host.cc
new file mode 100644
index 0000000..6f264b9
--- /dev/null
+++ b/content/renderer/pepper/pepper_audio_output_host.cc
@@ -0,0 +1,265 @@
+// Copyright (c) 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 "content/renderer/pepper/pepper_audio_output_host.h"
+
+#include "base/logging.h"
+#include "build/build_config.h"
+#include "content/common/pepper_file_util.h"
+#include "content/renderer/pepper/pepper_audio_controller.h"
+#include "content/renderer/pepper/pepper_media_device_manager.h"
+#include "content/renderer/pepper/pepper_platform_audio_output_dev.h"
+#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
+#include "content/renderer/pepper/plugin_instance_throttler_impl.h"
+#include "content/renderer/pepper/renderer_ppapi_host_impl.h"
+#include "content/renderer/render_frame_impl.h"
+#include "ipc/ipc_message.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/host/dispatch_host_message.h"
+#include "ppapi/host/ppapi_host.h"
+#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/proxy/serialized_structs.h"
+
+namespace content {
+
+namespace {
+
+base::PlatformFile ConvertSyncSocketHandle(const base::SyncSocket& socket) {
+  return socket.handle();
+}
+
+}  // namespace
+
+PepperAudioOutputHost::PepperAudioOutputHost(RendererPpapiHostImpl* host,
+                                             PP_Instance instance,
+                                             PP_Resource resource)
+    : ResourceHost(host->GetPpapiHost(), instance, resource),
+      renderer_ppapi_host_(host),
+      audio_output_(NULL),
+      playback_throttled_(false),
+      enumeration_helper_(this,
+                          PepperMediaDeviceManager::GetForRenderFrame(
+                              host->GetRenderFrameForInstance(pp_instance())),
+                          PP_DEVICETYPE_DEV_AUDIOOUTPUT,
+                          host->GetDocumentURL(instance)) {
+  PepperPluginInstanceImpl* plugin_instance =
+      static_cast<PepperPluginInstanceImpl*>(
+          PepperPluginInstance::Get(pp_instance()));
+  if (plugin_instance && plugin_instance->throttler())
+    plugin_instance->throttler()->AddObserver(this);
+}
+
+PepperAudioOutputHost::~PepperAudioOutputHost() {
+  PepperPluginInstanceImpl* instance = static_cast<PepperPluginInstanceImpl*>(
+      PepperPluginInstance::Get(pp_instance()));
+  if (instance) {
+    if (instance->throttler()) {
+      instance->throttler()->RemoveObserver(this);
+    }
+    instance->audio_controller().RemoveInstance(this);
+  }
+  Close();
+}
+
+int32_t PepperAudioOutputHost::OnResourceMessageReceived(
+    const IPC::Message& msg,
+    ppapi::host::HostMessageContext* context) {
+  int32_t result = PP_ERROR_FAILED;
+  if (enumeration_helper_.HandleResourceMessage(msg, context, &result))
+    return result;
+
+  PPAPI_BEGIN_MESSAGE_MAP(PepperAudioOutputHost, msg)
+    PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_AudioOutput_Open, OnOpen)
+    PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_AudioOutput_StartOrStop,
+                                      OnStartOrStop)
+    PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_AudioOutput_Close, OnClose)
+  PPAPI_END_MESSAGE_MAP()
+  return PP_ERROR_FAILED;
+}
+
+void PepperAudioOutputHost::StreamCreated(
+    base::SharedMemoryHandle shared_memory_handle,
+    size_t shared_memory_size,
+    base::SyncSocket::Handle socket) {
+  OnOpenComplete(PP_OK, shared_memory_handle, shared_memory_size, socket);
+}
+
+void PepperAudioOutputHost::StreamCreationFailed() {
+  OnOpenComplete(PP_ERROR_FAILED, base::SharedMemory::NULLHandle(), 0,
+                 base::SyncSocket::kInvalidHandle);
+}
+
+void PepperAudioOutputHost::SetVolume(double volume) {
+  if (audio_output_)
+    audio_output_->SetVolume(volume);
+}
+
+int32_t PepperAudioOutputHost::OnOpen(ppapi::host::HostMessageContext* context,
+                                      const std::string& device_id,
+                                      PP_AudioSampleRate sample_rate,
+                                      uint32_t sample_frame_count) {
+  if (open_context_.is_valid())
+    return PP_ERROR_INPROGRESS;
+
+  if (audio_output_)
+    return PP_ERROR_FAILED;
+
+  GURL document_url = renderer_ppapi_host_->GetDocumentURL(pp_instance());
+  if (!document_url.is_valid())
+    return PP_ERROR_FAILED;
+
+  // When it is done, we'll get called back on StreamCreated() or
+  // StreamCreationFailed().
+  audio_output_ = PepperPlatformAudioOutputDev::Create(
+      renderer_ppapi_host_->GetRenderFrameForInstance(pp_instance())
+          ->GetRoutingID(),
+      device_id, document_url, static_cast<int>(sample_rate),
+      static_cast<int>(sample_frame_count), this);
+  if (audio_output_) {
+    open_context_ = context->MakeReplyMessageContext();
+    return PP_OK_COMPLETIONPENDING;
+  } else {
+    return PP_ERROR_FAILED;
+  }
+}
+
+int32_t PepperAudioOutputHost::OnStartOrStop(
+    ppapi::host::HostMessageContext* /* context */,
+    bool playback) {
+  if (!audio_output_)
+    return PP_ERROR_FAILED;
+
+  PepperPluginInstanceImpl* instance = static_cast<PepperPluginInstanceImpl*>(
+      PepperPluginInstance::Get(pp_instance()));
+
+  if (playback) {
+    // If plugin is in power saver mode, defer audio IPC communication.
+    if (instance && instance->throttler() &&
+        instance->throttler()->power_saver_enabled()) {
+      instance->throttler()->NotifyAudioThrottled();
+      playback_throttled_ = true;
+      return PP_TRUE;
+    }
+    if (instance)
+      instance->audio_controller().AddInstance(this);
+
+    audio_output_->StartPlayback();
+  } else {
+    if (instance)
+      instance->audio_controller().RemoveInstance(this);
+
+    audio_output_->StopPlayback();
+  }
+  return PP_OK;
+}
+
+int32_t PepperAudioOutputHost::OnClose(
+    ppapi::host::HostMessageContext* /* context */) {
+  Close();
+  return PP_OK;
+}
+
+void PepperAudioOutputHost::OnOpenComplete(
+    int32_t result,
+    base::SharedMemoryHandle shared_memory_handle,
+    size_t shared_memory_size,
+    base::SyncSocket::Handle socket_handle) {
+  // Make sure the handles are cleaned up.
+  base::SyncSocket scoped_socket(socket_handle);
+  base::SharedMemory scoped_shared_memory(shared_memory_handle, false);
+
+  if (!open_context_.is_valid()) {
+    NOTREACHED();
+    return;
+  }
+
+  ppapi::proxy::SerializedHandle serialized_socket_handle(
+      ppapi::proxy::SerializedHandle::SOCKET);
+  ppapi::proxy::SerializedHandle serialized_shared_memory_handle(
+      ppapi::proxy::SerializedHandle::SHARED_MEMORY);
+
+  if (result == PP_OK) {
+    IPC::PlatformFileForTransit temp_socket =
+        IPC::InvalidPlatformFileForTransit();
+    base::SharedMemoryHandle temp_shmem = base::SharedMemory::NULLHandle();
+    result = GetRemoteHandles(scoped_socket, scoped_shared_memory, &temp_socket,
+                              &temp_shmem);
+
+    serialized_socket_handle.set_socket(temp_socket);
+    serialized_shared_memory_handle.set_shmem(temp_shmem, shared_memory_size);
+  }
+
+  // Send all the values, even on error. This simplifies some of our cleanup
+  // code since the handles will be in the other process and could be
+  // inconvenient to clean up. Our IPC code will automatically handle this for
+  // us, as long as the remote side always closes the handles it receives, even
+  // in the failure case.
+  open_context_.params.AppendHandle(serialized_socket_handle);
+  open_context_.params.AppendHandle(serialized_shared_memory_handle);
+  SendOpenReply(result);
+}
+
+int32_t PepperAudioOutputHost::GetRemoteHandles(
+    const base::SyncSocket& socket,
+    const base::SharedMemory& shared_memory,
+    IPC::PlatformFileForTransit* remote_socket_handle,
+    base::SharedMemoryHandle* remote_shared_memory_handle) {
+  *remote_socket_handle = renderer_ppapi_host_->ShareHandleWithRemote(
+      ConvertSyncSocketHandle(socket), false);
+  if (*remote_socket_handle == IPC::InvalidPlatformFileForTransit())
+    return PP_ERROR_FAILED;
+
+  *remote_shared_memory_handle =
+      renderer_ppapi_host_->ShareSharedMemoryHandleWithRemote(
+          shared_memory.handle());
+  if (!base::SharedMemory::IsHandleValid(*remote_shared_memory_handle))
+    return PP_ERROR_FAILED;
+
+  return PP_OK;
+}
+
+void PepperAudioOutputHost::Close() {
+  if (!audio_output_)
+    return;
+
+  audio_output_->ShutDown();
+  audio_output_ = NULL;
+
+  if (open_context_.is_valid())
+    SendOpenReply(PP_ERROR_ABORTED);
+}
+
+void PepperAudioOutputHost::SendOpenReply(int32_t result) {
+  open_context_.params.set_result(result);
+  host()->SendReply(open_context_, PpapiPluginMsg_AudioOutput_OpenReply());
+  open_context_ = ppapi::host::ReplyMessageContext();
+}
+
+void PepperAudioOutputHost::OnThrottleStateChange() {
+  PepperPluginInstanceImpl* instance = static_cast<PepperPluginInstanceImpl*>(
+      PepperPluginInstance::Get(pp_instance()));
+  if (playback_throttled_ && instance && instance->throttler() &&
+      !instance->throttler()->power_saver_enabled()) {
+    // If we have become unthrottled, and we have a pending playback,
+    // start it.
+    StartDeferredPlayback();
+  }
+}
+
+void PepperAudioOutputHost::StartDeferredPlayback() {
+  if (!audio_output_)
+    return;
+
+  DCHECK(playback_throttled_);
+  playback_throttled_ = false;
+
+  PepperPluginInstanceImpl* instance = static_cast<PepperPluginInstanceImpl*>(
+      PepperPluginInstance::Get(pp_instance()));
+  if (instance)
+    instance->audio_controller().AddInstance(this);
+
+  audio_output_->StartPlayback();
+}
+
+}  // namespace content
diff --git a/content/renderer/pepper/pepper_audio_output_host.h b/content/renderer/pepper/pepper_audio_output_host.h
new file mode 100644
index 0000000..e8ea573
--- /dev/null
+++ b/content/renderer/pepper/pepper_audio_output_host.h
@@ -0,0 +1,97 @@
+// Copyright (c) 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.
+
+#ifndef CONTENT_RENDERER_PEPPER_PEPPER_AUDIO_OUTPUT_HOST_H_
+#define CONTENT_RENDERER_PEPPER_PEPPER_AUDIO_OUTPUT_HOST_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <memory>
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/memory/shared_memory.h"
+#include "base/sync_socket.h"
+#include "content/public/renderer/plugin_instance_throttler.h"
+#include "content/renderer/pepper/pepper_device_enumeration_host_helper.h"
+#include "ipc/ipc_platform_file.h"
+#include "ppapi/c/ppb_audio_config.h"
+#include "ppapi/host/host_message_context.h"
+#include "ppapi/host/resource_host.h"
+
+namespace content {
+class PepperPlatformAudioOutputDev;
+class RendererPpapiHostImpl;
+
+class PepperAudioOutputHost : public ppapi::host::ResourceHost,
+                              public PluginInstanceThrottler::Observer {
+ public:
+  PepperAudioOutputHost(RendererPpapiHostImpl* host,
+                        PP_Instance instance,
+                        PP_Resource resource);
+  ~PepperAudioOutputHost() override;
+
+  int32_t OnResourceMessageReceived(
+      const IPC::Message& msg,
+      ppapi::host::HostMessageContext* context) override;
+
+  // Called when the stream is created.
+  void StreamCreated(base::SharedMemoryHandle shared_memory_handle,
+                     size_t shared_memory_size,
+                     base::SyncSocket::Handle socket);
+  void StreamCreationFailed();
+  void SetVolume(double volume);
+
+ private:
+  int32_t OnOpen(ppapi::host::HostMessageContext* context,
+                 const std::string& device_id,
+                 PP_AudioSampleRate sample_rate,
+                 uint32_t sample_frame_count);
+  int32_t OnStartOrStop(ppapi::host::HostMessageContext* context,
+                        bool playback);
+  int32_t OnClose(ppapi::host::HostMessageContext* context);
+
+  void OnOpenComplete(int32_t result,
+                      base::SharedMemoryHandle shared_memory_handle,
+                      size_t shared_memory_size,
+                      base::SyncSocket::Handle socket_handle);
+
+  int32_t GetRemoteHandles(
+      const base::SyncSocket& socket,
+      const base::SharedMemory& shared_memory,
+      IPC::PlatformFileForTransit* remote_socket_handle,
+      base::SharedMemoryHandle* remote_shared_memory_handle);
+
+  void Close();
+
+  void SendOpenReply(int32_t result);
+
+  // PluginInstanceThrottler::Observer implementation.
+  void OnThrottleStateChange() override;
+
+  // Starts the deferred playback and unsubscribes from the throttler.
+  void StartDeferredPlayback();
+
+  // Non-owning pointer.
+  RendererPpapiHostImpl* renderer_ppapi_host_;
+
+  ppapi::host::ReplyMessageContext open_context_;
+
+  // Audio output object that we delegate audio IPC through.
+  // We don't own this pointer but are responsible for calling Shutdown on it.
+  PepperPlatformAudioOutputDev* audio_output_;
+
+  // Stream is playing, but throttled due to Plugin Power Saver.
+  bool playback_throttled_;
+
+  PepperDeviceEnumerationHostHelper enumeration_helper_;
+
+  DISALLOW_COPY_AND_ASSIGN(PepperAudioOutputHost);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_PEPPER_PEPPER_AUDIO_OUTPUT_HOST_H_
diff --git a/content/renderer/pepper/pepper_compositor_host.cc b/content/renderer/pepper/pepper_compositor_host.cc
index c0038dc..5c08126 100644
--- a/content/renderer/pepper/pepper_compositor_host.cc
+++ b/content/renderer/pepper/pepper_compositor_host.cc
@@ -16,7 +16,6 @@
 #include "cc/layers/texture_layer.h"
 #include "cc/resources/texture_mailbox.h"
 #include "cc/trees/layer_tree_host.h"
-#include "content/child/child_shared_bitmap_manager.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "content/renderer/pepper/gfx_conversion.h"
 #include "content/renderer/pepper/host_globals.h"
@@ -29,6 +28,7 @@
 #include "ppapi/proxy/ppapi_messages.h"
 #include "ppapi/thunk/enter.h"
 #include "ppapi/thunk/ppb_image_data_api.h"
+#include "services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h"
 #include "third_party/khronos/GLES2/gl2.h"
 #include "ui/gfx/geometry/size_conversions.h"
 #include "ui/gfx/transform.h"
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.cc b/content/renderer/pepper/pepper_graphics_2d_host.cc
index e8df984..c2f625f 100644
--- a/content/renderer/pepper/pepper_graphics_2d_host.cc
+++ b/content/renderer/pepper/pepper_graphics_2d_host.cc
@@ -17,7 +17,6 @@
 #include "cc/paint/paint_flags.h"
 #include "cc/resources/shared_bitmap.h"
 #include "cc/resources/texture_mailbox.h"
-#include "content/child/child_shared_bitmap_manager.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "content/renderer/pepper/gfx_conversion.h"
@@ -35,6 +34,7 @@
 #include "ppapi/proxy/ppapi_messages.h"
 #include "ppapi/shared_impl/ppb_view_shared.h"
 #include "ppapi/thunk/enter.h"
+#include "services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h"
 #include "skia/ext/platform_canvas.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkSwizzle.h"
diff --git a/content/renderer/pepper/pepper_media_device_manager.cc b/content/renderer/pepper/pepper_media_device_manager.cc
index 8888bb7..55a2fd0 100644
--- a/content/renderer/pepper/pepper_media_device_manager.cc
+++ b/content/renderer/pepper/pepper_media_device_manager.cc
@@ -25,6 +25,8 @@
       return PP_DEVICETYPE_DEV_AUDIOCAPTURE;
     case MEDIA_DEVICE_TYPE_VIDEO_INPUT:
       return PP_DEVICETYPE_DEV_VIDEOCAPTURE;
+    case MEDIA_DEVICE_TYPE_AUDIO_OUTPUT:
+      return PP_DEVICETYPE_DEV_AUDIOOUTPUT;
     default:
       NOTREACHED();
       return PP_DEVICETYPE_DEV_INVALID;
@@ -37,6 +39,8 @@
       return MEDIA_DEVICE_TYPE_AUDIO_INPUT;
     case PP_DEVICETYPE_DEV_VIDEOCAPTURE:
       return MEDIA_DEVICE_TYPE_VIDEO_INPUT;
+    case PP_DEVICETYPE_DEV_AUDIOOUTPUT:
+      return MEDIA_DEVICE_TYPE_AUDIO_OUTPUT;
     default:
       NOTREACHED();
       return MEDIA_DEVICE_TYPE_AUDIO_OUTPUT;
@@ -82,9 +86,10 @@
 #if BUILDFLAG(ENABLE_WEBRTC)
   bool request_audio_input = type == PP_DEVICETYPE_DEV_AUDIOCAPTURE;
   bool request_video_input = type == PP_DEVICETYPE_DEV_VIDEOCAPTURE;
-  CHECK(request_audio_input || request_video_input);
+  bool request_audio_output = type == PP_DEVICETYPE_DEV_AUDIOOUTPUT;
+  CHECK(request_audio_input || request_video_input || request_audio_output);
   GetMediaDevicesDispatcher()->EnumerateDevices(
-      request_audio_input, request_video_input, false /* audio_output */,
+      request_audio_input, request_video_input, request_audio_output,
       url::Origin(document_url.GetOrigin()),
       base::Bind(&PepperMediaDeviceManager::DevicesEnumerated, AsWeakPtr(),
                  callback, ToMediaDeviceType(type)));
diff --git a/content/renderer/pepper/pepper_platform_audio_output_dev.cc b/content/renderer/pepper/pepper_platform_audio_output_dev.cc
new file mode 100644
index 0000000..63bb2e4
--- /dev/null
+++ b/content/renderer/pepper/pepper_platform_audio_output_dev.cc
@@ -0,0 +1,407 @@
+// Copyright (c) 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 "content/renderer/pepper/pepper_platform_audio_output_dev.h"
+
+#include "base/bind.h"
+#include "base/location.h"
+#include "base/logging.h"
+#include "base/single_thread_task_runner.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "build/build_config.h"
+#include "content/child/child_process.h"
+#include "content/common/content_constants_internal.h"
+#include "content/common/media/audio_messages.h"
+#include "content/renderer/media/audio_message_filter.h"
+#include "content/renderer/pepper/audio_helper.h"
+#include "content/renderer/pepper/pepper_audio_output_host.h"
+#include "content/renderer/pepper/pepper_media_device_manager.h"
+#include "content/renderer/render_frame_impl.h"
+#include "content/renderer/render_thread_impl.h"
+#include "media/audio/audio_device_description.h"
+#include "ppapi/shared_impl/ppb_audio_config_shared.h"
+
+namespace content {
+
+// static
+PepperPlatformAudioOutputDev* PepperPlatformAudioOutputDev::Create(
+    int render_frame_id,
+    const std::string& device_id,
+    const GURL& document_url,
+    int sample_rate,
+    int frames_per_buffer,
+    PepperAudioOutputHost* client) {
+  scoped_refptr<PepperPlatformAudioOutputDev> audio_output(
+      new PepperPlatformAudioOutputDev(
+          render_frame_id, device_id, document_url,
+          // Set authorization request timeout at 80% of renderer hung timeout,
+          // but no more than kMaxAuthorizationTimeout.
+          base::TimeDelta::FromMilliseconds(std::min(
+              kHungRendererDelayMs * 8 / 10, kMaxAuthorizationTimeoutMs))));
+
+  if (audio_output->Initialize(sample_rate, frames_per_buffer, client)) {
+    // Balanced by Release invoked in
+    // PepperPlatformAudioOutputDev::ShutDownOnIOThread().
+    audio_output->AddRef();
+    return audio_output.get();
+  }
+  return NULL;
+}
+
+void PepperPlatformAudioOutputDev::RequestDeviceAuthorization() {
+  if (ipc_) {
+    io_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(
+            &PepperPlatformAudioOutputDev::RequestDeviceAuthorizationOnIOThread,
+            this));
+  }
+}
+
+bool PepperPlatformAudioOutputDev::StartPlayback() {
+  if (ipc_) {
+    io_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&PepperPlatformAudioOutputDev::StartPlaybackOnIOThread,
+                   this));
+    return true;
+  }
+  return false;
+}
+
+bool PepperPlatformAudioOutputDev::StopPlayback() {
+  if (ipc_) {
+    io_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&PepperPlatformAudioOutputDev::StopPlaybackOnIOThread,
+                   this));
+    return true;
+  }
+  return false;
+}
+
+bool PepperPlatformAudioOutputDev::SetVolume(double volume) {
+  if (ipc_) {
+    io_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&PepperPlatformAudioOutputDev::SetVolumeOnIOThread, this,
+                   volume));
+    return true;
+  }
+  return false;
+}
+
+void PepperPlatformAudioOutputDev::ShutDown() {
+  // Called on the main thread to stop all audio callbacks. We must only change
+  // the client on the main thread, and the delegates from the I/O thread.
+  client_ = NULL;
+  io_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&PepperPlatformAudioOutputDev::ShutDownOnIOThread, this));
+}
+
+void PepperPlatformAudioOutputDev::OnError() {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+
+  // Do nothing if the stream has been closed.
+  if (state_ < CREATING_STREAM)
+    return;
+
+  DLOG(WARNING) << "PepperPlatformAudioOutputDev::OnError()";
+}
+
+void PepperPlatformAudioOutputDev::OnDeviceAuthorized(
+    media::OutputDeviceStatus device_status,
+    const media::AudioParameters& output_params,
+    const std::string& matched_device_id) {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+
+  auth_timeout_action_.reset();
+
+  // Do nothing if late authorization is received after timeout.
+  if (state_ == IPC_CLOSED)
+    return;
+
+  LOG_IF(WARNING, device_status == media::OUTPUT_DEVICE_STATUS_ERROR_TIMED_OUT)
+      << "Output device authorization timed out";
+
+  DCHECK_EQ(state_, AUTHORIZING);
+
+  // It may happen that a second authorization is received as a result to a
+  // call to StartPlayback() after Shutdown(). If the status for the second
+  // authorization differs from the first, it will not be reflected in
+  // |device_status_| to avoid a race.
+  // This scenario is unlikely. If it occurs, the new value will be
+  // different from OUTPUT_DEVICE_STATUS_OK, so the PepperPlatformAudioOutputDev
+  // will enter the IPC_CLOSED state anyway, which is the safe thing to do.
+  // This is preferable to holding a lock.
+  if (!did_receive_auth_.IsSignaled())
+    device_status_ = device_status;
+
+  if (device_status == media::OUTPUT_DEVICE_STATUS_OK) {
+    state_ = AUTHORIZED;
+    if (!did_receive_auth_.IsSignaled()) {
+      output_params_ = output_params;
+
+      // It's possible to not have a matched device obtained via session id. It
+      // means matching output device through |session_id_| failed and the
+      // default device is used.
+      DCHECK(media::AudioDeviceDescription::UseSessionIdToSelectDevice(
+                 session_id_, device_id_) ||
+             matched_device_id_.empty());
+      matched_device_id_ = matched_device_id;
+
+      DVLOG(1) << "PepperPlatformAudioOutputDev authorized, session_id: "
+               << session_id_ << ", device_id: " << device_id_
+               << ", matched_device_id: " << matched_device_id_;
+
+      did_receive_auth_.Signal();
+    }
+    if (start_on_authorized_)
+      CreateStreamOnIOThread(params_);
+  } else {
+    // Closing IPC forces a Signal(), so no clients are locked waiting
+    // indefinitely after this method returns.
+    ipc_->CloseStream();
+    OnIPCClosed();
+    main_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&PepperPlatformAudioOutputDev::NotifyStreamCreationFailed,
+                   this));
+  }
+}
+
+void PepperPlatformAudioOutputDev::OnStreamCreated(
+    base::SharedMemoryHandle handle,
+    base::SyncSocket::Handle socket_handle,
+    int length) {
+#if defined(OS_WIN)
+  DCHECK(handle.IsValid());
+  DCHECK(socket_handle);
+#else
+  DCHECK(base::SharedMemory::IsHandleValid(handle));
+  DCHECK_NE(-1, socket_handle);
+#endif
+  DCHECK(length);
+
+  if (base::ThreadTaskRunnerHandle::Get().get() == main_task_runner_.get()) {
+    // Must dereference the client only on the main thread. Shutdown may have
+    // occurred while the request was in-flight, so we need to NULL check.
+    if (client_)
+      client_->StreamCreated(handle, length, socket_handle);
+  } else {
+    DCHECK(io_task_runner_->BelongsToCurrentThread());
+    if (state_ != CREATING_STREAM)
+      return;
+
+    state_ = PAUSED;
+    if (play_on_start_)
+      StartPlaybackOnIOThread();
+
+    main_task_runner_->PostTask(
+        FROM_HERE, base::Bind(&PepperPlatformAudioOutputDev::OnStreamCreated,
+                              this, handle, socket_handle, length));
+  }
+}
+
+void PepperPlatformAudioOutputDev::OnIPCClosed() {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+  state_ = IPC_CLOSED;
+  ipc_.reset();
+
+  // Signal to unblock any blocked threads waiting for parameters
+  did_receive_auth_.Signal();
+}
+
+PepperPlatformAudioOutputDev::~PepperPlatformAudioOutputDev() {
+  // Make sure we have been shut down. Warning: this will usually happen on
+  // the I/O thread!
+  DCHECK(!ipc_);
+  DCHECK(!client_);
+}
+
+PepperPlatformAudioOutputDev::PepperPlatformAudioOutputDev(
+    int render_frame_id,
+    const std::string& device_id,
+    const GURL& document_url,
+    base::TimeDelta authorization_timeout)
+    : client_(NULL),
+      main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+      io_task_runner_(ChildProcess::current()->io_task_runner()),
+      render_frame_id_(render_frame_id),
+      state_(IDLE),
+      start_on_authorized_(true),
+      play_on_start_(false),
+      session_id_(0),
+      device_id_(device_id),
+      security_origin_(document_url),
+      did_receive_auth_(base::WaitableEvent::ResetPolicy::MANUAL,
+                        base::WaitableEvent::InitialState::NOT_SIGNALED),
+      device_status_(media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL),
+      auth_timeout_(authorization_timeout) {}
+
+bool PepperPlatformAudioOutputDev::Initialize(int sample_rate,
+                                              int frames_per_buffer,
+                                              PepperAudioOutputHost* client) {
+  DCHECK(main_task_runner_->BelongsToCurrentThread());
+
+  RenderFrameImpl* const render_frame =
+      RenderFrameImpl::FromRoutingID(render_frame_id_);
+  if (!render_frame || !client)
+    return false;
+
+  client_ = client;
+
+  RenderThreadImpl* const render_thread = RenderThreadImpl::current();
+  ipc_ = render_thread->audio_message_filter()->CreateAudioOutputIPC(
+      render_frame_id_);
+  CHECK(ipc_);
+
+  params_.Reset(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                media::CHANNEL_LAYOUT_STEREO, sample_rate,
+                ppapi::kBitsPerAudioOutputSample, frames_per_buffer);
+
+  io_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&PepperPlatformAudioOutputDev::CreateStreamOnIOThread, this,
+                 params_));
+
+  return true;
+}
+
+void PepperPlatformAudioOutputDev::RequestDeviceAuthorizationOnIOThread() {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+  DCHECK_EQ(state_, IDLE);
+
+  if (!ipc_)
+    return;
+
+  state_ = AUTHORIZING;
+  ipc_->RequestDeviceAuthorization(this, session_id_, device_id_,
+                                   security_origin_);
+
+  if (auth_timeout_ > base::TimeDelta()) {
+    // Create the timer on the thread it's used on. It's guaranteed to be
+    // deleted on the same thread since users must call ShutDown() before
+    // deleting PepperPlatformAudioOutputDev; see ShutDownOnIOThread().
+    auth_timeout_action_.reset(new base::OneShotTimer());
+    auth_timeout_action_->Start(
+        FROM_HERE, auth_timeout_,
+        base::Bind(&PepperPlatformAudioOutputDev::OnDeviceAuthorized, this,
+                   media::OUTPUT_DEVICE_STATUS_ERROR_TIMED_OUT,
+                   media::AudioParameters(), std::string()));
+  }
+}
+
+void PepperPlatformAudioOutputDev::CreateStreamOnIOThread(
+    const media::AudioParameters& params) {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+  switch (state_) {
+    case IPC_CLOSED:
+      main_task_runner_->PostTask(
+          FROM_HERE,
+          base::Bind(&PepperPlatformAudioOutputDev::NotifyStreamCreationFailed,
+                     this));
+      break;
+
+    case IDLE:
+      if (did_receive_auth_.IsSignaled() && device_id_.empty() &&
+          security_origin_.unique()) {
+        state_ = CREATING_STREAM;
+        ipc_->CreateStream(this, params);
+      } else {
+        RequestDeviceAuthorizationOnIOThread();
+        start_on_authorized_ = true;
+      }
+      break;
+
+    case AUTHORIZING:
+      start_on_authorized_ = true;
+      break;
+
+    case AUTHORIZED:
+      state_ = CREATING_STREAM;
+      ipc_->CreateStream(this, params);
+      start_on_authorized_ = false;
+      break;
+
+    case CREATING_STREAM:
+    case PAUSED:
+    case PLAYING:
+      NOTREACHED();
+      break;
+  }
+}
+
+void PepperPlatformAudioOutputDev::StartPlaybackOnIOThread() {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+  if (!ipc_)
+    return;
+
+  if (state_ == PAUSED) {
+    ipc_->PlayStream();
+    state_ = PLAYING;
+    play_on_start_ = false;
+  } else {
+    if (state_ < CREATING_STREAM)
+      CreateStreamOnIOThread(params_);
+
+    play_on_start_ = true;
+  }
+}
+
+void PepperPlatformAudioOutputDev::StopPlaybackOnIOThread() {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+  if (!ipc_)
+    return;
+
+  if (state_ == PLAYING) {
+    ipc_->PauseStream();
+    state_ = PAUSED;
+  }
+  play_on_start_ = false;
+}
+
+void PepperPlatformAudioOutputDev::SetVolumeOnIOThread(double volume) {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+  if (!ipc_)
+    return;
+
+  if (state_ >= CREATING_STREAM)
+    ipc_->SetVolume(volume);
+}
+
+void PepperPlatformAudioOutputDev::ShutDownOnIOThread() {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+
+  // Make sure we don't call shutdown more than once.
+  if (!ipc_)
+    return;
+
+  // Close the stream, if we haven't already.
+  if (state_ >= AUTHORIZING) {
+    ipc_->CloseStream();
+    ipc_.reset();
+    state_ = IDLE;
+  }
+  start_on_authorized_ = false;
+
+  // Destoy the timer on the thread it's used on.
+  auth_timeout_action_.reset();
+
+  // Release for the delegate, balances out the reference taken in
+  // PepperPlatformAudioOutputDev::Create.
+  Release();
+}
+
+void PepperPlatformAudioOutputDev::NotifyStreamCreationFailed() {
+  DCHECK(main_task_runner_->BelongsToCurrentThread());
+
+  if (client_)
+    client_->StreamCreationFailed();
+}
+
+}  // namespace content
diff --git a/content/renderer/pepper/pepper_platform_audio_output_dev.h b/content/renderer/pepper/pepper_platform_audio_output_dev.h
new file mode 100644
index 0000000..50d4537a
--- /dev/null
+++ b/content/renderer/pepper/pepper_platform_audio_output_dev.h
@@ -0,0 +1,162 @@
+// Copyright (c) 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.
+
+#ifndef CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_AUDIO_OUTPUT_DEV_H_
+#define CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_AUDIO_OUTPUT_DEV_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "media/audio/audio_output_ipc.h"
+#include "media/base/audio_parameters.h"
+#include "media/base/output_device_info.h"
+
+namespace base {
+class OneShotTimer;
+class SingleThreadTaskRunner;
+}
+
+namespace {
+#if defined(OS_WIN) || defined(OS_MACOSX)
+const int64_t kMaxAuthorizationTimeoutMs = 4000;
+#else
+const int64_t kMaxAuthorizationTimeoutMs = 0;  // No timeout.
+#endif
+}
+
+namespace content {
+class PepperAudioOutputHost;
+
+// This class is used to support new PPAPI |PPB_AudioOutput_Dev|, while
+// |PepperPlatformAudioOutput| is to support old PPAPI |PPB_Audio|.
+class PepperPlatformAudioOutputDev
+    : public media::AudioOutputIPCDelegate,
+      public base::RefCountedThreadSafe<PepperPlatformAudioOutputDev> {
+ public:
+  // Factory function, returns NULL on failure. StreamCreated() will be called
+  // when the stream is created.
+  static PepperPlatformAudioOutputDev* Create(int render_frame_id,
+                                              const std::string& device_id,
+                                              const GURL& document_url,
+                                              int sample_rate,
+                                              int frames_per_buffer,
+                                              PepperAudioOutputHost* client);
+
+  // The following three methods are all called on main thread.
+
+  // Request authorization to use the device.
+  void RequestDeviceAuthorization();
+
+  // Starts the playback. Returns false on error or if called before the
+  // stream is created or after the stream is closed.
+  bool StartPlayback();
+
+  // Stops the playback. Returns false on error or if called before the stream
+  // is created or after the stream is closed.
+  bool StopPlayback();
+
+  // Sets the volume. Returns false on error or if called before the stream
+  // is created or after the stream is closed.
+  bool SetVolume(double volume);
+
+  // Closes the stream. Make sure to call this before the object is
+  // destructed.
+  void ShutDown();
+
+  // media::AudioOutputIPCDelegate implementation.
+  void OnError() override;
+  void OnDeviceAuthorized(media::OutputDeviceStatus device_status,
+                          const media::AudioParameters& output_params,
+                          const std::string& matched_device_id) override;
+  void OnStreamCreated(base::SharedMemoryHandle handle,
+                       base::SyncSocket::Handle socket_handle,
+                       int length) override;
+  void OnIPCClosed() override;
+
+ protected:
+  ~PepperPlatformAudioOutputDev() override;
+
+ private:
+  enum State {
+    IPC_CLOSED,       // No more IPCs can take place.
+    IDLE,             // Not started.
+    AUTHORIZING,      // Sent device authorization request, waiting for reply.
+    AUTHORIZED,       // Successful device authorization received.
+    CREATING_STREAM,  // Waiting for OnStreamCreated() to be called back.
+    PAUSED,   // Paused.  OnStreamCreated() has been called.  Can Play()/Stop().
+    PLAYING,  // Playing back.  Can Pause()/Stop().
+  };
+
+  friend class base::RefCountedThreadSafe<PepperPlatformAudioOutputDev>;
+
+  PepperPlatformAudioOutputDev();
+  PepperPlatformAudioOutputDev(int render_frame_id,
+                               const std::string& device_id,
+                               const GURL& document_url,
+                               base::TimeDelta authorization_timeout);
+
+  // Creates audio stream. Used for new Pepper audio output interface
+  // |PPB_AudioOutput_Dev|.
+  bool Initialize(int sample_rate,
+                  int frames_per_buffer,
+                  PepperAudioOutputHost* client);
+
+  void RequestDeviceAuthorizationOnIOThread();
+  void CreateStreamOnIOThread(const media::AudioParameters& params);
+  void StartPlaybackOnIOThread();
+  void StopPlaybackOnIOThread();
+  void SetVolumeOnIOThread(double volume);
+  void ShutDownOnIOThread();
+
+  void NotifyStreamCreationFailed();
+
+  PepperAudioOutputHost* client_;
+
+  // Used to send/receive IPC. THIS MUST ONLY BE ACCESSED ON THE
+  // I/O thread except to send messages and get the message loop.
+  std::unique_ptr<media::AudioOutputIPC> ipc_;
+
+  scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
+  scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
+
+  // The frame containing the Pepper widget.
+  int render_frame_id_;
+
+  // Initialized on the main thread and accessed on the I/O thread afterwards.
+  media::AudioParameters params_;
+
+  // Current state (must only be accessed from the IO thread).
+  State state_;
+
+  // State of Start() calls before OnDeviceAuthorized() is called.
+  bool start_on_authorized_;
+
+  // State of StartPlayback() calls before OnStreamCreated() is called.
+  bool play_on_start_;
+
+  // The media session ID used to identify which output device to be started.
+  int session_id_;
+
+  // ID of hardware output device to be used (provided session_id_ is zero)
+  const std::string device_id_;
+  const url::Origin security_origin_;
+
+  // If |device_id_| is empty and |session_id_| is not, |matched_device_id_| is
+  // received in OnDeviceAuthorized().
+  std::string matched_device_id_;
+
+  base::WaitableEvent did_receive_auth_;
+  media::AudioParameters output_params_;
+  media::OutputDeviceStatus device_status_;
+
+  const base::TimeDelta auth_timeout_;
+  std::unique_ptr<base::OneShotTimer> auth_timeout_action_;
+
+  DISALLOW_COPY_AND_ASSIGN(PepperPlatformAudioOutputDev);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_AUDIO_OUTPUT_DEV_H_
diff --git a/content/renderer/pepper/plugin_module.cc b/content/renderer/pepper/plugin_module.cc
index 7db5c1a8..839dc1b 100644
--- a/content/renderer/pepper/plugin_module.cc
+++ b/content/renderer/pepper/plugin_module.cc
@@ -35,6 +35,7 @@
 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
 #include "content/renderer/render_view_impl.h"
 #include "ppapi/c/dev/ppb_audio_input_dev.h"
+#include "ppapi/c/dev/ppb_audio_output_dev.h"
 #include "ppapi/c/dev/ppb_buffer_dev.h"
 #include "ppapi/c/dev/ppb_char_set_dev.h"
 #include "ppapi/c/dev/ppb_crypto_dev.h"
diff --git a/content/renderer/pepper/resource_creation_impl.cc b/content/renderer/pepper/resource_creation_impl.cc
index 0101196..073a0b0 100644
--- a/content/renderer/pepper/resource_creation_impl.cc
+++ b/content/renderer/pepper/resource_creation_impl.cc
@@ -73,6 +73,10 @@
   return 0;  // Not supported in-process.
 }
 
+PP_Resource ResourceCreationImpl::CreateAudioOutput(PP_Instance instance) {
+  return 0;  // Not supported in-process.
+}
+
 PP_Resource ResourceCreationImpl::CreateCompositor(PP_Instance instance) {
   return 0;  // Not supported in-process.
 }
diff --git a/content/renderer/pepper/resource_creation_impl.h b/content/renderer/pepper/resource_creation_impl.h
index 5f48569..3e05ba3 100644
--- a/content/renderer/pepper/resource_creation_impl.h
+++ b/content/renderer/pepper/resource_creation_impl.h
@@ -39,6 +39,7 @@
                                 PP_AudioSampleRate sample_rate,
                                 uint32_t sample_frame_count) override;
   PP_Resource CreateAudioInput(PP_Instance instance) override;
+  PP_Resource CreateAudioOutput(PP_Instance instance) override;
   PP_Resource CreateCompositor(PP_Instance instance) override;
   PP_Resource CreateBroker(PP_Instance instance) override;
   PP_Resource CreateBuffer(PP_Instance instance, uint32_t size) override;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 08a77e2..e3f729bf 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2798,6 +2798,15 @@
 #endif  // BUILDFLAG(ENABLE_PLUGINS)
 }
 
+const scoped_refptr<RenderMediaLog>& RenderFrameImpl::GetMediaLog() {
+  if (!media_log_.get()) {
+    media_log_ =
+        new RenderMediaLog(url::Origin(frame_->getSecurityOrigin()).GetURL());
+  }
+
+  return media_log_;
+}
+
 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
     const blink::WebMediaPlayerSource& source,
     WebMediaPlayerClient* client,
@@ -2833,9 +2842,6 @@
       &GetSharedMainThreadContext3D,
       RenderThreadImpl::current()->SharedMainThreadContextProvider());
 
-  scoped_refptr<media::MediaLog> media_log(
-      new RenderMediaLog(url::Origin(frame_->getSecurityOrigin()).GetURL()));
-
   bool embedded_media_experience_enabled = false;
 #if defined(OS_ANDROID)
   if (!UseMediaPlayerRenderer(url) && !media_surface_manager_)
@@ -2865,7 +2871,8 @@
                  base::Unretained(GetContentClient()->renderer()),
                  static_cast<RenderFrame*>(this),
                  GetWebMediaPlayerDelegate()->has_played_media()),
-      audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(),
+      audio_renderer_sink, GetMediaLog(),
+      render_thread->GetMediaThreadTaskRunner(),
       render_thread->GetWorkerTaskRunner(),
       render_thread->compositor_task_runner(), context_3d_cb,
       base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory,
@@ -2904,7 +2911,7 @@
     if (base::CommandLine::ForCurrentProcess()->HasSwitch(
             switches::kDisableMojoRenderer)) {
       media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>(
-          media_log, GetDecoderFactory(),
+          GetMediaLog(), GetDecoderFactory(),
           base::Bind(&RenderThreadImpl::GetGpuFactories,
                      base::Unretained(render_thread)));
     }
@@ -2917,7 +2924,7 @@
     }
 #else
     media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>(
-        media_log, GetDecoderFactory(),
+        GetMediaLog(), GetDecoderFactory(),
         base::Bind(&RenderThreadImpl::GetGpuFactories,
                    base::Unretained(render_thread)));
 #endif  // defined(ENABLE_MOJO_RENDERER)
@@ -4656,7 +4663,7 @@
         // callback.
         base::Bind(&RenderFrameImpl::AreSecureCodecsSupported,
                    base::Unretained(this)),
-        GetCdmFactory(), GetMediaPermission()));
+        GetCdmFactory(), GetMediaPermission(), GetMediaLog()));
   }
   return web_encrypted_media_client_.get();
 }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 4f338df..872adbe 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -154,6 +154,7 @@
 class RendererMediaPlayerManager;
 class RendererPpapiHost;
 class RenderFrameObserver;
+class RenderMediaLog;
 class RenderViewImpl;
 class RenderWidget;
 class RenderWidgetFullscreenPepper;
@@ -1118,6 +1119,9 @@
 
   void InitializeBlameContext(RenderFrameImpl* parent_frame);
 
+  // Lazy constructs a RenderMediaLog for use across owned media objects.
+  const scoped_refptr<RenderMediaLog>& GetMediaLog();
+
   // Stores the WebLocalFrame we are associated with.  This is null from the
   // constructor until BindToWebFrame is called, and it is null after
   // frameDetached is called until destruction (which is asynchronous in the
@@ -1238,6 +1242,8 @@
   // Destroyed via the RenderFrameObserver::OnDestruct() mechanism.
   UserMediaClientImpl* web_user_media_client_;
 
+  scoped_refptr<RenderMediaLog> media_log_;
+
   // EncryptedMediaClient attached to this frame; lazily initialized.
   std::unique_ptr<media::WebEncryptedMediaClientImpl>
       web_encrypted_media_client_;
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 07a2abf..5de9361 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -56,7 +56,6 @@
 #include "content/child/blob_storage/blob_message_filter.h"
 #include "content/child/child_histogram_message_filter.h"
 #include "content/child/child_resource_message_filter.h"
-#include "content/child/child_shared_bitmap_manager.h"
 #include "content/child/content_child_helpers.h"
 #include "content/child/db_message_filter.h"
 #include "content/child/indexed_db/indexed_db_dispatcher.h"
@@ -145,6 +144,7 @@
 #include "services/service_manager/public/cpp/connector.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 #include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h"
 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h"
 #include "services/ui/public/interfaces/constants.mojom.h"
 #include "skia/ext/event_tracer_impl.h"
@@ -555,13 +555,6 @@
 }
 
 // static
-const scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>&
-RenderThreadImpl::current_thread_safe_render_message_filter() {
-  DCHECK(current());
-  return current()->thread_safe_render_message_filter();
-}
-
-// static
 void RenderThreadImpl::SetRenderMessageFilterForTesting(
     mojom::RenderMessageFilter* render_message_filter) {
   g_render_message_filter_for_testing = render_message_filter;
@@ -635,10 +628,13 @@
       IsRunningInMash() ? ui::mojom::kServiceName : mojom::kBrowserServiceName,
       GetIOTaskRunner());
 
-  channel()->GetThreadSafeRemoteAssociatedInterface(
-      &thread_safe_render_message_filter_);
-  shared_bitmap_manager_.reset(
-      new ChildSharedBitmapManager(thread_safe_render_message_filter_));
+  cc::mojom::SharedBitmapManagerAssociatedPtr shared_bitmap_manager_ptr;
+  render_message_filter()->GetSharedBitmapManager(
+      mojo::MakeRequest(&shared_bitmap_manager_ptr));
+  shared_bitmap_manager_.reset(new ui::ChildSharedBitmapManager(
+      cc::mojom::ThreadSafeSharedBitmapManagerAssociatedPtr::Create(
+          shared_bitmap_manager_ptr.PassInterface(),
+          GetChannel()->ipc_task_runner_refptr())));
 
   InitializeWebKit(resource_task_queue);
 
@@ -2075,11 +2071,6 @@
   return render_message_filter_.get();
 }
 
-const scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>&
-RenderThreadImpl::thread_safe_render_message_filter() {
-  return thread_safe_render_message_filter_;
-}
-
 gpu::GpuChannelHost* RenderThreadImpl::GetGpuChannel() {
   if (!gpu_channel_)
     return nullptr;
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index ffecef1..83960ac 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -95,6 +95,7 @@
 }
 
 namespace ui {
+class ChildSharedBitmapManager;
 class ContextProviderCommandBuffer;
 class Gpu;
 }
@@ -113,7 +114,6 @@
 class BlobMessageFilter;
 class BrowserPluginManager;
 class CacheStorageDispatcher;
-class ChildSharedBitmapManager;
 class CompositorForwardingMessageFilter;
 class DBMessageFilter;
 class DevToolsAgentFilter;
@@ -170,8 +170,6 @@
       std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler);
   static RenderThreadImpl* current();
   static mojom::RenderMessageFilter* current_render_message_filter();
-  static const scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>&
-  current_thread_safe_render_message_filter();
 
   static void SetRenderMessageFilterForTesting(
       mojom::RenderMessageFilter* render_message_filter);
@@ -362,15 +360,13 @@
     return vc_manager_.get();
   }
 
-  ChildSharedBitmapManager* shared_bitmap_manager() const {
+  ui::ChildSharedBitmapManager* shared_bitmap_manager() const {
     DCHECK(shared_bitmap_manager_);
     return shared_bitmap_manager_.get();
   }
 
   mojom::RenderFrameMessageFilter* render_frame_message_filter();
   mojom::RenderMessageFilter* render_message_filter();
-  const scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>&
-  thread_safe_render_message_filter();
 
   // Get the GPU channel. Returns NULL if the channel is not established or
   // has been lost.
@@ -643,7 +639,7 @@
   // Used on the render thread.
   std::unique_ptr<VideoCaptureImplManager> vc_manager_;
 
-  std::unique_ptr<ChildSharedBitmapManager> shared_bitmap_manager_;
+  std::unique_ptr<ui::ChildSharedBitmapManager> shared_bitmap_manager_;
 
   // The count of RenderWidgets running through this thread.
   int widget_count_;
@@ -780,8 +776,6 @@
 
   mojom::RenderFrameMessageFilterAssociatedPtr render_frame_message_filter_;
   mojom::RenderMessageFilterAssociatedPtr render_message_filter_;
-  scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>
-      thread_safe_render_message_filter_;
 
   base::CancelableClosure record_purge_suspend_metric_closure_;
   RendererMemoryMetrics purge_and_suspend_memory_metrics_;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 3c12a24..7a26265 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -41,7 +41,6 @@
 #include "cc/paint/skia_paint_canvas.h"
 #include "content/child/appcache/appcache_dispatcher.h"
 #include "content/child/appcache/web_application_cache_host_impl.h"
-#include "content/child/child_shared_bitmap_manager.h"
 #include "content/child/request_extra_data.h"
 #include "content/child/v8_value_converter_impl.h"
 #include "content/child/webmessageportchannel_impl.h"
@@ -109,6 +108,7 @@
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "net/http/http_util.h"
 #include "ppapi/features/features.h"
+#include "services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h"
 #include "skia/ext/platform_canvas.h"
 #include "third_party/WebKit/public/platform/FilePathConversion.h"
 #include "third_party/WebKit/public/platform/URLConversion.h"
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index 23379f46..839acd23 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -25,7 +25,6 @@
 #include "build/build_config.h"
 #include "components/url_formatter/url_formatter.h"
 #include "content/child/blob_storage/webblobregistry_impl.h"
-#include "content/child/child_shared_bitmap_manager.h"
 #include "content/child/database_util.h"
 #include "content/child/file_info_util.h"
 #include "content/child/fileapi/webfilesystem_impl.h"
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
index 0a46d4a..afce682 100644
--- a/content/renderer/renderer_blink_platform_impl.h
+++ b/content/renderer/renderer_blink_platform_impl.h
@@ -16,12 +16,12 @@
 #include "build/build_config.h"
 #include "cc/blink/web_compositor_support_impl.h"
 #include "content/child/blink_platform_impl.h"
-#include "content/child/child_shared_bitmap_manager.h"
 #include "content/common/content_export.h"
 #include "content/common/url_loader_factory.mojom.h"
 #include "content/renderer/origin_trials/web_trial_token_validator_impl.h"
 #include "content/renderer/top_level_blame_context.h"
 #include "content/renderer/webpublicsuffixlist_impl.h"
+#include "services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h"
 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBFactory.h"
 #include "third_party/WebKit/public/platform/modules/screen_orientation/WebScreenOrientationType.h"
 
@@ -283,7 +283,7 @@
   scoped_refptr<IPC::SyncMessageFilter> sync_message_filter_;
   scoped_refptr<ThreadSafeSender> thread_safe_sender_;
   scoped_refptr<QuotaMessageFilter> quota_message_filter_;
-  ChildSharedBitmapManager* shared_bitmap_manager_;
+  ui::ChildSharedBitmapManager* shared_bitmap_manager_;
 
   std::unique_ptr<WebDatabaseObserverImpl> web_database_observer_impl_;
 
diff --git a/content/shell/browser/layout_test/blink_test_controller.cc b/content/shell/browser/layout_test/blink_test_controller.cc
index e64906e..2d27bdd9 100644
--- a/content/shell/browser/layout_test/blink_test_controller.cc
+++ b/content/shell/browser/layout_test/blink_test_controller.cc
@@ -837,9 +837,10 @@
     devtools_window_.reset(content::Shell::CreateNewWindow(
         browser_context, GURL(), nullptr, initial_size_));
   }
-  devtools_bindings_.reset(new LayoutTestDevToolsBindings(
-      devtools_window_->web_contents(), main_window_->web_contents()));
-  devtools_bindings_->LoadDevTools(settings, frontend_url);
+
+  devtools_bindings_.reset(LayoutTestDevToolsBindings::LoadDevTools(
+      devtools_window_->web_contents(), main_window_->web_contents(), settings,
+      frontend_url));
   devtools_window_->web_contents()->GetRenderViewHost()->GetWidget()->Focus();
   devtools_window_->web_contents()->Focus();
 }
diff --git a/content/shell/browser/layout_test/layout_test_devtools_bindings.cc b/content/shell/browser/layout_test/layout_test_devtools_bindings.cc
index 5fece25..529e1f99 100644
--- a/content/shell/browser/layout_test/layout_test_devtools_bindings.cc
+++ b/content/shell/browser/layout_test/layout_test_devtools_bindings.cc
@@ -68,17 +68,24 @@
   return GURL(url_string);
 }
 
-void LayoutTestDevToolsBindings::LoadDevTools(const std::string& settings,
-                                              const std::string& frontend_url) {
-  SetPreferences(settings);
+// static
+LayoutTestDevToolsBindings* LayoutTestDevToolsBindings::LoadDevTools(
+    WebContents* devtools_contents_,
+    WebContents* inspected_contents_,
+    const std::string& settings,
+    const std::string& frontend_url) {
+  LayoutTestDevToolsBindings* bindings =
+      new LayoutTestDevToolsBindings(devtools_contents_, inspected_contents_);
+  bindings->SetPreferences(settings);
   GURL devtools_url =
       LayoutTestDevToolsBindings::GetDevToolsPathAsURL(frontend_url);
   NavigationController::LoadURLParams params(devtools_url);
   params.transition_type = ui::PageTransitionFromInt(
       ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
-  web_contents()->GetController().LoadURLWithParams(params);
-  web_contents()->Focus();
-  CreateFrontendHost();
+  bindings->web_contents()->GetController().LoadURLWithParams(params);
+  bindings->web_contents()->Focus();
+  bindings->CreateFrontendHost();
+  return bindings;
 }
 
 void LayoutTestDevToolsBindings::EvaluateInFrontend(int call_id,
diff --git a/content/shell/browser/layout_test/layout_test_devtools_bindings.h b/content/shell/browser/layout_test/layout_test_devtools_bindings.h
index 9eac111..1b443e1 100644
--- a/content/shell/browser/layout_test/layout_test_devtools_bindings.h
+++ b/content/shell/browser/layout_test/layout_test_devtools_bindings.h
@@ -15,20 +15,23 @@
 
 class LayoutTestDevToolsBindings : public ShellDevToolsBindings {
  public:
-  LayoutTestDevToolsBindings(WebContents* devtools_contents,
-                             WebContents* inspected_contents);
-
   static GURL GetDevToolsPathAsURL(const std::string& frontend_url);
 
   static GURL MapJSTestURL(const GURL& test_url);
 
-  void LoadDevTools(const std::string& settings,
-                    const std::string& frontend_url);
+  static LayoutTestDevToolsBindings* LoadDevTools(
+      WebContents* devtools_contents_,
+      WebContents* inspected_contents_,
+      const std::string& settings,
+      const std::string& frontend_url);
   void EvaluateInFrontend(int call_id, const std::string& expression);
 
   ~LayoutTestDevToolsBindings() override;
 
  private:
+  LayoutTestDevToolsBindings(WebContents* devtools_contents,
+                             WebContents* inspected_contents);
+
   // ShellDevToolsBindings overrides.
   void HandleMessageFromDevToolsFrontend(const std::string& message) override;
 
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 03c74fa..c545c69a 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -1359,7 +1359,6 @@
     "../common/dom_storage/dom_storage_map_unittest.cc",
     "../common/feature_policy/feature_policy_unittest.cc",
     "../common/fileapi/file_system_util_unittest.cc",
-    "../common/host_shared_bitmap_manager_unittest.cc",
     "../common/indexed_db/indexed_db_key_unittest.cc",
     "../common/input/event_with_latency_info_unittest.cc",
     "../common/input/gesture_event_stream_validator_unittest.cc",
@@ -1410,7 +1409,6 @@
     "../renderer/media/audio_renderer_sink_cache_unittest.cc",
     "../renderer/media/mock_audio_device_factory.cc",
     "../renderer/media/mock_audio_device_factory.h",
-    "../renderer/media/render_media_client_unittest.cc",
     "../renderer/media/render_media_log_unittest.cc",
     "../renderer/media/renderer_webaudiodevice_impl_unittest.cc",
     "../renderer/media/video_capture_impl_manager_unittest.cc",
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py
index aa3ae6ed..511b009 100644
--- a/content/test/gpu/gpu_tests/pixel_expectations.py
+++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -28,12 +28,6 @@
     self.Fail('Pixel_ScissorTestWithPreserveDrawingBuffer',
         ['android'], bug=521588)
 
-    # TODO(junov) needs new baseline
-    self.Fail('Pixel_OffscreenCanvasTransferToImageBitmap',
-        bug=585607)
-    self.Fail('Pixel_OffscreenCanvasTransferToImageBitmapWorker',
-        bug=585607)
-
     # TODO(ccameron) fix these on Mac Retina
     self.Fail('Pixel_CSS3DBlueBox', ['mac'], bug=533690)
 
@@ -56,10 +50,8 @@
     self.Flaky('Pixel_OffscreenCanvas2DResizeOnWorker',
         ['win10', ('intel', 0x1912)], bug=690663)
 
-    # TODO(jbauman): Times out on Linux NVIDIA.
-    self.Fail('Pixel_Video_VP9', ['linux', 'nvidia'], bug=704389)
-    # TODO(jbauman): Times out on Pixel C.
-    self.Fail('Pixel_Video_VP9', ['android', 'nvidia'], bug=704389)
+    # TODO(jbauman): Re-enable when references images created.
+    self.Fail('Pixel_DirectComposition_Video_*', ['win'], bug=704389)
 
     # TODO(xlai): Remove this after test dimension is shrunk
     # Intended to skip only Nexus 5
diff --git a/content/test/gpu/gpu_tests/pixel_integration_test.py b/content/test/gpu/gpu_tests/pixel_integration_test.py
index 8690d69..85e31be 100644
--- a/content/test/gpu/gpu_tests/pixel_integration_test.py
+++ b/content/test/gpu/gpu_tests/pixel_integration_test.py
@@ -122,6 +122,8 @@
     pages += pixel_test_pages.ExperimentalCanvasFeaturesPages(name)
     if sys.platform.startswith('darwin'):
       pages += pixel_test_pages.MacSpecificPages(name)
+    if sys.platform.startswith('win'):
+      pages += pixel_test_pages.DirectCompositionPages(name)
     for p in pages:
       yield(p.name, gpu_relative_path + p.url, (p))
 
diff --git a/content/test/gpu/gpu_tests/pixel_test_pages.py b/content/test/gpu/gpu_tests/pixel_test_pages.py
index 4046f2b..acc40096 100644
--- a/content/test/gpu/gpu_tests/pixel_test_pages.py
+++ b/content/test/gpu/gpu_tests/pixel_test_pages.py
@@ -487,3 +487,21 @@
       tolerance=10,
       browser_args=['--disable-mac-overlays']),
   ]
+
+def DirectCompositionPages(base_name):
+  browser_args = ['--enable-direct-composition-layers']
+  return [
+    PixelTestPage(
+      'pixel_video_mp4.html',
+      base_name + '_DirectComposition_Video_MP4',
+      test_rect=[0, 0, 300, 300],
+      revision=1,
+      browser_args=browser_args),
+
+    PixelTestPage(
+      'pixel_video_vp9.html',
+      base_name + '_DirectComposition_Video_VP9',
+      test_rect=[0, 0, 300, 300],
+      revision=1,
+      browser_args=browser_args),
+  ]
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
index 15e6564..5426567b 100644
--- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -44,6 +44,10 @@
     self.Flaky('conformance2/query/occlusion-query.html', bug=603168)
     self.Fail('conformance2/glsl3/tricky-loop-conditions.html', bug=483282)
 
+    # Temporary suppression; will be removed after bug fix.
+    self.Fail('conformance/textures/misc/texture-corner-case-videos.html',
+              bug=701060)
+
     self.Fail('conformance2/rendering/depth-stencil-feedback-loop.html',
         bug=660844) # WebGL 2.0.1
     self.Fail('conformance2/rendering/rendering-sampling-feedback-loop.html',
@@ -203,6 +207,10 @@
 
     # Mac only.
 
+    # Fails on all GPU types.
+    self.Fail('conformance2/glsl3/vector-dynamic-indexing-swizzled-lvalue.html',
+              ['mac'], bug=709351)
+
     self.Fail('conformance2/rendering/' +
         'framebuffer-completeness-unaffected.html',
         ['mac'], bug=630800)
@@ -694,9 +702,14 @@
         ['linux', 'nvidia'], bug=618447)
     self.Fail('conformance/glsl/bugs/unary-minus-operator-float-bug.html',
         ['linux', 'nvidia'], bug=672380)
+    self.Fail('conformance2/glsl3/vector-dynamic-indexing-swizzled-lvalue.html',
+        ['linux', 'nvidia'], bug=709351)
     self.Fail('conformance2/textures/canvas_sub_rectangle/' +
         'tex-2d-r11f_g11f_b10f-rgb-half_float.html',
         ['linux', 'nvidia'], bug=694359)
+    self.Fail('conformance2/textures/canvas_sub_rectangle/' +
+        'tex-2d-rgb16f-rgb-half_float.html',
+        ['linux', 'nvidia'], bug=694359)
     self.Fail('conformance2/textures/image_bitmap_from_canvas/' +
         'tex-3d-srgb8_alpha8-rgba-unsigned_byte.html',
         ['linux', 'nvidia'], bug=679677)
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
index 0463383..0d9b0871 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
@@ -101,6 +101,10 @@
     self.Fail('conformance/textures/misc/tex-sub-image-2d-bad-args.html',
         bug=570453)
 
+    # Temporary suppression; will be removed after bug fix.
+    self.Fail('conformance/textures/misc/texture-corner-case-videos.html',
+              bug=701060)
+
     # Passthrough command decoder
     self.Fail('conformance/extensions/ext-sRGB.html',
         ['passthrough'], bug=679696)
@@ -235,6 +239,10 @@
     self.Fail('conformance/uniforms/uniform-samplers-test.html',
         ['passthrough', 'd3d11'], bug=1639) # angle bug ID
 
+    # Win / AMD / Passthrough command decoder / D3D11
+    self.Flaky('conformance/textures/misc/copytexsubimage2d-subrects.html',
+        ['win', 'amd', 'passthrough', 'd3d11'], bug=685232)
+
     # Win failures
     # Note that the following test seems to pass, but it may still be flaky.
     self.Fail('conformance/glsl/constructors/' +
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_revision.txt b/content/test/gpu/gpu_tests/webgl_conformance_revision.txt
index de866c1c..b820de1 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance_revision.txt
+++ b/content/test/gpu/gpu_tests/webgl_conformance_revision.txt
@@ -1,3 +1,3 @@
 # AUTOGENERATED FILE - DO NOT EDIT
 # SEE roll_webgl_conformance.py
-Current webgl revision c02db7653f0a0af14fd3303044279b8e4234d80b
+Current webgl revision 32cfddc9e452c93bcbe443d6ddcc0c18ac556501
diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn
index 1e89086..ea00f556 100644
--- a/device/bluetooth/BUILD.gn
+++ b/device/bluetooth/BUILD.gn
@@ -168,6 +168,7 @@
 
   deps = [
     "//base",
+    "//components/device_event_log",
     "//crypto",
     "//device/bluetooth/strings",
     "//device/bluetooth/uribeacon",
diff --git a/device/bluetooth/bluetooth_device_unittest.cc b/device/bluetooth/bluetooth_device_unittest.cc
index 7dd31ef8..b19d78e 100644
--- a/device/bluetooth/bluetooth_device_unittest.cc
+++ b/device/bluetooth/bluetooth_device_unittest.cc
@@ -1276,10 +1276,9 @@
   EXPECT_TRUE(device->IsConnected());
 
   // Discover services
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  services.push_back("00000001-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device,
+      std::vector<std::string>({kTestUUIDGenericAccess, kTestUUIDHeartRate}));
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(device->IsGattServicesDiscoveryComplete());
   EXPECT_EQ(2u, device->GetGattServices().size());
@@ -1301,9 +1300,8 @@
   EXPECT_TRUE(device->IsConnected());
 
   // Verify that service discovery can be done again
-  std::vector<std::string> services2;
-  services2.push_back("00000002-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services2);
+  SimulateGattServicesDiscovered(
+      device, std::vector<std::string>({kTestUUIDGenericAttribute}));
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(device->IsGattServicesDiscoveryComplete());
   EXPECT_EQ(1u, device->GetGattServices().size());
@@ -1361,10 +1359,9 @@
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(1, gatt_discovery_attempts_);
 
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  services.push_back("00000001-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device,
+      std::vector<std::string>({kTestUUIDGenericAccess, kTestUUIDHeartRate}));
   base::RunLoop().RunUntilIdle();
 
   EXPECT_EQ(1, observer.gatt_services_discovered_count());
@@ -1396,10 +1393,9 @@
   RememberDeviceForSubsequentAction(device);
   DeleteDevice(device);
 
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  services.push_back("00000001-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(nullptr /* use remembered device */, services);
+  SimulateGattServicesDiscovered(
+      nullptr /* use remembered device */,
+      std::vector<std::string>({kTestUUIDGenericAccess, kTestUUIDHeartRate}));
   base::RunLoop().RunUntilIdle();
 }
 #endif  // defined(OS_ANDROID)
@@ -1454,10 +1450,9 @@
   SimulateGattDisconnection(device);
   base::RunLoop().RunUntilIdle();
 
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  services.push_back("00000001-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device,
+      std::vector<std::string>({kTestUUIDGenericAccess, kTestUUIDHeartRate}));
   base::RunLoop().RunUntilIdle();
 
   EXPECT_FALSE(device->IsGattServicesDiscoveryComplete());
@@ -1509,12 +1504,11 @@
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(1, gatt_discovery_attempts_);
 
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
   // 2 duplicate UUIDs creating 2 instances.
-  services.push_back("00000001-0000-1000-8000-00805f9b34fb");
-  services.push_back("00000001-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device,
+      std::vector<std::string>(
+          {kTestUUIDGenericAccess, kTestUUIDHeartRate, kTestUUIDHeartRate}));
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(3u, device->GetGattServices().size());
 
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc b/device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc
index 0e779e7..89a9a73 100644
--- a/device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc
@@ -38,15 +38,13 @@
     SimulateGattConnection(device_);
     base::RunLoop().RunUntilIdle();
 
-    std::vector<std::string> services;
-    std::string uuid("00000000-0000-1000-8000-00805f9b34fb");
-    services.push_back(uuid);
-    SimulateGattServicesDiscovered(device_, services);
+    SimulateGattServicesDiscovered(
+        device_, std::vector<std::string>({kTestUUIDGenericAccess}));
     base::RunLoop().RunUntilIdle();
     ASSERT_EQ(1u, device_->GetGattServices().size());
     service_ = device_->GetGattServices()[0];
-    SimulateGattCharacteristic(service_, uuid, properties);
-    SimulateGattCharacteristic(service_, uuid, properties);
+    SimulateGattCharacteristic(service_, kTestUUIDDeviceName, properties);
+    SimulateGattCharacteristic(service_, kTestUUIDDeviceName, properties);
     ASSERT_EQ(2u, service_->GetCharacteristics().size());
     characteristic1_ = service_->GetCharacteristics()[0];
     characteristic2_ = service_->GetCharacteristics()[1];
@@ -159,24 +157,23 @@
   // 3 services (all with same UUID).
   //   1 on the first device (to test characteristic instances across devices).
   //   2 on the second device (to test same device, multiple service instances).
-  std::vector<std::string> services;
-  std::string uuid = "00000000-0000-1000-8000-00805f9b34fb";
-  services.push_back(uuid);
-  SimulateGattServicesDiscovered(device1, services);
+  SimulateGattServicesDiscovered(
+      device1, std::vector<std::string>({kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
-  services.push_back(uuid);
-  SimulateGattServicesDiscovered(device2, services);
+  SimulateGattServicesDiscovered(
+      device2, std::vector<std::string>(
+                   {kTestUUIDGenericAccess, kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service1 = device1->GetGattServices()[0];
   BluetoothRemoteGattService* service2 = device2->GetGattServices()[0];
   BluetoothRemoteGattService* service3 = device2->GetGattServices()[1];
   // 6 characteristics (same UUID), 2 on each service.
-  SimulateGattCharacteristic(service1, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service1, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service2, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service2, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service3, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service3, uuid, /* properties */ 0);
+  SimulateGattCharacteristic(service1, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service1, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service2, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service2, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service3, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service3, kTestUUIDDeviceName, /* properties */ 0);
   BluetoothRemoteGattCharacteristic* char1 = service1->GetCharacteristics()[0];
   BluetoothRemoteGattCharacteristic* char2 = service1->GetCharacteristics()[1];
   BluetoothRemoteGattCharacteristic* char3 = service2->GetCharacteristics()[0];
@@ -220,20 +217,17 @@
                                GetConnectErrorCallback(Call::NOT_EXPECTED));
   SimulateGattConnection(device);
   base::RunLoop().RunUntilIdle();
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device, std::vector<std::string>({kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service = device->GetGattServices()[0];
 
   // Create 3 characteristics. Two of them are duplicates.
-  std::string uuid_str1("11111111-0000-1000-8000-00805f9b34fb");
-  std::string uuid_str2("22222222-0000-1000-8000-00805f9b34fb");
-  BluetoothUUID uuid1(uuid_str1);
-  BluetoothUUID uuid2(uuid_str2);
-  SimulateGattCharacteristic(service, uuid_str1, /* properties */ 0);
-  SimulateGattCharacteristic(service, uuid_str2, /* properties */ 0);
-  SimulateGattCharacteristic(service, uuid_str2, /* properties */ 0);
+  BluetoothUUID uuid1(kTestUUIDDeviceName);
+  BluetoothUUID uuid2(kTestUUIDAppearance);
+  SimulateGattCharacteristic(service, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDAppearance, /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDAppearance, /* properties */ 0);
   BluetoothRemoteGattCharacteristic* char1 = service->GetCharacteristics()[0];
   BluetoothRemoteGattCharacteristic* char2 = service->GetCharacteristics()[1];
   BluetoothRemoteGattCharacteristic* char3 = service->GetCharacteristics()[2];
@@ -264,16 +258,14 @@
                                GetConnectErrorCallback(Call::NOT_EXPECTED));
   SimulateGattConnection(device);
   base::RunLoop().RunUntilIdle();
-  std::vector<std::string> services;
-  std::string uuid("00000000-0000-1000-8000-00805f9b34fb");
-  services.push_back(uuid);
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device, std::vector<std::string>({kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service = device->GetGattServices()[0];
 
   // Create two characteristics with different properties:
-  SimulateGattCharacteristic(service, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service, uuid, /* properties */ 7);
+  SimulateGattCharacteristic(service, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDDeviceName, /* properties */ 7);
 
   // Read the properties. Because ordering is unknown swap as necessary.
   int properties1 = service->GetCharacteristics()[0]->GetProperties();
@@ -2208,10 +2200,10 @@
   ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate());
 
   // Add several Descriptors:
-  BluetoothUUID uuid1("11111111-0000-1000-8000-00805f9b34fb");
-  BluetoothUUID uuid2("22222222-0000-1000-8000-00805f9b34fb");
-  BluetoothUUID uuid3("33333333-0000-1000-8000-00805f9b34fb");
-  BluetoothUUID uuid4("44444444-0000-1000-8000-00805f9b34fb");
+  BluetoothUUID uuid1(kTestUUIDCharacteristicUserDescription);
+  BluetoothUUID uuid2(kTestUUIDClientCharacteristicConfiguration);
+  BluetoothUUID uuid3(kTestUUIDServerCharacteristicConfiguration);
+  BluetoothUUID uuid4(kTestUUIDCharacteristicPresentationFormat);
   SimulateGattDescriptor(characteristic1_, uuid1.canonical_value());
   SimulateGattDescriptor(characteristic1_, uuid2.canonical_value());
   SimulateGattDescriptor(characteristic2_, uuid3.canonical_value());
@@ -2253,9 +2245,9 @@
   ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate());
 
   // Add several Descriptors:
-  BluetoothUUID id1("11111111-0000-1000-8000-00805f9b34fb");
-  BluetoothUUID id2("22222222-0000-1000-8000-00805f9b34fb");
-  BluetoothUUID id3("33333333-0000-1000-8000-00805f9b34fb");
+  BluetoothUUID id1(kTestUUIDCharacteristicUserDescription);
+  BluetoothUUID id2(kTestUUIDClientCharacteristicConfiguration);
+  BluetoothUUID id3(kTestUUIDServerCharacteristicConfiguration);
   SimulateGattDescriptor(characteristic1_, id1.canonical_value());
   SimulateGattDescriptor(characteristic1_, id2.canonical_value());
   SimulateGattDescriptor(characteristic2_, id3.canonical_value());
diff --git a/device/bluetooth/bluetooth_remote_gatt_descriptor_unittest.cc b/device/bluetooth/bluetooth_remote_gatt_descriptor_unittest.cc
index 1152797d..3b886bb 100644
--- a/device/bluetooth/bluetooth_remote_gatt_descriptor_unittest.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_descriptor_unittest.cc
@@ -28,20 +28,18 @@
                                   GetConnectErrorCallback(Call::NOT_EXPECTED));
     SimulateGattConnection(device_);
     base::RunLoop().RunUntilIdle();
-    std::vector<std::string> services;
-    std::string uuid("00000000-0000-1000-8000-00805f9b34fb");
-    services.push_back(uuid);
-    SimulateGattServicesDiscovered(device_, services);
+    SimulateGattServicesDiscovered(
+        device_, std::vector<std::string>({kTestUUIDGenericAccess}));
     base::RunLoop().RunUntilIdle();
     ASSERT_EQ(1u, device_->GetGattServices().size());
     service_ = device_->GetGattServices()[0];
-    SimulateGattCharacteristic(service_, uuid, 0);
+    SimulateGattCharacteristic(service_, kTestUUIDDeviceName, 0);
     ASSERT_EQ(1u, service_->GetCharacteristics().size());
     characteristic_ = service_->GetCharacteristics()[0];
     SimulateGattDescriptor(characteristic_,
-                           "00000001-0000-1000-8000-00805f9b34fb");
+                           kTestUUIDCharacteristicUserDescription);
     SimulateGattDescriptor(characteristic_,
-                           "00000002-0000-1000-8000-00805f9b34fb");
+                           kTestUUIDClientCharacteristicConfiguration);
     ASSERT_EQ(2u, characteristic_->GetDescriptors().size());
     descriptor1_ = characteristic_->GetDescriptors()[0];
     descriptor2_ = characteristic_->GetDescriptors()[1];
@@ -78,24 +76,23 @@
   // 3 services (all with same UUID).
   //   1 on the first device (to test characteristic instances across devices).
   //   2 on the second device (to test same device, multiple service instances).
-  std::vector<std::string> services;
-  std::string uuid = "00000000-0000-1000-8000-00805f9b34fb";
-  services.push_back(uuid);
-  SimulateGattServicesDiscovered(device1, services);
+  SimulateGattServicesDiscovered(
+      device1, std::vector<std::string>({kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
-  services.push_back(uuid);
-  SimulateGattServicesDiscovered(device2, services);
+  SimulateGattServicesDiscovered(
+      device2, std::vector<std::string>(
+                   {kTestUUIDGenericAccess, kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service1 = device1->GetGattServices()[0];
   BluetoothRemoteGattService* service2 = device2->GetGattServices()[0];
   BluetoothRemoteGattService* service3 = device2->GetGattServices()[1];
   // 6 characteristics (same UUID), 2 on each service.
-  SimulateGattCharacteristic(service1, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service1, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service2, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service2, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service3, uuid, /* properties */ 0);
-  SimulateGattCharacteristic(service3, uuid, /* properties */ 0);
+  SimulateGattCharacteristic(service1, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service1, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service2, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service2, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service3, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service3, kTestUUIDDeviceName, /* properties */ 0);
   BluetoothRemoteGattCharacteristic* char1 = service1->GetCharacteristics()[0];
   BluetoothRemoteGattCharacteristic* char2 = service1->GetCharacteristics()[1];
   BluetoothRemoteGattCharacteristic* char3 = service2->GetCharacteristics()[0];
@@ -105,12 +102,12 @@
   // 6 descriptors (same UUID), 1 on each characteristic
   // TODO(576900) Test multiple descriptors with same UUID on one
   // characteristic.
-  SimulateGattDescriptor(char1, uuid);
-  SimulateGattDescriptor(char2, uuid);
-  SimulateGattDescriptor(char3, uuid);
-  SimulateGattDescriptor(char4, uuid);
-  SimulateGattDescriptor(char5, uuid);
-  SimulateGattDescriptor(char6, uuid);
+  SimulateGattDescriptor(char1, kTestUUIDCharacteristicUserDescription);
+  SimulateGattDescriptor(char2, kTestUUIDCharacteristicUserDescription);
+  SimulateGattDescriptor(char3, kTestUUIDCharacteristicUserDescription);
+  SimulateGattDescriptor(char4, kTestUUIDCharacteristicUserDescription);
+  SimulateGattDescriptor(char5, kTestUUIDCharacteristicUserDescription);
+  SimulateGattDescriptor(char6, kTestUUIDCharacteristicUserDescription);
   BluetoothRemoteGattDescriptor* desc1 = char1->GetDescriptors()[0];
   BluetoothRemoteGattDescriptor* desc2 = char2->GetDescriptors()[0];
   BluetoothRemoteGattDescriptor* desc3 = char3->GetDescriptors()[0];
@@ -153,26 +150,25 @@
   device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
                                GetConnectErrorCallback(Call::NOT_EXPECTED));
   SimulateGattConnection(device);
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device, std::vector<std::string>({kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   ASSERT_EQ(1u, device->GetGattServices().size());
   BluetoothRemoteGattService* service = device->GetGattServices()[0];
 
-  SimulateGattCharacteristic(service, "00000000-0000-1000-8000-00805f9b34fb",
+  SimulateGattCharacteristic(service, kTestUUIDDeviceName,
                              /* properties */ 0);
   ASSERT_EQ(1u, service->GetCharacteristics().size());
   BluetoothRemoteGattCharacteristic* characteristic =
       service->GetCharacteristics()[0];
 
   // Create 2 descriptors.
-  std::string uuid_str1("11111111-0000-1000-8000-00805f9b34fb");
-  std::string uuid_str2("22222222-0000-1000-8000-00805f9b34fb");
-  BluetoothUUID uuid1(uuid_str1);
-  BluetoothUUID uuid2(uuid_str2);
-  SimulateGattDescriptor(characteristic, uuid_str1);
-  SimulateGattDescriptor(characteristic, uuid_str2);
+  BluetoothUUID uuid1(kTestUUIDCharacteristicUserDescription);
+  BluetoothUUID uuid2(kTestUUIDClientCharacteristicConfiguration);
+  SimulateGattDescriptor(characteristic,
+                         kTestUUIDCharacteristicUserDescription);
+  SimulateGattDescriptor(characteristic,
+                         kTestUUIDClientCharacteristicConfiguration);
   ASSERT_EQ(2u, characteristic->GetDescriptors().size());
   BluetoothRemoteGattDescriptor* descriptor1 =
       characteristic->GetDescriptors()[0];
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_unittest.cc b/device/bluetooth/bluetooth_remote_gatt_service_unittest.cc
index c5118645..2c86e62 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_unittest.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_service_unittest.cc
@@ -43,12 +43,12 @@
   base::RunLoop().RunUntilIdle();
 
   // 2 duplicate UUIDs creating 2 service instances on each device.
-  std::vector<std::string> services;
-  std::string uuid = "00000000-0000-1000-8000-00805f9b34fb";
-  services.push_back(uuid);
-  services.push_back(uuid);
-  SimulateGattServicesDiscovered(device1, services);
-  SimulateGattServicesDiscovered(device2, services);
+  SimulateGattServicesDiscovered(
+      device1, std::vector<std::string>(
+                   {kTestUUIDGenericAccess, kTestUUIDGenericAccess}));
+  SimulateGattServicesDiscovered(
+      device2, std::vector<std::string>(
+                   {kTestUUIDGenericAccess, kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service1 = device1->GetGattServices()[0];
   BluetoothRemoteGattService* service2 = device1->GetGattServices()[1];
@@ -82,7 +82,7 @@
   base::RunLoop().RunUntilIdle();
 
   // Create multiple instances with the same UUID.
-  BluetoothUUID uuid("00000000-0000-1000-8000-00805f9b34fb");
+  BluetoothUUID uuid(kTestUUIDGenericAccess);
   std::vector<std::string> services;
   services.push_back(uuid.canonical_value());
   services.push_back(uuid.canonical_value());
@@ -110,9 +110,8 @@
   base::RunLoop().RunUntilIdle();
 
   // Simulate a service, with no Characteristics:
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device, std::vector<std::string>({kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service = device->GetGattServices()[0];
 
@@ -136,19 +135,18 @@
   base::RunLoop().RunUntilIdle();
 
   // Simulate a service, with several Characteristics:
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device, std::vector<std::string>({kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service = device->GetGattServices()[0];
-  std::string characteristic_uuid1 = "11111111-0000-1000-8000-00805f9b34fb";
-  std::string characteristic_uuid2 = "22222222-0000-1000-8000-00805f9b34fb";
-  std::string characteristic_uuid3 = characteristic_uuid2;  // Duplicate UUID.
-  std::string characteristic_uuid4 = "33333333-0000-1000-8000-00805f9b34fb";
-  SimulateGattCharacteristic(service, characteristic_uuid1, /* properties */ 0);
-  SimulateGattCharacteristic(service, characteristic_uuid2, /* properties */ 0);
-  SimulateGattCharacteristic(service, characteristic_uuid3, /* properties */ 0);
-  SimulateGattCharacteristic(service, characteristic_uuid4, /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDAppearance,
+                             /* properties */ 0);
+  // Duplicate UUID.
+  SimulateGattCharacteristic(service, kTestUUIDAppearance,
+                             /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDReconnectionAddress,
+                             /* properties */ 0);
 
   // Verify that GetCharacteristic can retrieve characteristics again by ID,
   // and that the same Characteristics come back.
@@ -188,38 +186,36 @@
   base::RunLoop().RunUntilIdle();
 
   // Simulate two primary GATT services.
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  services.push_back("01010101-0101-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device,
+      std::vector<std::string>({kTestUUIDGenericAccess, kTestUUIDHeartRate}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service1 = device->GetGattServices()[0];
   BluetoothRemoteGattService* service2 = device->GetGattServices()[1];
-  std::string characteristic_uuid1 = "11111111-0000-1000-8000-00805f9b34fb";
-  std::string characteristic_uuid2 = "22222222-0000-1000-8000-00805f9b34fb";
-  SimulateGattCharacteristic(service1, characteristic_uuid1,
+  SimulateGattCharacteristic(service1, kTestUUIDDeviceName,
                              /* properties */ 0);
   // 2 duplicate UUIDs creating 2 instances.
-  SimulateGattCharacteristic(service2, characteristic_uuid2,
+  SimulateGattCharacteristic(service2, kTestUUIDHeartRateMeasurement,
                              /* properties */ 0);
-  SimulateGattCharacteristic(service2, characteristic_uuid2,
+  SimulateGattCharacteristic(service2, kTestUUIDHeartRateMeasurement,
                              /* properties */ 0);
 
   {
     std::vector<BluetoothRemoteGattCharacteristic*> characteristics =
-        service1->GetCharacteristicsByUUID(BluetoothUUID(characteristic_uuid1));
+        service1->GetCharacteristicsByUUID(BluetoothUUID(kTestUUIDDeviceName));
     EXPECT_EQ(1u, characteristics.size());
-    EXPECT_EQ(characteristic_uuid1,
+    EXPECT_EQ(kTestUUIDDeviceName,
               characteristics[0]->GetUUID().canonical_value());
   }
 
   {
     std::vector<BluetoothRemoteGattCharacteristic*> characteristics =
-        service2->GetCharacteristicsByUUID(BluetoothUUID(characteristic_uuid2));
+        service2->GetCharacteristicsByUUID(
+            BluetoothUUID(kTestUUIDHeartRateMeasurement));
     EXPECT_EQ(2u, characteristics.size());
-    EXPECT_EQ(characteristic_uuid2,
+    EXPECT_EQ(kTestUUIDHeartRateMeasurement,
               characteristics[0]->GetUUID().canonical_value());
-    EXPECT_EQ(characteristic_uuid2,
+    EXPECT_EQ(kTestUUIDHeartRateMeasurement,
               characteristics[1]->GetUUID().canonical_value());
     EXPECT_NE(characteristics[0]->GetIdentifier(),
               characteristics[1]->GetIdentifier());
@@ -253,19 +249,18 @@
   TestBluetoothAdapterObserver observer(adapter_);
 
   // Simulate a service, with several Characteristics:
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device, std::vector<std::string>({kTestUUIDGenericAccess}));
   base::RunLoop().RunUntilIdle();
   BluetoothRemoteGattService* service = device->GetGattServices()[0];
-  std::string characteristic_uuid1 = "11111111-0000-1000-8000-00805f9b34fb";
-  std::string characteristic_uuid2 = "22222222-0000-1000-8000-00805f9b34fb";
-  std::string characteristic_uuid3 = characteristic_uuid2;  // Duplicate UUID.
-  std::string characteristic_uuid4 = "33333333-0000-1000-8000-00805f9b34fb";
-  SimulateGattCharacteristic(service, characteristic_uuid1, /* properties */ 0);
-  SimulateGattCharacteristic(service, characteristic_uuid2, /* properties */ 0);
-  SimulateGattCharacteristic(service, characteristic_uuid3, /* properties */ 0);
-  SimulateGattCharacteristic(service, characteristic_uuid4, /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDDeviceName, /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDAppearance,
+                             /* properties */ 0);
+  // Duplicate UUID.
+  SimulateGattCharacteristic(service, kTestUUIDAppearance,
+                             /* properties */ 0);
+  SimulateGattCharacteristic(service, kTestUUIDReconnectionAddress,
+                             /* properties */ 0);
 #if !defined(OS_WIN)
   // TODO(620895) GattCharacteristicAdded has to be implemented for Windows.
   EXPECT_EQ(4, observer.gatt_characteristic_added_count());
@@ -326,10 +321,9 @@
   TestBluetoothAdapterObserver observer(adapter_);
 
   // Simulate two primary GATT services.
-  std::vector<std::string> services;
-  services.push_back("00000000-0000-1000-8000-00805f9b34fb");
-  services.push_back("01010101-0101-1000-8000-00805f9b34fb");
-  SimulateGattServicesDiscovered(device, services);
+  SimulateGattServicesDiscovered(
+      device,
+      std::vector<std::string>({kTestUUIDGenericAccess, kTestUUIDHeartRate}));
   EXPECT_EQ(2u, device->GetGattServices().size());
 
   // Simulate remove of a primary service.
diff --git a/device/bluetooth/bluez/bluetooth_adapter_bluez.cc b/device/bluetooth/bluez/bluetooth_adapter_bluez.cc
index 1c40bbc..83ade15 100644
--- a/device/bluetooth/bluez/bluetooth_adapter_bluez.cc
+++ b/device/bluetooth/bluez/bluetooth_adapter_bluez.cc
@@ -23,6 +23,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "components/device_event_log/device_event_log.h"
 #include "device/bluetooth/bluetooth_common.h"
 #include "device/bluetooth/bluetooth_device.h"
 #include "device/bluetooth/bluetooth_discovery_session_outcome.h"
@@ -72,8 +73,8 @@
   if (error_name == bluetooth_agent_manager::kErrorDoesNotExist)
     return;
 
-  LOG(WARNING) << "Failed to unregister pairing agent: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << "Failed to unregister pairing agent: " << error_name
+                       << ": " << error_message;
 }
 
 UMABluetoothDiscoverySessionOutcome TranslateDiscoveryErrorToUMA(
@@ -91,7 +92,7 @@
   } else if (error_name == bluetooth_device::kErrorFailed) {
     return UMABluetoothDiscoverySessionOutcome::FAILED;
   } else {
-    LOG(WARNING) << "Can't histogram DBus error " << error_name;
+    BLUETOOTH_LOG(ERROR) << "Unrecognized DBus error " << error_name;
     return UMABluetoothDiscoverySessionOutcome::UNKNOWN;
   }
 }
@@ -118,11 +119,11 @@
     const std::string& error_name,
     const std::string& error_message) {
   if (is_register_callback) {
-    VLOG(1) << "Failed to Register service: " << error_name << ", "
-            << error_message;
+    BLUETOOTH_LOG(ERROR) << "Failed to Register service: " << error_name << ", "
+                         << error_message;
   } else {
-    VLOG(1) << "Failed to Unregister service: " << error_name << ", "
-            << error_message;
+    BLUETOOTH_LOG(ERROR) << "Failed to Unregister service: " << error_name
+                         << ", " << error_message;
   }
   error_callback.Run(
       BluetoothGattServiceBlueZ::DBusErrorToServiceError(error_name));
@@ -137,8 +138,8 @@
     const device::BluetoothAdapter::AdvertisementErrorCallback& error_callback,
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(ERROR) << "Error while registering advertisement. error_name = "
-             << error_name << ", error_message = " << error_message;
+  BLUETOOTH_LOG(ERROR) << "Error while registering advertisement. error_name = "
+                       << error_name << ", error_message = " << error_message;
 
   device::BluetoothAdvertisement::ErrorCode code = device::
       BluetoothAdvertisement::ErrorCode::INVALID_ADVERTISEMENT_ERROR_CODE;
@@ -161,6 +162,9 @@
 void BluetoothAdapterBlueZ::Shutdown() {
   if (dbus_is_shutdown_)
     return;
+
+  BLUETOOTH_LOG(EVENT) << "BluetoothAdapterBlueZ::Shutdown";
+
   DCHECK(bluez::BluezDBusManager::IsInitialized())
       << "Call BluetoothAdapterFactory::Shutdown() before "
          "BluezDBusManager::Shutdown().";
@@ -207,7 +211,7 @@
   bluez::BluezDBusManager::Get()->GetBluetoothInputClient()->RemoveObserver(
       this);
 
-  VLOG(1) << "Unregistering pairing agent";
+  BLUETOOTH_LOG(EVENT) << "Unregistering pairing agent";
   bluez::BluezDBusManager::Get()
       ->GetBluetoothAgentManagerClient()
       ->UnregisterAgent(dbus::ObjectPath(kAgentPath),
@@ -266,8 +270,9 @@
                                                    ->GetBluetoothAdapterClient()
                                                    ->GetAdapters();
 
+  BLUETOOTH_LOG(EVENT) << "BlueZ Adapter Initialized.";
   if (!object_paths.empty()) {
-    VLOG(1) << object_paths.size() << " Bluetooth adapter(s) available.";
+    BLUETOOTH_LOG(EVENT) << "BlueZ Adapters available: " << object_paths.size();
     SetAdapter(object_paths[0]);
   }
   initialized_ = true;
@@ -345,10 +350,13 @@
                                        const base::Closure& callback,
                                        const ErrorCallback& error_callback) {
   if (!IsPresent()) {
+    BLUETOOTH_LOG(ERROR) << "SetPowered: " << powered << ". Not Present!";
     error_callback.Run();
     return;
   }
 
+  BLUETOOTH_LOG(EVENT) << "SetPowered: " << powered;
+
   bluez::BluezDBusManager::Get()
       ->GetBluetoothAdapterClient()
       ->GetProperties(object_path_)
@@ -379,6 +387,8 @@
     return;
   }
 
+  BLUETOOTH_LOG(EVENT) << "SetDiscoverable: " << discoverable;
+
   bluez::BluezDBusManager::Get()
       ->GetBluetoothAdapterClient()
       ->GetProperties(object_path_)
@@ -459,8 +469,8 @@
     const CreateServiceCallback& callback,
     const CreateServiceErrorCallback& error_callback) {
   DCHECK(!dbus_is_shutdown_);
-  VLOG(1) << object_path_.value()
-          << ": Creating RFCOMM service: " << uuid.canonical_value();
+  BLUETOOTH_LOG(DEBUG) << object_path_.value() << ": Creating RFCOMM service: "
+                       << uuid.canonical_value();
   scoped_refptr<BluetoothSocketBlueZ> socket =
       BluetoothSocketBlueZ::CreateBluetoothSocket(ui_task_runner_,
                                                   socket_thread_);
@@ -474,8 +484,8 @@
     const CreateServiceCallback& callback,
     const CreateServiceErrorCallback& error_callback) {
   DCHECK(!dbus_is_shutdown_);
-  VLOG(1) << object_path_.value()
-          << ": Creating L2CAP service: " << uuid.canonical_value();
+  BLUETOOTH_LOG(DEBUG) << object_path_.value() << ": Creating L2CAP service: "
+                       << uuid.canonical_value();
   scoped_refptr<BluetoothSocketBlueZ> socket =
       BluetoothSocketBlueZ::CreateBluetoothSocket(ui_task_runner_,
                                                   socket_thread_);
@@ -615,8 +625,8 @@
     for (auto iter = devices_.begin(); iter != devices_.end(); ++iter) {
       if (iter->second->GetAddress() == device_bluez->GetAddress()) {
         std::string old_address = iter->first;
-        VLOG(1) << "Device changed address, old: " << old_address
-                << " new: " << device_bluez->GetAddress();
+        BLUETOOTH_LOG(EVENT) << "Device changed address, old: " << old_address
+                             << " new: " << device_bluez->GetAddress();
         std::unique_ptr<BluetoothDevice> scoped_device =
             std::move(iter->second);
         devices_.erase(iter);
@@ -700,7 +710,7 @@
 }
 
 void BluetoothAdapterBlueZ::Released() {
-  VLOG(1) << "Release";
+  BLUETOOTH_LOG(EVENT) << "Released";
   if (!IsPresent())
     return;
   DCHECK(agent_.get());
@@ -713,7 +723,7 @@
                                            const PinCodeCallback& callback) {
   DCHECK(IsPresent());
   DCHECK(agent_.get());
-  VLOG(1) << device_path.value() << ": RequestPinCode";
+  BLUETOOTH_LOG(EVENT) << device_path.value() << ": RequestPinCode";
 
   BluetoothPairingBlueZ* pairing = GetPairing(device_path);
   if (!pairing) {
@@ -728,7 +738,8 @@
                                            const std::string& pincode) {
   DCHECK(IsPresent());
   DCHECK(agent_.get());
-  VLOG(1) << device_path.value() << ": DisplayPinCode: " << pincode;
+  BLUETOOTH_LOG(EVENT) << device_path.value()
+                       << ": DisplayPinCode: " << pincode;
 
   BluetoothPairingBlueZ* pairing = GetPairing(device_path);
   if (!pairing)
@@ -741,7 +752,7 @@
                                            const PasskeyCallback& callback) {
   DCHECK(IsPresent());
   DCHECK(agent_.get());
-  VLOG(1) << device_path.value() << ": RequestPasskey";
+  BLUETOOTH_LOG(EVENT) << device_path.value() << ": RequestPasskey";
 
   BluetoothPairingBlueZ* pairing = GetPairing(device_path);
   if (!pairing) {
@@ -757,8 +768,8 @@
                                            uint16_t entered) {
   DCHECK(IsPresent());
   DCHECK(agent_.get());
-  VLOG(1) << device_path.value() << ": DisplayPasskey: " << passkey << " ("
-          << entered << " entered)";
+  BLUETOOTH_LOG(EVENT) << device_path.value() << ": DisplayPasskey: " << passkey
+                       << " (" << entered << " entered)";
 
   BluetoothPairingBlueZ* pairing = GetPairing(device_path);
   if (!pairing)
@@ -776,7 +787,8 @@
     const ConfirmationCallback& callback) {
   DCHECK(IsPresent());
   DCHECK(agent_.get());
-  VLOG(1) << device_path.value() << ": RequestConfirmation: " << passkey;
+  BLUETOOTH_LOG(EVENT) << device_path.value()
+                       << ": RequestConfirmation: " << passkey;
 
   BluetoothPairingBlueZ* pairing = GetPairing(device_path);
   if (!pairing) {
@@ -792,7 +804,7 @@
     const ConfirmationCallback& callback) {
   DCHECK(IsPresent());
   DCHECK(agent_.get());
-  VLOG(1) << device_path.value() << ": RequestAuthorization";
+  BLUETOOTH_LOG(EVENT) << device_path.value() << ": RequestAuthorization";
 
   BluetoothPairingBlueZ* pairing = GetPairing(device_path);
   if (!pairing) {
@@ -809,7 +821,7 @@
     const ConfirmationCallback& callback) {
   DCHECK(IsPresent());
   DCHECK(agent_.get());
-  VLOG(1) << device_path.value() << ": AuthorizeService: " << uuid;
+  BLUETOOTH_LOG(EVENT) << device_path.value() << ": AuthorizeService: " << uuid;
 
   BluetoothDeviceBlueZ* device_bluez = GetDeviceWithPath(device_path);
   if (!device_bluez) {
@@ -828,19 +840,20 @@
 
   // TODO(keybuk): reject service authorizations when not paired, determine
   // whether this is acceptable long-term.
-  LOG(WARNING) << "Rejecting service connection from unpaired device "
-               << device_bluez->GetAddress() << " for UUID " << uuid;
+  BLUETOOTH_LOG(ERROR) << "Rejecting service connection from unpaired device "
+                       << device_bluez->GetAddress() << " for UUID " << uuid;
   callback.Run(REJECTED);
 }
 
 void BluetoothAdapterBlueZ::Cancel() {
   DCHECK(IsPresent());
   DCHECK(agent_.get());
-  VLOG(1) << "Cancel";
+  BLUETOOTH_LOG(EVENT) << "Cancel";
 }
 
 void BluetoothAdapterBlueZ::OnRegisterAgent() {
-  VLOG(1) << "Pairing agent registered, requesting to be made default";
+  BLUETOOTH_LOG(EVENT)
+      << "Pairing agent registered, requesting to be made default";
 
   bluez::BluezDBusManager::Get()
       ->GetBluetoothAgentManagerClient()
@@ -859,19 +872,19 @@
   if (error_name == bluetooth_agent_manager::kErrorAlreadyExists)
     return;
 
-  LOG(WARNING) << ": Failed to register pairing agent: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << "Failed to register pairing agent: " << error_name
+                       << ": " << error_message;
 }
 
 void BluetoothAdapterBlueZ::OnRequestDefaultAgent() {
-  VLOG(1) << "Pairing agent now default";
+  BLUETOOTH_LOG(EVENT) << "Pairing agent now default";
 }
 
 void BluetoothAdapterBlueZ::OnRequestDefaultAgentError(
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(WARNING) << ": Failed to make pairing agent default: " << error_name
-               << ": " << error_message;
+  BLUETOOTH_LOG(ERROR) << "Failed to make pairing agent default: " << error_name
+                       << ": " << error_message;
 }
 
 void BluetoothAdapterBlueZ::CreateServiceRecord(
@@ -918,8 +931,8 @@
   DCHECK(IsPresent());
   BluetoothDeviceBlueZ* device_bluez = GetDeviceWithPath(object_path);
   if (!device_bluez) {
-    LOG(WARNING) << "Pairing Agent request for unknown device: "
-                 << object_path.value();
+    BLUETOOTH_LOG(ERROR) << "Pairing Agent request for unknown device: "
+                         << object_path.value();
     return nullptr;
   }
 
@@ -941,9 +954,9 @@
   DCHECK(!dbus_is_shutdown_);
   object_path_ = object_path;
 
-  VLOG(1) << object_path_.value() << ": using adapter.";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": using adapter.";
 
-  VLOG(1) << "Registering pairing agent";
+  BLUETOOTH_LOG(DEBUG) << "Registering pairing agent";
   bluez::BluezDBusManager::Get()
       ->GetBluetoothAgentManagerClient()
       ->RegisterAgent(dbus::ObjectPath(kAgentPath),
@@ -1016,7 +1029,7 @@
 
 void BluetoothAdapterBlueZ::RemoveAdapter() {
   DCHECK(IsPresent());
-  VLOG(1) << object_path_.value() << ": adapter removed.";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": adapter removed.";
 
   bluez::BluetoothAdapterClient::Properties* properties =
       bluez::BluezDBusManager::Get()
@@ -1054,10 +1067,10 @@
 void BluetoothAdapterBlueZ::DiscoveringChanged(bool discovering) {
   // If the adapter stopped discovery due to a reason other than a request by
   // us, reset the count to 0.
-  VLOG(1) << "Discovering changed: " << discovering;
+  BLUETOOTH_LOG(EVENT) << "Discovering changed: " << discovering;
   if (!discovering && !discovery_request_pending_ &&
       num_discovery_sessions_ > 0) {
-    VLOG(1) << "Marking sessions as inactive.";
+    BLUETOOTH_LOG(DEBUG) << "Marking sessions as inactive.";
     num_discovery_sessions_ = 0;
     MarkDiscoverySessionsAsInactive();
   }
@@ -1089,7 +1102,7 @@
   DCHECK(delegate);
 
   if (!IsPresent()) {
-    VLOG(2) << "Adapter not present, erroring out";
+    BLUETOOTH_LOG(DEBUG) << "Adapter not present, erroring out";
     error_callback.Run("Adapter not present");
     return;
   }
@@ -1120,12 +1133,13 @@
 void BluetoothAdapterBlueZ::ReleaseProfile(
     const dbus::ObjectPath& device_path,
     BluetoothAdapterProfileBlueZ* profile) {
-  VLOG(2) << "Releasing Profile: " << profile->uuid().canonical_value()
-          << " from " << device_path.value();
+  BLUETOOTH_LOG(EVENT) << "Releasing Profile: "
+                       << profile->uuid().canonical_value() << " from "
+                       << device_path.value();
   BluetoothUUID uuid = profile->uuid();
   auto iter = profiles_.find(uuid);
   if (iter == profiles_.end()) {
-    LOG(ERROR) << "Profile not found for: " << uuid.canonical_value();
+    BLUETOOTH_LOG(ERROR) << "Profile not found for: " << uuid.canonical_value();
     return;
   }
   released_profiles_[uuid] = iter->second;
@@ -1136,11 +1150,12 @@
 }
 
 void BluetoothAdapterBlueZ::RemoveProfile(const BluetoothUUID& uuid) {
-  VLOG(2) << "Remove Profile: " << uuid.canonical_value();
+  BLUETOOTH_LOG(EVENT) << "Remove Profile: " << uuid.canonical_value();
 
   auto iter = released_profiles_.find(uuid);
   if (iter == released_profiles_.end()) {
-    LOG(ERROR) << "Released Profile not found: " << uuid.canonical_value();
+    BLUETOOTH_LOG(ERROR) << "Released Profile not found: "
+                         << uuid.canonical_value();
     return;
   }
   delete iter->second;
@@ -1156,10 +1171,10 @@
     BluetoothLocalGattServiceBlueZ* service) {
   auto service_iter = owned_gatt_services_.find(service->object_path());
   if (service_iter == owned_gatt_services_.end()) {
-    LOG(WARNING) << "Trying to remove service: "
-                 << service->object_path().value()
-                 << " from adapter: " << object_path_.value()
-                 << " that doesn't own it.";
+    BLUETOOTH_LOG(ERROR) << "Trying to remove service: "
+                         << service->object_path().value()
+                         << " from adapter: " << object_path_.value()
+                         << " that doesn't own it.";
     return;
   }
 
@@ -1177,7 +1192,8 @@
     const base::Closure& callback,
     const device::BluetoothGattService::ErrorCallback& error_callback) {
   if (registered_gatt_services_.count(service->object_path()) > 0) {
-    LOG(WARNING) << "Re-registering a service that is already registered!";
+    BLUETOOTH_LOG(ERROR)
+        << "Re-registering a service that is already registered!";
     error_callback.Run(device::BluetoothGattService::GATT_ERROR_FAILED);
     return;
   }
@@ -1199,8 +1215,9 @@
   DCHECK(bluez::BluezDBusManager::Get());
 
   if (registered_gatt_services_.count(service->object_path()) == 0) {
-    LOG(WARNING) << "Unregistering a service that isn't registered! path: "
-                 << service->object_path().value();
+    BLUETOOTH_LOG(ERROR)
+        << "Unregistering a service that isn't registered! path: "
+        << service->object_path().value();
     error_callback.Run(device::BluetoothGattService::GATT_ERROR_FAILED);
     return;
   }
@@ -1268,9 +1285,9 @@
     const BluetoothUUID& uuid,
     const std::string& error_name,
     const std::string& error_message) {
-  VLOG(2) << object_path_.value()
-          << ": Failed to register profile: " << error_name << ": "
-          << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to register profile: " << error_name << ": "
+                       << error_message;
   if (profile_queues_.find(uuid) == profile_queues_.end())
     return;
 
@@ -1321,13 +1338,14 @@
         UMABluetoothDiscoverySessionOutcome::ADAPTER_NOT_PRESENT);
     return;
   }
-  VLOG(1) << __func__;
+  BLUETOOTH_LOG(EVENT) << __func__;
   if (discovery_request_pending_) {
     // The pending request is either to stop a previous session or to start a
     // new one. Either way, queue this one.
     DCHECK(num_discovery_sessions_ == 1 || num_discovery_sessions_ == 0);
-    VLOG(1) << "Pending request to start/stop device discovery. Queueing "
-            << "request to start a new discovery session.";
+    BLUETOOTH_LOG(DEBUG)
+        << "Pending request to start/stop device discovery. Queueing "
+        << "request to start a new discovery session.";
     discovery_request_queue_.push(
         std::make_tuple(discovery_filter, callback, error_callback));
     return;
@@ -1384,7 +1402,7 @@
     return;
   }
 
-  VLOG(1) << __func__;
+  BLUETOOTH_LOG(EVENT) << __func__;
   // There are active sessions other than the one currently being removed.
   if (num_discovery_sessions_ > 1) {
     DCHECK(IsDiscovering());
@@ -1398,8 +1416,9 @@
 
   // If there is a pending request to BlueZ, then queue this request.
   if (discovery_request_pending_) {
-    VLOG(1) << "Pending request to start/stop device discovery. Queueing "
-            << "request to stop discovery session.";
+    BLUETOOTH_LOG(DEBUG)
+        << "Pending request to start/stop device discovery. Queueing "
+        << "request to stop discovery session.";
     error_callback.Run(
         UMABluetoothDiscoverySessionOutcome::REMOVE_WITH_PENDING_REQUEST);
     return;
@@ -1410,7 +1429,7 @@
     // TODO(armansito): This should never happen once we have the
     // DiscoverySession API. Replace this case with an assert once it's
     // the deprecated methods have been removed. (See crbug.com/3445008).
-    VLOG(1) << "No active discovery sessions. Returning error.";
+    BLUETOOTH_LOG(DEBUG) << "No active discovery sessions. Returning error.";
     error_callback.Run(
         UMABluetoothDiscoverySessionOutcome::ACTIVE_SESSION_NOT_IN_ADAPTER);
     return;
@@ -1500,7 +1519,7 @@
     const base::Closure& callback,
     const DiscoverySessionErrorCallback& error_callback) {
   // Report success on the original request and increment the count.
-  VLOG(1) << __func__;
+  BLUETOOTH_LOG(EVENT) << __func__;
   DCHECK(discovery_request_pending_);
   DCHECK_EQ(num_discovery_sessions_, 0);
   discovery_request_pending_ = false;
@@ -1520,9 +1539,9 @@
     const DiscoverySessionErrorCallback& error_callback,
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to start discovery: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to start discovery: " << error_name << ": "
+                       << error_message;
 
   // Failed to start discovery. This can only happen if the count is at 0.
   DCHECK_EQ(num_discovery_sessions_, 0);
@@ -1534,7 +1553,8 @@
   // changing to false and then back to true. In this case, report success.
   if (IsPresent() && error_name == bluetooth_device::kErrorInProgress &&
       IsDiscovering()) {
-    VLOG(1) << "Discovery previously initiated. Reporting success.";
+    BLUETOOTH_LOG(DEBUG)
+        << "Discovery previously initiated. Reporting success.";
     num_discovery_sessions_++;
     callback.Run();
   } else {
@@ -1547,7 +1567,7 @@
 
 void BluetoothAdapterBlueZ::OnStopDiscovery(const base::Closure& callback) {
   // Report success on the original request and decrement the count.
-  VLOG(1) << __func__;
+  BLUETOOTH_LOG(EVENT) << __func__;
   DCHECK(discovery_request_pending_);
   DCHECK_EQ(num_discovery_sessions_, 1);
   discovery_request_pending_ = false;
@@ -1564,9 +1584,9 @@
     const DiscoverySessionErrorCallback& error_callback,
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to stop discovery: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to stop discovery: " << error_name << ": "
+                       << error_message;
 
   // Failed to stop discovery. This can only happen if the count is at 1.
   DCHECK(discovery_request_pending_);
@@ -1597,8 +1617,8 @@
     const base::Closure& callback,
     const DiscoverySessionErrorCallback& error_callback,
     UMABluetoothDiscoverySessionOutcome outcome) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to pre set discovery filter.";
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to pre set discovery filter.";
 
   // Failed to start discovery. This can only happen if the count is at 0.
   DCHECK_EQ(num_discovery_sessions_, 0);
@@ -1615,7 +1635,7 @@
     const base::Closure& callback,
     const DiscoverySessionErrorCallback& error_callback) {
   // Report success on the original request and increment the count.
-  VLOG(1) << __func__;
+  BLUETOOTH_LOG(EVENT) << __func__;
   if (IsPresent()) {
     callback.Run();
   } else {
@@ -1628,9 +1648,9 @@
     const DiscoverySessionErrorCallback& error_callback,
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to set discovery filter: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to set discovery filter: " << error_name
+                       << ": " << error_message;
 
   UMABluetoothDiscoverySessionOutcome outcome =
       TranslateDiscoveryErrorToUMA(error_name);
@@ -1649,7 +1669,7 @@
 
 void BluetoothAdapterBlueZ::ProcessQueuedDiscoveryRequests() {
   while (!discovery_request_queue_.empty()) {
-    VLOG(1) << "Process queued discovery request.";
+    BLUETOOTH_LOG(EVENT) << "Process queued discovery request.";
     DiscoveryParamTuple params = discovery_request_queue_.front();
     discovery_request_queue_.pop();
     AddDiscoverySession(std::get<0>(params), std::get<1>(params),
@@ -1721,8 +1741,8 @@
     const ServiceRecordErrorCallback& error_callback,
     const std::string& error_name,
     const std::string& error_message) {
-  VLOG(1) << "Creating service record failed: error: " << error_name << " - "
-          << error_message;
+  BLUETOOTH_LOG(EVENT) << "Creating service record failed: error: "
+                       << error_name << " - " << error_message;
 
   BluetoothServiceRecordBlueZ::ErrorCode code =
       BluetoothServiceRecordBlueZ::ErrorCode::UNKNOWN;
diff --git a/device/bluetooth/bluez/bluetooth_device_bluez.cc b/device/bluetooth/bluez/bluetooth_device_bluez.cc
index 2df2d43..bc35e5d0 100644
--- a/device/bluetooth/bluez/bluetooth_device_bluez.cc
+++ b/device/bluetooth/bluez/bluetooth_device_bluez.cc
@@ -15,6 +15,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "components/device_event_log/device_event_log.h"
 #include "dbus/bus.h"
 #include "device/bluetooth/bluetooth_socket.h"
 #include "device/bluetooth/bluetooth_socket_thread.h"
@@ -79,13 +80,13 @@
     return;
   }
 
-  if (vendor_id_source != NULL)
+  if (vendor_id_source != nullptr)
     *vendor_id_source = source_value;
-  if (vendor_id != NULL)
+  if (vendor_id != nullptr)
     *vendor_id = vendor_value;
-  if (product_id != NULL)
+  if (product_id != nullptr)
     *product_id = product_value;
-  if (device_id != NULL)
+  if (device_id != nullptr)
     *device_id = device_value;
 }
 
@@ -164,8 +165,9 @@
   if (IsGattServicesDiscoveryComplete()) {
     UpdateGattServices(object_path_);
   } else {
-    VLOG(2) << "Gatt services have not been fully resolved for device "
-            << object_path_.value();
+    BLUETOOTH_LOG(DEBUG)
+        << "Gatt services have not been fully resolved for device "
+        << object_path_.value();
   }
 
   // Update all the data that we cache within Chrome and do not pull from
@@ -262,7 +264,7 @@
   DCHECK(properties);
 
   if (properties->paired.value()) {
-    LOG(WARNING) << "Leaking connection to paired device.";
+    BLUETOOTH_LOG(ERROR) << "Leaking connection to paired device.";
     return;
   }
 
@@ -281,25 +283,25 @@
 BluetoothDevice::VendorIDSource BluetoothDeviceBlueZ::GetVendorIDSource()
     const {
   VendorIDSource vendor_id_source = VENDOR_ID_UNKNOWN;
-  ParseModalias(object_path_, &vendor_id_source, NULL, NULL, NULL);
+  ParseModalias(object_path_, &vendor_id_source, nullptr, nullptr, nullptr);
   return vendor_id_source;
 }
 
 uint16_t BluetoothDeviceBlueZ::GetVendorID() const {
   uint16_t vendor_id = 0;
-  ParseModalias(object_path_, NULL, &vendor_id, NULL, NULL);
+  ParseModalias(object_path_, nullptr, &vendor_id, nullptr, nullptr);
   return vendor_id;
 }
 
 uint16_t BluetoothDeviceBlueZ::GetProductID() const {
   uint16_t product_id = 0;
-  ParseModalias(object_path_, NULL, NULL, &product_id, NULL);
+  ParseModalias(object_path_, nullptr, nullptr, &product_id, nullptr);
   return product_id;
 }
 
 uint16_t BluetoothDeviceBlueZ::GetDeviceID() const {
   uint16_t device_id = 0;
-  ParseModalias(object_path_, NULL, NULL, NULL, &device_id);
+  ParseModalias(object_path_, nullptr, nullptr, nullptr, &device_id);
   return device_id;
 }
 
@@ -359,7 +361,7 @@
   bluez::BluetoothInputClient::Properties* input_properties =
       bluez::BluezDBusManager::Get()->GetBluetoothInputClient()->GetProperties(
           object_path_);
-  // GetProperties returns NULL when the device does not implement the given
+  // GetProperties returns nullptr when the device does not implement the given
   // interface. Non HID devices are normally connectable.
   if (!input_properties)
     return true;
@@ -434,8 +436,9 @@
   // DBus method call should gracefully return an error if the device is not
   // currently connected.
   bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->GetConnInfo(
-      object_path_, base::Bind(&BluetoothDeviceBlueZ::OnGetConnInfo,
-                               weak_ptr_factory_.GetWeakPtr(), callback),
+      object_path_,
+      base::Bind(&BluetoothDeviceBlueZ::OnGetConnInfo,
+                 weak_ptr_factory_.GetWeakPtr(), callback),
       base::Bind(&BluetoothDeviceBlueZ::OnGetConnInfoError,
                  weak_ptr_factory_.GetWeakPtr(), callback));
 }
@@ -447,8 +450,8 @@
   if (num_connecting_calls_++ == 0)
     adapter()->NotifyDeviceChanged(this);
 
-  VLOG(1) << object_path_.value() << ": Connecting, " << num_connecting_calls_
-          << " in progress";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": Connecting, "
+                       << num_connecting_calls_ << " in progress";
 
   if (IsPaired() || !pairing_delegate) {
     // No need to pair, or unable to, skip straight to connection.
@@ -474,8 +477,9 @@
   BeginPairing(pairing_delegate);
 
   bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->Pair(
-      object_path_, base::Bind(&BluetoothDeviceBlueZ::OnPair,
-                               weak_ptr_factory_.GetWeakPtr(), callback),
+      object_path_,
+      base::Bind(&BluetoothDeviceBlueZ::OnPair, weak_ptr_factory_.GetWeakPtr(),
+                 callback),
       base::Bind(&BluetoothDeviceBlueZ::OnPairError,
                  weak_ptr_factory_.GetWeakPtr(), error_callback));
 }
@@ -511,6 +515,8 @@
 void BluetoothDeviceBlueZ::CancelPairing() {
   bool canceled = false;
 
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": CancelPairing";
+
   // If there is a callback in progress that we can reply to then use that
   // to cancel the current pairing request.
   if (pairing_.get() && pairing_->CancelPairing())
@@ -518,8 +524,9 @@
 
   // If not we have to send an explicit CancelPairing() to the device instead.
   if (!canceled) {
-    VLOG(1) << object_path_.value() << ": No pairing context or callback. "
-            << "Sending explicit cancel";
+    BLUETOOTH_LOG(DEBUG) << object_path_.value()
+                         << ": No pairing context or callback. "
+                         << "Sending explicit cancel";
     bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->CancelPairing(
         object_path_, base::Bind(&base::DoNothing),
         base::Bind(&BluetoothDeviceBlueZ::OnCancelPairingError,
@@ -535,17 +542,18 @@
 
 void BluetoothDeviceBlueZ::Disconnect(const base::Closure& callback,
                                       const ErrorCallback& error_callback) {
-  VLOG(1) << object_path_.value() << ": Disconnecting";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": Disconnecting";
   bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->Disconnect(
-      object_path_, base::Bind(&BluetoothDeviceBlueZ::OnDisconnect,
-                               weak_ptr_factory_.GetWeakPtr(), callback),
+      object_path_,
+      base::Bind(&BluetoothDeviceBlueZ::OnDisconnect,
+                 weak_ptr_factory_.GetWeakPtr(), callback),
       base::Bind(&BluetoothDeviceBlueZ::OnDisconnectError,
                  weak_ptr_factory_.GetWeakPtr(), error_callback));
 }
 
 void BluetoothDeviceBlueZ::Forget(const base::Closure& callback,
                                   const ErrorCallback& error_callback) {
-  VLOG(1) << object_path_.value() << ": Removing device";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": Removing device";
   bluez::BluezDBusManager::Get()->GetBluetoothAdapterClient()->RemoveDevice(
       adapter()->object_path(), object_path_, callback,
       base::Bind(&BluetoothDeviceBlueZ::OnForgetError,
@@ -556,8 +564,8 @@
     const BluetoothUUID& uuid,
     const ConnectToServiceCallback& callback,
     const ConnectToServiceErrorCallback& error_callback) {
-  VLOG(1) << object_path_.value()
-          << ": Connecting to service: " << uuid.canonical_value();
+  BLUETOOTH_LOG(EVENT) << object_path_.value()
+                       << ": Connecting to service: " << uuid.canonical_value();
   scoped_refptr<BluetoothSocketBlueZ> socket =
       BluetoothSocketBlueZ::CreateBluetoothSocket(ui_task_runner_,
                                                   socket_thread_);
@@ -569,8 +577,9 @@
     const BluetoothUUID& uuid,
     const ConnectToServiceCallback& callback,
     const ConnectToServiceErrorCallback& error_callback) {
-  VLOG(1) << object_path_.value()
-          << ": Connecting insecurely to service: " << uuid.canonical_value();
+  BLUETOOTH_LOG(EVENT) << object_path_.value()
+                       << ": Connecting insecurely to service: "
+                       << uuid.canonical_value();
   scoped_refptr<BluetoothSocketBlueZ> socket =
       BluetoothSocketBlueZ::CreateBluetoothSocket(ui_task_runner_,
                                                   socket_thread_);
@@ -593,8 +602,9 @@
 
   // TODO(crbug.com/630586): Until there is a way to create a reference counted
   // GATT connection in bluetoothd, simply do a regular connect.
-  Connect(NULL, base::Bind(&BluetoothDeviceBlueZ::OnCreateGattConnection,
-                           weak_ptr_factory_.GetWeakPtr(), callback),
+  Connect(nullptr,
+          base::Bind(&BluetoothDeviceBlueZ::OnCreateGattConnection,
+                     weak_ptr_factory_.GetWeakPtr(), callback),
           error_callback);
 }
 
@@ -667,7 +677,8 @@
 void BluetoothDeviceBlueZ::GattServiceAdded(
     const dbus::ObjectPath& object_path) {
   if (GetGattService(object_path.value())) {
-    VLOG(1) << "Remote GATT service already exists: " << object_path.value();
+    BLUETOOTH_LOG(DEBUG) << "Remote GATT service already exists: "
+                         << object_path.value();
     return;
   }
 
@@ -677,11 +688,13 @@
           ->GetProperties(object_path);
   DCHECK(properties);
   if (properties->device.value() != object_path_) {
-    VLOG(2) << "Remote GATT service does not belong to this device.";
+    BLUETOOTH_LOG(DEBUG)
+        << "Remote GATT service does not belong to this device.";
     return;
   }
 
-  VLOG(1) << "Adding new remote GATT service for device: " << GetAddress();
+  BLUETOOTH_LOG(EVENT) << "Adding new remote GATT service for device: "
+                       << GetAddress();
 
   BluetoothRemoteGattServiceBlueZ* service =
       new BluetoothRemoteGattServiceBlueZ(adapter(), this, object_path);
@@ -705,9 +718,9 @@
   BluetoothRemoteGattServiceBlueZ* service =
       static_cast<BluetoothRemoteGattServiceBlueZ*>(iter->second.get());
 
-  VLOG(1) << "Removing remote GATT service with UUID: '"
-          << service->GetUUID().canonical_value()
-          << "' from device: " << GetAddress();
+  BLUETOOTH_LOG(EVENT) << "Removing remote GATT service with UUID: '"
+                       << service->GetUUID().canonical_value()
+                       << "' from device: " << GetAddress();
 
   DCHECK(service->object_path() == object_path);
   std::unique_ptr<BluetoothRemoteGattService> scoped_service =
@@ -765,9 +778,9 @@
     const ConnectionInfoCallback& callback,
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to get connection info: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to get connection info: " << error_name
+                       << ": " << error_message;
   callback.Run(ConnectionInfo());
 }
 
@@ -775,9 +788,9 @@
     const GetServiceRecordsErrorCallback& error_callback,
     const std::string& error_name,
     const std::string& error_message) {
-  VLOG(1) << object_path_.value()
-          << ": Failed to get service records: " << error_name << ": "
-          << error_message;
+  BLUETOOTH_LOG(EVENT) << object_path_.value()
+                       << ": Failed to get service records: " << error_name
+                       << ": " << error_message;
   BluetoothServiceRecordBlueZ::ErrorCode code =
       BluetoothServiceRecordBlueZ::ErrorCode::UNKNOWN;
   if (error_name == bluetooth_device::kErrorNotConnected) {
@@ -790,7 +803,7 @@
     bool after_pairing,
     const base::Closure& callback,
     const ConnectErrorCallback& error_callback) {
-  VLOG(1) << object_path_.value() << ": Connecting";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": Connecting";
   bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->Connect(
       object_path_,
       base::Bind(&BluetoothDeviceBlueZ::OnConnect,
@@ -806,8 +819,8 @@
     adapter()->NotifyDeviceChanged(this);
 
   DCHECK(num_connecting_calls_ >= 0);
-  VLOG(1) << object_path_.value() << ": Connected, " << num_connecting_calls_
-          << " still in progress";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": Connected, "
+                       << num_connecting_calls_ << " still in progress";
 
   SetTrusted();
 
@@ -835,11 +848,11 @@
     adapter()->NotifyDeviceChanged(this);
 
   DCHECK(num_connecting_calls_ >= 0);
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to connect device: " << error_name << ": "
-               << error_message;
-  VLOG(1) << object_path_.value() << ": " << num_connecting_calls_
-          << " still in progress";
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to connect device: " << error_name << ": "
+                       << error_message;
+  BLUETOOTH_LOG(DEBUG) << object_path_.value() << ": " << num_connecting_calls_
+                       << " still in progress";
 
   // Determine the error code from error_name.
   ConnectErrorCode error_code = ERROR_UNKNOWN;
@@ -859,7 +872,7 @@
 void BluetoothDeviceBlueZ::OnPairDuringConnect(
     const base::Closure& callback,
     const ConnectErrorCallback& error_callback) {
-  VLOG(1) << object_path_.value() << ": Paired";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": Paired";
 
   EndPairing();
 
@@ -874,11 +887,11 @@
     adapter()->NotifyDeviceChanged(this);
 
   DCHECK(num_connecting_calls_ >= 0);
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to pair device: " << error_name << ": "
-               << error_message;
-  VLOG(1) << object_path_.value() << ": " << num_connecting_calls_
-          << " still in progress";
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to pair device: " << error_name << ": "
+                       << error_message;
+  BLUETOOTH_LOG(DEBUG) << object_path_.value() << ": " << num_connecting_calls_
+                       << " still in progress";
 
   EndPairing();
 
@@ -890,7 +903,7 @@
 }
 
 void BluetoothDeviceBlueZ::OnPair(const base::Closure& callback) {
-  VLOG(1) << object_path_.value() << ": Paired";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": Paired";
   EndPairing();
   callback.Run();
 }
@@ -899,9 +912,9 @@
     const ConnectErrorCallback& error_callback,
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to pair device: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to pair device: " << error_name << ": "
+                       << error_message;
   EndPairing();
   ConnectErrorCode error_code = DBusErrorToConnectError(error_name);
   RecordPairingResult(error_code);
@@ -911,9 +924,9 @@
 void BluetoothDeviceBlueZ::OnCancelPairingError(
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to cancel pairing: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to cancel pairing: " << error_name << ": "
+                       << error_message;
 }
 
 void BluetoothDeviceBlueZ::SetTrusted() {
@@ -929,12 +942,15 @@
 }
 
 void BluetoothDeviceBlueZ::OnSetTrusted(bool success) {
-  LOG_IF(WARNING, !success) << object_path_.value()
-                            << ": Failed to set device as trusted";
+  device_event_log::LogLevel log_level =
+      success ? device_event_log::LOG_LEVEL_DEBUG
+              : device_event_log::LOG_LEVEL_ERROR;
+  DEVICE_LOG(device_event_log::LOG_TYPE_BLUETOOTH, log_level)
+      << object_path_.value() << ": OnSetTrusted: " << success;
 }
 
 void BluetoothDeviceBlueZ::OnDisconnect(const base::Closure& callback) {
-  VLOG(1) << object_path_.value() << ": Disconnected";
+  BLUETOOTH_LOG(EVENT) << object_path_.value() << ": Disconnected";
   // Do not notify about changed device since this is already done by
   // the dbus::PropertySet and the property change callback for BlueZ.
   DidDisconnectGatt(false /* notifyDeviceChanged */);
@@ -945,18 +961,18 @@
     const ErrorCallback& error_callback,
     const std::string& error_name,
     const std::string& error_message) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to disconnect device: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to disconnect device: " << error_name
+                       << ": " << error_message;
   error_callback.Run();
 }
 
 void BluetoothDeviceBlueZ::OnForgetError(const ErrorCallback& error_callback,
                                          const std::string& error_name,
                                          const std::string& error_message) {
-  LOG(WARNING) << object_path_.value()
-               << ": Failed to remove device: " << error_name << ": "
-               << error_message;
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to remove device: " << error_name << ": "
+                       << error_message;
   error_callback.Run();
 }
 
diff --git a/device/bluetooth/test/bluetooth_test.cc b/device/bluetooth/test/bluetooth_test.cc
index 234b0486..82d2146 100644
--- a/device/bluetooth/test/bluetooth_test.cc
+++ b/device/bluetooth/test/bluetooth_test.cc
@@ -25,6 +25,7 @@
 const std::string BluetoothTestBase::kTestDeviceAddress2 = "02:00:00:8B:74:63";
 const std::string BluetoothTestBase::kTestDeviceAddress3 = "03:00:00:17:C0:57";
 
+// Service UUIDs
 const std::string BluetoothTestBase::kTestUUIDGenericAccess =
     "00001800-0000-1000-8000-00805f9b34fb";
 const std::string BluetoothTestBase::kTestUUIDGenericAttribute =
@@ -35,6 +36,26 @@
     "00001803-0000-1000-8000-00805f9b34fb";
 const std::string BluetoothTestBase::kTestUUIDHeartRate =
     "0000180d-0000-1000-8000-00805f9b34fb";
+// Characteristic UUIDs
+const std::string BluetoothTestBase::kTestUUIDDeviceName =
+    "00002a00-0000-1000-8000-00805f9b34fb";
+const std::string BluetoothTestBase::kTestUUIDAppearance =
+    "00002a01-0000-1000-8000-00805f9b34fb";
+const std::string BluetoothTestBase::kTestUUIDReconnectionAddress =
+    "00002a03-0000-1000-8000-00805f9b34fb";
+const std::string BluetoothTestBase::kTestUUIDHeartRateMeasurement =
+    "00002a37-0000-1000-8000-00805f9b34fb";
+// Descriptor UUIDs
+const std::string BluetoothTestBase::kTestUUIDCharacteristicUserDescription =
+    "00002901-0000-1000-8000-00805f9b34fb";
+const std::string
+    BluetoothTestBase::kTestUUIDClientCharacteristicConfiguration =
+        "00002902-0000-1000-8000-00805f9b34fb";
+const std::string
+    BluetoothTestBase::kTestUUIDServerCharacteristicConfiguration =
+        "00002903-0000-1000-8000-00805f9b34fb";
+const std::string BluetoothTestBase::kTestUUIDCharacteristicPresentationFormat =
+    "00002904-0000-1000-8000-00805f9b34fb";
 
 BluetoothTestBase::BluetoothTestBase() : weak_factory_(this) {}
 
diff --git a/device/bluetooth/test/bluetooth_test.h b/device/bluetooth/test/bluetooth_test.h
index b6610ea9..8b99e13 100644
--- a/device/bluetooth/test/bluetooth_test.h
+++ b/device/bluetooth/test/bluetooth_test.h
@@ -87,11 +87,24 @@
     LOWER = -20,
   };
 
+  // Services
   static const std::string kTestUUIDGenericAccess;
   static const std::string kTestUUIDGenericAttribute;
   static const std::string kTestUUIDImmediateAlert;
   static const std::string kTestUUIDLinkLoss;
   static const std::string kTestUUIDHeartRate;
+  // Characteristics
+  // The following three characteristics are for kTestUUIDGenericAccess.
+  static const std::string kTestUUIDDeviceName;
+  static const std::string kTestUUIDAppearance;
+  static const std::string kTestUUIDReconnectionAddress;
+  // This characteristic is for kTestUUIDHeartRate.
+  static const std::string kTestUUIDHeartRateMeasurement;
+  // Descriptors
+  static const std::string kTestUUIDCharacteristicUserDescription;
+  static const std::string kTestUUIDClientCharacteristicConfiguration;
+  static const std::string kTestUUIDServerCharacteristicConfiguration;
+  static const std::string kTestUUIDCharacteristicPresentationFormat;
 
   BluetoothTestBase();
   ~BluetoothTestBase() override;
diff --git a/extensions/browser/content_hash_fetcher.cc b/extensions/browser/content_hash_fetcher.cc
index 2c5f270..4ed26faf 100644
--- a/extensions/browser/content_hash_fetcher.cc
+++ b/extensions/browser/content_hash_fetcher.cc
@@ -18,8 +18,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/lock.h"
-#include "base/task_runner_util.h"
-#include "base/threading/sequenced_worker_pool.h"
+#include "base/task_scheduler/post_task.h"
 #include "base/timer/elapsed_timer.h"
 #include "base/version.h"
 #include "content/public/browser/browser_thread.h"
@@ -197,11 +196,10 @@
 void ContentHashFetcherJob::Start() {
   base::FilePath verified_contents_path =
       file_util::GetVerifiedContentsPath(extension_path_);
-  base::PostTaskAndReplyWithResult(
-      content::BrowserThread::GetBlockingPool(),
-      FROM_HERE,
-      base::Bind(&ContentHashFetcherJob::LoadVerifiedContents,
-                 this,
+  base::PostTaskWithTraitsAndReplyWithResult(
+      FROM_HERE, base::TaskTraits().MayBlock().WithPriority(
+                     base::TaskPriority::USER_VISIBLE),
+      base::Bind(&ContentHashFetcherJob::LoadVerifiedContents, this,
                  verified_contents_path),
       base::Bind(&ContentHashFetcherJob::DoneCheckingForVerifiedContents,
                  this));
@@ -314,12 +312,12 @@
     base::FilePath destination =
         file_util::GetVerifiedContentsPath(extension_path_);
     size_t size = response->size();
-    base::PostTaskAndReplyWithResult(
-        content::BrowserThread::GetBlockingPool(),
-        FROM_HERE,
+    base::PostTaskWithTraitsAndReplyWithResult(
+        FROM_HERE, base::TaskTraits().MayBlock().WithPriority(
+                       base::TaskPriority::USER_VISIBLE),
         base::Bind(&WriteFileHelper, destination, base::Passed(&response)),
-        base::Bind(
-            &ContentHashFetcherJob::OnVerifiedContentsWritten, this, size));
+        base::Bind(&ContentHashFetcherJob::OnVerifiedContentsWritten, this,
+                   size));
   } else {
     DoneFetchingVerifiedContents(false);
   }
diff --git a/extensions/browser/content_hash_fetcher_unittest.cc b/extensions/browser/content_hash_fetcher_unittest.cc
index 2d01fb1..e54b4d6 100644
--- a/extensions/browser/content_hash_fetcher_unittest.cc
+++ b/extensions/browser/content_hash_fetcher_unittest.cc
@@ -186,9 +186,15 @@
   base::ScopedTempDir temp_dir_;
 };
 
+// Flaky on Linux and ChromeOS. https://crbug.com/702300
+#if defined(OS_LINUX) || defined(OS_CHROMEOS)
+#define MAYBE_MissingVerifiedContents DISABLED_MissingVerifiedContents
+#else
+#define MAYBE_MissingVerifiedContents MissingVerifiedContents
+#endif
 // This tests our ability to successfully fetch, parse, and validate a missing
 // verified_contents.json file for an extension.
-TEST_F(ContentHashFetcherTest, MissingVerifiedContents) {
+TEST_F(ContentHashFetcherTest, MAYBE_MissingVerifiedContents) {
   // We unzip the extension source to a temp directory to simulate it being
   // installed there, because the ContentHashFetcher will create the _metadata/
   // directory within the extension install dir and write the fetched
@@ -227,9 +233,7 @@
       base::PathExists(file_util::GetVerifiedContentsPath(extension->path())));
 }
 
-// Similar to MissingVerifiedContents, but tests the case where the extension
-// actually has corruption.
-// Flaky on Linux and ChromeOS. crbug.com/
+// Flaky on Linux and ChromeOS. https://crbug.com/702300
 #if defined(OS_LINUX) || defined(OS_CHROMEOS)
 #define MAYBE_MissingVerifiedContentsAndCorrupt \
   DISABLED_MissingVerifiedContentsAndCorrupt
@@ -237,6 +241,8 @@
 #define MAYBE_MissingVerifiedContentsAndCorrupt \
   MissingVerifiedContentsAndCorrupt
 #endif
+// Similar to MissingVerifiedContents, but tests the case where the extension
+// actually has corruption.
 TEST_F(ContentHashFetcherTest, MAYBE_MissingVerifiedContentsAndCorrupt) {
   base::FilePath test_dir_base =
       GetTestPath(base::FilePath()).AppendASCII("missing_verified_contents");
diff --git a/extensions/browser/guest_view/web_view/web_view_apitest.cc b/extensions/browser/guest_view/web_view/web_view_apitest.cc
index fe74232..745edfe 100644
--- a/extensions/browser/guest_view/web_view/web_view_apitest.cc
+++ b/extensions/browser/guest_view/web_view/web_view_apitest.cc
@@ -533,17 +533,10 @@
   RunTest("testExecuteScriptFail", "web_view/apitest");
 }
 
-// Failes on Linux/CrOS.  https://crbug.com/702918
-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
-#define MAYBE_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged \
-  DISABLED_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged
-#else
-#define MAYBE_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged \
-  TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged
-#endif
+// Flaky and likely not testing the right assertion.  https://crbug.com/702918
 IN_PROC_BROWSER_TEST_F(
     WebViewAPITest,
-    MAYBE_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged) {
+    DISABLED_TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged) {
   RunTest("testExecuteScriptIsAbortedWhenWebViewSourceIsChanged",
           "web_view/apitest");
 }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
index b6412b6..5eefa17 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
@@ -420,6 +420,8 @@
                           GLenum type,
                           GLsizei bufsize,
                           GLsizei* length,
+                          GLsizei* columns,
+                          GLsizei* rows,
                           void* pixels,
                           int32_t* success);
 error::Error DoReleaseShaderCompiler();
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
index f6e723d..d602360 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -1687,11 +1687,13 @@
                                                        GLenum type,
                                                        GLsizei bufsize,
                                                        GLsizei* length,
+                                                       GLsizei* columns,
+                                                       GLsizei* rows,
                                                        void* pixels,
                                                        int32_t* success) {
   FlushErrors();
   glReadPixelsRobustANGLE(x, y, width, height, format, type, bufsize, length,
-                          pixels);
+                          columns, rows, pixels);
   *success = FlushErrors() ? 0 : 1;
   return error::kNoError;
 }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
index 2989ccd..a1398ed 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
@@ -859,9 +859,11 @@
 
   GLsizei bufsize = buffer_size;
   GLsizei length = 0;
+  GLsizei columns = 0;
+  GLsizei rows = 0;
   int32_t success = 0;
   error::Error error = DoReadPixels(x, y, width, height, format, type, bufsize,
-                                    &length, pixels, &success);
+                                    &length, &columns, &rows, pixels, &success);
   if (error != error::kNoError) {
     return error;
   }
@@ -884,8 +886,8 @@
 
   if (result) {
     result->success = success;
-    result->row_length = static_cast<uint32_t>(width);
-    result->num_rows = static_cast<uint32_t>(height);
+    result->row_length = static_cast<uint32_t>(columns);
+    result->num_rows = static_cast<uint32_t>(rows);
   }
 
   return error::kNoError;
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index 79d69d9..7e12be9 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1453,7 +1453,7 @@
       <message name="IDS_IOS_TOOLS_MENU_REQUEST_DESKTOP_SITE" desc="The iOS menu item for requesting the desktop site [Length: 15em] [iOS only]">
         Request Desktop Site
       </message>
-      <message name="IDS_IOS_TOOLS_MENU_REQUEST_MOBILE_SITE" desc="The iOS menu item for requesting the mobile site [Length: 15em] [iOS only]">
+      <message name="IDS_IOS_TOOLS_MENU_REQUEST_MOBILE_SITE" desc="The iOS menu item for requesting the mobile site [Length: 25em] [iOS only]">
         Request Mobile Site
       </message>
       <message name="IDS_IOS_TOOLS_MENU_SETTINGS" desc="The iOS menu item for opening the settings [Length: 15em] [iOS only]">
diff --git a/ios/chrome/browser/payments/payment_request_view_controller.mm b/ios/chrome/browser/payments/payment_request_view_controller.mm
index cc90505..eb9e74a2 100644
--- a/ios/chrome/browser/payments/payment_request_view_controller.mm
+++ b/ios/chrome/browser/payments/payment_request_view_controller.mm
@@ -60,6 +60,8 @@
 // as a link in the UI (see setLabelLinkURL: in CollectionViewFooterCell).
 const char kSettingsURL[] = "settings://card-and-address";
 
+const CGFloat kFooterCellHorizontalPadding = 16;
+
 }  // namespace
 
 NSString* const kPaymentRequestCollectionViewID =
@@ -519,6 +521,15 @@
           [[MDCPalette cr_bluePalette] tint700];
       break;
     }
+    case ItemTypeFooterText: {
+      CollectionViewFooterCell* footerCell =
+          base::mac::ObjCCastStrict<CollectionViewFooterCell>(cell);
+      footerCell.textLabel.font = [MDCTypography body2Font];
+      footerCell.textLabel.textColor = [[MDCPalette greyPalette] tint600];
+      footerCell.textLabel.shadowColor = nil;  // No shadow.
+      footerCell.horizontalPadding = kFooterCellHorizontalPadding;
+      break;
+    }
     default:
       break;
   }
diff --git a/ios/chrome/browser/reading_list/offline_url_utils.cc b/ios/chrome/browser/reading_list/offline_url_utils.cc
index 2964725..9d41df72 100644
--- a/ios/chrome/browser/reading_list/offline_url_utils.cc
+++ b/ios/chrome/browser/reading_list/offline_url_utils.cc
@@ -10,6 +10,8 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/reading_list/core/offline_url_utils.h"
+#include "components/reading_list/core/reading_list_entry.h"
+#include "components/reading_list/core/reading_list_model.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
 #include "net/base/url_util.h"
 
@@ -23,21 +25,19 @@
 GURL OfflineURLForPath(const base::FilePath& distilled_path,
                        const GURL& entry_url,
                        const GURL& virtual_url) {
-  if (distilled_path.empty()) {
-    return GURL();
-  }
+  DCHECK(!distilled_path.empty());
+  DCHECK(entry_url.is_valid());
+  DCHECK(virtual_url.is_valid());
   GURL page_url(kChromeUIOfflineURL);
   GURL::Replacements replacements;
   replacements.SetPathStr(distilled_path.value());
   page_url = page_url.ReplaceComponents(replacements);
-  if (entry_url.is_valid()) {
-    page_url = net::AppendQueryParameter(page_url, kEntryURLQueryParam,
-                                         entry_url.spec());
-  }
-  if (virtual_url.is_valid()) {
-    page_url = net::AppendQueryParameter(page_url, kVirtualURLQueryParam,
-                                         virtual_url.spec());
-  }
+  page_url = net::AppendQueryParameter(page_url, kEntryURLQueryParam,
+                                       entry_url.spec());
+
+  page_url = net::AppendQueryParameter(page_url, kVirtualURLQueryParam,
+                                       virtual_url.spec());
+
   return page_url;
 }
 
@@ -50,7 +50,7 @@
       return entry_url;
     }
   }
-  return offline_url;
+  return GURL::EmptyGURL();
 }
 
 GURL VirtualURLForOfflineURL(const GURL& offline_url) {
@@ -62,7 +62,7 @@
       return virtual_url;
     }
   }
-  return EntryURLForOfflineURL(offline_url);
+  return GURL::EmptyGURL();
 }
 
 GURL FileURLForDistilledURL(const GURL& distilled_url,
@@ -84,4 +84,24 @@
 bool IsOfflineURL(const GURL& url) {
   return url.SchemeIs(kChromeUIScheme) && url.host() == kChromeUIOfflineHost;
 }
+
+bool IsOfflineURLValid(const GURL& url, ReadingListModel* model) {
+  if (!IsOfflineURL(url)) {
+    return false;
+  }
+  GURL entry_url = EntryURLForOfflineURL(url);
+  if (!entry_url.is_valid() || !model || !model->loaded()) {
+    return false;
+  }
+  const ReadingListEntry* entry = model->GetEntryByURL(entry_url);
+  if (!entry || entry->DistilledState() != ReadingListEntry::PROCESSED) {
+    return false;
+  }
+  // It is possible (unlikely) for a user to type directly a URL that passes all
+  // the tests above but still is not exactly the one returned by
+  // |OfflineURLForPath|. Make a final test to check it.
+  return url == reading_list::OfflineURLForPath(entry->DistilledPath(),
+                                                entry->URL(),
+                                                entry->DistilledURL());
+}
 }
diff --git a/ios/chrome/browser/reading_list/offline_url_utils.h b/ios/chrome/browser/reading_list/offline_url_utils.h
index d7af133..34caa5d 100644
--- a/ios/chrome/browser/reading_list/offline_url_utils.h
+++ b/ios/chrome/browser/reading_list/offline_url_utils.h
@@ -11,23 +11,26 @@
 #include "base/strings/string16.h"
 #include "url/gurl.h"
 
+class ReadingListModel;
+
 namespace reading_list {
 
 // The distilled URL chrome://offline/... that will load the file at |path|.
 // |entry_url| is the URL of the ReadingListEntry.
 // |virtual_url| is the URL to display in the omnibox. This can be different
-// from |entry_url| is the distillation was done after a redirection.
-// |entry_url| and |virtual_url| are optionnal.
+// from |entry_url| if the distillation was done after a redirection.
+// |distilled_path|, |entry_url| and |virtual_url| are required and must not be
+// empty or invalid.
 GURL OfflineURLForPath(const base::FilePath& distilled_path,
                        const GURL& entry_url,
                        const GURL& virtual_url);
 
 // If |offline_url| has a "entryURL" query params that is a URL, returns it.
-// If not, return |offline_url|
+// If not, return GURL::EmptyURL().
 GURL EntryURLForOfflineURL(const GURL& offline_url);
 
 // If |offline_url| has a "virtualURL" query params that is a URL, returns it.
-// If not, return |EntryURLForOfflineURL(|offline_url|)|
+// If not, return GURL::EmptyURL().
 GURL VirtualURLForOfflineURL(const GURL& offline_url);
 
 // The file URL pointing to the local file to load to display |distilled_url|.
@@ -41,6 +44,12 @@
 // Returns whether the URL points to a chrome offline URL.
 bool IsOfflineURL(const GURL& url);
 
+// Returns whether the URL points to a valid chrome offline URL that can be
+// displayed by a |OfflinePageNativeContent|.
+// Returns false if |model| is null, not loaded or does not contain entry
+// pointed by |url|.
+bool IsOfflineURLValid(const GURL& url, ReadingListModel* model);
+
 }  // namespace reading_list
 
 #endif  // IOS_CHROME_BROWSER_READING_LIST_OFFLINE_URL_UTILS_H_
diff --git a/ios/chrome/browser/reading_list/offline_url_utils_unittest.cc b/ios/chrome/browser/reading_list/offline_url_utils_unittest.cc
index 8472ffad..0229ceb9 100644
--- a/ios/chrome/browser/reading_list/offline_url_utils_unittest.cc
+++ b/ios/chrome/browser/reading_list/offline_url_utils_unittest.cc
@@ -7,19 +7,15 @@
 #include <string>
 
 #include "base/files/file_path.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/gtest_util.h"
+#include "base/time/default_clock.h"
+#include "components/reading_list/core/reading_list_entry.h"
+#include "components/reading_list/core/reading_list_model_impl.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
-// Checks the distilled URL for the page is chrome://offline/MD5/page.html;
-TEST(OfflineURLUtilsTest, DistilledURLForPathTest) {
-  base::FilePath page_path("MD5/page.html");
-  GURL distilled_url =
-      reading_list::OfflineURLForPath(page_path, GURL(), GURL());
-  EXPECT_EQ("chrome://offline/MD5/page.html", distilled_url.spec());
-}
-
 // Checks the distilled URL for the page with an onlineURL is
 // chrome://offline/MD5/page.html?entryURL=...&virtualURL=...
 TEST(OfflineURLUtilsTest, OfflineURLForPathWithEntryURLAndVirtualURLTest) {
@@ -36,26 +32,26 @@
 }
 
 // Checks the parsing of offline URL chrome://offline/MD5/page.html.
-// As entryURL and virtualURL are absent, they should return the offline URL.
+// As entryURL and virtualURL are absent, they should be invalid.
 TEST(OfflineURLUtilsTest, ParseOfflineURLTest) {
   GURL distilled_url("chrome://offline/MD5/page.html");
   GURL entry_url = reading_list::EntryURLForOfflineURL(distilled_url);
-  EXPECT_EQ("chrome://offline/MD5/page.html", entry_url.spec());
+  EXPECT_TRUE(entry_url.is_empty());
   GURL virtual_url = reading_list::VirtualURLForOfflineURL(distilled_url);
-  EXPECT_EQ("chrome://offline/MD5/page.html", virtual_url.spec());
+  EXPECT_TRUE(virtual_url.is_empty());
 }
 
 // Checks the parsing of offline URL
 // chrome://offline/MD5/page.html?entryURL=encorded%20URL
 // As entryURL is present, it should be returned correctly.
-// As virtualURL is absent, it should return the entryURL.
+// As virtualURL is absent, it should return GURL::EmptyGURL().
 TEST(OfflineURLUtilsTest, ParseOfflineURLWithEntryURLTest) {
   GURL offline_url(
       "chrome://offline/MD5/page.html?entryURL=http%3A%2F%2Ffoo.bar%2F");
   GURL entry_url = reading_list::EntryURLForOfflineURL(offline_url);
   EXPECT_EQ("http://foo.bar/", entry_url.spec());
   GURL virtual_url = reading_list::VirtualURLForOfflineURL(offline_url);
-  EXPECT_EQ("http://foo.bar/", virtual_url.spec());
+  EXPECT_TRUE(virtual_url.is_empty());
 }
 
 // Checks the parsing of offline URL
@@ -66,7 +62,7 @@
   GURL offline_url(
       "chrome://offline/MD5/page.html?virtualURL=http%3A%2F%2Ffoo.bar%2F");
   GURL entry_url = reading_list::EntryURLForOfflineURL(offline_url);
-  EXPECT_EQ(offline_url, entry_url);
+  EXPECT_TRUE(entry_url.is_empty());
   GURL virtual_url = reading_list::VirtualURLForOfflineURL(offline_url);
   EXPECT_EQ("http://foo.bar/", virtual_url.spec());
 }
@@ -125,3 +121,48 @@
       reading_list::IsOfflineURL(GURL("chrome://offline/foobar?foo=bar")));
 }
 
+// Checks that the offline URLs are correctly detected by |IsOfflineURL|.
+TEST(OfflineURLUtilsTest, IsOfflineURLValid) {
+  auto reading_list_model = base::MakeUnique<ReadingListModelImpl>(
+      nullptr, nullptr, base::MakeUnique<base::DefaultClock>());
+  GURL entry_url("http://entry_url.com");
+  base::FilePath distilled_path("distilled/page.html");
+  GURL distilled_url("http://distilled_url.com");
+  reading_list_model->AddEntry(entry_url, "title",
+                               reading_list::ADDED_VIA_CURRENT_APP);
+  reading_list_model->SetEntryDistilledInfo(
+      entry_url, distilled_path, distilled_url, 10, base::Time::Now());
+
+  EXPECT_FALSE(
+      reading_list::IsOfflineURLValid(GURL(), reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(GURL("chrome://"),
+                                               reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(GURL("chrome://offline-foobar"),
+                                               reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(GURL("http://offline/"),
+                                               reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(GURL("http://chrome://offline/"),
+                                               reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(GURL("chrome://offline"),
+                                               reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(GURL("chrome://offline/"),
+                                               reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(GURL("chrome://offline/foobar"),
+                                               reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(
+      GURL("chrome://offline/foobar?foo=bar"), reading_list_model.get()));
+  EXPECT_TRUE(reading_list::IsOfflineURLValid(
+      reading_list::OfflineURLForPath(distilled_path, entry_url, distilled_url),
+      reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(
+      reading_list::OfflineURLForPath(distilled_path, entry_url, entry_url),
+      reading_list_model.get()));
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(
+      reading_list::OfflineURLForPath(base::FilePath("not_distilled_path"),
+                                      entry_url, distilled_url),
+      reading_list_model.get()));
+  reading_list_model->RemoveEntryByURL(entry_url);
+  EXPECT_FALSE(reading_list::IsOfflineURLValid(
+      reading_list::OfflineURLForPath(distilled_path, entry_url, distilled_url),
+      reading_list_model.get()));
+}
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm
index e4b9c0f..4e535e1 100644
--- a/ios/chrome/browser/ui/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -2973,9 +2973,14 @@
 
 - (BOOL)hasControllerForURL:(const GURL&)url {
   std::string host(url.host());
+  if (host == kChromeUIOfflineHost) {
+    // Only allow offline URL that are fully specified.
+    return reading_list::IsOfflineURLValid(
+        url, ReadingListModelFactory::GetForBrowserState(_browserState));
+  }
 
   return host == kChromeUINewTabHost || host == kChromeUIBookmarksHost ||
-         host == kChromeUITermsHost || host == kChromeUIOfflineHost;
+         host == kChromeUITermsHost;
 }
 
 - (id<CRWNativeContent>)controllerForURL:(const GURL&)url
@@ -3028,7 +3033,8 @@
     [self setOverScrollActionControllerToStaticNativeContent:
               staticNativeController];
     nativeController = staticNativeController;
-  } else if (url_host == kChromeUIOfflineHost) {
+  } else if (url_host == kChromeUIOfflineHost &&
+             [self hasControllerForURL:url]) {
     StaticHtmlNativeContent* staticNativeController =
         [[[OfflinePageNativeContent alloc] initWithLoader:self
                                              browserState:_browserState
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_article_item.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_article_item.mm
index 569b9e1..8781014 100644
--- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_article_item.mm
+++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_article_item.mm
@@ -173,8 +173,7 @@
     _titleLabel.font = [MDCTypography subheadFont];
     _subtitleLabel.font = [MDCTypography body1Font];
     _publisherLabel.font = [MDCTypography captionFont];
-    _faviconView.font =
-        [[MDCTypography fontLoader] regularFontOfSize:kFaviconSize / 2];
+    _faviconView.font = [[MDCTypography fontLoader] mediumFontOfSize:10];
 
     _subtitleLabel.textColor = [[MDCPalette greyPalette] tint700];
     _publisherLabel.textColor = [[MDCPalette greyPalette] tint700];
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm
index 16e91f9..dd8d35b9 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_toolbar_controller.mm
@@ -206,10 +206,12 @@
   [super hideViewsForNewTabPage:hide];
   // Show the back/forward buttons if there is forward history.
   ToolbarModelIOS* toolbarModelIOS = [_delegate toolbarModelIOS];
-  BOOL forwardEnabled = toolbarModelIOS->CanGoForward();
-  [_backButton setHidden:!forwardEnabled && hide];
-  [_backButton setEnabled:toolbarModelIOS->CanGoBack()];
-  [_forwardButton setHidden:!forwardEnabled && hide];
+  if (toolbarModelIOS) {
+    BOOL forwardEnabled = toolbarModelIOS->CanGoForward();
+    [_backButton setHidden:!forwardEnabled && hide];
+    [_backButton setEnabled:toolbarModelIOS->CanGoBack()];
+    [_forwardButton setHidden:!forwardEnabled && hide];
+  }
 }
 
 - (void)focusOmnibox:(id)sender {
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_view.mm b/ios/chrome/browser/ui/ntp/new_tab_page_view.mm
index 7f9f7ab8..5245ee5 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_view.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_view.mm
@@ -80,11 +80,15 @@
     [self.scrollView setContentOffset:point animated:NO];
   }
 
-  // Trigger a layout.  The |-layoutIfNeeded| call is required because sometimes
-  // |-layoutSubviews| is not successfully triggered when |-setNeedsLayout| is
-  // called after frame changes due to autoresizing masks.
-  [self setNeedsLayout];
-  [self layoutIfNeeded];
+  // This should never be needed in autolayout.
+  if (self.translatesAutoresizingMaskIntoConstraints) {
+    // Trigger a layout.  The |-layoutIfNeeded| call is required because
+    // sometimes  |-layoutSubviews| is not successfully triggered when
+    // |-setNeedsLayout| is called after frame changes due to autoresizing
+    // masks.
+    [self setNeedsLayout];
+    [self layoutIfNeeded];
+  }
 }
 
 - (void)layoutSubviews {
@@ -102,6 +106,14 @@
         CGRectGetMinX(self.bounds), CGRectGetMinY(self.bounds),
         CGRectGetWidth(self.bounds), CGRectGetMinY(self.tabBar.frame));
   }
+
+  // When using a new_tab_page_view in autolayout -setFrame is never called,
+  // which means all the logic to keep the selected scroll index set is never
+  // called.  Rather than refactor away all of this to support ios/clean, just
+  // make sure -setFrame is called when loaded in autolayout.
+  if (!self.translatesAutoresizingMaskIntoConstraints) {
+    [self setFrame:self.frame];
+  }
 }
 
 - (void)updateScrollViewContentSize {
diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.h b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.h
index 31a74f3..b1b0f48 100644
--- a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.h
+++ b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.h
@@ -42,7 +42,6 @@
   bool valid() const { return valid_; }
   const std::string& promo_type() { return promo_type_; }
   const std::string& promo_text() { return promo_text_; }
-  const std::string& promo_name() { return promo_name_; }
   WhatsNewIcon icon() { return icon_; }
   bool IsURLPromo() const;
   const GURL& url() { return url_; }
@@ -78,9 +77,6 @@
   // Type of whats new promo.
   std::string promo_type_;
 
-  // Name of promo.
-  std::string promo_name_;
-
   // Icon of promo.
   WhatsNewIcon icon_;
 
diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm
index 2828c79..e47479fa 100644
--- a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm
+++ b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm
@@ -42,13 +42,13 @@
 };
 
 // Returns a localized version of |promo_text| if it has an entry in the
-// |kPromoStringToIdsMap|. If there is no entry, |promo_text| is returned.
+// |kPromoStringToIdsMap|. If there is no entry, an empty string is returned.
 std::string GetLocalizedPromoText(const std::string& promo_text) {
   for (size_t i = 0; i < arraysize(kPromoStringToIdsMap); ++i) {
     if (kPromoStringToIdsMap[i].promo_text_str == promo_text)
       return l10n_util::GetStringUTF8(kPromoStringToIdsMap[i].message_id);
   }
-  return promo_text;
+  return std::string();
 }
 
 }  // namespace
@@ -141,12 +141,6 @@
     }
   }
 
-  if (promo_name_ == "WKWVGotFasterPromo") {
-    // Promo is not relevant anymore: It was shown during the migration to the
-    // WKWebview.
-    return false;
-  }
-
   return true;
 }
 
@@ -195,21 +189,23 @@
 bool NotificationPromoWhatsNew::InitFromNotificationPromo() {
   valid_ = false;
 
-  notification_promo_.promo_payload()->GetString("promo_type", &promo_type_);
-  notification_promo_.promo_payload()->GetString("metric_name", &metric_name_);
   promo_text_ = GetLocalizedPromoText(notification_promo_.promo_text());
+  if (promo_text_.empty())
+    return valid_;
 
+  notification_promo_.promo_payload()->GetString("metric_name", &metric_name_);
+  if (metric_name_.empty())
+    return valid_;
+
+  notification_promo_.promo_payload()->GetString("promo_type", &promo_type_);
   if (IsURLPromo()) {
     std::string url_text;
     notification_promo_.promo_payload()->GetString("url", &url_text);
     url_ = GURL(url_text);
     if (url_.is_empty() || !url_.is_valid()) {
-      valid_ = false;
       return valid_;
     }
-  }
-
-  if (IsChromeCommand()) {
+  } else if (IsChromeCommand()) {
     std::string command;
     notification_promo_.promo_payload()->GetString("command", &command);
     if (command == "bookmark") {
@@ -217,20 +213,19 @@
     } else if (command == "ratethisapp") {
       command_id_ = IDC_RATE_THIS_APP;
     } else {
-      valid_ = false;
       return valid_;
     }
+  } else {  // If |promo_type_| is not set to URL or Command, return early.
+    return valid_;
   }
 
-  valid_ =
-      !metric_name_.empty() && !promo_type_.empty() && !promo_text_.empty();
+  valid_ = true;
 
-  notification_promo_.promo_payload()->GetString("promo_name", &promo_name_);
+  // Optional values don't need validation.
   std::string icon_name;
   notification_promo_.promo_payload()->GetString("icon", &icon_name);
   icon_ = ParseIconName(icon_name);
 
-  // Optional values don't need validation.
   seconds_since_install_ = 0;
   notification_promo_.promo_payload()->GetInteger("seconds_since_install",
                                                   &seconds_since_install_);
diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new_unittest.mm b/ios/chrome/browser/ui/ntp/notification_promo_whats_new_unittest.mm
index 9a917a9..1ed5ebe 100644
--- a/ios/chrome/browser/ui/ntp/notification_promo_whats_new_unittest.mm
+++ b/ios/chrome/browser/ui/ntp/notification_promo_whats_new_unittest.mm
@@ -137,17 +137,59 @@
 
 // Test that a url-based, valid promo is shown with the correct text and icon.
 TEST_F(NotificationPromoWhatsNewTest, NotificationPromoURLTest) {
-  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT", "Test URL", "0",
-       "url", "http://blog.chromium.org", "", "TestURLPromo", "", "0", "0");
-  RunTests("Test URL", "url", "http://blog.chromium.org/", 0, WHATS_NEW_INFO,
-           true);
+  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT",
+       "IDS_IOS_MOVE_TO_DOCK_TIP", "0", "url", "http://blog.chromium.org", "",
+       "TestURLPromo", "", "0", "0");
+  RunTests(l10n_util::GetStringUTF8(IDS_IOS_MOVE_TO_DOCK_TIP), "url",
+           "http://blog.chromium.org/", 0, WHATS_NEW_INFO, true);
 }
 
-// Test that an invalid promo is not shown.
-TEST_F(NotificationPromoWhatsNewTest, NotificationPromoInvalidTest) {
-  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT", "Test URL", "0",
-       "url", "", "", "TestURLPromo", "", "0", "0");
-  RunTests("Test URL", "url", "", 0, WHATS_NEW_INFO, false);
+// Test that a promo without a valid promo type is not shown.
+TEST_F(NotificationPromoWhatsNewTest, NotificationPromoNoTypeTest) {
+  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT",
+       "IDS_IOS_MOVE_TO_DOCK_TIP", "0", "invalid type",
+       "http://blog.chromium.org", "", "TestPromo", "", "0", "0");
+  EXPECT_FALSE(promo_.CanShow());
+}
+
+// Test that a url promo with an empty url is not shown.
+TEST_F(NotificationPromoWhatsNewTest, NotificationPromoEmptyURLTest) {
+  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT",
+       "IDS_IOS_MOVE_TO_DOCK_TIP", "0", "url", "", "", "TestURLPromo", "", "0",
+       "0");
+  EXPECT_FALSE(promo_.CanShow());
+}
+
+// Test that a url promo with an invalid url is not shown.
+TEST_F(NotificationPromoWhatsNewTest, NotificationPromoInvalidURLTest) {
+  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT",
+       "IDS_IOS_MOVE_TO_DOCK_TIP", "0", "url", "INVALID URL", "",
+       "TestURLPromo", "", "0", "0");
+  EXPECT_FALSE(promo_.CanShow());
+}
+
+// Test that a command-based promo with an invalid command is not shown.
+TEST_F(NotificationPromoWhatsNewTest, NotificationPromoInvalidCommandTest) {
+  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT",
+       "IDS_IOS_APP_RATING_PROMO_STRING", "0", "chrome_command", "",
+       "INVALID COMMAND", "CommandPromo", "logo", "0", "0");
+  EXPECT_FALSE(promo_.CanShow());
+}
+
+// Test that a promo without a metric name is not shown.
+TEST_F(NotificationPromoWhatsNewTest, NotificationPromoNoMetricTest) {
+  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT",
+       "IDS_IOS_MOVE_TO_DOCK_TIP", "0", "url", "http://blog.chromium.org", "",
+       "", "", "0", "0");
+  EXPECT_FALSE(promo_.CanShow());
+}
+
+// Test that if no localized text is found, the promo is not shown.
+TEST_F(NotificationPromoWhatsNewTest, NotificationPromoNoLocalizedTextTest) {
+  Init("3 Aug 1999 9:26:06 GMT", "3 Aug 2199 9:26:06 GMT", "TEST BAD STRING",
+       "0", "url", "http://blog.chromium.org", "", "TestURLPromo", "", "0",
+       "0");
+  EXPECT_FALSE(promo_.CanShow());
 }
 
 // Test that if max_seconds_since_install is set, and the current time is before
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.h b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.h
index 26f4c72..aa4a580 100644
--- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.h
+++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.h
@@ -45,6 +45,10 @@
 // Sets the tab restore service to null.
 - (void)tabRestoreServiceDestroyed;
 
+// TODO(crbug.com/708319): Expose the view controller in preparation for a full
+// view controller conversion.
+- (UIViewController*)viewController;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_NTP_RECENT_TABS_RECENT_TABS_PANEL_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.mm b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.mm
index 5c86b8b..b2d3c4e 100644
--- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.mm
+++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.mm
@@ -180,6 +180,10 @@
   return [_tableViewController view];
 }
 
+- (UIViewController*)viewController {
+  return _tableViewController;
+}
+
 #pragma mark - Private
 
 - (BOOL)isSignedIn {
diff --git a/ios/chrome/browser/ui/reading_list/offline_page_native_content.mm b/ios/chrome/browser/ui/reading_list/offline_page_native_content.mm
index 9b3a5cd..cd1c109a 100644
--- a/ios/chrome/browser/ui/reading_list/offline_page_native_content.mm
+++ b/ios/chrome/browser/ui/reading_list/offline_page_native_content.mm
@@ -86,6 +86,11 @@
 }
 
 - (void)reload {
+  if (!_entryURL.is_valid()) {
+    // If entryURL is not valid, the restoreOnlineURL will fail and the |reload|
+    // will be called in a loop. Early return here.
+    return;
+  }
   [self restoreOnlineURL];
   _webState->GetNavigationManager()->Reload(web::ReloadType::NORMAL,
                                             false /*check_for_repost*/);
diff --git a/ios/chrome/browser/ui/reading_list/offline_page_native_content_unittest.mm b/ios/chrome/browser/ui/reading_list/offline_page_native_content_unittest.mm
index a17566bc..abc5dd5 100644
--- a/ios/chrome/browser/ui/reading_list/offline_page_native_content_unittest.mm
+++ b/ios/chrome/browser/ui/reading_list/offline_page_native_content_unittest.mm
@@ -49,23 +49,6 @@
   ASSERT_OCMOCK_VERIFY((OCMockObject*)loader);
 }
 
-// Checks the OfflinePageNativeContent without virtual URL is correctly
-// initialized
-TEST_F(OfflinePageNativeContentTest, BasicOfflinePageTestWithoutVirtualURL) {
-  GURL url = reading_list::OfflineURLForPath(
-      base::FilePath("offline_id/page.html"), GURL(), GURL());
-  id<UrlLoader> loader = [OCMockObject mockForProtocol:@protocol(UrlLoader)];
-  base::scoped_nsobject<OfflinePageNativeContent> content(
-      [[OfflinePageNativeContent alloc]
-          initWithLoader:loader
-            browserState:chrome_browser_state_.get()
-                webState:web_state()
-                     URL:url]);
-  ASSERT_EQ(url, [content url]);
-  ASSERT_EQ(url, [content virtualURL]);
-  ASSERT_OCMOCK_VERIFY((OCMockObject*)loader);
-}
-
 // Checks that dismissing offline page restores EntryURL.
 TEST_F(OfflinePageNativeContentTest, DismissOfflineContent) {
   GURL offline_url("http://foo.bar/offline");
diff --git a/ios/clean/chrome/browser/ui/bookmarks/BUILD.gn b/ios/clean/chrome/browser/ui/bookmarks/BUILD.gn
new file mode 100644
index 0000000..dec4e7694
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/bookmarks/BUILD.gn
@@ -0,0 +1,32 @@
+# 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.
+
+source_set("bookmarks") {
+  sources = [
+    "bookmarks_coordinator.h",
+    "bookmarks_coordinator.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/bookmarks",
+    "//ios/shared/chrome/browser/ui/browser_list",
+    "//ios/shared/chrome/browser/ui/coordinators",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "bookmarks_coordinator_unittest.mm",
+  ]
+
+  deps = [
+    ":bookmarks",
+    "//testing/gtest",
+  ]
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.h b/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.h
new file mode 100644
index 0000000..1493cf9
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.h
@@ -0,0 +1,17 @@
+// 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARKS_COORDINATOR_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARKS_COORDINATOR_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator.h"
+
+// A coordinator for the bookmarks UI, which can be presented modally on its
+// own or inside the NTP.
+@interface BookmarksCoordinator : BrowserCoordinator
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARKS_COORDINATOR_H_
diff --git a/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.mm b/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.mm
new file mode 100644
index 0000000..9bdeae9
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.mm
@@ -0,0 +1,47 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.h"
+
+#import "ios/chrome/browser/ui/bookmarks/bookmark_controller_factory.h"
+#import "ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.h"
+#import "ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.h"
+#include "ios/chrome/browser/ui/ui_util.h"
+#import "ios/shared/chrome/browser/ui/browser_list/browser.h"
+#import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface BookmarksCoordinator ()
+@property(nonatomic, strong) UIViewController* viewController;
+@property(nonatomic, strong) BookmarkHomeTabletNTPController* wrapperController;
+@end
+
+@implementation BookmarksCoordinator
+@synthesize viewController = _viewController;
+@synthesize wrapperController = _wrapperController;
+
+- (void)start {
+  // HACK: Re-using old view controllers for now.
+  if (!IsIPadIdiom()) {
+    self.viewController = [[BookmarkHomeHandsetViewController alloc]
+        initWithLoader:nil
+          browserState:self.browser->browser_state()];
+    self.viewController.modalPresentationStyle = UIModalPresentationFormSheet;
+  } else {
+    BookmarkControllerFactory* factory =
+        [[BookmarkControllerFactory alloc] init];
+    self.wrapperController = [factory
+        bookmarkPanelControllerForBrowserState:self.browser->browser_state()
+                                        loader:nil
+                                    colorCache:nil];
+    self.viewController = [[UIViewController alloc] init];
+    self.viewController.view = [self.wrapperController view];
+  }
+  [super start];
+}
+
+@end
diff --git a/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator_unittest.mm b/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator_unittest.mm
new file mode 100644
index 0000000..30ca2dd
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator_unittest.mm
@@ -0,0 +1,9 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
diff --git a/ios/clean/chrome/browser/ui/commands/BUILD.gn b/ios/clean/chrome/browser/ui/commands/BUILD.gn
index 2f1c64c4f..3be6a02 100644
--- a/ios/clean/chrome/browser/ui/commands/BUILD.gn
+++ b/ios/clean/chrome/browser/ui/commands/BUILD.gn
@@ -5,13 +5,16 @@
 source_set("commands") {
   sources = [
     "navigation_commands.h",
+    "ntp_commands.h",
     "settings_commands.h",
+    "tab_commands.h",
     "tab_grid_commands.h",
     "tab_strip_commands.h",
     "tools_menu_commands.h",
   ]
   deps = [
     "//base",
+    "//ios/web:web_arc",
   ]
 
   configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/clean/chrome/browser/ui/commands/ntp_commands.h b/ios/clean/chrome/browser/ui/commands/ntp_commands.h
new file mode 100644
index 0000000..6938943
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/commands/ntp_commands.h
@@ -0,0 +1,21 @@
+// Copyright 2016 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_COMMANDS_NTP_COMMANDS_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_COMMANDS_NTP_COMMANDS_H_
+
+// Command protocol for commands relating to the Commands UI.
+// (Commands are for communicating into or within the coordinator layer).
+@protocol NTPCommands
+// Display a Chrome Home panel inside the NTP.
+- (void)showNTPHomePanel;
+// Display a bookmarks panel inside the NTP on iPad or present a bookmarks panel
+// on iPhone.
+- (void)showNTPBookmarksPanel;
+// Display a recent tabs panel inside the NTP on iPad or present a bookmarks
+// panel on iPhone.
+- (void)showNTPRecentTabsPanel;
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_COMMANDS_NTP_COMMANDS_H_
diff --git a/ios/clean/chrome/browser/ui/commands/tab_commands.h b/ios/clean/chrome/browser/ui/commands/tab_commands.h
new file mode 100644
index 0000000..d2f498c
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/commands/tab_commands.h
@@ -0,0 +1,16 @@
+// Copyright 2016 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_COMMANDS_TAB_COMMANDS_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_COMMANDS_TAB_COMMANDS_H_
+
+#import "ios/web/public/navigation_manager.h"
+
+// Commands relating to the Settings UI.
+@protocol TabCommands
+// Open a URL.
+- (void)loadURL:(web::NavigationManager::WebLoadParams)params;
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_COMMANDS_TAB_COMMANDS_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/BUILD.gn b/ios/clean/chrome/browser/ui/ntp/BUILD.gn
index 2def52c..c8a871d 100644
--- a/ios/clean/chrome/browser/ui/ntp/BUILD.gn
+++ b/ios/clean/chrome/browser/ui/ntp/BUILD.gn
@@ -4,22 +4,41 @@
 
 source_set("ntp") {
   sources = [
-    "new_tab_page_coordinator.h",
-    "new_tab_page_coordinator.mm",
+    "ntp_coordinator.h",
+    "ntp_coordinator.mm",
+    "ntp_home_coordinator.h",
+    "ntp_home_coordinator.mm",
+    "ntp_home_mediator.h",
+    "ntp_home_mediator.mm",
+    "ntp_mediator.h",
+    "ntp_mediator.mm",
   ]
 
   configs += [ "//build/config/compiler:enable_arc" ]
 
   deps = [
     ":ntp_ui",
+    "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/clean/chrome/browser/ui/bookmarks",
+    "//ios/clean/chrome/browser/ui/commands",
+    "//ios/clean/chrome/browser/ui/recent_tabs",
+    "//ios/shared/chrome/browser/ui/browser_list",
+    "//ios/shared/chrome/browser/ui/commands",
     "//ios/shared/chrome/browser/ui/coordinators",
+    "//ios/web:web_arc",
+    "//ui/base:base",
+    "//url:url",
   ]
 }
 
 source_set("ntp_ui") {
   sources = [
-    "new_tab_page_view_controller.h",
-    "new_tab_page_view_controller.mm",
+    "ntp_consumer.h",
+    "ntp_view_controller.h",
+    "ntp_view_controller.mm",
   ]
 
   configs += [ "//build/config/compiler:enable_arc" ]
@@ -28,8 +47,28 @@
     "//base",
     "//components/strings:components_strings_grit",
     "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/browser/ui:ui",
     "//ios/chrome/browser/ui/ntp:ntp_internal",
     "//ios/clean/chrome/browser/ui",
+    "//ios/clean/chrome/browser/ui/commands:commands",
     "//ui/base:base",
   ]
 }
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "ntp_coordinator_unittest.mm",
+    "ntp_home_coordinator_unittest.mm",
+    "ntp_home_mediator_unittest.mm",
+    "ntp_mediator_unittest.mm",
+    "ntp_view_controller_unittest.mm",
+  ]
+
+  deps = [
+    ":ntp",
+    ":ntp_ui",
+    "//testing/gtest",
+  ]
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.mm b/ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
deleted file mode 100644
index 5dfd67c..0000000
--- a/ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
+++ /dev/null
@@ -1,25 +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.
-
-#import "ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.h"
-
-#import "ios/clean/chrome/browser/ui/ntp/new_tab_page_view_controller.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-@interface NTPCoordinator ()
-@property(nonatomic, strong) NTPViewController* viewController;
-@end
-
-@implementation NTPCoordinator
-@synthesize viewController = _viewController;
-
-- (void)start {
-  self.viewController = [[NTPViewController alloc] init];
-  [super start];
-}
-
-@end
diff --git a/ios/clean/chrome/browser/ui/ntp/new_tab_page_view_controller.h b/ios/clean/chrome/browser/ui/ntp/new_tab_page_view_controller.h
deleted file mode 100644
index c2b5f34..0000000
--- a/ios/clean/chrome/browser/ui/ntp/new_tab_page_view_controller.h
+++ /dev/null
@@ -1,14 +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.
-
-#ifndef IOS_CLEAN_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_VIEW_CONTROLLER_H_
-#define IOS_CLEAN_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_VIEW_CONTROLLER_H_
-
-#import <UIKit/UIKit.h>
-
-// View controller that displays a new tab page.
-@interface NTPViewController : UIViewController
-@end
-
-#endif  // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_VIEW_CONTROLLER_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/new_tab_page_view_controller.mm b/ios/clean/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
deleted file mode 100644
index 7e9eee5a..0000000
--- a/ios/clean/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
+++ /dev/null
@@ -1,79 +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.
-
-#import "ios/clean/chrome/browser/ui/ntp/new_tab_page_view_controller.h"
-
-#import "base/ios/crb_protocol_observers.h"
-#include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/ui/ntp/new_tab_page_bar.h"
-#import "ios/chrome/browser/ui/ntp/new_tab_page_bar_item.h"
-#import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
-#import "ios/chrome/browser/ui/ntp/new_tab_page_view.h"
-#include "ios/chrome/grit/ios_strings.h"
-#include "ui/base/l10n/l10n_util.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-@implementation NTPViewController
-
-#pragma mark - UIViewController
-
-- (void)viewDidLoad {
-  self.title = l10n_util::GetNSString(IDS_NEW_TAB_TITLE);
-  self.view.backgroundColor = [UIColor whiteColor];
-
-  UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero];
-  [scrollView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth |
-                                   UIViewAutoresizingFlexibleHeight)];
-  scrollView.pagingEnabled = YES;
-  scrollView.showsHorizontalScrollIndicator = NO;
-  scrollView.showsVerticalScrollIndicator = NO;
-  scrollView.contentMode = UIViewContentModeScaleAspectFit;
-  scrollView.bounces = YES;
-  scrollView.scrollsToTop = NO;
-
-  NewTabPageBar* tabBar = [[NewTabPageBar alloc] initWithFrame:CGRectZero];
-  NewTabPageView* ntpView = [[NewTabPageView alloc] initWithFrame:CGRectZero
-                                                    andScrollView:scrollView
-                                                        andTabBar:tabBar];
-  ntpView.translatesAutoresizingMaskIntoConstraints = NO;
-  [self.view addSubview:ntpView];
-
-  [NSLayoutConstraint activateConstraints:@[
-    [ntpView.topAnchor constraintEqualToAnchor:self.view.topAnchor],
-    [ntpView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
-    [ntpView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor],
-    [ntpView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
-  ]];
-
-  // PLACEHOLDER: this logic should move out of the UIVC.
-  NSString* mostVisited = l10n_util::GetNSString(IDS_IOS_NEW_TAB_MOST_VISITED);
-  NSString* bookmarks =
-      l10n_util::GetNSString(IDS_IOS_NEW_TAB_BOOKMARKS_PAGE_TITLE_MOBILE);
-  NSString* openTabs = l10n_util::GetNSString(IDS_IOS_NEW_TAB_RECENT_TABS);
-
-  NSMutableArray* tabBarItems = [NSMutableArray array];
-
-  NewTabPageBarItem* mostVisitedItem = [NewTabPageBarItem
-      newTabPageBarItemWithTitle:mostVisited
-                      identifier:NewTabPage::kMostVisitedPanel
-                           image:[UIImage imageNamed:@"ntp_mv_search"]];
-  NewTabPageBarItem* bookmarksItem = [NewTabPageBarItem
-      newTabPageBarItemWithTitle:bookmarks
-                      identifier:NewTabPage::kBookmarksPanel
-                           image:[UIImage imageNamed:@"ntp_bookmarks"]];
-  [tabBarItems addObject:bookmarksItem];
-  [tabBarItems addObject:mostVisitedItem];
-
-  NewTabPageBarItem* openTabsItem = [NewTabPageBarItem
-      newTabPageBarItemWithTitle:openTabs
-                      identifier:NewTabPage::kOpenTabsPanel
-                           image:[UIImage imageNamed:@"ntp_opentabs"]];
-  [tabBarItems addObject:openTabsItem];
-  tabBar.items = tabBarItems;
-}
-
-@end
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_consumer.h b/ios/clean/chrome/browser/ui/ntp/ntp_consumer.h
new file mode 100644
index 0000000..f54ae11b
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_consumer.h
@@ -0,0 +1,19 @@
+// 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_CONSUMER_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_CONSUMER_H_
+
+#import <Foundation/Foundation.h>
+
+@class NewTabPageBarItem;
+
+@protocol NTPConsumer
+
+// Tells NTP what bar items to display.
+- (void)setBarItems:(NSArray<NewTabPageBarItem*>*)items;
+
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_CONSUMER_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.h b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.h
similarity index 67%
rename from ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.h
rename to ios/clean/chrome/browser/ui/ntp/ntp_coordinator.h
index fa0ba00..b17e815 100644
--- a/ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.h
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CLEAN_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_COORDINATOR_H_
-#define IOS_CLEAN_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_COORDINATOR_H_
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_COORDINATOR_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_COORDINATOR_H_
 
 #import <UIKit/UIKit.h>
 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator.h"
@@ -13,4 +13,4 @@
 @interface NTPCoordinator : BrowserCoordinator
 @end
 
-#endif  // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_COORDINATOR_H_
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_COORDINATOR_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm
new file mode 100644
index 0000000..3ead5f6b
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm
@@ -0,0 +1,103 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_coordinator.h"
+
+#include "base/logging.h"
+#include "ios/chrome/browser/ui/ui_util.h"
+#import "ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.h"
+#import "ios/clean/chrome/browser/ui/commands/ntp_commands.h"
+#import "ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.h"
+#import "ios/clean/chrome/browser/ui/ntp/ntp_mediator.h"
+#import "ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h"
+#import "ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h"
+#import "ios/shared/chrome/browser/ui/browser_list/browser.h"
+#import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h"
+#import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface NTPCoordinator ()<NTPCommands>
+@property(nonatomic, strong) NTPMediator* mediator;
+@property(nonatomic, strong) NTPViewController* viewController;
+@end
+
+@implementation NTPCoordinator
+@synthesize mediator = _mediator;
+@synthesize viewController = _viewController;
+
+- (void)start {
+  self.viewController = [[NTPViewController alloc] init];
+  self.mediator = [[NTPMediator alloc] initWithConsumer:self.viewController];
+
+  CommandDispatcher* dispatcher = self.browser->dispatcher();
+  // NTPCommands
+  [dispatcher startDispatchingToTarget:self
+                           forSelector:@selector(showNTPHomePanel)];
+  [dispatcher startDispatchingToTarget:self
+                           forSelector:@selector(showNTPBookmarksPanel)];
+  [dispatcher startDispatchingToTarget:self
+                           forSelector:@selector(showNTPRecentTabsPanel)];
+  self.viewController.dispatcher = static_cast<id>(self.browser->dispatcher());
+  [super start];
+}
+
+- (void)stop {
+  [super stop];
+  // PLACEHOLDER: Stop child coordinators here for now. We might deal with this
+  // differently later on.
+  for (BrowserCoordinator* child in self.children) {
+    [child stop];
+  }
+  [self.browser->dispatcher() stopDispatchingToTarget:self];
+}
+
+- (void)childCoordinatorDidStart:(BrowserCoordinator*)coordinator {
+  if ([coordinator isKindOfClass:[NTPHomeCoordinator class]]) {
+    self.viewController.homeViewController = coordinator.viewController;
+
+  } else if ([coordinator isKindOfClass:[BookmarksCoordinator class]]) {
+    if (IsIPadIdiom()) {
+      self.viewController.bookmarksViewController = coordinator.viewController;
+    } else {
+      [self.viewController presentViewController:coordinator.viewController
+                                        animated:YES
+                                      completion:nil];
+    }
+
+  } else if ([coordinator isKindOfClass:[RecentTabsCoordinator class]]) {
+    if (IsIPadIdiom()) {
+      self.viewController.recentTabsViewController = coordinator.viewController;
+    } else {
+      [self.viewController presentViewController:coordinator.viewController
+                                        animated:YES
+                                      completion:nil];
+    }
+  }
+}
+
+#pragma mark - NTPCommands
+
+- (void)showNTPHomePanel {
+  NTPHomeCoordinator* panelCoordinator = [[NTPHomeCoordinator alloc] init];
+  [self addChildCoordinator:panelCoordinator];
+  [panelCoordinator start];
+}
+
+- (void)showNTPBookmarksPanel {
+  BookmarksCoordinator* panelCoordinator = [[BookmarksCoordinator alloc] init];
+  [self addChildCoordinator:panelCoordinator];
+  [panelCoordinator start];
+}
+
+- (void)showNTPRecentTabsPanel {
+  RecentTabsCoordinator* panelCoordinator =
+      [[RecentTabsCoordinator alloc] init];
+  [self addChildCoordinator:panelCoordinator];
+  [panelCoordinator start];
+}
+
+@end
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_coordinator_unittest.mm b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator_unittest.mm
new file mode 100644
index 0000000..4070689
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator_unittest.mm
@@ -0,0 +1,9 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_coordinator.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.h b/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.h
new file mode 100644
index 0000000..54f734cb
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.h
@@ -0,0 +1,15 @@
+// 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_HOME_COORDINATOR_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_HOME_COORDINATOR_H_
+
+#import <UIKit/UIKit.h>
+#import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator.h"
+
+// Coordinator that runs the chrome home panel of the NTP.
+@interface NTPHomeCoordinator : BrowserCoordinator
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_HOME_COORDINATOR_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.mm b/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.mm
new file mode 100644
index 0000000..47c09ee
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.mm
@@ -0,0 +1,42 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.h"
+
+#import "ios/chrome/browser/ui/ntp/google_landing_controller.h"
+#import "ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.h"
+#import "ios/shared/chrome/browser/ui/browser_list/browser.h"
+#import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface NTPHomeCoordinator ()
+@property(nonatomic, strong) NTPHomeMediator* mediator;
+@property(nonatomic, strong) UIViewController* viewController;
+@property(nonatomic, strong) GoogleLandingController* wrapperController;
+@end
+
+@implementation NTPHomeCoordinator
+@synthesize mediator = _mediator;
+@synthesize viewController = _viewController;
+@synthesize wrapperController = _wrapperController;
+
+- (void)start {
+  // PLACEHOLDER: Re-using old view controllers for now.
+  self.mediator = [[NTPHomeMediator alloc] init];
+  self.mediator.dispatcher = static_cast<id>(self.browser->dispatcher());
+  self.wrapperController = [[GoogleLandingController alloc]
+          initWithLoader:self.mediator
+            browserState:self.browser->browser_state()
+                 focuser:self.mediator
+      webToolbarDelegate:nil
+                tabModel:nil];
+  self.viewController = [[UIViewController alloc] init];
+  self.viewController.view = [self.wrapperController view];
+  [super start];
+}
+
+@end
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator_unittest.mm b/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator_unittest.mm
new file mode 100644
index 0000000..6014219
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator_unittest.mm
@@ -0,0 +1,9 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_home_coordinator.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.h b/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.h
new file mode 100644
index 0000000..e8688d6
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.h
@@ -0,0 +1,24 @@
+// 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_HOME_MEDIATOR_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_HOME_MEDIATOR_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h"
+#import "ios/chrome/browser/ui/url_loader.h"
+
+@protocol TabCommands;
+
+// A mediator object that sets an NTP home view controller's appeareance based
+// on various data sources.
+@interface NTPHomeMediator : NSObject<UrlLoader, OmniboxFocuser>
+
+// The dispatcher for this mediator.
+@property(nonatomic, weak) id<TabCommands> dispatcher;
+
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_HOME_MEDIATOR_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.mm b/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.mm
new file mode 100644
index 0000000..8aea01c2
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.mm
@@ -0,0 +1,69 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.h"
+
+#import "ios/clean/chrome/browser/ui/commands/tab_commands.h"
+#import "ios/web/public/navigation_manager.h"
+#include "ui/base/page_transition_types.h"
+#include "url/gurl.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface NTPHomeMediator ()
+@end
+
+@implementation NTPHomeMediator
+@synthesize dispatcher = _dispatcher;
+
+#pragma mark - UrlLoader
+
+- (void)loadURL:(const GURL&)url
+             referrer:(const web::Referrer&)referrer
+           transition:(ui::PageTransition)transition
+    rendererInitiated:(BOOL)rendererInitiated {
+  web::NavigationManager::WebLoadParams params(url);
+  params.transition_type = transition;
+  [self.dispatcher loadURL:params];
+}
+
+- (void)webPageOrderedOpen:(const GURL&)url
+                  referrer:(const web::Referrer&)referrer
+              inBackground:(BOOL)inBackground
+                  appendTo:(OpenPosition)appendTo {
+}
+
+- (void)webPageOrderedOpen:(const GURL&)url
+                  referrer:(const web::Referrer&)referrer
+               inIncognito:(BOOL)inIncognito
+              inBackground:(BOOL)inBackground
+                  appendTo:(OpenPosition)appendTo {
+}
+
+- (void)loadSessionTab:(const sessions::SessionTab*)sessionTab {
+}
+
+- (void)loadJavaScriptFromLocationBar:(NSString*)script {
+}
+
+#pragma mark - OmniboxFocuser
+
+- (void)focusOmnibox {
+}
+
+- (void)cancelOmniboxEdit {
+}
+
+- (void)focusFakebox {
+}
+
+- (void)onFakeboxBlur {
+}
+
+- (void)onFakeboxAnimationComplete {
+}
+
+@end
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator_unittest.mm b/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator_unittest.mm
new file mode 100644
index 0000000..567a667
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_mediator_unittest.mm
@@ -0,0 +1,9 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_home_mediator.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_mediator.h b/ios/clean/chrome/browser/ui/ntp/ntp_mediator.h
new file mode 100644
index 0000000..210f0a3b
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_mediator.h
@@ -0,0 +1,20 @@
+// 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_MEDIATOR_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_MEDIATOR_H_
+
+#import <UIKit/UIKit.h>
+
+@protocol NTPConsumer;
+
+// A mediator object that sets an NTP view controller's appeareance based on
+// various data sources.
+@interface NTPMediator : NSObject
+- (instancetype)initWithConsumer:(id<NTPConsumer>)consumer
+    NS_DESIGNATED_INITIALIZER;
+- (instancetype)init NS_UNAVAILABLE;
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_MEDIATOR_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_mediator.mm b/ios/clean/chrome/browser/ui/ntp/ntp_mediator.mm
new file mode 100644
index 0000000..042540b2
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_mediator.mm
@@ -0,0 +1,66 @@
+
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_mediator.h"
+
+#import "ios/chrome/browser/ui/ntp/new_tab_page_bar_item.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
+#include "ios/chrome/browser/ui/ui_util.h"
+#include "ios/chrome/grit/ios_strings.h"
+#import "ios/clean/chrome/browser/ui/ntp/ntp_consumer.h"
+#include "ui/base/l10n/l10n_util.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface NTPMediator ()
+@property(nonatomic, strong) id<NTPConsumer> consumer;
+@end
+
+@implementation NTPMediator
+
+@synthesize consumer = _consumer;
+
+- (instancetype)initWithConsumer:(id<NTPConsumer>)consumer {
+  self = [super init];
+  if (self) {
+    _consumer = consumer;
+    [self setTabBarItems];
+  }
+  return self;
+}
+
+- (void)setTabBarItems {
+  NSString* mostVisited = l10n_util::GetNSString(IDS_IOS_NEW_TAB_MOST_VISITED);
+  NSString* bookmarks =
+      l10n_util::GetNSString(IDS_IOS_NEW_TAB_BOOKMARKS_PAGE_TITLE_MOBILE);
+  NSString* recentTabs = l10n_util::GetNSString(IDS_IOS_NEW_TAB_RECENT_TABS);
+
+  NSMutableArray* tabBarItems = [NSMutableArray array];
+
+  NewTabPageBarItem* mostVisitedItem = [NewTabPageBarItem
+      newTabPageBarItemWithTitle:mostVisited
+                      identifier:NewTabPage::kMostVisitedPanel
+                           image:[UIImage imageNamed:@"ntp_mv_search"]];
+  NewTabPageBarItem* bookmarksItem = [NewTabPageBarItem
+      newTabPageBarItemWithTitle:bookmarks
+                      identifier:NewTabPage::kBookmarksPanel
+                           image:[UIImage imageNamed:@"ntp_bookmarks"]];
+  [tabBarItems addObject:bookmarksItem];
+  if (IsIPadIdiom()) {
+    [tabBarItems addObject:mostVisitedItem];
+  }
+
+  NewTabPageBarItem* recentTabsItem = [NewTabPageBarItem
+      newTabPageBarItemWithTitle:recentTabs
+                      identifier:NewTabPage::kOpenTabsPanel
+                           image:[UIImage imageNamed:@"ntp_opentabs"]];
+  [tabBarItems addObject:recentTabsItem];
+
+  [self.consumer setBarItems:[tabBarItems copy]];
+}
+
+@end
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_mediator_unittest.mm b/ios/clean/chrome/browser/ui/ntp/ntp_mediator_unittest.mm
new file mode 100644
index 0000000..a80d88db
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_mediator_unittest.mm
@@ -0,0 +1,9 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_mediator.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h
new file mode 100644
index 0000000..a80885d4
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h
@@ -0,0 +1,32 @@
+// 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_VIEW_CONTROLLER_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_VIEW_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_consumer.h"
+
+@protocol NTPCommands;
+
+// View controller that displays a new tab page.
+@interface NTPViewController : UIViewController<NTPConsumer>
+
+// The dispatcher for this view controller
+@property(nonatomic, weak) id<NTPCommands> dispatcher;
+
+// Setting this property adds a Chrome Home panel.
+@property(nonatomic, strong) UIViewController* homeViewController;
+
+// Setting this property adds a bookmarks panel on iPad or present a bookmarks
+// panel on iPhone.
+@property(nonatomic, strong) UIViewController* bookmarksViewController;
+
+// Setting this property adds a recent tabs panel on iPad or present a bookmarks
+// panel on iPhone.
+@property(nonatomic, strong) UIViewController* recentTabsViewController;
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_VIEW_CONTROLLER_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.mm b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.mm
new file mode 100644
index 0000000..8493d29
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.mm
@@ -0,0 +1,194 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h"
+
+#import "base/ios/crb_protocol_observers.h"
+#include "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_bar.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_bar_item.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_view.h"
+#import "ios/chrome/browser/ui/rtl_geometry.h"
+#include "ios/chrome/browser/ui/ui_util.h"
+#include "ios/chrome/grit/ios_strings.h"
+#import "ios/clean/chrome/browser/ui/commands/ntp_commands.h"
+#include "ui/base/l10n/l10n_util.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface NTPViewController ()<UIScrollViewDelegate, NewTabPageBarDelegate>
+@property(nonatomic, strong) NewTabPageView* NTPView;
+@property(nonatomic, strong) NSArray* tabBarItems;
+@end
+
+@implementation NTPViewController
+
+@synthesize bookmarksViewController = _bookmarksViewController;
+@synthesize dispatcher = _dispatcher;
+@synthesize homeViewController = _homeViewController;
+@synthesize NTPView = _NTPView;
+@synthesize recentTabsViewController = _recentTabsViewController;
+@synthesize tabBarItems = _tabBarItems;
+
+#pragma mark - UIViewController
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  self.title = l10n_util::GetNSString(IDS_NEW_TAB_TITLE);
+  self.view.backgroundColor = [UIColor whiteColor];
+
+  UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero];
+  [scrollView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth |
+                                   UIViewAutoresizingFlexibleHeight)];
+  scrollView.pagingEnabled = YES;
+  scrollView.showsHorizontalScrollIndicator = NO;
+  scrollView.showsVerticalScrollIndicator = NO;
+  scrollView.contentMode = UIViewContentModeScaleAspectFit;
+  scrollView.bounces = YES;
+  scrollView.scrollsToTop = NO;
+  scrollView.delegate = self;
+
+  NewTabPageBar* tabBar = [[NewTabPageBar alloc] initWithFrame:CGRectZero];
+  tabBar.delegate = self;
+  self.NTPView = [[NewTabPageView alloc] initWithFrame:CGRectZero
+                                         andScrollView:scrollView
+                                             andTabBar:tabBar];
+  self.NTPView.translatesAutoresizingMaskIntoConstraints = NO;
+  [self.view addSubview:self.NTPView];
+
+  [NSLayoutConstraint activateConstraints:@[
+    [self.NTPView.topAnchor constraintEqualToAnchor:self.view.topAnchor],
+    [self.NTPView.leadingAnchor
+        constraintEqualToAnchor:self.view.leadingAnchor],
+    [self.NTPView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor],
+    [self.NTPView.trailingAnchor
+        constraintEqualToAnchor:self.view.trailingAnchor],
+  ]];
+
+  DCHECK(self.tabBarItems);
+  self.NTPView.tabBar.items = self.tabBarItems;
+}
+
+- (void)viewDidLayoutSubviews {
+  [super viewDidLayoutSubviews];
+
+  if (!self.homeViewController) {
+    // Make sure scrollView is properly set up.
+    [self.NTPView layoutIfNeeded];
+    // PLACEHOLDER: This should come from the mediator.
+    if (IsIPadIdiom()) {
+      CGRect itemFrame = [self.NTPView panelFrameForItemAtIndex:1];
+      CGPoint point = CGPointMake(CGRectGetMinX(itemFrame), 0);
+      [self.NTPView.scrollView setContentOffset:point animated:NO];
+    } else {
+      [self.dispatcher showNTPHomePanel];
+    }
+  }
+}
+
+- (void)setHomeViewController:(UIViewController*)controller {
+  _homeViewController = controller;
+  if (IsIPadIdiom()) {
+    controller.view.frame = [self.NTPView panelFrameForItemAtIndex:1];
+  } else {
+    controller.view.frame = [self.NTPView panelFrameForItemAtIndex:0];
+  }
+  NewTabPageBarItem* item = self.NTPView.tabBar.items[1];
+  item.view = controller.view;
+  [self addControllerToScrollView:controller];
+}
+
+- (void)setBookmarksViewController:(UIViewController*)controller {
+  _bookmarksViewController = controller;
+  controller.view.frame = [self.NTPView panelFrameForItemAtIndex:0];
+  NewTabPageBarItem* item = self.NTPView.tabBar.items[0];
+  item.view = controller.view;
+  [self addControllerToScrollView:controller];
+}
+
+- (void)setRecentTabsViewController:(UIViewController*)controller {
+  _recentTabsViewController = controller;
+  controller.view.frame = [self.NTPView panelFrameForItemAtIndex:2];
+  NewTabPageBarItem* item = self.NTPView.tabBar.items[2];
+  item.view = controller.view;
+  [self addControllerToScrollView:_recentTabsViewController];
+}
+
+#pragma mark - Private
+
+// Add the view controller to vc hierarchy and add the view to the scrollview.
+- (void)addControllerToScrollView:(UIViewController*)controller {
+  [self addChildViewController:controller];
+  [self.NTPView.scrollView addSubview:controller.view];
+  [controller didMoveToParentViewController:self];
+}
+
+#pragma mark - NTPConsumer
+
+- (void)setBarItems:(NSArray*)items {
+  self.tabBarItems = items;
+}
+
+#pragma mark - UIScrollViewDelegate
+
+// TODO(crbug.com/709086) Move UIScrollViewDelegate to shared object.
+- (void)scrollViewDidScroll:(UIScrollView*)scrollView {
+  // Position is used to track the exact X position of the scroll view, whereas
+  // index is rounded to the panel that is most visible.
+  CGFloat panelWidth =
+      scrollView.contentSize.width / self.NTPView.tabBar.items.count;
+  LayoutOffset position =
+      LeadingContentOffsetForScrollView(scrollView) / panelWidth;
+  NSUInteger index = round(position);
+
+  // |scrollView| can be out of range when the frame changes.
+  if (index >= self.NTPView.tabBar.items.count)
+    return;
+
+  NewTabPageBarItem* item = self.NTPView.tabBar.items[index];
+  if (item.identifier == NewTabPage::kBookmarksPanel &&
+      !self.bookmarksViewController)
+    [self.dispatcher showNTPBookmarksPanel];
+  else if (item.identifier == NewTabPage::kMostVisitedPanel &&
+           !self.homeViewController)
+    [self.dispatcher showNTPHomePanel];
+  else if (item.identifier == NewTabPage::kOpenTabsPanel &&
+           !self.recentTabsViewController)
+    [self.dispatcher showNTPRecentTabsPanel];
+
+  // If index changed, follow same path as if a tab bar item was pressed.  When
+  // |index| == |position|, the panel is completely in view.
+  if (index == position && self.NTPView.tabBar.selectedIndex != index) {
+    NewTabPageBarItem* item = [self.NTPView.tabBar.items objectAtIndex:index];
+    DCHECK(item);
+    self.NTPView.tabBar.selectedIndex = index;
+  }
+  [self.NTPView.tabBar updateColorsForScrollView:scrollView];
+
+  self.NTPView.tabBar.overlayPercentage =
+      scrollView.contentOffset.x / scrollView.contentSize.width;
+}
+
+#pragma mark - NewTabPageBarDelegate
+
+- (void)newTabBarItemDidChange:(NewTabPageBarItem*)selectedItem
+                   changePanel:(BOOL)changePanel {
+  if (IsIPadIdiom()) {
+    NSUInteger index = [self.NTPView.tabBar.items indexOfObject:selectedItem];
+    CGRect itemFrame = [self.NTPView panelFrameForItemAtIndex:index];
+    CGPoint point = CGPointMake(CGRectGetMinX(itemFrame), 0);
+    [self.NTPView.scrollView setContentOffset:point animated:YES];
+  } else {
+    if (selectedItem.identifier == NewTabPage::kBookmarksPanel) {
+      [self.dispatcher showNTPBookmarksPanel];
+    } else if (selectedItem.identifier == NewTabPage::kOpenTabsPanel) {
+      [self.dispatcher showNTPRecentTabsPanel];
+    }
+  }
+}
+
+@end
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_view_controller_unittest.mm b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller_unittest.mm
new file mode 100644
index 0000000..3bcd2e93
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller_unittest.mm
@@ -0,0 +1,9 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
diff --git a/ios/clean/chrome/browser/ui/recent_tabs/BUILD.gn b/ios/clean/chrome/browser/ui/recent_tabs/BUILD.gn
new file mode 100644
index 0000000..0ebc0e4
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/recent_tabs/BUILD.gn
@@ -0,0 +1,32 @@
+# 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.
+
+source_set("recent_tabs") {
+  sources = [
+    "recent_tabs_coordinator.h",
+    "recent_tabs_coordinator.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/ntp/recent_tabs",
+    "//ios/shared/chrome/browser/ui/browser_list",
+    "//ios/shared/chrome/browser/ui/coordinators",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "recent_tabs_coordinator_unittest.mm",
+  ]
+
+  deps = [
+    ":recent_tabs",
+    "//testing/gtest",
+  ]
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h b/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h
new file mode 100644
index 0000000..cdf85ae4
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h
@@ -0,0 +1,16 @@
+// 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.
+
+#ifndef IOS_CLEAN_CHROME_BROWSER_UI_RECENT_TABS_RECENT_TABS_COORDINATOR_H_
+#define IOS_CLEAN_CHROME_BROWSER_UI_RECENT_TABS_RECENT_TABS_COORDINATOR_H_
+
+#import <UIKit/UIKit.h>
+#import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator.h"
+
+// A coordinator for the recent tabs UI, which can be presented modally on its
+// own or inside the NTP.
+@interface RecentTabsCoordinator : BrowserCoordinator
+@end
+
+#endif  // IOS_CLEAN_CHROME_BROWSER_UI_RECENT_TABS_RECENT_TABS_COORDINATOR_H_
diff --git a/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.mm b/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.mm
new file mode 100644
index 0000000..539bee2
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.mm
@@ -0,0 +1,43 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h"
+
+#import "ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.h"
+#import "ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_view_controller.h"
+#include "ios/chrome/browser/ui/ui_util.h"
+#import "ios/shared/chrome/browser/ui/browser_list/browser.h"
+#import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface RecentTabsCoordinator ()
+@property(nonatomic, strong) UIViewController* viewController;
+@property(nonatomic, strong) RecentTabsPanelController* wrapperController;
+@end
+
+@implementation RecentTabsCoordinator
+@synthesize viewController = _viewController;
+@synthesize wrapperController = _wrapperController;
+
+- (void)start {
+  // HACK: Re-using old view controllers for now.
+  if (!IsIPadIdiom()) {
+    self.viewController = [RecentTabsPanelViewController
+        controllerToPresentForBrowserState:self.browser->browser_state()
+                                    loader:nil];
+    self.viewController.modalPresentationStyle = UIModalPresentationFormSheet;
+    self.viewController.modalPresentationCapturesStatusBarAppearance = YES;
+  } else {
+    self.wrapperController = [[RecentTabsPanelController alloc]
+        initWithLoader:nil
+          browserState:self.browser->browser_state()];
+    self.viewController = [self.wrapperController viewController];
+  }
+  [super start];
+}
+
+@end
diff --git a/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm b/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm
new file mode 100644
index 0000000..c0c2ba7
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm
@@ -0,0 +1,9 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
diff --git a/ios/clean/chrome/browser/ui/tab/BUILD.gn b/ios/clean/chrome/browser/ui/tab/BUILD.gn
index d97375c..63ca3f1 100644
--- a/ios/clean/chrome/browser/ui/tab/BUILD.gn
+++ b/ios/clean/chrome/browser/ui/tab/BUILD.gn
@@ -13,12 +13,16 @@
   deps = [
     ":tab_ui",
     "//base",
+    "//ios/chrome/browser",
     "//ios/clean/chrome/browser/ui/actions",
     "//ios/clean/chrome/browser/ui/animators",
+    "//ios/clean/chrome/browser/ui/commands",
     "//ios/clean/chrome/browser/ui/ntp",
     "//ios/clean/chrome/browser/ui/tab_strip",
     "//ios/clean/chrome/browser/ui/toolbar",
     "//ios/clean/chrome/browser/ui/web_contents",
+    "//ios/shared/chrome/browser/ui/browser_list",
+    "//ios/shared/chrome/browser/ui/commands",
     "//ios/shared/chrome/browser/ui/coordinators",
     "//ios/web",
   ]
diff --git a/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm b/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm
index faf15db3..8fe33ea 100644
--- a/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm
+++ b/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm
@@ -8,12 +8,16 @@
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
+#include "ios/chrome/browser/chrome_url_constants.h"
 #import "ios/clean/chrome/browser/ui/animators/zoom_transition_animator.h"
-#import "ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.h"
+#import "ios/clean/chrome/browser/ui/commands/tab_commands.h"
+#import "ios/clean/chrome/browser/ui/ntp/ntp_coordinator.h"
 #import "ios/clean/chrome/browser/ui/tab/tab_container_view_controller.h"
 #import "ios/clean/chrome/browser/ui/tab_strip/tab_strip_coordinator.h"
 #import "ios/clean/chrome/browser/ui/toolbar/toolbar_coordinator.h"
 #import "ios/clean/chrome/browser/ui/web_contents/web_coordinator.h"
+#import "ios/shared/chrome/browser/ui/browser_list/browser.h"
+#import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h"
 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal.h"
 #import "ios/web/public/web_state/web_state.h"
 #import "ios/web/public/web_state/web_state_observer_bridge.h"
@@ -29,8 +33,11 @@
 }  // namespace
 
 @interface TabCoordinator ()<CRWWebStateObserver,
+                             TabCommands,
                              UIViewControllerTransitioningDelegate>
 @property(nonatomic, strong) TabContainerViewController* viewController;
+@property(nonatomic, weak) NTPCoordinator* ntpCoordinator;
+@property(nonatomic, weak) WebCoordinator* webCoordinator;
 @end
 
 @implementation TabCoordinator {
@@ -40,6 +47,8 @@
 @synthesize presentationKey = _presentationKey;
 @synthesize viewController = _viewController;
 @synthesize webState = _webState;
+@synthesize webCoordinator = _webCoordinator;
+@synthesize ntpCoordinator = _ntpCoordinator;
 
 #pragma mark - BrowserCoordinator
 
@@ -50,10 +59,15 @@
   _webStateObserver =
       base::MakeUnique<web::WebStateObserverBridge>(self.webState, self);
 
+  CommandDispatcher* dispatcher = self.browser->dispatcher();
+  // TabCommands
+  [dispatcher startDispatchingToTarget:self forSelector:@selector(loadURL:)];
+
   WebCoordinator* webCoordinator = [[WebCoordinator alloc] init];
   webCoordinator.webState = self.webState;
   [self addChildCoordinator:webCoordinator];
   [webCoordinator start];
+  self.webCoordinator = webCoordinator;
 
   ToolbarCoordinator* toolbarCoordinator = [[ToolbarCoordinator alloc] init];
   toolbarCoordinator.webState = self.webState;
@@ -64,6 +78,15 @@
   [self addChildCoordinator:tabStripCoordinator];
   [tabStripCoordinator start];
 
+  // PLACEHOLDER: Fix the order of events here. The ntpCoordinator was already
+  // created above when |webCoordinator.webState = self.webState;| triggers
+  // a load event, but then the webCoordinator stomps on the
+  // contentViewController when it starts afterwards.
+  if (self.webState->GetLastCommittedURL() == GURL(kChromeUINewTabURL)) {
+    self.viewController.contentViewController =
+        self.ntpCoordinator.viewController;
+  }
+
   [super start];
 }
 
@@ -75,6 +98,7 @@
     [child stop];
   }
   _webStateObserver.reset();
+  [self.browser->dispatcher() stopDispatchingToTarget:self];
 }
 
 - (void)childCoordinatorDidStart:(BrowserCoordinator*)childCoordinator {
@@ -89,6 +113,10 @@
   }
 }
 
+- (void)childCoordinatorWillStop:(BrowserCoordinator*)childCoordinator {
+  self.viewController.contentViewController = nil;
+}
+
 - (BOOL)canAddOverlayCoordinator:(BrowserCoordinator*)overlayCoordinator {
   // This coordinator will always accept overlay coordinators.
   return YES;
@@ -112,10 +140,21 @@
 // optimization in some equivalent to loadURL.
 - (void)webState:(web::WebState*)webState
     didCommitNavigationWithDetails:(const web::LoadCommittedDetails&)details {
-  if (webState->GetLastCommittedURL() == GURL("chrome://newtab/")) {
+  if (webState->GetLastCommittedURL() == GURL(kChromeUINewTabURL)) {
     NTPCoordinator* ntpCoordinator = [[NTPCoordinator alloc] init];
     [self addChildCoordinator:ntpCoordinator];
     [ntpCoordinator start];
+    self.ntpCoordinator = ntpCoordinator;
+  }
+}
+
+- (void)webState:(web::WebState*)webState
+    didStartProvisionalNavigationForURL:(const GURL&)URL {
+  if (self.ntpCoordinator) {
+    [self.ntpCoordinator stop];
+    [self removeChildCoordinator:self.ntpCoordinator];
+    self.viewController.contentViewController =
+        self.webCoordinator.viewController;
   }
 }
 
@@ -141,4 +180,10 @@
   return animator;
 }
 
+#pragma mark - TabCommands
+
+- (void)loadURL:(web::NavigationManager::WebLoadParams)params {
+  self.webState->GetNavigationManager()->LoadURLWithParams(params);
+}
+
 @end
diff --git a/ios/clean/chrome/browser/ui/tab_grid/BUILD.gn b/ios/clean/chrome/browser/ui/tab_grid/BUILD.gn
index ec4ad7d..ef9472e8 100644
--- a/ios/clean/chrome/browser/ui/tab_grid/BUILD.gn
+++ b/ios/clean/chrome/browser/ui/tab_grid/BUILD.gn
@@ -65,3 +65,26 @@
     "//ui/base",
   ]
 }
+
+source_set("unit_tests") {
+  testonly = true
+
+  sources = [
+    "tab_grid_mediator_unittest.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    ":tab_grid",
+    ":tab_grid_ui",
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/test/base",
+    "//ios/shared/chrome/browser/tabs",
+    "//ios/shared/chrome/browser/tabs:test_support",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.mm b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.mm
index 6d17f3f..87ec7f34 100644
--- a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.mm
+++ b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.mm
@@ -4,9 +4,7 @@
 
 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h"
 
-#include "base/memory/ptr_util.h"
-#include "base/strings/sys_string_conversions.h"
-#import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_consumer.h"
+#import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_consumer.h"
 #import "ios/shared/chrome/browser/tabs/web_state_list.h"
 #import "ios/shared/chrome/browser/tabs/web_state_list_observer_bridge.h"
 #include "ios/web/public/web_state/web_state.h"
diff --git a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator_unittest.mm b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator_unittest.mm
new file mode 100644
index 0000000..ef8e287
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator_unittest.mm
@@ -0,0 +1,74 @@
+// 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.
+
+#import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h"
+
+#include "base/memory/ptr_util.h"
+#import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_consumer.h"
+#include "ios/shared/chrome/browser/tabs/fake_web_state_list_delegate.h"
+#include "ios/shared/chrome/browser/tabs/web_state_list.h"
+#import "ios/shared/chrome/browser/tabs/web_state_list_observer_bridge.h"
+#import "ios/web/public/test/fakes/test_navigation_manager.h"
+#import "ios/web/public/test/fakes/test_web_state.h"
+#include "testing/platform_test.h"
+#import "third_party/ocmock/OCMock/OCMock.h"
+#include "third_party/ocmock/gtest_support.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+
+class TabGridMediatorTest : public PlatformTest {
+ public:
+  TabGridMediatorTest() {
+    SetUpEmptyWebStateList();
+    mediator_ = [[TabGridMediator alloc] init];
+    mediator_.webStateList = web_state_list_.get();
+  }
+  ~TabGridMediatorTest() override { [mediator_ disconnect]; }
+
+ protected:
+  void SetUpEmptyWebStateList() {
+    web_state_list_ = base::MakeUnique<WebStateList>(&web_state_list_delegate_);
+  }
+
+  void InsertWebStateAt(int index) {
+    auto web_state = base::MakeUnique<web::TestWebState>();
+    web_state_list_->InsertWebState(index, std::move(web_state));
+  }
+
+  void SetConsumer() {
+    consumer_ = [OCMockObject mockForProtocol:@protocol(TabGridConsumer)];
+    mediator_.consumer = consumer_;
+  }
+
+  TabGridMediator* mediator_;
+  std::unique_ptr<WebStateList> web_state_list_;
+  FakeWebStateListDelegate web_state_list_delegate_;
+  id consumer_;
+};
+
+// Tests that the noTabsOverlay is removed when a web state is inserted when
+// the list is empty.
+TEST_F(TabGridMediatorTest, TestRemoveNoTabsOverlay) {
+  SetConsumer();
+  [[consumer_ expect] insertItemAtIndex:0];
+  [[consumer_ expect] removeNoTabsOverlay];
+  InsertWebStateAt(0);
+  EXPECT_OCMOCK_VERIFY(consumer_);
+}
+
+// Tests that the noTabsOverlay is added when the web state list becomes empty.
+TEST_F(TabGridMediatorTest, TestAddNoTabsOverlay) {
+  InsertWebStateAt(0);
+  SetConsumer();
+  [[consumer_ expect] deleteItemAtIndex:0];
+  [[consumer_ expect] addNoTabsOverlay];
+  web_state_list_->CloseWebStateAt(0);
+  EXPECT_OCMOCK_VERIFY(consumer_);
+}
+
+}  // namespace
diff --git a/ios/clean/chrome/browser/ui/web_contents/BUILD.gn b/ios/clean/chrome/browser/ui/web_contents/BUILD.gn
index a8cfe05f..0eb10e7 100644
--- a/ios/clean/chrome/browser/ui/web_contents/BUILD.gn
+++ b/ios/clean/chrome/browser/ui/web_contents/BUILD.gn
@@ -14,6 +14,7 @@
 
   deps = [
     ":web_contents_ui",
+    "//ios/chrome/browser",
     "//ios/clean/chrome/browser/ui/context_menu",
     "//ios/shared/chrome/browser/tabs",
     "//ios/shared/chrome/browser/ui/browser_list",
diff --git a/ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm b/ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm
index 9c2bc7fb..a4596fbc 100644
--- a/ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm
+++ b/ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm
@@ -5,6 +5,7 @@
 #import "ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.h"
 
 #include "base/memory/ptr_util.h"
+#include "ios/chrome/browser/chrome_url_constants.h"
 #import "ios/clean/chrome/browser/ui/web_contents/web_contents_consumer.h"
 #import "ios/shared/chrome/browser/tabs/web_state_list.h"
 #import "ios/shared/chrome/browser/tabs/web_state_list_observer_bridge.h"
@@ -102,8 +103,7 @@
 // PLACEHOLDER: This navigates the page since the omnibox is not yet hooked up.
 - (void)navigateToDefaultPage:(web::WebState*)webState {
   if (!webState->GetNavigationManager()->GetItemCount()) {
-    web::NavigationManager::WebLoadParams params(
-        GURL("https://dev.chromium.org/"));
+    web::NavigationManager::WebLoadParams params((GURL(kChromeUINewTabURL)));
     params.transition_type = ui::PAGE_TRANSITION_TYPED;
     webState->GetNavigationManager()->LoadURLWithParams(params);
   }
diff --git a/ios/clean/chrome/test/BUILD.gn b/ios/clean/chrome/test/BUILD.gn
index 860986f..4c59abc 100644
--- a/ios/clean/chrome/test/BUILD.gn
+++ b/ios/clean/chrome/test/BUILD.gn
@@ -19,9 +19,13 @@
     ios_packed_resources_target,
 
     # Add unit_tests target here.
+    "//ios/clean/chrome/browser/ui/bookmarks:unit_tests",
     "//ios/clean/chrome/browser/ui/context_menu:unit_tests",
+    "//ios/clean/chrome/browser/ui/ntp:unit_tests",
     "//ios/clean/chrome/browser/ui/omnibox:unit_tests",
+    "//ios/clean/chrome/browser/ui/recent_tabs:unit_tests",
     "//ios/clean/chrome/browser/ui/tab_collection:unit_tests",
+    "//ios/clean/chrome/browser/ui/tab_grid:unit_tests",
     "//ios/clean/chrome/browser/ui/web_contents:unit_tests",
   ]
 }
diff --git a/ios/web/navigation/crw_session_controller.h b/ios/web/navigation/crw_session_controller.h
index 26fb183..4ed7a98 100644
--- a/ios/web/navigation/crw_session_controller.h
+++ b/ios/web/navigation/crw_session_controller.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #import "ios/web/navigation/navigation_item_impl_list.h"
+#import "ios/web/public/navigation_manager.h"
 #include "ui/base/page_transition_types.h"
 #include "url/gurl.h"
 
@@ -77,14 +78,17 @@
 // Sets the corresponding BrowserState.
 - (void)setBrowserState:(web::BrowserState*)browserState;
 
-// Add a new item with the given url, referrer, and navigation type, making it
-// the current item. If pending item is the same as current item, this does
-// nothing. |referrer| may be nil if there isn't one. The item starts out as
-// pending, and will be lost unless |-commitPendingItem| is called.
+// Add a new item with the given url, referrer, navigation type and user agent
+// override option, making it the current item. If pending item is the same as
+// current item, this does nothing. |referrer| may be nil if there isn't one.
+// The item starts out as pending, and will be lost unless |-commitPendingItem|
+// is called.
 - (void)addPendingItem:(const GURL&)url
-              referrer:(const web::Referrer&)referrer
-            transition:(ui::PageTransition)type
-        initiationType:(web::NavigationInitiationType)initiationType;
+                   referrer:(const web::Referrer&)referrer
+                 transition:(ui::PageTransition)type
+             initiationType:(web::NavigationInitiationType)initiationType
+    userAgentOverrideOption:(web::NavigationManager::UserAgentOverrideOption)
+                                userAgentOverrideOption;
 
 // Updates the URL of the yet to be committed pending item. Useful for page
 // redirects. Does nothing if there is no pending item.
diff --git a/ios/web/navigation/crw_session_controller.mm b/ios/web/navigation/crw_session_controller.mm
index c867f5e9..2c29cf11 100644
--- a/ios/web/navigation/crw_session_controller.mm
+++ b/ios/web/navigation/crw_session_controller.mm
@@ -80,6 +80,21 @@
 // |index| in |items| has ui::PAGE_TRANSITION_IS_REDIRECT_MASK.
 - (BOOL)isRedirectTransitionForItemAtIndex:(size_t)index;
 
+// Should create a new pending item if the new pending item is not a duplicate
+// of the last added or commited item. Returns YES if one of the following rules
+// apply:
+// 1. There is no last added or committed item.
+// 2. The new item has different url from the last added or commited item.
+// 3. Url is the same, but the new item is a form submission resulted from the
+//    last added or committed item.
+// 4. Url is the same, but new item is a reload with different user agent type
+//    resulted from last added or commited item.
+- (BOOL)shouldCreatePendingItemWithURL:(const GURL&)URL
+                            transition:(ui::PageTransition)transition
+               userAgentOverrideOption:
+                   (web::NavigationManager::UserAgentOverrideOption)
+                       userAgentOverrideOption;
+
 @end
 
 @implementation CRWSessionController
@@ -268,9 +283,11 @@
 }
 
 - (void)addPendingItem:(const GURL&)url
-              referrer:(const web::Referrer&)ref
-            transition:(ui::PageTransition)trans
-        initiationType:(web::NavigationInitiationType)initiationType {
+                   referrer:(const web::Referrer&)ref
+                 transition:(ui::PageTransition)trans
+             initiationType:(web::NavigationInitiationType)initiationType
+    userAgentOverrideOption:(web::NavigationManager::UserAgentOverrideOption)
+                                userAgentOverrideOption {
   // Server side redirects are handled by updating existing pending item instead
   // of adding a new item.
   DCHECK((trans & ui::PAGE_TRANSITION_SERVER_REDIRECT) == 0);
@@ -278,35 +295,16 @@
   [self discardTransientItem];
   self.pendingItemIndex = -1;
 
-  // Don't create a new item if it's already the same as the current item,
-  // allowing this routine to be called multiple times in a row without issue.
-  // Note: CRWSessionController currently has the responsibility to distinguish
-  // between new navigations and history stack navigation, hence the inclusion
-  // of specific transiton type logic here, in order to make it reliable with
-  // real-world observed behavior.
-  // TODO(crbug.com/676129): Fix the way changes are detected/reported elsewhere
-  // in the web layer so that this hack can be removed.
-  // Remove the workaround code from -presentSafeBrowsingWarningForResource:.
-  web::NavigationItemImpl* currentItem = self.currentItem;
-  if (currentItem) {
-    BOOL hasSameURL = currentItem->GetURL() == url;
-    BOOL isPendingTransitionFormSubmit =
-        PageTransitionCoreTypeIs(trans, ui::PAGE_TRANSITION_FORM_SUBMIT);
-    BOOL isCurrentTransitionFormSubmit = PageTransitionCoreTypeIs(
-        currentItem->GetTransitionType(), ui::PAGE_TRANSITION_FORM_SUBMIT);
-    BOOL shouldCreatePendingItem =
-        !hasSameURL ||
-        (isPendingTransitionFormSubmit && !isCurrentTransitionFormSubmit);
-
-    if (!shouldCreatePendingItem) {
-      // Send the notification anyway, to preserve old behavior. It's unknown
-      // whether anything currently relies on this, but since both this whole
-      // hack and the content facade will both be going away, it's not worth
-      // trying to unwind.
-      if (_navigationManager && _navigationManager->GetFacadeDelegate())
-        _navigationManager->GetFacadeDelegate()->OnNavigationItemPending();
-      return;
-    }
+  if (![self shouldCreatePendingItemWithURL:url
+                                 transition:trans
+                    userAgentOverrideOption:userAgentOverrideOption]) {
+    // Send the notification anyway, to preserve old behavior. It's unknown
+    // whether anything currently relies on this, but since both this whole
+    // hack and the content facade will both be going away, it's not worth
+    // trying to unwind.
+    if (_navigationManager && _navigationManager->GetFacadeDelegate())
+      _navigationManager->GetFacadeDelegate()->OnNavigationItemPending();
+    return;
   }
 
   _pendingItem = [self itemWithURL:url
@@ -319,6 +317,64 @@
   DCHECK_EQ(-1, self.pendingItemIndex);
 }
 
+- (BOOL)shouldCreatePendingItemWithURL:(const GURL&)URL
+                            transition:(ui::PageTransition)transition
+               userAgentOverrideOption:
+                   (web::NavigationManager::UserAgentOverrideOption)
+                       userAgentOverrideOption {
+  // Note: CRWSessionController currently has the responsibility to distinguish
+  // between new navigations and history stack navigation, hence the inclusion
+  // of specific transiton type logic here, in order to make it reliable with
+  // real-world observed behavior.
+  // TODO(crbug.com/676129): Fix the way changes are detected/reported elsewhere
+  // in the web layer so that this hack can be removed.
+  // Remove the workaround code from -presentSafeBrowsingWarningForResource:.
+  web::NavigationItemImpl* currentItem = self.currentItem;
+  if (!currentItem)
+    return YES;
+
+  // User agent override option should always be different from the user agent
+  // type of the pending item, or the last committed item if pending doesn't
+  // exist.
+  DCHECK(userAgentOverrideOption !=
+             web::NavigationManager::UserAgentOverrideOption::DESKTOP ||
+         currentItem->GetUserAgentType() != web::UserAgentType::DESKTOP);
+  DCHECK(userAgentOverrideOption !=
+             web::NavigationManager::UserAgentOverrideOption::MOBILE ||
+         currentItem->GetUserAgentType() != web::UserAgentType::MOBILE);
+
+  BOOL hasSameURL = self.currentItem->GetURL() == URL;
+  if (!hasSameURL) {
+    // Different url indicates that it's not a duplicate item.
+    return YES;
+  }
+
+  BOOL isPendingTransitionFormSubmit =
+      PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_FORM_SUBMIT);
+  BOOL isCurrentTransitionFormSubmit = PageTransitionCoreTypeIs(
+      currentItem->GetTransitionType(), ui::PAGE_TRANSITION_FORM_SUBMIT);
+  if (isPendingTransitionFormSubmit && !isCurrentTransitionFormSubmit) {
+    // |isPendingTransitionFormSubmit| indicates that the new item is a form
+    // submission resulted from the last added or commited item, and
+    // |!isCurrentTransitionFormSubmit| shows that the form submission is not
+    // counted multiple times.
+    return YES;
+  }
+
+  BOOL isPendingTransitionReload =
+      PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD);
+  BOOL isInheritingUserAgentType =
+      userAgentOverrideOption ==
+      web::NavigationManager::UserAgentOverrideOption::INHERIT;
+  if (isPendingTransitionReload && !isInheritingUserAgentType) {
+    // Overriding user agent type to MOBILE or DESKTOP indicates that the new
+    // new item is a reload with different user agent type.
+    return YES;
+  }
+
+  return NO;
+}
+
 - (void)updatePendingItem:(const GURL&)url {
   // If there is no pending item, navigation is probably happening within the
   // session history. Don't modify the item list.
diff --git a/ios/web/navigation/crw_session_controller_unittest.mm b/ios/web/navigation/crw_session_controller_unittest.mm
index 2079ced..6e7eb988 100644
--- a/ios/web/navigation/crw_session_controller_unittest.mm
+++ b/ios/web/navigation/crw_session_controller_unittest.mm
@@ -23,6 +23,8 @@
 #import "testing/gtest_mac.h"
 #include "testing/platform_test.h"
 
+using UserAgentOverrideOption = web::NavigationManager::UserAgentOverrideOption;
+
 @interface CRWSessionController (Testing)
 - (const GURL&)URLForItemAtIndex:(size_t)index;
 - (const GURL&)currentURL;
@@ -66,10 +68,11 @@
 // Tests session controller state after setting a pending index.
 TEST_F(CRWSessionControllerTest, SetPendingIndex) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
@@ -81,10 +84,11 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItem) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
 
   EXPECT_TRUE([session_controller_ items].empty());
   EXPECT_EQ(
@@ -94,17 +98,19 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItemWithCommittedItems) {
   [session_controller_
-      addPendingItem:GURL("http://www.committed.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.committed.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
 
   EXPECT_EQ(1U, [session_controller_ items].size());
   EXPECT_EQ(GURL("http://www.committed.url.com/"),
@@ -117,16 +123,18 @@
 // Tests that adding a pending item resets pending item index.
 TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   // Set 0 as pending item index.
@@ -137,10 +145,11 @@
 
   // Add a pending item, which should drop pending navigation index.
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   EXPECT_EQ(GURL("http://www.example.com/1"),
             [session_controller_ pendingItem]->GetURL());
   EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
@@ -148,15 +157,17 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItemOverriding) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_
-      addPendingItem:GURL("http://www.another.url.com")
-            referrer:MakeReferrer("http://www.another.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.another.url.com")
+                     referrer:MakeReferrer("http://www.another.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
 
   EXPECT_TRUE([session_controller_ items].empty());
   EXPECT_EQ(
@@ -166,10 +177,11 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndCommit) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(1U, [session_controller_ items].size());
@@ -181,15 +193,17 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItemOverridingAndCommit) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_
-      addPendingItem:GURL("http://www.another.url.com")
-            referrer:MakeReferrer("http://www.another.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.another.url.com")
+                     referrer:MakeReferrer("http://www.another.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(1U, [session_controller_ items].size());
@@ -201,17 +215,19 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndCommitMultiple) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   [session_controller_
-      addPendingItem:GURL("http://www.another.url.com")
-            referrer:MakeReferrer("http://www.another.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.another.url.com")
+                     referrer:MakeReferrer("http://www.another.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(2U, [session_controller_ items].size());
@@ -225,10 +241,11 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndDiscard) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ discardNonCommittedItems];
 
   EXPECT_TRUE([session_controller_ items].empty());
@@ -238,10 +255,11 @@
 // Tests discarding pending item added via |setPendingItemIndex:| call.
 TEST_F(CRWSessionControllerTest, setPendingItemIndexAndDiscard) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   [session_controller_ setPendingItemIndex:0];
@@ -255,17 +273,19 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndDiscardAndAddAndCommit) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ discardNonCommittedItems];
 
   [session_controller_
-      addPendingItem:GURL("http://www.another.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.another.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(1U, [session_controller_ items].size());
@@ -277,17 +297,19 @@
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndCommitAndAddAndDiscard) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   [session_controller_
-      addPendingItem:GURL("http://www.another.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.another.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ discardNonCommittedItems];
 
   EXPECT_EQ(1U, [session_controller_ items].size());
@@ -309,10 +331,11 @@
        commitPendingItemWithoutPendingItemWithCommittedItem) {
   // Setup committed item.
   [session_controller_
-      addPendingItem:GURL("http://www.url.com/")
-            referrer:MakeReferrer("http://www.referrer.com/")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/")
+                     referrer:MakeReferrer("http://www.referrer.com/")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   // Commit pending item when there is no such one
@@ -327,22 +350,25 @@
 TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) {
   // Make 3 items.
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/1")
-            referrer:MakeReferrer("http://www.example.com/b")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/1")
+                     referrer:MakeReferrer("http://www.example.com/b")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/2")
-            referrer:MakeReferrer("http://www.example.com/c")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/2")
+                     referrer:MakeReferrer("http://www.example.com/c")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   // Go back to the first item.
@@ -350,10 +376,11 @@
 
   // Create and commit a new pending item.
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/2")
-            referrer:MakeReferrer("http://www.example.com/c")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/2")
+                     referrer:MakeReferrer("http://www.example.com/c")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   // All forward items should go away.
@@ -366,22 +393,25 @@
 // Tests committing pending item index from the middle.
 TEST_F(CRWSessionControllerTest, commitPendingItemIndex) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/2")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/2")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   ASSERT_EQ(3U, [session_controller_ items].size());
 
@@ -417,10 +447,11 @@
        DiscardPendingItemWithoutPendingItemWithCommittedItem) {
   // Setup committed item
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   // Discard noncommitted items when there is no such one
@@ -441,10 +472,11 @@
 
 TEST_F(CRWSessionControllerTest, updatePendingItemWithPendingItem) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ updatePendingItem:GURL("http://www.another.url.com")];
 
   EXPECT_EQ(
@@ -455,10 +487,11 @@
 TEST_F(CRWSessionControllerTest,
        updatePendingItemWithPendingItemAlreadyCommited) {
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_ updatePendingItem:GURL("http://www.another.url.com")];
   [session_controller_ commitPendingItem];
@@ -474,31 +507,35 @@
 TEST_F(CRWSessionControllerTest, CopyState) {
   // Add 1 committed and 1 pending item to target controller.
   [session_controller_
-      addPendingItem:GURL("http://www.url.com/2")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/2")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.url.com/3")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/3")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
 
   // Create source session controller with 1 committed item.
   base::scoped_nsobject<CRWSessionController> other_session_controller(
       [[CRWSessionController alloc] initWithBrowserState:&browser_state_]);
   [other_session_controller
-      addPendingItem:GURL("http://www.url.com/0")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/0")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [other_session_controller commitPendingItem];
   [other_session_controller
-      addPendingItem:GURL("http://www.url.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
 
   // Insert and verify the state of target session controller.
   EXPECT_TRUE([session_controller_ canPruneAllButLastCommittedItem]);
@@ -522,16 +559,18 @@
 TEST_F(CRWSessionControllerTest, CopyStateFromEmptySessionController) {
   // Add 2 committed items to target controller.
   [session_controller_
-      addPendingItem:GURL("http://www.url.com/0")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/0")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.url.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   // Create empty source session controller.
@@ -562,16 +601,18 @@
   base::scoped_nsobject<CRWSessionController> other_session_controller(
       [[CRWSessionController alloc] initWithBrowserState:&browser_state_]);
   [other_session_controller
-      addPendingItem:GURL("http://www.url.com/0")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/0")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [other_session_controller commitPendingItem];
   [other_session_controller
-      addPendingItem:GURL("http://www.url.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
 
   // Attempt to copy |other_session_controller|'s state and verify that
   // |session_controller_| is unchanged.
@@ -590,32 +631,36 @@
 TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) {
   // Add 1 committed and 1 pending item to target controller.
   [session_controller_
-      addPendingItem:GURL("http://www.url.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.url.com/2")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/2")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   // Create source session controller with 1 committed item.
   base::scoped_nsobject<CRWSessionController> other_session_controller(
       [[CRWSessionController alloc] initWithBrowserState:&browser_state_]);
   [other_session_controller
-      addPendingItem:GURL("http://www.url.com/0")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/0")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [other_session_controller commitPendingItem];
   [other_session_controller
-      addPendingItem:GURL("http://www.url.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
 
   // Set the pending item index to the first item.
   [session_controller_ setPendingItemIndex:0];
@@ -639,33 +684,37 @@
 TEST_F(CRWSessionControllerTest, CopyStateWithTransientItem) {
   // Add 1 committed and 1 pending item to target controller.
   [session_controller_
-      addPendingItem:GURL("http://www.url.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   GURL second_url = GURL("http://www.url.com/2");
   [session_controller_
-      addPendingItem:second_url
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:second_url
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ addTransientItemWithURL:second_url];
 
   // Create source session controller with 1 committed item.
   base::scoped_nsobject<CRWSessionController> other_session_controller(
       [[CRWSessionController alloc] initWithBrowserState:&browser_state_]);
   [other_session_controller
-      addPendingItem:GURL("http://www.url.com/0")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/0")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [other_session_controller commitPendingItem];
   [other_session_controller
-      addPendingItem:GURL("http://www.url.com/1")
-            referrer:web::Referrer()
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com/1")
+                     referrer:web::Referrer()
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
 
   // Attempt to copy |other_session_controller|'s state and verify that
   // |session_controller_| is unchanged.
@@ -750,24 +799,27 @@
 TEST_F(CRWSessionControllerTest, PreviousNavigationItem) {
   EXPECT_EQ(session_controller_.get().previousItemIndex, -1);
   [session_controller_
-      addPendingItem:GURL("http://www.url.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   EXPECT_EQ(session_controller_.get().previousItemIndex, -1);
   [session_controller_
-      addPendingItem:GURL("http://www.url1.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url1.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   EXPECT_EQ(session_controller_.get().previousItemIndex, 0);
   [session_controller_
-      addPendingItem:GURL("http://www.url2.com")
-            referrer:MakeReferrer("http://www.referer.com")
-          transition:ui::PAGE_TRANSITION_TYPED
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.url2.com")
+                     referrer:MakeReferrer("http://www.referer.com")
+                   transition:ui::PAGE_TRANSITION_TYPED
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(session_controller_.get().previousItemIndex, 1);
@@ -913,28 +965,32 @@
 
 TEST_F(CRWSessionControllerTest, TestBackwardForwardItems) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/1")
-            referrer:MakeReferrer("http://www.example.com/b")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/1")
+                     referrer:MakeReferrer("http://www.example.com/b")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/redirect")
-            referrer:MakeReferrer("http://www.example.com/r")
-          transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/redirect")
+                     referrer:MakeReferrer("http://www.example.com/r")
+                   transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/2")
-            referrer:MakeReferrer("http://www.example.com/c")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/2")
+                     referrer:MakeReferrer("http://www.example.com/c")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex);
@@ -957,34 +1013,39 @@
 // Tests going to items with existing and non-existing indices.
 TEST_F(CRWSessionControllerTest, GoToItemAtIndex) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/1")
-            referrer:MakeReferrer("http://www.example.com/b")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/1")
+                     referrer:MakeReferrer("http://www.example.com/b")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/redirect")
-            referrer:MakeReferrer("http://www.example.com/r")
-          transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/redirect")
+                     referrer:MakeReferrer("http://www.example.com/r")
+                   transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/2")
-            referrer:MakeReferrer("http://www.example.com/c")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/2")
+                     referrer:MakeReferrer("http://www.example.com/c")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/3")
-            referrer:MakeReferrer("http://www.example.com/d")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/3")
+                     referrer:MakeReferrer("http://www.example.com/d")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ addTransientItemWithURL:GURL("http://www.example.com")];
   EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex);
   EXPECT_EQ(2, session_controller_.get().previousItemIndex);
@@ -1033,10 +1094,11 @@
 // item.
 TEST_F(CRWSessionControllerTest, VisibleItemWithCommittedAndTransientItems) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_ addTransientItemWithURL:GURL("http://www.example.com")];
   web::NavigationItem* visible_item = [session_controller_ visibleItem];
@@ -1048,10 +1110,11 @@
 TEST_F(CRWSessionControllerTest,
        VisibleItemWithSingleUserInitiatedPendingItem) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   web::NavigationItem* visible_item = [session_controller_ visibleItem];
   ASSERT_TRUE(visible_item);
   EXPECT_EQ("http://www.example.com/0", visible_item->GetURL().spec());
@@ -1062,16 +1125,18 @@
 TEST_F(CRWSessionControllerTest,
        VisibleItemWithCommittedAndUserInitiatedPendingItem) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/b")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/b")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   web::NavigationItem* visible_item = [session_controller_ visibleItem];
   ASSERT_TRUE(visible_item);
   EXPECT_EQ("http://www.example.com/0", visible_item->GetURL().spec());
@@ -1082,10 +1147,11 @@
 TEST_F(CRWSessionControllerTest,
        VisibleItemWithSingleRendererInitiatedPendingItem) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   web::NavigationItem* visible_item = [session_controller_ visibleItem];
   ASSERT_FALSE(visible_item);
 }
@@ -1095,16 +1161,18 @@
 TEST_F(CRWSessionControllerTest,
        VisibleItemWithCommittedAndRendererInitiatedPendingItem) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/b")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/b")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   web::NavigationItem* visible_item = [session_controller_ visibleItem];
   ASSERT_TRUE(visible_item);
   EXPECT_EQ("http://www.example.com/", visible_item->GetURL().spec());
@@ -1114,16 +1182,18 @@
 // navigation index.
 TEST_F(CRWSessionControllerTest, VisibleItemWithPendingNavigationIndex) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/b")
-          transition:ui::PAGE_TRANSITION_LINK
-      initiationType:web::NavigationInitiationType::USER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/b")
+                   transition:ui::PAGE_TRANSITION_LINK
+               initiationType:web::NavigationInitiationType::USER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
 
   [session_controller_ setPendingItemIndex:0];
@@ -1137,16 +1207,18 @@
 // redirects.
 TEST_F(CRWSessionControllerTest, BackwardItemsForAllRedirects) {
   [session_controller_
-      addPendingItem:GURL("http://www.example.com")
-            referrer:MakeReferrer("http://www.example.com/a")
-          transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com")
+                     referrer:MakeReferrer("http://www.example.com/a")
+                   transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   [session_controller_
-      addPendingItem:GURL("http://www.example.com/0")
-            referrer:MakeReferrer("http://www.example.com/b")
-          transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
-      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
+               addPendingItem:GURL("http://www.example.com/0")
+                     referrer:MakeReferrer("http://www.example.com/b")
+                   transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
+               initiationType:web::NavigationInitiationType::RENDERER_INITIATED
+      userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
   [session_controller_ commitPendingItem];
   EXPECT_EQ(0U, [session_controller_ backwardItems].size());
 }
diff --git a/ios/web/navigation/navigation_manager_impl.mm b/ios/web/navigation/navigation_manager_impl.mm
index 1d20a089..be7070d 100644
--- a/ios/web/navigation/navigation_manager_impl.mm
+++ b/ios/web/navigation/navigation_manager_impl.mm
@@ -192,7 +192,8 @@
   [session_controller_ addPendingItem:url
                              referrer:referrer
                            transition:navigation_type
-                       initiationType:initiation_type];
+                       initiationType:initiation_type
+              userAgentOverrideOption:user_agent_override_option];
 
   // Set the user agent type for web URLs.
   NavigationItem* pending_item = GetPendingItem();
diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm
index e76db99..3035b93 100644
--- a/ios/web/navigation/navigation_manager_impl_unittest.mm
+++ b/ios/web/navigation/navigation_manager_impl_unittest.mm
@@ -515,17 +515,355 @@
   EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1));
 }
 
+// Tests that when given a pending item, adding a new pending item replaces the
+// existing pending item if their URLs are different.
+TEST_F(NavigationManagerTest, ReplacePendingItemIfDiffernetURL) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(existing_url, navigation_manager()->GetPendingItem()->GetURL());
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+
+  GURL new_url = GURL("http://www.new.com");
+  navigation_manager()->AddPendingItem(
+      new_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(new_url, navigation_manager()->GetPendingItem()->GetURL());
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+}
+
+// Tests that when given a pending item, adding a new pending item with the same
+// URL doesn't replace the existing pending item if new pending item is not a
+// form submission.
+TEST_F(NavigationManagerTest, NotReplaceSameUrlPendingItemIfNotFormSubmission) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_LINK,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+}
+
+// Tests that when given a pending item, adding a new pending item with the same
+// URL replaces the existing pending item if new pending item is a form
+// submission while existing pending item is not.
+TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfFormSubmission) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_FORM_SUBMIT));
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+}
+
+// Tests that when given a pending item, adding a new pending item with the same
+// URL doesn't replace the existing pending item if the user agent override
+// option is INHERIT.
+TEST_F(NavigationManagerTest, NotReplaceSameUrlPendingItemIfOverrideInherit) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+}
+
+// Tests that when given a pending item, adding a new pending item with the same
+// URL replaces the existing pending item if the user agent override option is
+// DESKTOP.
+TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfOverrideDesktop) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::MOBILE);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(web::UserAgentType::MOBILE,
+            navigation_manager()->GetPendingItem()->GetUserAgentType());
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::DESKTOP);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_RELOAD));
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+}
+
+// Tests that when given a pending item, adding a new pending item with the same
+// URL replaces the existing pending item if the user agent override option is
+// MOBILE.
+TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfOverrideMobile) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::DESKTOP);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(web::UserAgentType::DESKTOP,
+            navigation_manager()->GetPendingItem()->GetUserAgentType());
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::MOBILE);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_RELOAD));
+  EXPECT_EQ(0, navigation_manager()->GetItemCount());
+}
+
+// Tests that when the last committed item exists, adding a pending item
+// succeeds if the new item's URL is different from the last committed item.
+TEST_F(NavigationManagerTest, AddPendingItemIfDiffernetURL) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  [session_controller() commitPendingItem];
+  ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+  EXPECT_EQ(existing_url,
+            navigation_manager()->GetLastCommittedItem()->GetURL());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+
+  GURL new_url = GURL("http://www.new.com");
+  navigation_manager()->AddPendingItem(
+      new_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(new_url, navigation_manager()->GetPendingItem()->GetURL());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+}
+
+// Tests that when the last committed item exists, adding a pending item with
+// the same URL fails if the new item is not form submission.
+TEST_F(NavigationManagerTest, NotAddSameUrlPendingItemIfNotFormSubmission) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  [session_controller() commitPendingItem];
+  ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_FALSE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_LINK,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  EXPECT_FALSE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+}
+
+// Tests that when the last committed item exists, adding a pending item with
+// the same URL succeeds if the new item is a form submission while the last
+// committed item is not.
+TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfFormSubmission) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  [session_controller() commitPendingItem];
+  ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_FALSE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+
+  // Add if new transition is a form submission.
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_FORM_SUBMIT));
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+}
+
+// Tests that when the last committed item exists, adding a pending item with
+// the same URL fails if both the new item and the last committed item are form
+// submissions.
+TEST_F(NavigationManagerTest,
+       NotAddSameUrlPendingItemIfDuplicateFormSubmission) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  [session_controller() commitPendingItem];
+  ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+  EXPECT_FALSE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  EXPECT_FALSE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+}
+
+// Tests that when the last committed item exists, adding a pending item with
+// the same URL fails if the user agent override option is INHERIT.
+TEST_F(NavigationManagerTest, NotAddSameUrlPendingItemIfOverrideInherit) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  [session_controller() commitPendingItem];
+  ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+  EXPECT_FALSE(navigation_manager()->GetPendingItem());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+}
+
+// Tests that when the last committed item exists, adding a pending item with
+// the same URL succeeds if the user agent override option is DESKTOP.
+TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfOverrideDesktop) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::MOBILE);
+  [session_controller() commitPendingItem];
+  ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(web::UserAgentType::MOBILE,
+            navigation_manager()->GetLastCommittedItem()->GetUserAgentType());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::DESKTOP);
+
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_RELOAD));
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+}
+
+// Tests that when the last committed item exists, adding a pending item with
+// the same URL succeeds if the user agent override option is MOBILE.
+TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfOverrideMobile) {
+  GURL existing_url = GURL("http://www.existing.com");
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::DESKTOP);
+  [session_controller() commitPendingItem];
+  ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_TYPED));
+  EXPECT_EQ(web::UserAgentType::DESKTOP,
+            navigation_manager()->GetLastCommittedItem()->GetUserAgentType());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+
+  navigation_manager()->AddPendingItem(
+      existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
+      web::NavigationInitiationType::USER_INITIATED,
+      web::NavigationManager::UserAgentOverrideOption::MOBILE);
+  ASSERT_TRUE(navigation_manager()->GetPendingItem());
+  EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
+      navigation_manager()->GetPendingItem()->GetTransitionType(),
+      ui::PAGE_TRANSITION_RELOAD));
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
+}
+
 // Tests that desktop user agent can be enforced to use for next pending item
 // when UserAgentOverrideOption is DESKTOP.
 TEST_F(NavigationManagerTest, OverrideUserAgentWithDesktop) {
   navigation_manager()->AddPendingItem(
       GURL("http://www.1.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
       web::NavigationInitiationType::USER_INITIATED,
-      web::NavigationManager::UserAgentOverrideOption::INHERIT);
+      web::NavigationManager::UserAgentOverrideOption::MOBILE);
   [session_controller() commitPendingItem];
   NavigationItem* last_committed_item =
       navigation_manager()->GetLastCommittedItem();
   EXPECT_EQ(UserAgentType::MOBILE, last_committed_item->GetUserAgentType());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
 
   navigation_manager()->AddPendingItem(
       GURL("http://www.2.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
@@ -534,6 +872,7 @@
   ASSERT_TRUE(navigation_manager()->GetPendingItem());
   EXPECT_EQ(UserAgentType::DESKTOP,
             navigation_manager()->GetPendingItem()->GetUserAgentType());
+  EXPECT_EQ(1, navigation_manager()->GetItemCount());
 }
 
 // Tests that mobile user agent can be enforced to use for next pending item
diff --git a/ios/web/net/crw_ssl_status_updater_unittest.mm b/ios/web/net/crw_ssl_status_updater_unittest.mm
index 964dbe4..96c7731 100644
--- a/ios/web/net/crw_ssl_status_updater_unittest.mm
+++ b/ios/web/net/crw_ssl_status_updater_unittest.mm
@@ -109,10 +109,12 @@
                                            navigationItems:std::move(nav_items)
                                     lastCommittedItemIndex:0]);
     [session_controller
-        addPendingItem:GURL(item_url_spec)
-              referrer:Referrer()
-            transition:ui::PAGE_TRANSITION_LINK
-        initiationType:web::NavigationInitiationType::USER_INITIATED];
+                 addPendingItem:GURL(item_url_spec)
+                       referrer:Referrer()
+                     transition:ui::PAGE_TRANSITION_LINK
+                 initiationType:web::NavigationInitiationType::USER_INITIATED
+        userAgentOverrideOption:NavigationManager::UserAgentOverrideOption::
+                                    INHERIT];
     [session_controller commitPendingItem];
 
     return session_controller.autorelease();
diff --git a/ios/web/web_state/ui/crw_web_controller_unittest.mm b/ios/web/web_state/ui/crw_web_controller_unittest.mm
index 4b34cba3..6b548101 100644
--- a/ios/web/web_state/ui/crw_web_controller_unittest.mm
+++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm
@@ -579,14 +579,6 @@
 // Real WKWebView is required for CRWWebControllerInvalidUrlTest.
 typedef web::WebTestWithWebState CRWWebControllerInvalidUrlTest;
 
-// Tests that web controller navigates to about:blank if invalid URL is loaded.
-TEST_F(CRWWebControllerInvalidUrlTest, LoadInvalidURL) {
-  GURL url(kInvalidURL);
-  ASSERT_FALSE(url.is_valid());
-  LoadHtml(@"<html><body></body></html>", url);
-  EXPECT_EQ(GURL(url::kAboutBlankURL), web_state()->GetLastCommittedURL());
-}
-
 // Tests that web controller does not navigate to about:blank if iframe src
 // has invalid url. Web controller loads about:blank if page navigates to
 // invalid url, but should do nothing if navigation is performed in iframe. This
diff --git a/ipc/ipc_channel_proxy.h b/ipc/ipc_channel_proxy.h
index 0bb7260c..37b6419 100644
--- a/ipc/ipc_channel_proxy.h
+++ b/ipc/ipc_channel_proxy.h
@@ -225,6 +225,11 @@
     return context_->ipc_task_runner();
   }
 
+  const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner_refptr()
+      const {
+    return context_->ipc_task_runner_refptr();
+  }
+
   // Called to clear the pointer to the IPC task runner when it's going away.
   void ClearIPCTaskRunner();
 
@@ -244,6 +249,11 @@
     base::SingleThreadTaskRunner* ipc_task_runner() const {
       return ipc_task_runner_.get();
     }
+    const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner_refptr()
+        const {
+      return ipc_task_runner_;
+    }
+
     // Dispatches a message on the listener thread.
     void OnDispatchMessage(const Message& message);
 
diff --git a/mash/package/mash_packaged_service.cc b/mash/package/mash_packaged_service.cc
index ea219b2e..b5f45e2d 100644
--- a/mash/package/mash_packaged_service.cc
+++ b/mash/package/mash_packaged_service.cc
@@ -17,7 +17,6 @@
 #include "mash/session/session.h"
 #include "mash/task_viewer/public/interfaces/constants.mojom.h"
 #include "mash/task_viewer/task_viewer.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/ui/ime/test_ime_driver/test_ime_application.h"
 #include "services/ui/public/interfaces/constants.mojom.h"
@@ -36,15 +35,18 @@
 
 namespace mash {
 
-MashPackagedService::MashPackagedService() {}
+MashPackagedService::MashPackagedService() {
+  registry_.AddInterface<ServiceFactory>(this);
+}
 
 MashPackagedService::~MashPackagedService() {}
 
-bool MashPackagedService::OnConnect(
-    const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<ServiceFactory>(this);
-  return true;
+void MashPackagedService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void MashPackagedService::Create(
diff --git a/mash/package/mash_packaged_service.h b/mash/package/mash_packaged_service.h
index 066f6d14..a136e75 100644
--- a/mash/package/mash_packaged_service.h
+++ b/mash/package/mash_packaged_service.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/interfaces/service_factory.mojom.h"
@@ -41,8 +42,9 @@
   ~MashPackagedService() override;
 
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // service_manager::InterfaceFactory<ServiceFactory>
   void Create(const service_manager::Identity& remote_identity,
@@ -57,6 +59,7 @@
       const std::string& name);
 
   std::unique_ptr<service_manager::ServiceContext> context_;
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<ServiceFactory> service_factory_bindings_;
 
   DISALLOW_COPY_AND_ASSIGN(MashPackagedService);
diff --git a/media/base/hdr_metadata.h b/media/base/hdr_metadata.h
index 2808e173..4846025e 100644
--- a/media/base/hdr_metadata.h
+++ b/media/base/hdr_metadata.h
@@ -6,19 +6,17 @@
 #define MEDIA_BASE_HDR_METADATA_H_
 
 #include "media/base/media_export.h"
+#include "ui/gfx/geometry/point_f.h"
 
 namespace media {
 
 // SMPTE ST 2086 mastering metadata.
 struct MEDIA_EXPORT MasteringMetadata {
-  float primary_r_chromaticity_x = 0;
-  float primary_r_chromaticity_y = 0;
-  float primary_g_chromaticity_x = 0;
-  float primary_g_chromaticity_y = 0;
-  float primary_b_chromaticity_x = 0;
-  float primary_b_chromaticity_y = 0;
-  float white_point_chromaticity_x = 0;
-  float white_point_chromaticity_y = 0;
+  using Chromaticity = gfx::PointF;
+  Chromaticity primary_r;
+  Chromaticity primary_g;
+  Chromaticity primary_b;
+  Chromaticity white_point;
   float luminance_max = 0;
   float luminance_min = 0;
 
@@ -26,14 +24,8 @@
   MasteringMetadata(const MasteringMetadata& rhs);
 
   bool operator==(const MasteringMetadata& rhs) const {
-    return ((primary_r_chromaticity_x == rhs.primary_r_chromaticity_x) &&
-            (primary_r_chromaticity_y == rhs.primary_r_chromaticity_y) &&
-            (primary_g_chromaticity_x == rhs.primary_g_chromaticity_x) &&
-            (primary_g_chromaticity_y == rhs.primary_g_chromaticity_y) &&
-            (primary_b_chromaticity_x == rhs.primary_b_chromaticity_x) &&
-            (primary_b_chromaticity_y == rhs.primary_b_chromaticity_y) &&
-            (white_point_chromaticity_x == rhs.white_point_chromaticity_x) &&
-            (white_point_chromaticity_y == rhs.white_point_chromaticity_y) &&
+    return ((primary_r == rhs.primary_r) && (primary_g == rhs.primary_g) &&
+            (primary_b == rhs.primary_b) && (white_point == rhs.white_point) &&
             (luminance_max == rhs.luminance_max) &&
             (luminance_min == rhs.luminance_min));
   }
@@ -42,15 +34,21 @@
 // HDR metadata common for HDR10 and WebM/VP9-based HDR formats.
 struct MEDIA_EXPORT HDRMetadata {
   MasteringMetadata mastering_metadata;
-  unsigned max_cll = 0;
-  unsigned max_fall = 0;
+  // Max content light level (CLL), i.e. maximum brightness level present in the
+  // stream), in nits.
+  unsigned max_content_light_level = 0;
+  // Max frame-average light level (FALL), i.e. maximum average brightness of
+  // the brightest frame in the stream), in nits.
+  unsigned max_frame_average_light_level = 0;
 
   HDRMetadata();
   HDRMetadata(const HDRMetadata& rhs);
 
   bool operator==(const HDRMetadata& rhs) const {
-    return ((max_cll == rhs.max_cll) && (max_fall == rhs.max_fall) &&
-            (mastering_metadata == rhs.mastering_metadata));
+    return (
+        (max_content_light_level == rhs.max_content_light_level) &&
+        (max_frame_average_light_level == rhs.max_frame_average_light_level) &&
+        (mastering_metadata == rhs.mastering_metadata));
   }
 };
 
diff --git a/media/base/key_systems.cc b/media/base/key_systems.cc
index 27bd0877..41f83b58 100644
--- a/media/base/key_systems.cc
+++ b/media/base/key_systems.cc
@@ -234,7 +234,6 @@
   typedef base::hash_map<std::string, SupportedCodecs> MimeTypeCodecsMap;
   typedef base::hash_map<std::string, EmeCodec> CodecsMap;
   typedef base::hash_map<std::string, EmeInitDataType> InitDataTypesMap;
-  typedef base::hash_map<std::string, std::string> KeySystemNameForUMAMap;
 
   // TODO(sandersd): Separate container enum from codec mask value.
   // http://crbug.com/417440
@@ -249,7 +248,6 @@
   // This member should only be modified by RegisterMimeType().
   MimeTypeCodecsMap mime_type_to_codec_mask_map_;
   CodecsMap codec_string_map_;
-  KeySystemNameForUMAMap key_system_name_for_uma_map_;
 
   SupportedCodecs audio_codec_mask_;
   SupportedCodecs video_codec_mask_;
@@ -281,8 +279,6 @@
                      kMimeTypeToCodecMasks[i].type);
   }
 
-  InitializeUMAInfo();
-
   // Always update supported key systems during construction.
   UpdateSupportedKeySystems();
 }
@@ -308,24 +304,6 @@
   return EME_CODEC_NONE;
 }
 
-void KeySystemsImpl::InitializeUMAInfo() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(key_system_name_for_uma_map_.empty());
-
-  std::vector<KeySystemInfoForUMA> key_systems_info_for_uma;
-  if (GetMediaClient())
-    GetMediaClient()->AddKeySystemsInfoForUMA(&key_systems_info_for_uma);
-
-  for (const KeySystemInfoForUMA& info : key_systems_info_for_uma) {
-    key_system_name_for_uma_map_[info.key_system] =
-        info.key_system_name_for_uma;
-  }
-
-  // Clear Key is always supported.
-  key_system_name_for_uma_map_[kClearKeyKeySystem] =
-      kClearKeyKeySystemNameForUMA;
-}
-
 void KeySystemsImpl::UpdateIfNeeded() {
   if (GetMediaClient() && GetMediaClient()->IsKeySystemsUpdateNeeded())
     UpdateSupportedKeySystems();
@@ -338,8 +316,11 @@
   std::vector<std::unique_ptr<KeySystemProperties>> key_systems_properties;
 
   // Add key systems supported by the MediaClient implementation.
-  if (GetMediaClient())
+  if (GetMediaClient()) {
     GetMediaClient()->AddSupportedKeySystems(&key_systems_properties);
+  } else {
+    DVLOG(1) << __func__ << " No media client to provide key systems";
+  }
 
   // Clear Key is always supported.
   key_systems_properties.emplace_back(new ClearKeyProperties());
@@ -443,6 +424,8 @@
     }
 #endif  // defined(OS_ANDROID)
 
+    DVLOG(1) << __func__
+             << " Adding key system:" << properties->GetKeySystemName();
     key_system_properties_map_[properties->GetKeySystemName()] =
         std::move(properties);
   }
@@ -494,12 +477,16 @@
     const std::string& key_system) const {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  KeySystemNameForUMAMap::const_iterator iter =
-      key_system_name_for_uma_map_.find(key_system);
-  if (iter == key_system_name_for_uma_map_.end())
-    return kUnknownKeySystemNameForUMA;
+  // Here we maintain a short list of known key systems to facilitate UMA
+  // reporting. Mentioned key systems are not necessarily supported by
+  // the current platform.
+  if (key_system == kWidevineKeySystem)
+    return kWidevineKeySystemNameForUMA;
 
-  return iter->second;
+  if (key_system == kClearKeyKeySystem)
+    return kClearKeyKeySystemNameForUMA;
+
+  return kUnknownKeySystemNameForUMA;
 }
 
 bool KeySystemsImpl::UseAesDecryptor(const std::string& key_system) const {
diff --git a/media/base/key_systems_unittest.cc b/media/base/key_systems_unittest.cc
index 62677fab..2d3d3ba6 100644
--- a/media/base/key_systems_unittest.cc
+++ b/media/base/key_systems_unittest.cc
@@ -19,6 +19,7 @@
 #include "media/base/media_client.h"
 #include "ppapi/features/features.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/widevine/cdm/widevine_cdm_common.h"
 
 namespace media {
 
@@ -26,9 +27,7 @@
 // kUsesAes uses the AesDecryptor like Clear Key.
 // kExternal uses an external CDM, such as Pepper-based or Android platform CDM.
 const char kUsesAes[] = "x-org.example.clear";
-const char kUseAesNameForUMA[] = "UseAes";
 const char kExternal[] = "x-com.example.test";
-const char kExternalNameForUMA[] = "External";
 
 const char kClearKey[] = "org.w3.clearkey";
 const char kExternalClearKey[] = "org.chromium.externalclearkey";
@@ -174,12 +173,9 @@
   ~TestMediaClient() override;
 
   // MediaClient implementation.
-  void AddKeySystemsInfoForUMA(
-      std::vector<KeySystemInfoForUMA>* key_systems_info_for_uma) final;
   bool IsKeySystemsUpdateNeeded() final;
   void AddSupportedKeySystems(std::vector<std::unique_ptr<KeySystemProperties>>*
                                   key_systems_properties) override;
-  void RecordRapporURL(const std::string& metric, const GURL& url) final;
   bool IsSupportedAudioConfig(const media::AudioConfig& config) final;
   bool IsSupportedVideoConfig(const media::VideoConfig& config) final;
 
@@ -203,14 +199,6 @@
 TestMediaClient::~TestMediaClient() {
 }
 
-void TestMediaClient::AddKeySystemsInfoForUMA(
-    std::vector<KeySystemInfoForUMA>* key_systems_info_for_uma) {
-  key_systems_info_for_uma->push_back(
-      media::KeySystemInfoForUMA(kUsesAes, kUseAesNameForUMA));
-  key_systems_info_for_uma->push_back(
-      media::KeySystemInfoForUMA(kExternal, kExternalNameForUMA));
-}
-
 bool TestMediaClient::IsKeySystemsUpdateNeeded() {
   return is_update_needed_;
 }
@@ -227,11 +215,6 @@
   is_update_needed_ = false;
 }
 
-void TestMediaClient::RecordRapporURL(const std::string& /* metric */,
-                                      const GURL& /* url */) {
-  NOTIMPLEMENTED();
-}
-
 bool TestMediaClient::IsSupportedAudioConfig(const media::AudioConfig& config) {
   return true;
 }
@@ -248,39 +231,6 @@
   supports_external_key_system_ = false;
 }
 
-class PotentiallySupportedNamesTestMediaClient : public TestMediaClient {
-  void AddSupportedKeySystems(std::vector<std::unique_ptr<KeySystemProperties>>*
-                                  key_systems_properties) final;
-};
-
-void PotentiallySupportedNamesTestMediaClient::AddSupportedKeySystems(
-    std::vector<std::unique_ptr<KeySystemProperties>>* key_systems) {
-  // org.w3.clearkey is automatically registered.
-  key_systems->emplace_back(new AesKeySystemProperties("com.widevine.alpha"));
-  key_systems->emplace_back(
-      new AesKeySystemProperties("org.chromium.externalclearkey"));
-  key_systems->emplace_back(
-      new AesKeySystemProperties("org.chromium.externalclearkey.something"));
-  key_systems->emplace_back(
-      new AesKeySystemProperties("com.chromecast.something"));
-  key_systems->emplace_back(new AesKeySystemProperties("x-something"));
-}
-
-class KeySystemsPotentiallySupportedNamesTest : public testing::Test {
- protected:
-  KeySystemsPotentiallySupportedNamesTest() {
-    SetMediaClient(&test_media_client_);
-  }
-
-  ~KeySystemsPotentiallySupportedNamesTest() override {
-    // Clear the use of |test_media_client_|, which was set in SetUp().
-    SetMediaClient(nullptr);
-  }
-
- private:
-  PotentiallySupportedNamesTestMediaClient test_media_client_;
-};
-
 class KeySystemsTest : public testing::Test {
  protected:
   KeySystemsTest() {
@@ -325,6 +275,8 @@
 
   ~KeySystemsTest() override {
     // Clear the use of |test_media_client_|, which was set in SetUp().
+    // NOTE: This does not clear any cached KeySystemProperties in the global
+    // KeySystems instance.
     SetMediaClient(nullptr);
   }
 
@@ -441,7 +393,7 @@
       kVideoWebM, no_codecs(), kUsesAes));
 
   // No UMA value for this test key system.
-  EXPECT_EQ("UseAes", GetKeySystemNameForUMA(kUsesAes));
+  EXPECT_EQ("Unknown", GetKeySystemNameForUMA(kUsesAes));
 
   EXPECT_TRUE(CanUseAesDecryptor(kUsesAes));
 #if BUILDFLAG(ENABLE_PEPPER_CDMS)
@@ -715,6 +667,8 @@
 
 TEST_F(KeySystemsTest, KeySystemNameForUMA) {
   EXPECT_EQ("ClearKey", GetKeySystemNameForUMA(kClearKey));
+  EXPECT_EQ("Widevine", GetKeySystemNameForUMA(kWidevineKeySystem));
+  EXPECT_EQ("Unknown", GetKeySystemNameForUMA("Foo"));
 
   // External Clear Key never has a UMA name.
   if (CanRunExternalKeySystemTests())
@@ -741,43 +695,4 @@
     EXPECT_FALSE(IsSupportedKeySystem(kExternal));
 }
 
-TEST_F(KeySystemsPotentiallySupportedNamesTest, PotentiallySupportedNames) {
-  EXPECT_FALSE(IsSupportedKeySystem("org.w3"));
-  EXPECT_FALSE(IsSupportedKeySystem("org.w3."));
-  EXPECT_FALSE(IsSupportedKeySystem("org.w3.clearke"));
-  EXPECT_TRUE(IsSupportedKeySystem("org.w3.clearkey"));
-  EXPECT_FALSE(IsSupportedKeySystem("org.w3.clearkeys"));
-
-  EXPECT_FALSE(IsSupportedKeySystem("com.widevine"));
-  EXPECT_FALSE(IsSupportedKeySystem("com.widevine."));
-  EXPECT_FALSE(IsSupportedKeySystem("com.widevine.alph"));
-  EXPECT_TRUE(IsSupportedKeySystem("com.widevine.alpha"));
-  EXPECT_FALSE(IsSupportedKeySystem("com.widevine.beta"));
-  EXPECT_FALSE(IsSupportedKeySystem("com.widevine.alphabeta"));
-  EXPECT_FALSE(IsSupportedKeySystem("com.widevine.alpha.beta"));
-
-  EXPECT_FALSE(IsSupportedKeySystem("org.chromium"));
-  EXPECT_FALSE(IsSupportedKeySystem("org.chromium."));
-  EXPECT_FALSE(IsSupportedKeySystem("org.chromium.externalclearke"));
-  EXPECT_TRUE(IsSupportedKeySystem("org.chromium.externalclearkey"));
-  EXPECT_FALSE(IsSupportedKeySystem("org.chromium.externalclearkeys"));
-  EXPECT_FALSE(IsSupportedKeySystem("org.chromium.externalclearkey."));
-  EXPECT_TRUE(IsSupportedKeySystem("org.chromium.externalclearkey.something"));
-  EXPECT_FALSE(
-      IsSupportedKeySystem("org.chromium.externalclearkey.something.else"));
-  EXPECT_FALSE(IsSupportedKeySystem("org.chromium.externalclearkey.other"));
-  EXPECT_FALSE(IsSupportedKeySystem("org.chromium.other"));
-
-  EXPECT_FALSE(IsSupportedKeySystem("com.chromecast"));
-  EXPECT_FALSE(IsSupportedKeySystem("com.chromecast."));
-  EXPECT_TRUE(IsSupportedKeySystem("com.chromecast.something"));
-  EXPECT_FALSE(IsSupportedKeySystem("com.chromecast.something.else"));
-  EXPECT_FALSE(IsSupportedKeySystem("com.chromecast.other"));
-
-  EXPECT_FALSE(IsSupportedKeySystem("x-"));
-  EXPECT_TRUE(IsSupportedKeySystem("x-something"));
-  EXPECT_FALSE(IsSupportedKeySystem("x-something.else"));
-  EXPECT_FALSE(IsSupportedKeySystem("x-other"));
-}
-
 }  // namespace media
diff --git a/media/base/media_client.cc b/media/base/media_client.cc
index e7026aadc..752dd5e0 100644
--- a/media/base/media_client.cc
+++ b/media/base/media_client.cc
@@ -18,15 +18,6 @@
   return g_media_client;
 }
 
-KeySystemInfoForUMA::KeySystemInfoForUMA(
-    const std::string& key_system,
-    const std::string& key_system_name_for_uma)
-    : key_system(key_system),
-      key_system_name_for_uma(key_system_name_for_uma) {}
-
-KeySystemInfoForUMA::~KeySystemInfoForUMA() {
-}
-
 MediaClient::MediaClient() {
 }
 
diff --git a/media/base/media_client.h b/media/base/media_client.h
index 3b0a35e..0ebafd3 100644
--- a/media/base/media_client.h
+++ b/media/base/media_client.h
@@ -5,6 +5,7 @@
 #ifndef MEDIA_BASE_MEDIA_CLIENT_H_
 #define MEDIA_BASE_MEDIA_CLIENT_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -30,50 +31,26 @@
 MEDIA_EXPORT MediaClient* GetMediaClient();
 #endif
 
-struct MEDIA_EXPORT KeySystemInfoForUMA {
-  KeySystemInfoForUMA(const std::string& key_system,
-                      const std::string& key_system_name_for_uma);
-  ~KeySystemInfoForUMA();
-
-  // Concrete key system name;
-  std::string key_system;
-
-  // Display name for UMA reporting. For example, the display name for
-  // "org.w3.clearkey" is "ClearKey". When providing this value, make sure to
-  // update tools/metrics/histograms/histograms.xml.
-  std::string key_system_name_for_uma;
-};
-
 // A client interface for embedders (e.g. content/renderer) to provide
-// customized service.
+// customized key systems and decoders.
 class MEDIA_EXPORT MediaClient {
  public:
   MediaClient();
   virtual ~MediaClient();
 
-  // Provides UMA info for key systems that SHOULD be reported to UMA, no matter
-  // whether a key system is actually supported by this client or not. Only
-  // called once per instance.
-  virtual void AddKeySystemsInfoForUMA(
-      std::vector<KeySystemInfoForUMA>* key_systems_info_for_uma) = 0;
-
-  // Returns whether client key systems properties should be updated.
-  virtual bool IsKeySystemsUpdateNeeded() = 0;
-
   // Adds properties for supported key systems.
   virtual void AddSupportedKeySystems(
-      std::vector<std::unique_ptr<KeySystemProperties>>*
-          key_systems_properties) = 0;
+      std::vector<std::unique_ptr<KeySystemProperties>>* key_systems) = 0;
 
-  // Records a domain and registry of a url to a Rappor privacy-preserving
-  // metric. See: https://www.chromium.org/developers/design-documents/rappor
-  virtual void RecordRapporURL(const std::string& metric, const GURL& url) = 0;
+  // Returns whether client key systems properties should be updated.
+  // TODO(chcunningham): Refactor this to a proper change "observer" API that is
+  // less fragile (don't assume AddSupportedKeySystems has just one caller).
+  virtual bool IsKeySystemsUpdateNeeded() = 0;
 
   // Returns true if the given audio config is supported.
   virtual bool IsSupportedAudioConfig(const AudioConfig& config) = 0;
 
-  // Returns true if the given combination of video codec, profile and level is
-  // supported. The |level| value is codec-specific.
+  // Returns true if the given video config is supported.
   virtual bool IsSupportedVideoConfig(const VideoConfig& config) = 0;
 };
 
diff --git a/media/base/media_log.h b/media/base/media_log.h
index 2f73e98..cb0a6b62 100644
--- a/media/base/media_log.h
+++ b/media/base/media_log.h
@@ -21,6 +21,7 @@
 #include "media/base/media_log_event.h"
 #include "media/base/pipeline_impl.h"
 #include "media/base/pipeline_status.h"
+#include "url/gurl.h"
 
 namespace media {
 
diff --git a/media/blink/webencryptedmediaclient_impl.cc b/media/blink/webencryptedmediaclient_impl.cc
index 9dd3c26..97d6d05 100644
--- a/media/blink/webencryptedmediaclient_impl.cc
+++ b/media/blink/webencryptedmediaclient_impl.cc
@@ -12,7 +12,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "media/base/key_systems.h"
-#include "media/base/media_client.h"
+#include "media/base/media_log.h"
 #include "media/base/media_permission.h"
 #include "media/blink/webcontentdecryptionmodule_impl.h"
 #include "media/blink/webcontentdecryptionmoduleaccess_impl.h"
@@ -88,10 +88,12 @@
 WebEncryptedMediaClientImpl::WebEncryptedMediaClientImpl(
     base::Callback<bool(void)> are_secure_codecs_supported_cb,
     CdmFactory* cdm_factory,
-    MediaPermission* media_permission)
+    MediaPermission* media_permission,
+    const scoped_refptr<MediaLog>& media_log)
     : are_secure_codecs_supported_cb_(are_secure_codecs_supported_cb),
       cdm_factory_(cdm_factory),
       key_system_config_selector_(KeySystems::GetInstance(), media_permission),
+      media_log_(media_log),
       weak_factory_(this) {
   DCHECK(cdm_factory_);
 }
@@ -103,15 +105,9 @@
     blink::WebEncryptedMediaRequest request) {
   GetReporter(request.keySystem())->ReportRequested();
 
-  if (GetMediaClient()) {
-    GURL security_origin(url::Origin(request.getSecurityOrigin()).GetURL());
-
-    GetMediaClient()->RecordRapporURL("Media.OriginUrl.EME", security_origin);
-
-    if (!request.getSecurityOrigin().isPotentiallyTrustworthy()) {
-      GetMediaClient()->RecordRapporURL("Media.OriginUrl.EME.Insecure",
-                                        security_origin);
-    }
+  media_log_->RecordRapporWithSecurityOrigin("Media.OriginUrl.EME");
+  if (!request.getSecurityOrigin().isPotentiallyTrustworthy()) {
+    media_log_->RecordRapporWithSecurityOrigin("Media.OriginUrl.EME.Insecure");
   }
 
   key_system_config_selector_.SelectConfig(
diff --git a/media/blink/webencryptedmediaclient_impl.h b/media/blink/webencryptedmediaclient_impl.h
index 3bb9105..a0efd2a 100644
--- a/media/blink/webencryptedmediaclient_impl.h
+++ b/media/blink/webencryptedmediaclient_impl.h
@@ -10,6 +10,7 @@
 #include <unordered_map>
 
 #include "base/callback.h"
+#include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "media/blink/key_system_config_selector.h"
 #include "media/blink/media_blink_export.h"
@@ -27,6 +28,7 @@
 
 struct CdmConfig;
 class CdmFactory;
+class MediaLog;
 class MediaPermission;
 
 class MEDIA_BLINK_EXPORT WebEncryptedMediaClientImpl
@@ -35,7 +37,8 @@
   WebEncryptedMediaClientImpl(
       base::Callback<bool(void)> are_secure_codecs_supported_cb,
       CdmFactory* cdm_factory,
-      MediaPermission* media_permission);
+      MediaPermission* media_permission,
+      const scoped_refptr<MediaLog>& media_log);
   ~WebEncryptedMediaClientImpl() override;
 
   // WebEncryptedMediaClient implementation.
@@ -78,6 +81,7 @@
   base::Callback<bool(void)> are_secure_codecs_supported_cb_;
   CdmFactory* cdm_factory_;
   KeySystemConfigSelector key_system_config_selector_;
+  scoped_refptr<MediaLog> media_log_;
   base::WeakPtrFactory<WebEncryptedMediaClientImpl> weak_factory_;
 };
 
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 97c5b7f..74acaa40 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -394,7 +394,7 @@
   DCHECK(main_task_runner_->BelongsToCurrentThread());
 
   GURL gurl(url);
-  ReportMetrics(load_type, gurl, frame_->getSecurityOrigin());
+  ReportMetrics(load_type, gurl, frame_->getSecurityOrigin(), media_log_);
 
   // Set subresource URL for crash reporting.
   base::debug::SetCrashKeyValue("subresource_url", gurl.spec());
@@ -1207,7 +1207,7 @@
   if (suppress_destruction_errors_)
     return;
 
-  ReportPipelineError(load_type_, frame_->getSecurityOrigin(), status);
+  ReportPipelineError(load_type_, status, media_log_);
   media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(status));
 
   if (ready_state_ == WebMediaPlayer::ReadyStateHaveNothing) {
diff --git a/media/blink/webmediaplayer_util.cc b/media/blink/webmediaplayer_util.cc
index e4a5d34..c1a8fb0 100644
--- a/media/blink/webmediaplayer_util.cc
+++ b/media/blink/webmediaplayer_util.cc
@@ -11,7 +11,7 @@
 
 #include "base/metrics/histogram_macros.h"
 #include "media/base/bind_to_current_loop.h"
-#include "media/base/media_client.h"
+#include "media/base/media_log.h"
 #include "third_party/WebKit/public/platform/URLConversion.h"
 #include "third_party/WebKit/public/platform/WebMediaPlayerEncryptedMediaClient.h"
 
@@ -109,7 +109,10 @@
 
 void ReportMetrics(blink::WebMediaPlayer::LoadType load_type,
                    const GURL& url,
-                   const blink::WebSecurityOrigin& security_origin) {
+                   const blink::WebSecurityOrigin& security_origin,
+                   scoped_refptr<MediaLog> media_log) {
+  DCHECK(media_log);
+
   // Report URL scheme, such as http, https, file, blob etc.
   UMA_HISTOGRAM_ENUMERATION("Media.URLScheme", URLScheme(url),
                             kMaxURLScheme + 1);
@@ -119,42 +122,27 @@
                             blink::WebMediaPlayer::LoadTypeMax + 1);
 
   // Report the origin from where the media player is created.
-  if (GetMediaClient()) {
-    GURL security_origin_url(url::Origin(security_origin).GetURL());
+  media_log->RecordRapporWithSecurityOrigin("Media.OriginUrl." +
+                                            LoadTypeToString(load_type));
 
-    GetMediaClient()->RecordRapporURL(
-        "Media.OriginUrl." + LoadTypeToString(load_type), security_origin_url);
-
-    // For MSE, also report usage by secure/insecure origin.
-    if (load_type == blink::WebMediaPlayer::LoadTypeMediaSource) {
-      if (security_origin.isPotentiallyTrustworthy()) {
-        GetMediaClient()->RecordRapporURL("Media.OriginUrl.MSE.Secure",
-                                          security_origin_url);
-      } else {
-        GetMediaClient()->RecordRapporURL("Media.OriginUrl.MSE.Insecure",
-                                          security_origin_url);
-      }
+  // For MSE, also report usage by secure/insecure origin.
+  if (load_type == blink::WebMediaPlayer::LoadTypeMediaSource) {
+    if (security_origin.isPotentiallyTrustworthy()) {
+      media_log->RecordRapporWithSecurityOrigin("Media.OriginUrl.MSE.Secure");
+    } else {
+      media_log->RecordRapporWithSecurityOrigin("Media.OriginUrl.MSE.Insecure");
     }
   }
 }
 
 void ReportPipelineError(blink::WebMediaPlayer::LoadType load_type,
-                         const blink::WebSecurityOrigin& security_origin,
-                         PipelineStatus error) {
+                         PipelineStatus error,
+                         scoped_refptr<MediaLog> media_log) {
   DCHECK_NE(PIPELINE_OK, error);
 
   // Report the origin from where the media player is created.
-  if (!GetMediaClient())
-    return;
-
-  GetMediaClient()->RecordRapporURL(
-      "Media.OriginUrl." + LoadTypeToString(load_type) + ".PipelineError",
-      url::Origin(security_origin).GetURL());
-}
-
-void RecordOriginOfHLSPlayback(const GURL& origin_url) {
-  if (media::GetMediaClient())
-    GetMediaClient()->RecordRapporURL("Media.OriginUrl.HLS", origin_url);
+  media_log->RecordRapporWithSecurityOrigin(
+      "Media.OriginUrl." + LoadTypeToString(load_type) + ".PipelineError");
 }
 
 EmeInitDataType ConvertToEmeInitDataType(
diff --git a/media/blink/webmediaplayer_util.h b/media/blink/webmediaplayer_util.h
index 1ae2a93..0428030d 100644
--- a/media/blink/webmediaplayer_util.h
+++ b/media/blink/webmediaplayer_util.h
@@ -5,6 +5,7 @@
 #ifndef MEDIA_BLINK_WEBMEDIAPLAYER_UTIL_H_
 #define MEDIA_BLINK_WEBMEDIAPLAYER_UTIL_H_
 
+#include "base/memory/ref_counted.h"
 #include "base/time/time.h"
 #include "media/base/audio_renderer_sink.h"
 #include "media/base/eme_constants.h"
@@ -20,6 +21,8 @@
 
 namespace media {
 
+class MediaLog;
+
 blink::WebTimeRanges MEDIA_BLINK_EXPORT
 ConvertToWebTimeRanges(const Ranges<base::TimeDelta>& ranges);
 
@@ -30,16 +33,14 @@
 void MEDIA_BLINK_EXPORT
 ReportMetrics(blink::WebMediaPlayer::LoadType load_type,
               const GURL& url,
-              const blink::WebSecurityOrigin& security_origin);
+              const blink::WebSecurityOrigin& security_origin,
+              scoped_refptr<MediaLog> media_log);
 
 // Report metrics about pipeline errors.
 void MEDIA_BLINK_EXPORT
 ReportPipelineError(blink::WebMediaPlayer::LoadType load_type,
-                    const blink::WebSecurityOrigin& security_origin,
-                    PipelineStatus error);
-
-// Record a RAPPOR metric for the origin of an HLS playback.
-void MEDIA_BLINK_EXPORT RecordOriginOfHLSPlayback(const GURL& origin_url);
+                    PipelineStatus error,
+                    scoped_refptr<MediaLog> media_log);
 
 // TODO(ddorwin): Move this function to an EME-specific file.
 // We may also want to move the next one and pass Blink types to WMPI.
diff --git a/media/capture/BUILD.gn b/media/capture/BUILD.gn
index 43feb7b..66ab197 100644
--- a/media/capture/BUILD.gn
+++ b/media/capture/BUILD.gn
@@ -90,7 +90,12 @@
     "video/video_capture_device_descriptor.h",
     "video/video_capture_device_factory.cc",
     "video/video_capture_device_factory.h",
+    "video/video_capture_device_info.cc",
+    "video/video_capture_device_info.h",
     "video/video_capture_jpeg_decoder.h",
+    "video/video_capture_system.h",
+    "video/video_capture_system_impl.cc",
+    "video/video_capture_system_impl.h",
     "video/video_frame_receiver.h",
     "video/video_frame_receiver_on_task_runner.cc",
     "video/video_frame_receiver_on_task_runner.h",
diff --git a/media/capture/video/video_capture_device_factory.h b/media/capture/video/video_capture_device_factory.h
index 49d9519f..f0b9b09 100644
--- a/media/capture/video/video_capture_device_factory.h
+++ b/media/capture/video/video_capture_device_factory.h
@@ -36,6 +36,8 @@
       const VideoCaptureDeviceDescriptor& device_descriptor) = 0;
 
   // Asynchronous version of GetDeviceDescriptors calling back to |callback|.
+  // TODO(chfremer): Consider removing this if none of the implementations
+  // overrides it. See crbug.com/708233.
   virtual void EnumerateDeviceDescriptors(
       const base::Callback<
           void(std::unique_ptr<VideoCaptureDeviceDescriptors>)>& callback);
diff --git a/media/capture/video/video_capture_device_info.cc b/media/capture/video/video_capture_device_info.cc
new file mode 100644
index 0000000..50f999b
--- /dev/null
+++ b/media/capture/video/video_capture_device_info.cc
@@ -0,0 +1,23 @@
+// 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 "media/capture/video/video_capture_device_info.h"
+
+namespace media {
+
+VideoCaptureDeviceInfo::VideoCaptureDeviceInfo() = default;
+
+VideoCaptureDeviceInfo::VideoCaptureDeviceInfo(
+    media::VideoCaptureDeviceDescriptor descriptor)
+    : descriptor(descriptor) {}
+
+VideoCaptureDeviceInfo::VideoCaptureDeviceInfo(
+    const VideoCaptureDeviceInfo& other) = default;
+
+VideoCaptureDeviceInfo::~VideoCaptureDeviceInfo() = default;
+
+VideoCaptureDeviceInfo& VideoCaptureDeviceInfo::operator=(
+    const VideoCaptureDeviceInfo& other) = default;
+
+}  // namespace media
diff --git a/media/capture/video/video_capture_device_info.h b/media/capture/video/video_capture_device_info.h
new file mode 100644
index 0000000..32f61c6
--- /dev/null
+++ b/media/capture/video/video_capture_device_info.h
@@ -0,0 +1,28 @@
+// 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.
+
+#ifndef MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_DEVICE_INFO_H_
+#define MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_DEVICE_INFO_H_
+
+#include "media/capture/video/video_capture_device_descriptor.h"
+#include "media/capture/video_capture_types.h"
+
+namespace media {
+
+// Bundles a media::VideoCaptureDeviceDescriptor with corresponding supported
+// video formats.
+struct CAPTURE_EXPORT VideoCaptureDeviceInfo {
+  VideoCaptureDeviceInfo();
+  VideoCaptureDeviceInfo(media::VideoCaptureDeviceDescriptor descriptor);
+  VideoCaptureDeviceInfo(const VideoCaptureDeviceInfo& other);
+  ~VideoCaptureDeviceInfo();
+  VideoCaptureDeviceInfo& operator=(const VideoCaptureDeviceInfo& other);
+
+  media::VideoCaptureDeviceDescriptor descriptor;
+  media::VideoCaptureFormats supported_formats;
+};
+
+}  // namespace media
+
+#endif  // MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_DEVICE_INFO_H_
diff --git a/media/capture/video/video_capture_system.h b/media/capture/video/video_capture_system.h
new file mode 100644
index 0000000..b0b6313
--- /dev/null
+++ b/media/capture/video/video_capture_system.h
@@ -0,0 +1,34 @@
+// 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.
+
+#ifndef MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_SYSTEM_H_
+#define MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_SYSTEM_H_
+
+#include "media/capture/video/video_capture_device_factory.h"
+#include "media/capture/video/video_capture_device_info.h"
+
+namespace media {
+
+class CAPTURE_EXPORT VideoCaptureSystem {
+ public:
+  using DeviceInfoCallback =
+      base::Callback<void(const std::vector<VideoCaptureDeviceInfo>&)>;
+
+  virtual ~VideoCaptureSystem() {}
+
+  // The passed-in |result_callback| must have ownership of the called
+  // VideoCaptureSystem instance to guarantee that it stays alive during the
+  // asynchronous operation.
+  virtual void GetDeviceInfosAsync(
+      const DeviceInfoCallback& result_callback) = 0;
+
+  // Creates a VideoCaptureDevice object. Returns nullptr if something goes
+  // wrong.
+  virtual std::unique_ptr<VideoCaptureDevice> CreateDevice(
+      const std::string& device_id) = 0;
+};
+
+}  // namespace media
+
+#endif  // MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_SYSTEM_H_
diff --git a/media/capture/video/video_capture_system_impl.cc b/media/capture/video/video_capture_system_impl.cc
new file mode 100644
index 0000000..a100468e
--- /dev/null
+++ b/media/capture/video/video_capture_system_impl.cc
@@ -0,0 +1,126 @@
+// 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 "media/capture/video/video_capture_system_impl.h"
+
+#include "media/base/bind_to_current_loop.h"
+
+namespace {
+
+// Compares two VideoCaptureFormat by checking smallest frame_size area, then
+// by _largest_ frame_rate. Used to order a VideoCaptureFormats vector so that
+// the first entry for a given resolution has the largest frame rate, as needed
+// by the ConsolidateCaptureFormats() method.
+bool IsCaptureFormatSmaller(const media::VideoCaptureFormat& format1,
+                            const media::VideoCaptureFormat& format2) {
+  DCHECK(format1.frame_size.GetCheckedArea().IsValid());
+  DCHECK(format2.frame_size.GetCheckedArea().IsValid());
+  if (format1.frame_size.GetCheckedArea().ValueOrDefault(0) ==
+      format2.frame_size.GetCheckedArea().ValueOrDefault(0)) {
+    return format1.frame_rate > format2.frame_rate;
+  }
+  return format1.frame_size.GetCheckedArea().ValueOrDefault(0) <
+         format2.frame_size.GetCheckedArea().ValueOrDefault(0);
+}
+
+bool IsCaptureFormatSizeEqual(const media::VideoCaptureFormat& format1,
+                              const media::VideoCaptureFormat& format2) {
+  DCHECK(format1.frame_size.GetCheckedArea().IsValid());
+  DCHECK(format2.frame_size.GetCheckedArea().IsValid());
+  return format1.frame_size.GetCheckedArea().ValueOrDefault(0) ==
+         format2.frame_size.GetCheckedArea().ValueOrDefault(0);
+}
+
+// This function receives a list of capture formats, removes duplicated
+// resolutions while keeping the highest frame rate for each, and forcing I420
+// pixel format.
+void ConsolidateCaptureFormats(media::VideoCaptureFormats* formats) {
+  if (formats->empty())
+    return;
+  std::sort(formats->begin(), formats->end(), IsCaptureFormatSmaller);
+  // Due to the ordering imposed, the largest frame_rate is kept while removing
+  // duplicated resolutions.
+  media::VideoCaptureFormats::iterator last =
+      std::unique(formats->begin(), formats->end(), IsCaptureFormatSizeEqual);
+  formats->erase(last, formats->end());
+  // Mark all formats as I420, since this is what the renderer side will get
+  // anyhow: the actual pixel format is decided at the device level.
+  // Don't do this for Y16 format as it is handled separatelly.
+  for (auto& format : *formats) {
+    if (format.pixel_format != media::PIXEL_FORMAT_Y16)
+      format.pixel_format = media::PIXEL_FORMAT_I420;
+  }
+}
+
+}  // anonymous namespace
+
+namespace media {
+
+VideoCaptureSystemImpl::VideoCaptureSystemImpl(
+    std::unique_ptr<VideoCaptureDeviceFactory> factory)
+    : factory_(std::move(factory)) {
+  thread_checker_.DetachFromThread();
+}
+
+VideoCaptureSystemImpl::~VideoCaptureSystemImpl() = default;
+
+void VideoCaptureSystemImpl::GetDeviceInfosAsync(
+    const DeviceInfoCallback& result_callback) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  // Use of Unretained() is safe assuming that |result_callback| has ownership
+  // of |this|.
+  factory_->EnumerateDeviceDescriptors(media::BindToCurrentLoop(
+      base::Bind(&VideoCaptureSystemImpl::OnDescriptorsReceived,
+                 base::Unretained(this), result_callback)));
+}
+
+// Creates a VideoCaptureDevice object. Returns NULL if something goes wrong.
+std::unique_ptr<VideoCaptureDevice> VideoCaptureSystemImpl::CreateDevice(
+    const std::string& device_id) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  const VideoCaptureDeviceInfo* device_info = LookupDeviceInfoFromId(device_id);
+  if (!device_info)
+    return nullptr;
+  return factory_->CreateDevice(device_info->descriptor);
+}
+
+void VideoCaptureSystemImpl::OnDescriptorsReceived(
+    const DeviceInfoCallback& result_callback,
+    std::unique_ptr<VideoCaptureDeviceDescriptors> descriptors) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  // For devices for which we already have an entry in |devices_info_cache_|,
+  // we do not want to query the |factory_| for supported formats again. We
+  // simply copy them from |devices_info_cache_|.
+  std::vector<VideoCaptureDeviceInfo> new_devices_info_cache;
+  new_devices_info_cache.reserve(descriptors->size());
+  for (const auto& descriptor : *descriptors) {
+    if (auto* cached_info = LookupDeviceInfoFromId(descriptor.device_id)) {
+      new_devices_info_cache.push_back(*cached_info);
+    } else {
+      // Query for supported formats in order to create the entry.
+      VideoCaptureDeviceInfo device_info(descriptor);
+      factory_->GetSupportedFormats(descriptor, &device_info.supported_formats);
+      ConsolidateCaptureFormats(&device_info.supported_formats);
+      new_devices_info_cache.push_back(device_info);
+    }
+  }
+
+  devices_info_cache_.swap(new_devices_info_cache);
+  result_callback.Run(devices_info_cache_);
+}
+
+const VideoCaptureDeviceInfo* VideoCaptureSystemImpl::LookupDeviceInfoFromId(
+    const std::string& device_id) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  auto iter = std::find_if(
+      devices_info_cache_.begin(), devices_info_cache_.end(),
+      [&device_id](const media::VideoCaptureDeviceInfo& device_info) {
+        return device_info.descriptor.device_id == device_id;
+      });
+  if (iter == devices_info_cache_.end())
+    return nullptr;
+  return &(*iter);
+}
+
+}  // namespace media
diff --git a/media/capture/video/video_capture_system_impl.h b/media/capture/video/video_capture_system_impl.h
new file mode 100644
index 0000000..97cfc69
--- /dev/null
+++ b/media/capture/video/video_capture_system_impl.h
@@ -0,0 +1,42 @@
+// 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.
+
+#ifndef MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_SYSTEM_IMPL_H_
+#define MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_SYSTEM_IMPL_H_
+
+#include "media/capture/video/video_capture_system.h"
+
+namespace media {
+
+// Layer on top of VideoCaptureDeviceFactory that translates device descriptors
+// to string identifiers and consolidates and caches device descriptors and
+// supported formats into VideoCaptureDeviceInfos.
+class CAPTURE_EXPORT VideoCaptureSystemImpl : public VideoCaptureSystem {
+ public:
+  explicit VideoCaptureSystemImpl(
+      std::unique_ptr<VideoCaptureDeviceFactory> factory);
+  ~VideoCaptureSystemImpl() override;
+
+  void GetDeviceInfosAsync(const DeviceInfoCallback& result_callback) override;
+  std::unique_ptr<VideoCaptureDevice> CreateDevice(
+      const std::string& device_id) override;
+
+ private:
+  void OnDescriptorsReceived(
+      const DeviceInfoCallback& result_callback,
+      std::unique_ptr<VideoCaptureDeviceDescriptors> descriptors);
+
+  // Returns nullptr if no descriptor found.
+  const VideoCaptureDeviceInfo* LookupDeviceInfoFromId(
+      const std::string& device_id);
+
+  const std::unique_ptr<VideoCaptureDeviceFactory> factory_;
+  std::vector<VideoCaptureDeviceInfo> devices_info_cache_;
+
+  base::ThreadChecker thread_checker_;
+};
+
+}  // namespace media
+
+#endif  // MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_SYSTEM_IMPL_H_
diff --git a/media/formats/webm/webm_colour_parser.cc b/media/formats/webm/webm_colour_parser.cc
index 7e3c217..e2f108c 100644
--- a/media/formats/webm/webm_colour_parser.cc
+++ b/media/formats/webm/webm_colour_parser.cc
@@ -263,28 +263,28 @@
 bool WebMMasteringMetadataParser::OnFloat(int id, double val) {
   switch (id) {
     case kWebMIdPrimaryRChromaticityX:
-      mastering_metadata_.primary_r_chromaticity_x = val;
+      mastering_metadata_.primary_r.set_x(val);
       break;
     case kWebMIdPrimaryRChromaticityY:
-      mastering_metadata_.primary_r_chromaticity_y = val;
+      mastering_metadata_.primary_r.set_y(val);
       break;
     case kWebMIdPrimaryGChromaticityX:
-      mastering_metadata_.primary_g_chromaticity_x = val;
+      mastering_metadata_.primary_g.set_x(val);
       break;
     case kWebMIdPrimaryGChromaticityY:
-      mastering_metadata_.primary_g_chromaticity_y = val;
+      mastering_metadata_.primary_g.set_y(val);
       break;
     case kWebMIdPrimaryBChromaticityX:
-      mastering_metadata_.primary_b_chromaticity_x = val;
+      mastering_metadata_.primary_b.set_x(val);
       break;
     case kWebMIdPrimaryBChromaticityY:
-      mastering_metadata_.primary_b_chromaticity_y = val;
+      mastering_metadata_.primary_b.set_y(val);
       break;
     case kWebMIdWhitePointChromaticityX:
-      mastering_metadata_.white_point_chromaticity_x = val;
+      mastering_metadata_.white_point.set_x(val);
       break;
     case kWebMIdWhitePointChromaticityY:
-      mastering_metadata_.white_point_chromaticity_y = val;
+      mastering_metadata_.white_point.set_y(val);
       break;
     case kWebMIdLuminanceMax:
       mastering_metadata_.luminance_max = val;
@@ -317,8 +317,8 @@
   range_ = -1;
   transfer_characteristics_ = -1;
   primaries_ = -1;
-  max_cll_ = -1;
-  max_fall_ = -1;
+  max_content_light_level_ = -1;
+  max_frame_average_light_level_ = -1;
 }
 
 WebMParserClient* WebMColourParser::OnListStart(int id) {
@@ -374,10 +374,10 @@
       dst = &primaries_;
       break;
     case kWebMIdMaxCLL:
-      dst = &max_cll_;
+      dst = &max_content_light_level_;
       break;
     case kWebMIdMaxFALL:
-      dst = &max_fall_;
+      dst = &max_frame_average_light_level_;
       break;
     default:
       return true;
@@ -431,11 +431,13 @@
   color_metadata.color_space = VideoColorSpace(
       primaries_, transfer_characteristics_, matrix_coefficients_, range_id);
 
-  if (max_cll_ != -1)
-    color_metadata.hdr_metadata.max_cll = max_cll_;
+  if (max_content_light_level_ != -1)
+    color_metadata.hdr_metadata.max_content_light_level =
+        max_content_light_level_;
 
-  if (max_fall_ != -1)
-    color_metadata.hdr_metadata.max_fall = max_fall_;
+  if (max_frame_average_light_level_ != -1)
+    color_metadata.hdr_metadata.max_frame_average_light_level =
+        max_frame_average_light_level_;
 
   if (mastering_metadata_parsed_)
     color_metadata.hdr_metadata.mastering_metadata =
diff --git a/media/formats/webm/webm_colour_parser.h b/media/formats/webm/webm_colour_parser.h
index 8304e65f..636bdc9 100644
--- a/media/formats/webm/webm_colour_parser.h
+++ b/media/formats/webm/webm_colour_parser.h
@@ -76,8 +76,8 @@
   int64_t range_;
   int64_t transfer_characteristics_;
   int64_t primaries_;
-  int64_t max_cll_;
-  int64_t max_fall_;
+  int64_t max_content_light_level_;
+  int64_t max_frame_average_light_level_;
 
   WebMMasteringMetadataParser mastering_metadata_parser_;
   bool mastering_metadata_parsed_ = false;
diff --git a/media/formats/webm/webm_stream_parser_unittest.cc b/media/formats/webm/webm_stream_parser_unittest.cc
index d7ef3b7..1251f2d8 100644
--- a/media/formats/webm/webm_stream_parser_unittest.cc
+++ b/media/formats/webm/webm_stream_parser_unittest.cc
@@ -177,18 +177,18 @@
 
   base::Optional<HDRMetadata> hdr_metadata = video_config.hdr_metadata();
   EXPECT_TRUE(hdr_metadata.has_value());
-  EXPECT_EQ(hdr_metadata->max_cll, 11u);
-  EXPECT_EQ(hdr_metadata->max_fall, 12u);
+  EXPECT_EQ(hdr_metadata->max_content_light_level, 11u);
+  EXPECT_EQ(hdr_metadata->max_frame_average_light_level, 12u);
 
   const MasteringMetadata& mmdata = hdr_metadata->mastering_metadata;
-  EXPECT_FLOAT_EQ(mmdata.primary_r_chromaticity_x, 0.1f);
-  EXPECT_FLOAT_EQ(mmdata.primary_r_chromaticity_y, 0.2f);
-  EXPECT_FLOAT_EQ(mmdata.primary_g_chromaticity_x, 0.1f);
-  EXPECT_FLOAT_EQ(mmdata.primary_g_chromaticity_y, 0.2f);
-  EXPECT_FLOAT_EQ(mmdata.primary_b_chromaticity_x, 0.1f);
-  EXPECT_FLOAT_EQ(mmdata.primary_b_chromaticity_y, 0.2f);
-  EXPECT_FLOAT_EQ(mmdata.white_point_chromaticity_x, 0.1f);
-  EXPECT_FLOAT_EQ(mmdata.white_point_chromaticity_y, 0.2f);
+  EXPECT_FLOAT_EQ(mmdata.primary_r.x(), 0.1f);
+  EXPECT_FLOAT_EQ(mmdata.primary_r.y(), 0.2f);
+  EXPECT_FLOAT_EQ(mmdata.primary_g.x(), 0.1f);
+  EXPECT_FLOAT_EQ(mmdata.primary_g.y(), 0.2f);
+  EXPECT_FLOAT_EQ(mmdata.primary_b.x(), 0.1f);
+  EXPECT_FLOAT_EQ(mmdata.primary_b.y(), 0.2f);
+  EXPECT_FLOAT_EQ(mmdata.white_point.x(), 0.1f);
+  EXPECT_FLOAT_EQ(mmdata.white_point.y(), 0.2f);
   EXPECT_EQ(mmdata.luminance_max, 40);
   EXPECT_EQ(mmdata.luminance_min, 30);
 }
diff --git a/media/mojo/common/media_type_converters.cc b/media/mojo/common/media_type_converters.cc
index 61b8922..50dd25f 100644
--- a/media/mojo/common/media_type_converters.cc
+++ b/media/mojo/common/media_type_converters.cc
@@ -219,6 +219,8 @@
   config->encryption_scheme =
       media::mojom::EncryptionScheme::From(input.encryption_scheme());
   config->color_space_info = input.color_space_info();
+  if (input.hdr_metadata())
+    config->hdr_metadata = *input.hdr_metadata();
   return config;
 }
 
@@ -232,6 +234,8 @@
                     input->natural_size, input->extra_data,
                     input->encryption_scheme.To<media::EncryptionScheme>());
   config.set_color_space_info(input->color_space_info);
+  if (input->hdr_metadata)
+    config.set_hdr_metadata(*input->hdr_metadata);
   return config;
 }
 
diff --git a/media/mojo/common/media_type_converters_unittest.cc b/media/mojo/common/media_type_converters_unittest.cc
index f9e0fac..54aa3717 100644
--- a/media/mojo/common/media_type_converters_unittest.cc
+++ b/media/mojo/common/media_type_converters_unittest.cc
@@ -360,6 +360,29 @@
   EXPECT_TRUE(result.Matches(config));
 }
 
+TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_HDRMetadata) {
+  VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12,
+                            COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect,
+                            kNaturalSize, EmptyExtraData(), Unencrypted());
+  HDRMetadata hdr_metadata;
+  hdr_metadata.max_frame_average_light_level = 123;
+  hdr_metadata.max_content_light_level = 456;
+  hdr_metadata.mastering_metadata.primary_r.set_x(0.1f);
+  hdr_metadata.mastering_metadata.primary_r.set_y(0.2f);
+  hdr_metadata.mastering_metadata.primary_g.set_x(0.3f);
+  hdr_metadata.mastering_metadata.primary_g.set_y(0.4f);
+  hdr_metadata.mastering_metadata.primary_b.set_x(0.5f);
+  hdr_metadata.mastering_metadata.primary_b.set_y(0.6f);
+  hdr_metadata.mastering_metadata.white_point.set_x(0.7f);
+  hdr_metadata.mastering_metadata.white_point.set_y(0.8f);
+  hdr_metadata.mastering_metadata.luminance_max = 1000;
+  hdr_metadata.mastering_metadata.luminance_min = 0;
+  config.set_hdr_metadata(hdr_metadata);
+  mojom::VideoDecoderConfigPtr ptr(mojom::VideoDecoderConfig::From(config));
+  VideoDecoderConfig result(ptr.To<VideoDecoderConfig>());
+  EXPECT_TRUE(result.Matches(config));
+}
+
 TEST(MediaTypeConvertersTest, ConvertCdmConfig) {
   CdmConfig config;
   config.allow_distinctive_identifier = true;
diff --git a/media/mojo/interfaces/hdr_metadata.typemap b/media/mojo/interfaces/hdr_metadata.typemap
new file mode 100644
index 0000000..6557c4b7
--- /dev/null
+++ b/media/mojo/interfaces/hdr_metadata.typemap
@@ -0,0 +1,11 @@
+# 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.
+
+mojom = "//media/mojo/interfaces/media_types.mojom"
+public_headers = [ "//media/base/hdr_metadata.h" ]
+traits_headers = [ "//media/mojo/interfaces/hdr_metadata_struct_traits.h" ]
+type_mappings = [
+  "media.mojom.MasteringMetadata=media::MasteringMetadata",
+  "media.mojom.HDRMetadata=media::HDRMetadata",
+]
diff --git a/media/mojo/interfaces/hdr_metadata_struct_traits.h b/media/mojo/interfaces/hdr_metadata_struct_traits.h
new file mode 100644
index 0000000..498f830
--- /dev/null
+++ b/media/mojo/interfaces/hdr_metadata_struct_traits.h
@@ -0,0 +1,68 @@
+// 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.
+
+#ifndef MEDIA_MOJO_INTERFACES_HDR_METADATA_STRUCT_TRAITS_H_
+#define MEDIA_MOJO_INTERFACES_HDR_METADATA_STRUCT_TRAITS_H_
+
+#include "media/base/hdr_metadata.h"
+#include "media/mojo/interfaces/media_types.mojom.h"
+
+namespace mojo {
+
+template <>
+struct StructTraits<media::mojom::MasteringMetadataDataView,
+                    media::MasteringMetadata> {
+  static gfx::PointF primary_r(const media::MasteringMetadata& input) {
+    return input.primary_r;
+  }
+  static gfx::PointF primary_g(const media::MasteringMetadata& input) {
+    return input.primary_g;
+  }
+  static gfx::PointF primary_b(const media::MasteringMetadata& input) {
+    return input.primary_b;
+  }
+  static gfx::PointF white_point(const media::MasteringMetadata& input) {
+    return input.white_point;
+  }
+  static float luminance_max(const media::MasteringMetadata& input) {
+    return input.luminance_max;
+  }
+  static float luminance_min(const media::MasteringMetadata& input) {
+    return input.luminance_min;
+  }
+
+  static bool Read(media::mojom::MasteringMetadataDataView data,
+                   media::MasteringMetadata* output) {
+    output->luminance_max = data.luminance_max();
+    output->luminance_min = data.luminance_min();
+    return true;
+  }
+};
+
+template <>
+struct StructTraits<media::mojom::HDRMetadataDataView, media::HDRMetadata> {
+  static unsigned max_content_light_level(const media::HDRMetadata& input) {
+    return input.max_content_light_level;
+  }
+  static unsigned max_frame_average_light_level(
+      const media::HDRMetadata& input) {
+    return input.max_frame_average_light_level;
+  }
+  static media::MasteringMetadata mastering_metadata(
+      const media::HDRMetadata& input) {
+    return input.mastering_metadata;
+  }
+
+  static bool Read(media::mojom::HDRMetadataDataView data,
+                   media::HDRMetadata* output) {
+    output->max_content_light_level = data.max_content_light_level();
+    output->max_frame_average_light_level =
+        data.max_frame_average_light_level();
+    return true;
+  }
+};
+
+}  // namespace mojo
+
+#endif  // MEDIA_MOJO_INTERFACES_HDR_METADATA_STRUCT_TRAITS_H_
diff --git a/media/mojo/interfaces/media_types.mojom b/media/mojo/interfaces/media_types.mojom
index ae20147..16612b5 100644
--- a/media/mojo/interfaces/media_types.mojom
+++ b/media/mojo/interfaces/media_types.mojom
@@ -86,6 +86,23 @@
   RangeID range;
 };
 
+// This defines a mojo transport format for media::HDRMetadata.
+// See media/base/hdr_metadata.h for description.
+struct MasteringMetadata {
+  gfx.mojom.PointF primary_r;
+  gfx.mojom.PointF primary_g;
+  gfx.mojom.PointF primary_b;
+  gfx.mojom.PointF white_point;
+  float luminance_max;
+  float luminance_min;
+};
+
+struct HDRMetadata {
+  MasteringMetadata mastering_metadata;
+  uint32 max_content_light_level;
+  uint32 max_frame_average_light_level;
+};
+
 // This defines a mojo transport format for media::AudioDecoderConfig.
 // See media/base/audio_decoder_config.h for descriptions.
 struct AudioDecoderConfig {
@@ -112,6 +129,7 @@
   array<uint8> extra_data;
   EncryptionScheme encryption_scheme;
   VideoColorSpace color_space_info;
+  HDRMetadata? hdr_metadata;
 };
 
 // Native struct media::SubsampleEntry;
diff --git a/media/mojo/interfaces/media_types.typemap b/media/mojo/interfaces/media_types.typemap
index a10cdf6..cc8b655 100644
--- a/media/mojo/interfaces/media_types.typemap
+++ b/media/mojo/interfaces/media_types.typemap
@@ -10,6 +10,7 @@
   "//media/base/channel_layout.h",
   "//media/base/decode_status.h",
   "//media/base/encryption_scheme.h",
+  "//media/base/hdr_metadata.h",
   "//media/base/output_device_info.h",
   "//media/base/sample_format.h",
   "//media/base/subsample_entry.h",
diff --git a/media/mojo/interfaces/typemaps.gni b/media/mojo/interfaces/typemaps.gni
index 1f0377b..a69837f2 100644
--- a/media/mojo/interfaces/typemaps.gni
+++ b/media/mojo/interfaces/typemaps.gni
@@ -7,6 +7,7 @@
   "//media/mojo/interfaces/content_decryption_module.typemap",
   "//media/mojo/interfaces/decryptor.typemap",
   "//media/mojo/interfaces/demuxer_stream.typemap",
+  "//media/mojo/interfaces/hdr_metadata.typemap",
   "//media/mojo/interfaces/media_types.typemap",
   "//media/mojo/interfaces/pipeline_statistics.typemap",
   "//media/mojo/interfaces/video_color_space.typemap",
diff --git a/media/mojo/services/media_service.cc b/media/mojo/services/media_service.cc
index 43eace8..242040e 100644
--- a/media/mojo/services/media_service.cc
+++ b/media/mojo/services/media_service.cc
@@ -13,7 +13,6 @@
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "services/service_manager/public/cpp/connection.h"
 #include "services/service_manager/public/cpp/connector.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 
 namespace media {
 
@@ -22,6 +21,7 @@
     : mojo_media_client_(std::move(mojo_media_client)),
       media_log_(new MediaLog()) {
   DCHECK(mojo_media_client_);
+  registry_.AddInterface<mojom::MediaService>(this);
 }
 
 MediaService::~MediaService() {}
@@ -33,10 +33,12 @@
   mojo_media_client_->Initialize(context()->connector());
 }
 
-bool MediaService::OnConnect(const service_manager::ServiceInfo& remote_info,
-                             service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::MediaService>(this);
-  return true;
+void MediaService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 bool MediaService::OnServiceManagerConnectionLost() {
diff --git a/media/mojo/services/media_service.h b/media/mojo/services/media_service.h
index 08c4885..44171762 100644
--- a/media/mojo/services/media_service.h
+++ b/media/mojo/services/media_service.h
@@ -16,6 +16,7 @@
 #include "media/mojo/interfaces/media_service.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_context.h"
@@ -39,8 +40,9 @@
  private:
   // service_manager::Service implementation.
   void OnStart() final;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) final;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
   bool OnServiceManagerConnectionLost() final;
 
   // service_manager::InterfaceFactory<mojom::MediaService> implementation.
@@ -60,6 +62,7 @@
   scoped_refptr<MediaLog> media_log_;
   std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_;
 
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::MediaService> bindings_;
 };
 
diff --git a/media/renderers/skcanvas_video_renderer_unittest.cc b/media/renderers/skcanvas_video_renderer_unittest.cc
index aeed7454..7034b89 100644
--- a/media/renderers/skcanvas_video_renderer_unittest.cc
+++ b/media/renderers/skcanvas_video_renderer_unittest.cc
@@ -33,25 +33,6 @@
 static const int kHeight = 240;
 static const gfx::RectF kNaturalRect(kWidth, kHeight);
 
-// Helper for filling a |canvas| with a solid |color|.
-void FillCanvas(cc::PaintCanvas* canvas, SkColor color) {
-  canvas->clear(color);
-}
-
-// Helper for returning the color of a solid |canvas|.
-SkColor GetColorAt(cc::PaintCanvas* canvas, int x, int y) {
-  SkBitmap bitmap;
-  if (!bitmap.tryAllocN32Pixels(1, 1))
-    return 0;
-  if (!canvas->readPixels(&bitmap, x, y))
-    return 0;
-  return bitmap.getColor(0, 0);
-}
-
-SkColor GetColor(cc::PaintCanvas* canvas) {
-  return GetColorAt(canvas, 0, 0);
-}
-
 // Generate frame pixels to provided |external_memory| and wrap it as frame.
 scoped_refptr<VideoFrame> CreateTestY16Frame(const gfx::Size& coded_size,
                                              const gfx::Rect& visible_rect,
@@ -115,6 +96,7 @@
 
   // Standard canvas.
   cc::PaintCanvas* target_canvas() { return &target_canvas_; }
+  SkBitmap* bitmap() { return &bitmap_; }
 
  protected:
   SkCanvasVideoRenderer renderer_;
@@ -124,6 +106,7 @@
   scoped_refptr<VideoFrame> smaller_frame_;
   scoped_refptr<VideoFrame> cropped_frame_;
 
+  SkBitmap bitmap_;
   cc::SkiaPaintCanvas target_canvas_;
   base::MessageLoop message_loop_;
 
@@ -149,7 +132,8 @@
                                   gfx::Rect(6, 6, 8, 6),
                                   gfx::Size(8, 6),
                                   base::TimeDelta::FromMilliseconds(4))),
-      target_canvas_(AllocBitmap(kWidth, kHeight)) {
+      bitmap_(AllocBitmap(kWidth, kHeight)),
+      target_canvas_(bitmap_) {
   // Give each frame a unique timestamp.
   natural_frame_->set_timestamp(base::TimeDelta::FromMilliseconds(1));
   larger_frame_->set_timestamp(base::TimeDelta::FromMilliseconds(2));
@@ -286,89 +270,89 @@
 
 TEST_F(SkCanvasVideoRendererTest, NoFrame) {
   // Test that black gets painted over canvas.
-  FillCanvas(target_canvas(), SK_ColorRED);
+  target_canvas()->clear(SK_ColorRED);
   PaintWithoutFrame(target_canvas());
-  EXPECT_EQ(SK_ColorBLACK, GetColor(target_canvas()));
+  EXPECT_EQ(SK_ColorBLACK, bitmap()->getColor(0, 0));
 }
 
 TEST_F(SkCanvasVideoRendererTest, TransparentFrame) {
-  FillCanvas(target_canvas(), SK_ColorRED);
+  target_canvas()->clear(SK_ColorRED);
   PaintRotated(
       VideoFrame::CreateTransparentFrame(gfx::Size(kWidth, kHeight)).get(),
       target_canvas(), kNaturalRect, kNone, SkBlendMode::kSrcOver,
       VIDEO_ROTATION_0);
-  EXPECT_EQ(static_cast<SkColor>(SK_ColorRED), GetColor(target_canvas()));
+  EXPECT_EQ(static_cast<SkColor>(SK_ColorRED), bitmap()->getColor(0, 0));
 }
 
 TEST_F(SkCanvasVideoRendererTest, TransparentFrameSrcMode) {
-  FillCanvas(target_canvas(), SK_ColorRED);
+  target_canvas()->clear(SK_ColorRED);
   // SRC mode completely overwrites the buffer.
   PaintRotated(
       VideoFrame::CreateTransparentFrame(gfx::Size(kWidth, kHeight)).get(),
       target_canvas(), kNaturalRect, kNone, SkBlendMode::kSrc,
       VIDEO_ROTATION_0);
   EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT),
-            GetColor(target_canvas()));
+            bitmap()->getColor(0, 0));
 }
 
 TEST_F(SkCanvasVideoRendererTest, CopyTransparentFrame) {
-  FillCanvas(target_canvas(), SK_ColorRED);
+  target_canvas()->clear(SK_ColorRED);
   Copy(VideoFrame::CreateTransparentFrame(gfx::Size(kWidth, kHeight)).get(),
        target_canvas());
   EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT),
-            GetColor(target_canvas()));
+            bitmap()->getColor(0, 0));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Natural) {
   Paint(natural_frame(), target_canvas(), kRed);
-  EXPECT_EQ(SK_ColorRED, GetColor(target_canvas()));
+  EXPECT_EQ(SK_ColorRED, bitmap()->getColor(0, 0));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Larger) {
   Paint(natural_frame(), target_canvas(), kRed);
-  EXPECT_EQ(SK_ColorRED, GetColor(target_canvas()));
+  EXPECT_EQ(SK_ColorRED, bitmap()->getColor(0, 0));
 
   Paint(larger_frame(), target_canvas(), kBlue);
-  EXPECT_EQ(SK_ColorBLUE, GetColor(target_canvas()));
+  EXPECT_EQ(SK_ColorBLUE, bitmap()->getColor(0, 0));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Smaller) {
   Paint(natural_frame(), target_canvas(), kRed);
-  EXPECT_EQ(SK_ColorRED, GetColor(target_canvas()));
+  EXPECT_EQ(SK_ColorRED, bitmap()->getColor(0, 0));
 
   Paint(smaller_frame(), target_canvas(), kBlue);
-  EXPECT_EQ(SK_ColorBLUE, GetColor(target_canvas()));
+  EXPECT_EQ(SK_ColorBLUE, bitmap()->getColor(0, 0));
 }
 
 TEST_F(SkCanvasVideoRendererTest, NoTimestamp) {
   VideoFrame* video_frame = natural_frame().get();
   video_frame->set_timestamp(media::kNoTimestamp);
   Paint(video_frame, target_canvas(), kRed);
-  EXPECT_EQ(SK_ColorRED, GetColor(target_canvas()));
+  EXPECT_EQ(SK_ColorRED, bitmap()->getColor(0, 0));
 }
 
 TEST_F(SkCanvasVideoRendererTest, CroppedFrame) {
   Paint(cropped_frame(), target_canvas(), kNone);
   // Check the corners.
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(target_canvas(), 0, 0));
-  EXPECT_EQ(SK_ColorRED, GetColorAt(target_canvas(), kWidth - 1, 0));
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(target_canvas(), 0, kHeight - 1));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(target_canvas(), kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLACK, bitmap()->getColor(0, 0));
+  EXPECT_EQ(SK_ColorRED, bitmap()->getColor(kWidth - 1, 0));
+  EXPECT_EQ(SK_ColorGREEN, bitmap()->getColor(0, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLUE, bitmap()->getColor(kWidth - 1, kHeight - 1));
   // Check the interior along the border between color regions.  Note that we're
   // bilinearly upscaling, so we'll need to take care to pick sample points that
   // are just outside the "zone of resampling".
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(target_canvas(), kWidth * 1 / 8 - 1,
-                                      kHeight * 1 / 6 - 1));
+  EXPECT_EQ(SK_ColorBLACK,
+            bitmap()->getColor(kWidth * 1 / 8 - 1, kHeight * 1 / 6 - 1));
   EXPECT_EQ(SK_ColorRED,
-            GetColorAt(target_canvas(), kWidth * 3 / 8, kHeight * 1 / 6 - 1));
+            bitmap()->getColor(kWidth * 3 / 8, kHeight * 1 / 6 - 1));
   EXPECT_EQ(SK_ColorGREEN,
-            GetColorAt(target_canvas(), kWidth * 1 / 8 - 1, kHeight * 3 / 6));
-  EXPECT_EQ(SK_ColorBLUE,
-            GetColorAt(target_canvas(), kWidth * 3 / 8, kHeight * 3 / 6));
+            bitmap()->getColor(kWidth * 1 / 8 - 1, kHeight * 3 / 6));
+  EXPECT_EQ(SK_ColorBLUE, bitmap()->getColor(kWidth * 3 / 8, kHeight * 3 / 6));
 }
 
 TEST_F(SkCanvasVideoRendererTest, CroppedFrame_NoScaling) {
-  cc::SkiaPaintCanvas canvas(AllocBitmap(kWidth, kHeight));
+  SkBitmap bitmap = AllocBitmap(kWidth, kHeight);
+  cc::SkiaPaintCanvas canvas(bitmap);
   const gfx::Rect crop_rect = cropped_frame()->visible_rect();
 
   // Force painting to a non-zero position on the destination bitmap, to check
@@ -385,122 +369,129 @@
   Paint(cropped_frame(), &canvas, kNone);
 
   // Check the corners.
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, offset_x, offset_y));
+  EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(offset_x, offset_y));
   EXPECT_EQ(SK_ColorRED,
-            GetColorAt(&canvas, offset_x + crop_rect.width() - 1, offset_y));
+            bitmap.getColor(offset_x + crop_rect.width() - 1, offset_y));
   EXPECT_EQ(SK_ColorGREEN,
-            GetColorAt(&canvas, offset_x, offset_y + crop_rect.height() - 1));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(&canvas, offset_x + crop_rect.width() - 1,
-                                     offset_y + crop_rect.height() - 1));
+            bitmap.getColor(offset_x, offset_y + crop_rect.height() - 1));
+  EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(offset_x + crop_rect.width() - 1,
+                                          offset_y + crop_rect.height() - 1));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Video_Rotation_90) {
-  cc::SkiaPaintCanvas canvas(AllocBitmap(kWidth, kHeight));
+  SkBitmap bitmap = AllocBitmap(kWidth, kHeight);
+  cc::SkiaPaintCanvas canvas(bitmap);
   PaintRotated(cropped_frame(), &canvas, kNaturalRect, kNone,
                SkBlendMode::kSrcOver, VIDEO_ROTATION_90);
   // Check the corners.
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(&canvas, 0, 0));
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, kWidth - 1, 0));
-  EXPECT_EQ(SK_ColorRED, GetColorAt(&canvas, kWidth - 1, kHeight - 1));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(&canvas, 0, kHeight - 1));
+  EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 0));
+  EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(kWidth - 1, 0));
+  EXPECT_EQ(SK_ColorRED, bitmap.getColor(kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(0, kHeight - 1));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Video_Rotation_180) {
-  cc::SkiaPaintCanvas canvas(AllocBitmap(kWidth, kHeight));
+  SkBitmap bitmap = AllocBitmap(kWidth, kHeight);
+  cc::SkiaPaintCanvas canvas(bitmap);
   PaintRotated(cropped_frame(), &canvas, kNaturalRect, kNone,
                SkBlendMode::kSrcOver, VIDEO_ROTATION_180);
   // Check the corners.
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(&canvas, 0, 0));
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(&canvas, kWidth - 1, 0));
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, kWidth - 1, kHeight - 1));
-  EXPECT_EQ(SK_ColorRED, GetColorAt(&canvas, 0, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(0, 0));
+  EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(kWidth - 1, 0));
+  EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorRED, bitmap.getColor(0, kHeight - 1));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Video_Rotation_270) {
-  cc::SkiaPaintCanvas canvas(AllocBitmap(kWidth, kHeight));
+  SkBitmap bitmap = AllocBitmap(kWidth, kHeight);
+  cc::SkiaPaintCanvas canvas(bitmap);
   PaintRotated(cropped_frame(), &canvas, kNaturalRect, kNone,
                SkBlendMode::kSrcOver, VIDEO_ROTATION_270);
   // Check the corners.
-  EXPECT_EQ(SK_ColorRED, GetColorAt(&canvas, 0, 0));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(&canvas, kWidth - 1, 0));
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(&canvas, kWidth - 1, kHeight - 1));
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, 0, kHeight - 1));
+  EXPECT_EQ(SK_ColorRED, bitmap.getColor(0, 0));
+  EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(kWidth - 1, 0));
+  EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(0, kHeight - 1));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Video_Translate) {
-  cc::SkiaPaintCanvas canvas(AllocBitmap(kWidth, kHeight));
-  FillCanvas(&canvas, SK_ColorMAGENTA);
+  SkBitmap bitmap = AllocBitmap(kWidth, kHeight);
+  cc::SkiaPaintCanvas canvas(bitmap);
+  canvas.clear(SK_ColorMAGENTA);
 
   PaintRotated(cropped_frame(), &canvas,
                gfx::RectF(kWidth / 2, kHeight / 2, kWidth / 2, kHeight / 2),
                kNone, SkBlendMode::kSrcOver, VIDEO_ROTATION_0);
   // Check the corners of quadrant 2 and 4.
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, 0, 0));
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, (kWidth / 2) - 1, 0));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, 0));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor((kWidth / 2) - 1, 0));
   EXPECT_EQ(SK_ColorMAGENTA,
-            GetColorAt(&canvas, (kWidth / 2) - 1, (kHeight / 2) - 1));
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, 0, (kHeight / 2) - 1));
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, kWidth / 2, kHeight / 2));
-  EXPECT_EQ(SK_ColorRED, GetColorAt(&canvas, kWidth - 1, kHeight / 2));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(&canvas, kWidth - 1, kHeight - 1));
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(&canvas, kWidth / 2, kHeight - 1));
+            bitmap.getColor((kWidth / 2) - 1, (kHeight / 2) - 1));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, (kHeight / 2) - 1));
+  EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(kWidth / 2, kHeight / 2));
+  EXPECT_EQ(SK_ColorRED, bitmap.getColor(kWidth - 1, kHeight / 2));
+  EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(kWidth / 2, kHeight - 1));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Video_Translate_Rotation_90) {
-  cc::SkiaPaintCanvas canvas(AllocBitmap(kWidth, kHeight));
-  FillCanvas(&canvas, SK_ColorMAGENTA);
+  SkBitmap bitmap = AllocBitmap(kWidth, kHeight);
+  cc::SkiaPaintCanvas canvas(bitmap);
+  canvas.clear(SK_ColorMAGENTA);
 
   PaintRotated(cropped_frame(), &canvas,
                gfx::RectF(kWidth / 2, kHeight / 2, kWidth / 2, kHeight / 2),
                kNone, SkBlendMode::kSrcOver, VIDEO_ROTATION_90);
   // Check the corners of quadrant 2 and 4.
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, 0, 0));
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, (kWidth / 2) - 1, 0));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, 0));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor((kWidth / 2) - 1, 0));
   EXPECT_EQ(SK_ColorMAGENTA,
-            GetColorAt(&canvas, (kWidth / 2) - 1, (kHeight / 2) - 1));
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, 0, (kHeight / 2) - 1));
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(&canvas, kWidth / 2, kHeight / 2));
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, kWidth - 1, kHeight / 2));
-  EXPECT_EQ(SK_ColorRED, GetColorAt(&canvas, kWidth - 1, kHeight - 1));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(&canvas, kWidth / 2, kHeight - 1));
+            bitmap.getColor((kWidth / 2) - 1, (kHeight / 2) - 1));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, (kHeight / 2) - 1));
+  EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(kWidth / 2, kHeight / 2));
+  EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(kWidth - 1, kHeight / 2));
+  EXPECT_EQ(SK_ColorRED, bitmap.getColor(kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(kWidth / 2, kHeight - 1));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Video_Translate_Rotation_180) {
-  cc::SkiaPaintCanvas canvas(AllocBitmap(kWidth, kHeight));
-  FillCanvas(&canvas, SK_ColorMAGENTA);
+  SkBitmap bitmap = AllocBitmap(kWidth, kHeight);
+  cc::SkiaPaintCanvas canvas(bitmap);
+  canvas.clear(SK_ColorMAGENTA);
 
   PaintRotated(cropped_frame(), &canvas,
                gfx::RectF(kWidth / 2, kHeight / 2, kWidth / 2, kHeight / 2),
                kNone, SkBlendMode::kSrcOver, VIDEO_ROTATION_180);
   // Check the corners of quadrant 2 and 4.
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, 0, 0));
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, (kWidth / 2) - 1, 0));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, 0));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor((kWidth / 2) - 1, 0));
   EXPECT_EQ(SK_ColorMAGENTA,
-            GetColorAt(&canvas, (kWidth / 2) - 1, (kHeight / 2) - 1));
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, 0, (kHeight / 2) - 1));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(&canvas, kWidth / 2, kHeight / 2));
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(&canvas, kWidth - 1, kHeight / 2));
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, kWidth - 1, kHeight - 1));
-  EXPECT_EQ(SK_ColorRED, GetColorAt(&canvas, kWidth / 2, kHeight - 1));
+            bitmap.getColor((kWidth / 2) - 1, (kHeight / 2) - 1));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, (kHeight / 2) - 1));
+  EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(kWidth / 2, kHeight / 2));
+  EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(kWidth - 1, kHeight / 2));
+  EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorRED, bitmap.getColor(kWidth / 2, kHeight - 1));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Video_Translate_Rotation_270) {
-  cc::SkiaPaintCanvas canvas(AllocBitmap(kWidth, kHeight));
-  FillCanvas(&canvas, SK_ColorMAGENTA);
+  SkBitmap bitmap = AllocBitmap(kWidth, kHeight);
+  cc::SkiaPaintCanvas canvas(bitmap);
+  canvas.clear(SK_ColorMAGENTA);
 
   PaintRotated(cropped_frame(), &canvas,
                gfx::RectF(kWidth / 2, kHeight / 2, kWidth / 2, kHeight / 2),
                kNone, SkBlendMode::kSrcOver, VIDEO_ROTATION_270);
   // Check the corners of quadrant 2 and 4.
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, 0, 0));
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, (kWidth / 2) - 1, 0));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, 0));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor((kWidth / 2) - 1, 0));
   EXPECT_EQ(SK_ColorMAGENTA,
-            GetColorAt(&canvas, (kWidth / 2) - 1, (kHeight / 2) - 1));
-  EXPECT_EQ(SK_ColorMAGENTA, GetColorAt(&canvas, 0, (kHeight / 2) - 1));
-  EXPECT_EQ(SK_ColorRED, GetColorAt(&canvas, kWidth / 2, kHeight / 2));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(&canvas, kWidth - 1, kHeight / 2));
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(&canvas, kWidth - 1, kHeight - 1));
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, kWidth / 2, kHeight - 1));
+            bitmap.getColor((kWidth / 2) - 1, (kHeight / 2) - 1));
+  EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, (kHeight / 2) - 1));
+  EXPECT_EQ(SK_ColorRED, bitmap.getColor(kWidth / 2, kHeight / 2));
+  EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(kWidth - 1, kHeight / 2));
+  EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLACK, bitmap.getColor(kWidth / 2, kHeight - 1));
 }
 
 TEST_F(SkCanvasVideoRendererTest, HighBits) {
@@ -524,21 +515,20 @@
 
   Paint(frame, target_canvas(), kNone);
   // Check the corners.
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(target_canvas(), 0, 0));
-  EXPECT_EQ(SK_ColorRED, GetColorAt(target_canvas(), kWidth - 1, 0));
-  EXPECT_EQ(SK_ColorGREEN, GetColorAt(target_canvas(), 0, kHeight - 1));
-  EXPECT_EQ(SK_ColorBLUE, GetColorAt(target_canvas(), kWidth - 1, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLACK, bitmap()->getColor(0, 0));
+  EXPECT_EQ(SK_ColorRED, bitmap()->getColor(kWidth - 1, 0));
+  EXPECT_EQ(SK_ColorGREEN, bitmap()->getColor(0, kHeight - 1));
+  EXPECT_EQ(SK_ColorBLUE, bitmap()->getColor(kWidth - 1, kHeight - 1));
   // Check the interior along the border between color regions.  Note that we're
   // bilinearly upscaling, so we'll need to take care to pick sample points that
   // are just outside the "zone of resampling".
-  EXPECT_EQ(SK_ColorBLACK, GetColorAt(target_canvas(), kWidth * 1 / 8 - 1,
-                                      kHeight * 1 / 6 - 1));
+  EXPECT_EQ(SK_ColorBLACK,
+            bitmap()->getColor(kWidth * 1 / 8 - 1, kHeight * 1 / 6 - 1));
   EXPECT_EQ(SK_ColorRED,
-            GetColorAt(target_canvas(), kWidth * 3 / 8, kHeight * 1 / 6 - 1));
+            bitmap()->getColor(kWidth * 3 / 8, kHeight * 1 / 6 - 1));
   EXPECT_EQ(SK_ColorGREEN,
-            GetColorAt(target_canvas(), kWidth * 1 / 8 - 1, kHeight * 3 / 6));
-  EXPECT_EQ(SK_ColorBLUE,
-            GetColorAt(target_canvas(), kWidth * 3 / 8, kHeight * 3 / 6));
+            bitmap()->getColor(kWidth * 1 / 8 - 1, kHeight * 3 / 6));
+  EXPECT_EQ(SK_ColorBLUE, bitmap()->getColor(kWidth * 3 / 8, kHeight * 3 / 6));
 }
 
 TEST_F(SkCanvasVideoRendererTest, Y16) {
diff --git a/mojo/public/cpp/bindings/tests/versioning_test_service.cc b/mojo/public/cpp/bindings/tests/versioning_test_service.cc
index 313a6249..8f93331e 100644
--- a/mojo/public/cpp/bindings/tests/versioning_test_service.cc
+++ b/mojo/public/cpp/bindings/tests/versioning_test_service.cc
@@ -11,6 +11,7 @@
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "mojo/public/interfaces/bindings/tests/versioning_test_service.mojom.h"
 #include "services/service_manager/public/c/main.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_runner.h"
@@ -98,12 +99,16 @@
     : public service_manager::Service,
       public InterfaceFactory<HumanResourceDatabase> {
  public:
-  HumanResourceSystemServer() {}
+  HumanResourceSystemServer() {
+    registry_.AddInterface<HumanResourceDatabase>(this);
+  }
 
   // service_manager::Service implementation.
-  bool OnConnect(Connection* connection) override {
-    connection->AddInterface<HumanResourceDatabase>(this);
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
   // InterfaceFactory<HumanResourceDatabase> implementation.
@@ -113,6 +118,9 @@
     // connection error.
     new HumanResourceDatabaseImpl(std::move(request));
   }
+
+ private:
+  service_manager::BinderRegistry registry_;
 };
 
 }  // namespace versioning
diff --git a/net/BUILD.gn b/net/BUILD.gn
index f5f99c3..e08fa48 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -1397,18 +1397,30 @@
       "quic/quartc/quartc_stream.h",
       "quic/quartc/quartc_stream_interface.h",
       "quic/quartc/quartc_task_runner_interface.h",
+      "reporting/reporting_browsing_data_remover.cc",
+      "reporting/reporting_browsing_data_remover.h",
       "reporting/reporting_cache.cc",
       "reporting/reporting_cache.h",
       "reporting/reporting_client.cc",
       "reporting/reporting_client.h",
+      "reporting/reporting_context.cc",
+      "reporting/reporting_context.h",
+      "reporting/reporting_delegate.cc",
+      "reporting/reporting_delegate.h",
       "reporting/reporting_delivery_agent.cc",
       "reporting/reporting_delivery_agent.h",
       "reporting/reporting_endpoint_manager.cc",
       "reporting/reporting_endpoint_manager.h",
       "reporting/reporting_header_parser.cc",
       "reporting/reporting_header_parser.h",
+      "reporting/reporting_observer.cc",
+      "reporting/reporting_observer.h",
+      "reporting/reporting_policy.cc",
+      "reporting/reporting_policy.h",
       "reporting/reporting_report.cc",
       "reporting/reporting_report.h",
+      "reporting/reporting_service.cc",
+      "reporting/reporting_service.h",
       "reporting/reporting_uploader.cc",
       "reporting/reporting_uploader.h",
       "sdch/sdch_owner.cc",
@@ -4624,10 +4636,12 @@
     "quic/test_tools/simulator/switch.h",
     "quic/test_tools/simulator/traffic_policer.cc",
     "quic/test_tools/simulator/traffic_policer.h",
+    "reporting/reporting_browsing_data_remover_unittest.cc",
     "reporting/reporting_cache_unittest.cc",
     "reporting/reporting_delivery_agent_unittest.cc",
     "reporting/reporting_endpoint_manager_unittest.cc",
     "reporting/reporting_header_parser_unittest.cc",
+    "reporting/reporting_service_unittest.cc",
     "reporting/reporting_test_util.cc",
     "reporting/reporting_test_util.h",
     "reporting/reporting_uploader_unittest.cc",
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h
index 4499ef2..1398543 100644
--- a/net/base/net_error_list.h
+++ b/net/base/net_error_list.h
@@ -706,6 +706,9 @@
 // The client MAY retry the request over a different connection.
 NET_ERROR(MISDIRECTED_REQUEST, -373)
 
+// There is a QUIC protocol error and QUIC has been marked as broken.
+NET_ERROR(QUIC_BROKEN_ERROR, -374)
+
 // The cache does not have the requested entry.
 NET_ERROR(CACHE_MISS, -400)
 
diff --git a/net/cert/internal/path_builder_unittest.cc b/net/cert/internal/path_builder_unittest.cc
index ed26c15..d207d44 100644
--- a/net/cert/internal/path_builder_unittest.cc
+++ b/net/cert/internal/path_builder_unittest.cc
@@ -439,12 +439,15 @@
 
   void SetUp() override {
     ParsedCertificateList path;
-    bool unused_result;
-    std::string unused_errors;
 
+    VerifyCertChainTest test;
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-        &path, &oldroot_, &time_, &unused_result, &unused_errors);
+        &test);
+    path = test.chain;
+    oldroot_ = test.trust_anchor;
+    time_ = test.time;
+
     ASSERT_EQ(2U, path.size());
     target_ = path[0];
     oldintermediate_ = path[1];
@@ -454,7 +457,9 @@
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/"
         "key-rollover-longrolloverchain.pem",
-        &path, &oldroot_, &time_, &unused_result, &unused_errors);
+        &test);
+    path = test.chain;
+
     ASSERT_EQ(4U, path.size());
     newintermediate_ = path[1];
     newroot_ = path[2];
diff --git a/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc b/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
index 003157b8..3c404bed 100644
--- a/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
+++ b/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
@@ -15,30 +15,26 @@
 
 class PathBuilderDelegate {
  public:
-  static void Verify(const ParsedCertificateList& chain,
-                     const scoped_refptr<TrustAnchor>& trust_anchor,
-                     const der::GeneralizedTime& time,
-                     bool expected_result,
-                     const std::string& expected_errors,
+  static void Verify(const VerifyCertChainTest& test,
                      const std::string& test_file_path) {
     SimpleSignaturePolicy signature_policy(1024);
-    ASSERT_FALSE(chain.empty());
+    ASSERT_FALSE(test.chain.empty());
 
     TrustStoreInMemory trust_store;
-    trust_store.AddTrustAnchor(trust_anchor);
+    trust_store.AddTrustAnchor(test.trust_anchor);
 
     CertIssuerSourceStatic intermediate_cert_issuer_source;
-    for (size_t i = 1; i < chain.size(); ++i)
-      intermediate_cert_issuer_source.AddCert(chain[i]);
+    for (size_t i = 1; i < test.chain.size(); ++i)
+      intermediate_cert_issuer_source.AddCert(test.chain[i]);
 
     CertPathBuilder::Result result;
     // First cert in the |chain| is the target.
-    CertPathBuilder path_builder(chain.front(), &trust_store, &signature_policy,
-                                 time, &result);
+    CertPathBuilder path_builder(test.chain.front(), &trust_store,
+                                 &signature_policy, test.time, &result);
     path_builder.AddCertIssuerSource(&intermediate_cert_issuer_source);
 
     path_builder.Run();
-    EXPECT_EQ(expected_result, result.HasValidPath());
+    EXPECT_EQ(test.expected_result, result.HasValidPath());
   }
 };
 
diff --git a/net/cert/internal/test_helpers.cc b/net/cert/internal/test_helpers.cc
index 24d4f329..f6a65d3e4 100644
--- a/net/cert/internal/test_helpers.cc
+++ b/net/cert/internal/test_helpers.cc
@@ -102,15 +102,13 @@
   return ::testing::AssertionSuccess();
 }
 
+VerifyCertChainTest::VerifyCertChainTest() = default;
+VerifyCertChainTest::~VerifyCertChainTest() = default;
+
 void ReadVerifyCertChainTestFromFile(const std::string& file_path_ascii,
-                                     ParsedCertificateList* chain,
-                                     scoped_refptr<TrustAnchor>* trust_anchor,
-                                     der::GeneralizedTime* time,
-                                     bool* verify_result,
-                                     std::string* expected_errors) {
-  chain->clear();
-  *trust_anchor = nullptr;
-  expected_errors->clear();
+                                     VerifyCertChainTest* test) {
+  // Reset all the out parameters to their defaults.
+  *test = {};
 
   std::string file_data = ReadTestFileToString(file_path_ascii);
 
@@ -124,6 +122,7 @@
   const char kTimeHeader[] = "TIME";
   const char kResultHeader[] = "VERIFY_RESULT";
   const char kErrorsHeader[] = "ERRORS";
+  const char kKeyPurpose[] = "KEY_PURPOSE";
 
   pem_headers.push_back(kCertificateHeader);
   pem_headers.push_back(kTrustAnchorUnconstrained);
@@ -131,10 +130,12 @@
   pem_headers.push_back(kTimeHeader);
   pem_headers.push_back(kResultHeader);
   pem_headers.push_back(kErrorsHeader);
+  pem_headers.push_back(kKeyPurpose);
 
   bool has_time = false;
   bool has_result = false;
   bool has_errors = false;
+  bool has_key_purpose = false;
 
   PEMTokenizer pem_tokenizer(file_data, pem_headers);
   while (pem_tokenizer.GetNext()) {
@@ -147,11 +148,11 @@
           bssl::UniquePtr<CRYPTO_BUFFER>(CRYPTO_BUFFER_new(
               reinterpret_cast<const uint8_t*>(block_data.data()),
               block_data.size(), nullptr)),
-          {}, chain, &errors))
+          {}, &test->chain, &errors))
           << errors.ToDebugString();
     } else if (block_type == kTrustAnchorUnconstrained ||
                block_type == kTrustAnchorConstrained) {
-      ASSERT_FALSE(*trust_anchor) << "Duplicate trust anchor";
+      ASSERT_FALSE(test->trust_anchor) << "Duplicate trust anchor";
       CertErrors errors;
       scoped_refptr<ParsedCertificate> root = net::ParsedCertificate::Create(
           bssl::UniquePtr<CRYPTO_BUFFER>(CRYPTO_BUFFER_new(
@@ -159,7 +160,7 @@
               block_data.size(), nullptr)),
           {}, &errors);
       ASSERT_TRUE(root) << errors.ToDebugString();
-      *trust_anchor =
+      test->trust_anchor =
           block_type == kTrustAnchorUnconstrained
               ? TrustAnchor::CreateFromCertificateNoConstraints(std::move(root))
               : TrustAnchor::CreateFromCertificateWithConstraints(
@@ -167,23 +168,37 @@
     } else if (block_type == kTimeHeader) {
       ASSERT_FALSE(has_time) << "Duplicate " << kTimeHeader;
       has_time = true;
-      ASSERT_TRUE(der::ParseUTCTime(der::Input(&block_data), time));
+      ASSERT_TRUE(der::ParseUTCTime(der::Input(&block_data), &test->time));
+    } else if (block_type == kKeyPurpose) {
+      ASSERT_FALSE(has_key_purpose) << "Duplicate " << kKeyPurpose;
+      has_key_purpose = true;
+
+      if (block_data == "anyExtendedKeyUsage") {
+        // TODO(eroman): test->key_purpose = ....
+      } else if (block_data == "serverAuth") {
+        // TODO(eroman): test->key_purpose = ....
+      } else if (block_data == "clientAuth") {
+        // TODO(eroman): test->key_purpose = ....
+      } else {
+        ADD_FAILURE() << "Unrecognized " << block_type << ": " << block_data;
+      }
     } else if (block_type == kResultHeader) {
       ASSERT_FALSE(has_result) << "Duplicate " << kResultHeader;
       ASSERT_TRUE(block_data == "SUCCESS" || block_data == "FAIL")
           << "Unrecognized result: " << block_data;
       has_result = true;
-      *verify_result = block_data == "SUCCESS";
+      test->expected_result = block_data == "SUCCESS";
     } else if (block_type == kErrorsHeader) {
       ASSERT_FALSE(has_errors) << "Duplicate " << kErrorsHeader;
       has_errors = true;
-      *expected_errors = block_data;
+      test->expected_errors = block_data;
     }
   }
 
   ASSERT_TRUE(has_time);
   ASSERT_TRUE(has_result);
-  ASSERT_TRUE(*trust_anchor);
+  ASSERT_TRUE(test->trust_anchor);
+  ASSERT_TRUE(has_key_purpose);
 }
 
 std::string ReadTestFileToString(const std::string& file_path_ascii) {
diff --git a/net/cert/internal/test_helpers.h b/net/cert/internal/test_helpers.h
index 0e4cd17a..0cd2f70d 100644
--- a/net/cert/internal/test_helpers.h
+++ b/net/cert/internal/test_helpers.h
@@ -76,17 +76,33 @@
   return ReadTestDataFromPemFile(file_path_ascii, mappings, N);
 }
 
-// Reads a test case from |file_path_ascii| (which is relative to //src). Test
-// cases are comprised of a certificate chain, trust anchor, a timestamp to
-// validate at, and the expected result of verification.
+// Test cases are comprised of all the parameters to certificate
+// verification, as well as the expected outputs.
+struct VerifyCertChainTest {
+  VerifyCertChainTest();
+  ~VerifyCertChainTest();
+
+  // The chain of certificates (with the zero-th being the target).
+  ParsedCertificateList chain;
+
+  // The trust anchor to use when verifying the chain.
+  scoped_refptr<TrustAnchor> trust_anchor;
+
+  // The time to use when verifying the chain.
+  der::GeneralizedTime time;
+
+  // The expected result from verification.
+  bool expected_result = false;
+
+  // The expected errors from verification (as a string).
+  std::string expected_errors;
+};
+
+// Reads a test case from |file_path_ascii| (which is relative to //src).
 // Generally |file_path_ascii| will start with:
 //   net/data/verify_certificate_chain_unittest/
 void ReadVerifyCertChainTestFromFile(const std::string& file_path_ascii,
-                                     ParsedCertificateList* chain,
-                                     scoped_refptr<TrustAnchor>* trust_anchor,
-                                     der::GeneralizedTime* time,
-                                     bool* verify_result,
-                                     std::string* expected_errors);
+                                     VerifyCertChainTest* test);
 
 // Reads a data file relative to the src root directory.
 std::string ReadTestFileToString(const std::string& file_path_ascii);
diff --git a/net/cert/internal/trust_store_collection_unittest.cc b/net/cert/internal/trust_store_collection_unittest.cc
index c9cd85cc..198988e7 100644
--- a/net/cert/internal/trust_store_collection_unittest.cc
+++ b/net/cert/internal/trust_store_collection_unittest.cc
@@ -16,13 +16,14 @@
  public:
   void SetUp() override {
     ParsedCertificateList chain;
-    bool unused_verify_result;
-    der::GeneralizedTime unused_time;
-    std::string unused_errors;
 
+    VerifyCertChainTest test;
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-        &chain, &oldroot_, &unused_time, &unused_verify_result, &unused_errors);
+        &test);
+    chain = test.chain;
+    oldroot_ = test.trust_anchor;
+
     ASSERT_EQ(2U, chain.size());
     target_ = chain[0];
     oldintermediate_ = chain[1];
@@ -30,12 +31,12 @@
     ASSERT_TRUE(oldintermediate_);
     ASSERT_TRUE(oldroot_);
 
-    scoped_refptr<TrustAnchor> unused_root;
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/"
         "key-rollover-longrolloverchain.pem",
-        &chain, &unused_root, &unused_time, &unused_verify_result,
-        &unused_errors);
+        &test);
+    chain = test.chain;
+
     ASSERT_EQ(4U, chain.size());
     newintermediate_ = chain[1];
     newroot_ = TrustAnchor::CreateFromCertificateNoConstraints(chain[2]);
diff --git a/net/cert/internal/trust_store_nss_unittest.cc b/net/cert/internal/trust_store_nss_unittest.cc
index f9d1f27..e83ba67 100644
--- a/net/cert/internal/trust_store_nss_unittest.cc
+++ b/net/cert/internal/trust_store_nss_unittest.cc
@@ -24,14 +24,14 @@
   void SetUp() override {
     ASSERT_TRUE(test_nssdb_.is_open());
 
+    VerifyCertChainTest test;
     ParsedCertificateList chain;
-    bool unused_verify_result;
-    der::GeneralizedTime unused_time;
-    std::string unused_errors;
-
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-        &chain, &oldroot_, &unused_time, &unused_verify_result, &unused_errors);
+        &test);
+    chain = test.chain;
+    oldroot_ = test.trust_anchor;
+
     ASSERT_EQ(2U, chain.size());
     target_ = chain[0];
     oldintermediate_ = chain[1];
@@ -39,12 +39,12 @@
     ASSERT_TRUE(oldintermediate_);
     ASSERT_TRUE(oldroot_);
 
-    scoped_refptr<TrustAnchor> unused_root;
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/"
         "key-rollover-longrolloverchain.pem",
-        &chain, &unused_root, &unused_time, &unused_verify_result,
-        &unused_errors);
+        &test);
+    chain = test.chain;
+
     ASSERT_EQ(4U, chain.size());
     newintermediate_ = chain[1];
     newroot_ = TrustAnchor::CreateFromCertificateNoConstraints(chain[2]);
diff --git a/net/cert/internal/verify_certificate_chain_typed_unittest.h b/net/cert/internal/verify_certificate_chain_typed_unittest.h
index 8c64d916..1861241 100644
--- a/net/cert/internal/verify_certificate_chain_typed_unittest.h
+++ b/net/cert/internal/verify_certificate_chain_typed_unittest.h
@@ -18,20 +18,14 @@
 class VerifyCertificateChainTest : public ::testing::Test {
  public:
   void RunTest(const char* file_name) {
-    ParsedCertificateList chain;
-    scoped_refptr<TrustAnchor> trust_anchor;
-    der::GeneralizedTime time;
-    bool expected_result;
-    std::string expected_errors;
+    VerifyCertChainTest test;
 
     std::string path =
         std::string("net/data/verify_certificate_chain_unittest/") + file_name;
 
-    ReadVerifyCertChainTestFromFile(path, &chain, &trust_anchor, &time,
-                                    &expected_result, &expected_errors);
+    ReadVerifyCertChainTestFromFile(path, &test);
 
-    TestDelegate::Verify(chain, trust_anchor, time, expected_result,
-                         expected_errors, path);
+    TestDelegate::Verify(test, path);
   }
 };
 
diff --git a/net/cert/internal/verify_certificate_chain_unittest.cc b/net/cert/internal/verify_certificate_chain_unittest.cc
index d66f674..7a162b8 100644
--- a/net/cert/internal/verify_certificate_chain_unittest.cc
+++ b/net/cert/internal/verify_certificate_chain_unittest.cc
@@ -14,21 +14,17 @@
 
 class VerifyCertificateChainDelegate {
  public:
-  static void Verify(const ParsedCertificateList& chain,
-                     const scoped_refptr<TrustAnchor>& trust_anchor,
-                     const der::GeneralizedTime& time,
-                     bool expected_result,
-                     const std::string& expected_errors,
+  static void Verify(const VerifyCertChainTest& test,
                      const std::string& test_file_path) {
-    ASSERT_TRUE(trust_anchor);
+    ASSERT_TRUE(test.trust_anchor);
 
     SimpleSignaturePolicy signature_policy(1024);
 
     CertPathErrors errors;
-    bool result = VerifyCertificateChain(chain, trust_anchor.get(),
-                                         &signature_policy, time, &errors);
-    EXPECT_EQ(expected_result, result);
-    EXPECT_EQ(expected_errors, errors.ToDebugString(chain))
+    bool result = VerifyCertificateChain(test.chain, test.trust_anchor.get(),
+                                         &signature_policy, test.time, &errors);
+    EXPECT_EQ(test.expected_result, result);
+    EXPECT_EQ(test.expected_errors, errors.ToDebugString(test.chain))
         << "Test file: " << test_file_path;
     EXPECT_EQ(result, !errors.ContainsHighSeverityErrors());
   }
diff --git a/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem b/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem
index 01d64cf..0e80a32 100644
--- a/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem
+++ b/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ec:1a:fe:56:e3:0e:27:0c:51:3b:f8:18:3a:2f:
-                    18:97:f4:9a:3c:6b:8f:7c:5e:7e:0e:07:ba:9d:f4:
-                    1e:2c:86:0f:85:8f:80:de:35:96:29:2a:64:56:0d:
-                    e8:8d:2d:84:8d:78:3a:e2:ec:e7:c6:4f:ba:b8:35:
-                    d4:6b:e0:02:8b:58:d5:61:90:fe:fa:13:fd:7c:63:
-                    6f:ce:4b:75:ea:cd:0d:ab:cd:75:bf:ef:c4:b0:3d:
-                    8a:64:9a:0d:e6:b3:80:09:a8:21:52:ff:dc:05:e8:
-                    4d:00:78:8d:94:43:2d:24:9b:81:a4:89:81:5f:d3:
-                    0f:e7:76:46:bf:cd:0f:24:30:0d:13:1b:49:f5:c3:
-                    90:f4:8a:d3:1a:47:75:9f:73:97:be:4b:5b:d0:7d:
-                    01:42:64:e3:16:a6:ef:86:91:78:19:a1:a8:c9:3f:
-                    41:a1:dc:ca:c0:7c:0d:a3:72:af:6b:c9:2f:1b:81:
-                    ba:fa:7e:65:af:de:95:fa:5d:1f:30:22:98:79:db:
-                    4a:6a:e8:0f:99:58:e6:20:f4:68:d9:e0:21:cf:ad:
-                    3c:ad:9e:43:34:e7:26:62:e6:15:cb:95:78:6c:4b:
-                    3b:73:71:8d:b8:c0:dd:f8:52:4b:92:25:22:2e:39:
-                    04:73:24:47:09:46:07:5f:80:9a:c5:5d:69:5a:03:
-                    03:1b
+                    00:c8:f1:e2:5c:ee:69:40:e3:8a:2f:c5:4c:19:35:
+                    17:95:32:7f:be:5d:7c:02:19:fa:fb:e5:28:13:d2:
+                    63:1e:6a:4f:a3:bc:e6:77:af:fd:de:77:de:de:41:
+                    93:1a:81:d9:9e:50:65:97:c9:f2:03:67:27:84:aa:
+                    fb:8a:3e:46:b3:43:07:3f:44:38:60:84:a4:79:1b:
+                    f6:5c:81:5b:4b:73:07:b2:6e:57:35:12:6e:b5:79:
+                    ce:34:4a:be:5c:c0:6c:5e:4a:60:86:6a:31:6a:29:
+                    67:43:d3:98:51:ba:0e:30:c1:3f:99:62:1b:0f:f1:
+                    bf:4d:6c:aa:04:2b:79:d4:ea:d1:ac:65:02:39:b6:
+                    01:01:c5:10:6c:b5:2e:57:f7:bf:e4:fc:b7:27:6e:
+                    a5:70:3d:a4:5e:ff:40:d2:73:8e:a0:9e:58:49:95:
+                    31:6d:49:c3:3a:06:ee:d2:14:1e:a5:a4:04:64:55:
+                    70:45:6d:0b:11:5e:81:15:f0:39:79:cc:0c:40:da:
+                    79:4e:60:6d:02:96:ec:ee:0d:af:1a:fd:c1:9f:b5:
+                    bb:bc:43:db:0e:6f:e9:d3:62:86:e5:23:07:b1:c1:
+                    09:b9:5e:37:0e:93:06:e7:4b:93:85:bb:78:cd:2b:
+                    c6:68:d4:b5:1e:c0:75:5f:00:cc:e4:a7:8c:ec:fb:
+                    32:dd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7B:92:03:28:A9:49:81:7F:C8:EC:36:25:A4:A8:31:A8:09:E0:AF:DD
+                9A:5B:96:DC:94:94:07:D1:04:BF:29:A7:6E:F1:01:EE:6F:8B:B6:74
             X509v3 Authority Key Identifier: 
-                keyid:73:DB:AF:CB:C5:A7:D4:A3:D4:A4:0B:33:21:04:3C:37:CE:8F:BE:2D
+                keyid:7A:81:EF:00:EF:96:26:9C:AA:B5:A1:7B:F5:02:C4:00:DC:D1:ED:52
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         40:59:36:cb:ac:7f:e8:5f:ff:57:eb:09:f3:fc:c3:e9:2b:b2:
-         90:6e:6b:e7:60:a9:6c:1d:02:f5:5f:cc:29:f6:ed:25:fd:63:
-         7d:48:e2:f0:c8:ec:59:a1:8b:49:c3:a9:63:a1:12:70:7d:6f:
-         a3:04:bf:1a:83:6a:e1:21:5f:ee:6b:6f:9f:5d:4b:79:cb:4c:
-         43:a4:92:ea:41:ea:e1:36:92:90:fd:01:0a:82:65:0e:3c:19:
-         44:fd:b5:f3:eb:69:cd:c5:ec:9c:f6:bf:34:35:36:8d:73:c2:
-         6f:ee:20:63:c7:c5:1b:ca:13:2a:fb:2c:dc:a0:24:49:7f:42:
-         f3:be:16:6d:62:5b:c9:88:20:bb:e4:99:11:e5:59:66:40:23:
-         bf:a2:cb:54:14:76:39:7a:7c:82:8f:dd:16:b9:4f:e4:d5:05:
-         ab:ea:eb:6b:55:64:ba:15:42:7b:4e:cf:25:68:12:8f:55:0e:
-         47:93:bf:0b:01:b5:68:76:c3:1e:2e:1d:96:8e:f1:da:fd:13:
-         ed:29:cf:8e:30:2d:dc:9c:d6:1a:04:1b:7a:8c:c3:fd:a1:42:
-         72:79:2e:47:c8:7f:28:b0:8e:ea:2a:b3:de:b0:0d:17:4a:e0:
-         7b:ec:a4:93:89:aa:a4:ef:c4:6e:d2:4f:ea:6f:16:f6:4f:6f:
-         41:d9:8e:55
+         19:13:bf:58:b6:96:ec:62:65:28:37:09:a3:59:b3:ae:cc:ac:
+         9e:4c:83:51:66:50:e4:0b:60:13:af:4c:83:f5:5f:e0:96:f9:
+         9e:b1:3b:f6:24:d6:66:4f:eb:28:5d:b3:9b:44:b7:e0:4e:3f:
+         e3:60:91:34:54:fb:5e:3e:82:37:32:ff:c3:b0:18:1f:99:0e:
+         94:33:4e:e8:3f:57:e5:09:2d:a7:ef:55:47:29:3e:ee:b0:11:
+         d7:c7:b0:cb:57:a3:a5:cc:a6:50:24:77:71:d9:79:d8:3e:db:
+         5c:cd:e2:9b:46:c7:7d:7c:a4:c7:62:47:84:b9:d5:09:a4:ec:
+         a9:42:af:2c:78:eb:7e:23:b2:f8:78:a3:05:65:95:46:29:e2:
+         41:57:62:24:f8:43:79:90:87:a5:70:8f:cc:67:2d:c2:26:b0:
+         e8:b6:b4:66:e8:e0:08:0e:62:ad:ef:60:71:a8:d9:ee:01:4d:
+         d0:1e:a1:b6:ba:4c:c0:46:b0:b8:bc:d6:1b:3b:d9:28:bb:4b:
+         bb:3a:03:76:a9:4c:60:15:45:47:c3:da:25:af:62:b8:e1:9e:
+         a2:22:66:47:01:94:b3:71:77:b2:f6:e3:3a:8f:4b:85:c3:38:
+         71:40:c8:f6:39:31:fe:8c:70:c9:08:0a:d6:5b:89:bc:2b:01:
+         55:55:ba:28
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDsGv5W
-4w4nDFE7+Bg6LxiX9Jo8a498Xn4OB7qd9B4shg+Fj4DeNZYpKmRWDeiNLYSNeDri
-7OfGT7q4NdRr4AKLWNVhkP76E/18Y2/OS3XqzQ2rzXW/78SwPYpkmg3ms4AJqCFS
-/9wF6E0AeI2UQy0km4GkiYFf0w/ndka/zQ8kMA0TG0n1w5D0itMaR3Wfc5e+S1vQ
-fQFCZOMWpu+GkXgZoajJP0Gh3MrAfA2jcq9ryS8bgbr6fmWv3pX6XR8wIph520pq
-6A+ZWOYg9GjZ4CHPrTytnkM05yZi5hXLlXhsSztzcY24wN34UkuSJSIuOQRzJEcJ
-RgdfgJrFXWlaAwMbAgMBAAGjgekwgeYwHQYDVR0OBBYEFHuSAyipSYF/yOw2JaSo
-MagJ4K/dMB8GA1UdIwQYMBaAFHPbr8vFp9Sj1KQLMyEEPDfOj74tMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDI8eJc
+7mlA44ovxUwZNReVMn++XXwCGfr75SgT0mMeak+jvOZ3r/3ed97eQZMagdmeUGWX
+yfIDZyeEqvuKPkazQwc/RDhghKR5G/ZcgVtLcweyblc1Em61ec40Sr5cwGxeSmCG
+ajFqKWdD05hRug4wwT+ZYhsP8b9NbKoEK3nU6tGsZQI5tgEBxRBstS5X97/k/Lcn
+bqVwPaRe/0DSc46gnlhJlTFtScM6Bu7SFB6lpARkVXBFbQsRXoEV8Dl5zAxA2nlO
+YG0CluzuDa8a/cGftbu8Q9sOb+nTYoblIwexwQm5XjcOkwbnS5OFu3jNK8Zo1LUe
+wHVfAMzkp4zs+zLdAgMBAAGjgekwgeYwHQYDVR0OBBYEFJpbltyUlAfRBL8pp27x
+Ae5vi7Z0MB8GA1UdIwQYMBaAFHqB7wDvliacqrWhe/UCxADc0e1SMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAQFk2y6x/6F//V+sJ8/zD
-6SuykG5r52CpbB0C9V/MKfbtJf1jfUji8MjsWaGLScOpY6EScH1vowS/GoNq4SFf
-7mtvn11LectMQ6SS6kHq4TaSkP0BCoJlDjwZRP218+tpzcXsnPa/NDU2jXPCb+4g
-Y8fFG8oTKvss3KAkSX9C874WbWJbyYggu+SZEeVZZkAjv6LLVBR2OXp8go/dFrlP
-5NUFq+rra1VkuhVCe07PJWgSj1UOR5O/CwG1aHbDHi4dlo7x2v0T7SnPjjAt3JzW
-GgQbeozD/aFCcnkuR8h/KLCO6iqz3rANF0rge+ykk4mqpO/EbtJP6m8W9k9vQdmO
-VQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAGRO/WLaW7GJlKDcJo1mz
+rsysnkyDUWZQ5AtgE69Mg/Vf4Jb5nrE79iTWZk/rKF2zm0S34E4/42CRNFT7Xj6C
+NzL/w7AYH5kOlDNO6D9X5Qktp+9VRyk+7rAR18ewy1ejpcymUCR3cdl52D7bXM3i
+m0bHfXykx2JHhLnVCaTsqUKvLHjrfiOy+HijBWWVRiniQVdiJPhDeZCHpXCPzGct
+wiaw6La0ZujgCA5ire9gcajZ7gFN0B6htrpMwEawuLzWGzvZKLtLuzoDdqlMYBVF
+R8PaJa9iuOGeoiJmRwGUs3F3svbjOo9LhcM4cUDI9jkx/oxwyQgK1luJvCsBVVW6
+KA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bc:3f:0f:56:90:45:57:c4:d8:42:91:22:59:d4:
-                    81:5e:4b:af:73:90:fc:5f:85:cc:14:71:73:c5:76:
-                    70:2b:2c:f7:25:e7:b8:7d:a0:1d:a7:70:b4:f9:b8:
-                    08:1f:58:33:95:5f:37:73:c2:39:eb:da:ac:4b:fe:
-                    18:77:35:d5:46:e7:d3:2e:8d:d5:df:c9:21:98:c3:
-                    86:5d:22:f0:19:b1:1c:e0:49:a7:ad:d4:c7:e0:e4:
-                    f1:ef:c1:b7:48:38:de:a9:d3:fc:4d:14:a4:53:b6:
-                    80:64:bf:f7:82:3e:05:9a:7e:b7:b4:5a:5f:6d:28:
-                    1a:91:86:a6:f8:f5:37:42:8a:81:7b:25:e8:1f:75:
-                    e1:7f:bf:01:38:05:dd:38:ae:04:2e:8a:9e:e0:b7:
-                    c5:2a:aa:7b:4e:1e:ff:87:97:c8:9e:dd:33:ef:d9:
-                    f5:58:80:04:9a:e1:b6:49:d9:b9:85:40:d7:c7:fe:
-                    e1:13:73:e5:70:37:cd:40:1d:eb:9b:43:52:e6:c3:
-                    31:a0:2f:fb:82:38:62:aa:9e:08:dd:bc:4d:2b:05:
-                    f0:a3:31:ab:b7:47:ca:69:a6:47:14:c1:64:63:d0:
-                    0c:2d:bc:6c:e3:d2:98:e0:df:25:0d:9f:1f:9b:07:
-                    1b:80:0f:9d:da:04:67:8d:e0:cf:0b:5b:ec:f6:62:
-                    5f:51
+                    00:f2:7f:51:83:f1:cf:ad:13:e7:2b:10:61:a7:9a:
+                    d4:a3:92:3f:c2:91:b1:87:22:2d:2b:ac:0b:bd:e2:
+                    02:a0:ca:30:7b:ea:24:bf:d9:c9:2c:82:4d:a9:ba:
+                    f2:21:e2:c2:ab:79:3a:f1:06:c2:bb:9a:48:2c:7e:
+                    19:49:85:84:1c:c2:1c:92:a1:0b:ea:db:04:ea:ac:
+                    29:14:bf:a5:1e:bb:65:81:87:15:ad:4a:84:d9:6b:
+                    c6:72:c3:df:5d:8c:d3:ec:b5:8a:cc:13:38:77:04:
+                    9a:1c:d9:5a:f3:db:5a:4a:d9:40:a5:bd:f1:13:e2:
+                    be:03:c4:ec:a6:c0:0b:8a:8d:92:46:38:f3:23:24:
+                    d3:46:28:23:52:85:70:04:c7:8d:12:b0:a9:75:e8:
+                    c4:b2:f6:5d:05:05:1f:f7:c1:28:b4:0d:e6:e8:18:
+                    24:9e:91:bf:56:f4:1a:47:35:67:79:19:77:92:8a:
+                    c0:05:17:bc:ce:47:d7:f6:b1:20:2b:bf:c7:7e:ab:
+                    03:49:07:e2:9d:2a:85:04:f6:9a:74:c1:19:f6:ed:
+                    dc:9b:9e:16:14:9e:99:b7:14:8a:c2:bc:0e:58:da:
+                    21:6f:42:97:d3:14:f9:c4:9a:7e:cd:da:84:92:b3:
+                    bc:f6:4f:22:2c:55:9b:a5:77:e1:ce:3c:36:ce:2c:
+                    32:37
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                73:DB:AF:CB:C5:A7:D4:A3:D4:A4:0B:33:21:04:3C:37:CE:8F:BE:2D
+                7A:81:EF:00:EF:96:26:9C:AA:B5:A1:7B:F5:02:C4:00:DC:D1:ED:52
             X509v3 Authority Key Identifier: 
-                keyid:48:4D:93:8D:A1:E0:46:7F:2F:DD:60:DF:D1:DF:58:29:2C:1B:CB:4F
+                keyid:56:E7:9F:25:A4:B7:B0:69:2F:53:F0:23:9A:E6:16:88:B2:BB:B9:BC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:0
     Signature Algorithm: sha256WithRSAEncryption
-         02:4e:c6:b9:10:f4:c7:3a:52:73:e3:7c:02:6d:61:77:b3:f8:
-         98:5f:c5:f2:b4:78:74:36:6b:40:6e:fc:a7:53:7c:b2:5e:e3:
-         35:08:1b:44:6c:51:75:29:0f:d1:6c:c0:eb:92:da:11:41:6d:
-         d8:56:01:aa:81:e2:58:4f:24:bd:bd:25:6b:ab:b3:b3:0a:05:
-         1c:db:ed:c2:34:68:11:34:67:ef:32:81:be:e1:53:0b:dd:2b:
-         ec:07:13:b8:12:b5:42:84:02:e0:56:69:f1:71:bd:6c:1a:5a:
-         64:59:8b:4c:a5:d2:7d:13:7d:99:d5:4e:94:41:5c:69:f7:32:
-         12:6a:c9:a9:ce:96:1f:6d:72:60:35:d1:fc:2f:c6:66:a2:2e:
-         48:1e:6e:0a:80:07:5b:d9:b7:ec:28:78:c3:31:2d:c8:45:0d:
-         28:94:b4:98:ba:83:1e:66:e7:f1:37:1e:f6:1d:00:50:90:c0:
-         58:09:f2:ee:02:85:0c:10:65:0b:c8:2b:04:06:92:64:d4:34:
-         10:36:99:f0:e4:fa:b6:b4:24:3a:57:6c:34:b4:dc:bf:48:d5:
-         df:97:a7:16:3d:3d:48:ed:c3:3c:b7:ca:e9:36:b4:43:49:e5:
-         ba:e9:c3:11:70:2f:b2:74:31:4c:60:da:b3:c4:b6:82:43:e8:
-         f1:e7:1a:4a
+         54:6b:d3:d1:28:70:dc:e1:2a:0d:26:33:92:22:7c:da:43:3a:
+         d3:23:bb:8f:a5:e0:49:ed:51:dc:00:bb:66:05:8a:a9:2f:e3:
+         b1:fe:4d:ca:97:01:87:a2:45:88:47:93:50:81:e1:8e:c2:1b:
+         25:eb:c6:62:71:65:be:2a:43:4a:6f:57:81:59:fd:f6:03:60:
+         85:a3:64:50:26:a1:30:ee:a9:4f:37:11:18:04:02:b9:f3:b8:
+         11:5e:f7:ec:ee:cb:cb:7e:c3:e6:b9:98:72:e7:9d:08:4d:98:
+         e1:96:b0:d9:8b:02:e3:78:5c:12:38:8d:0d:df:34:b9:6c:e1:
+         7c:82:73:ec:a2:67:2a:76:9e:3c:88:c0:cf:77:f3:f8:48:18:
+         4a:e5:6e:59:e4:c1:e9:df:d7:ed:d2:2e:7e:0c:59:a5:ae:43:
+         55:06:8e:03:8b:ac:6d:57:f0:67:ac:3f:db:4e:0b:58:92:70:
+         59:b8:8d:dd:5e:ae:88:6e:51:5b:a8:fe:7c:a6:c8:f3:65:5e:
+         67:a1:9e:47:2b:9c:ce:5f:52:87:cb:83:06:e9:98:45:0b:11:
+         b8:db:8a:d9:7c:8c:2f:60:14:b7:36:9b:a5:d2:27:48:93:11:
+         9a:3b:c1:e7:d0:3c:88:f0:dd:81:3f:7a:3d:4f:6d:ab:e2:21:
+         5d:f0:a4:b6
 -----BEGIN CERTIFICATE-----
 MIIDiDCCAnCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjAXMRUwEwYD
 VQQDDAxJbnRlcm1lZGlhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQC8Pw9WkEVXxNhCkSJZ1IFeS69zkPxfhcwUcXPFdnArLPcl57h9oB2ncLT5uAgf
-WDOVXzdzwjnr2qxL/hh3NdVG59MujdXfySGYw4ZdIvAZsRzgSaet1Mfg5PHvwbdI
-ON6p0/xNFKRTtoBkv/eCPgWafre0Wl9tKBqRhqb49TdCioF7JegfdeF/vwE4Bd04
-rgQuip7gt8UqqntOHv+Hl8ie3TPv2fVYgASa4bZJ2bmFQNfH/uETc+VwN81AHeub
-Q1LmwzGgL/uCOGKqngjdvE0rBfCjMau3R8pppkcUwWRj0AwtvGzj0pjg3yUNnx+b
-BxuAD53aBGeN4M8LW+z2Yl9RAgMBAAGjgd4wgdswHQYDVR0OBBYEFHPbr8vFp9Sj
-1KQLMyEEPDfOj74tMB8GA1UdIwQYMBaAFEhNk42h4EZ/L91g39HfWCksG8tPMD8G
+AQDyf1GD8c+tE+crEGGnmtSjkj/CkbGHIi0rrAu94gKgyjB76iS/2cksgk2puvIh
+4sKreTrxBsK7mkgsfhlJhYQcwhySoQvq2wTqrCkUv6Ueu2WBhxWtSoTZa8Zyw99d
+jNPstYrMEzh3BJoc2Vrz21pK2UClvfET4r4DxOymwAuKjZJGOPMjJNNGKCNShXAE
+x40SsKl16MSy9l0FBR/3wSi0DeboGCSekb9W9BpHNWd5GXeSisAFF7zOR9f2sSAr
+v8d+qwNJB+KdKoUE9pp0wRn27dybnhYUnpm3FIrCvA5Y2iFvQpfTFPnEmn7N2oSS
+s7z2TyIsVZuld+HOPDbOLDI3AgMBAAGjgd4wgdswHQYDVR0OBBYEFHqB7wDvliac
+qrWhe/UCxADc0e1SMB8GA1UdIwQYMBaAFFbnnyWkt7BpL1PwI5rmFoiyu7m8MD8G
 CCsGAQUFBwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0lu
 dGVybWVkaWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3It
 Y3JsL0ludGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI
-MAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAAJOxrkQ9Mc6UnPjfAJtYXez+Jhf
-xfK0eHQ2a0Bu/KdTfLJe4zUIG0RsUXUpD9FswOuS2hFBbdhWAaqB4lhPJL29JWur
-s7MKBRzb7cI0aBE0Z+8ygb7hUwvdK+wHE7gStUKEAuBWafFxvWwaWmRZi0yl0n0T
-fZnVTpRBXGn3MhJqyanOlh9tcmA10fwvxmaiLkgebgqAB1vZt+woeMMxLchFDSiU
-tJi6gx5m5/E3HvYdAFCQwFgJ8u4ChQwQZQvIKwQGkmTUNBA2mfDk+ra0JDpXbDS0
-3L9I1d+XpxY9PUjtwzy3yuk2tENJ5brpwxFwL7J0MUxg2rPEtoJD6PHnGko=
+MAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAFRr09EocNzhKg0mM5IifNpDOtMj
+u4+l4EntUdwAu2YFiqkv47H+TcqXAYeiRYhHk1CB4Y7CGyXrxmJxZb4qQ0pvV4FZ
+/fYDYIWjZFAmoTDuqU83ERgEArnzuBFe9+zuy8t+w+a5mHLnnQhNmOGWsNmLAuN4
+XBI4jQ3fNLls4XyCc+yiZyp2njyIwM938/hIGErlblnkwenf1+3SLn4MWaWuQ1UG
+jgOLrG1X8GesP9tOC1iScFm4jd1erohuUVuo/nymyPNlXmehnkcrnM5fUofLgwbp
+mEULEbjbitl8jC9gFLc2m6XSJ0iTEZo7wefQPIjw3YE/ej1PbaviIV3wpLY=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:df:e8:e6:8a:d4:14:cf:36:33:e1:1b:9d:9a:cc:
-                    d0:2c:1d:50:df:32:32:c7:d8:27:cc:68:21:8b:6d:
-                    1b:b0:14:8f:51:64:7f:6d:a4:ca:8d:73:b2:64:93:
-                    fe:63:55:50:09:64:e6:2b:7c:e0:21:c8:39:98:13:
-                    12:34:70:60:0c:67:20:4a:35:3d:9f:9b:11:f4:8d:
-                    34:3f:b8:fb:b7:88:42:cb:70:94:a7:9f:b6:f2:46:
-                    24:21:3f:ec:26:a6:39:63:87:04:04:9a:33:01:b6:
-                    dc:05:67:79:16:d6:e2:0b:fe:de:31:9a:a7:a2:07:
-                    8b:dc:1c:eb:70:ea:4a:76:b1:cd:b8:79:f8:e2:8e:
-                    a4:4a:a7:c6:9b:ad:34:a6:1d:40:c9:8d:04:df:66:
-                    87:a1:d4:8b:59:4e:e9:11:42:2c:7d:19:d6:e9:bb:
-                    d3:2c:b3:d5:df:69:c2:00:83:f8:3b:80:98:71:92:
-                    62:34:8b:6d:d4:fa:5d:d9:31:a6:d4:fb:ff:e2:9f:
-                    e2:ad:0a:bf:15:63:55:54:96:d9:f2:46:01:c8:06:
-                    a8:00:45:ad:b5:d1:4d:f0:e4:a8:f5:19:04:7b:03:
-                    33:8f:bb:94:9d:b3:23:cd:5e:73:54:62:3b:09:0f:
-                    73:8c:4f:0c:5a:2c:64:bb:33:70:49:2b:6f:cc:93:
-                    49:91
+                    00:ca:54:d4:15:17:dd:b1:db:15:d1:38:5b:1b:50:
+                    14:2c:6f:6a:b7:68:9c:1d:22:25:5f:6d:60:8c:ca:
+                    0c:00:03:a1:c9:29:c9:3b:99:70:89:5c:68:a8:45:
+                    03:c3:0c:c3:28:d1:78:f7:25:50:82:7a:91:f3:cb:
+                    45:77:6e:e8:9d:ee:25:61:c3:68:75:ea:12:55:0d:
+                    eb:68:7d:7f:a2:29:a8:9f:f0:9f:5a:5d:49:c1:f9:
+                    42:2b:d8:6e:7d:4e:7a:3c:9e:a5:1a:88:b6:4b:a0:
+                    c9:ad:70:71:b8:87:e0:8d:1c:f4:9b:73:c3:71:53:
+                    94:59:da:c8:d1:b8:b7:45:f5:07:27:8b:25:50:97:
+                    49:d2:f2:18:e4:54:20:f2:e4:73:32:ba:eb:d4:8f:
+                    91:98:47:b0:d6:a2:84:4a:eb:6f:83:74:87:03:df:
+                    f1:2d:3d:80:98:02:a0:39:64:1a:9c:ca:76:f5:89:
+                    5f:05:4e:5f:54:e3:bf:93:1e:f8:07:e0:6b:68:98:
+                    c6:07:65:87:a2:29:7d:e4:2c:b6:74:ce:83:eb:90:
+                    e1:f9:0f:7b:6d:22:0b:05:60:c9:56:5f:74:f7:52:
+                    a1:35:dc:93:ea:55:e8:f3:ee:3e:af:2a:63:82:9a:
+                    d0:99:8b:3a:9b:31:98:ae:89:47:1c:c8:21:0b:02:
+                    49:15
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                48:4D:93:8D:A1:E0:46:7F:2F:DD:60:DF:D1:DF:58:29:2C:1B:CB:4F
+                56:E7:9F:25:A4:B7:B0:69:2F:53:F0:23:9A:E6:16:88:B2:BB:B9:BC
             X509v3 Authority Key Identifier: 
-                keyid:1A:7A:32:47:1F:8A:2F:A8:FC:F7:F0:A3:67:37:3E:39:C8:F4:46:02
+                keyid:79:ED:B5:85:64:70:21:AA:F0:9F:A9:64:82:D5:9D:46:C7:86:45:C3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:0
     Signature Algorithm: sha256WithRSAEncryption
-         94:bc:e1:64:08:ca:c2:07:5e:6e:16:0a:95:78:26:81:d1:6f:
-         14:5d:10:b0:4a:0b:f9:04:1f:58:68:35:1b:70:cd:d3:22:58:
-         62:7d:38:a2:f3:69:af:a3:1e:a0:22:4d:9b:5a:4b:36:3e:78:
-         49:a0:aa:02:9d:fe:5c:ce:df:6b:e8:f4:fb:5b:05:7c:78:4f:
-         f4:66:56:0c:95:c4:31:59:33:f0:e8:be:ad:1c:5d:36:64:0d:
-         b4:ee:49:19:9f:ad:b7:f5:c4:4c:8e:58:db:61:b7:a2:a7:f7:
-         86:22:da:2f:07:65:33:0a:23:86:59:2d:33:37:8f:e9:a9:24:
-         84:5a:43:5f:80:5a:88:97:1c:b3:ea:50:0e:10:f4:4f:36:28:
-         3a:6a:4a:70:0b:78:16:97:83:ea:ae:34:94:87:02:7b:6d:a0:
-         7d:1b:8c:9b:66:3e:69:f5:d1:6e:04:83:6b:f1:68:a0:69:2b:
-         88:7c:57:e1:42:81:d3:a8:d8:c7:7e:aa:3a:bf:37:1e:fd:64:
-         a7:3a:4a:10:3b:7e:c9:fe:d0:ac:c0:d4:f0:16:4a:78:f2:7f:
-         db:db:4c:8c:96:42:27:85:02:32:b8:71:ca:41:ac:a9:5e:11:
-         a1:f7:3b:4b:f4:ae:b0:25:ff:cc:4e:12:5b:ca:a6:ae:ed:71:
-         c8:14:47:56
+         37:35:37:79:96:28:98:44:ea:fa:13:bf:fe:22:ab:d4:ca:f4:
+         5b:31:f6:63:24:98:13:46:9e:5a:52:85:f8:fe:e2:92:24:17:
+         1a:96:93:f7:bf:40:6b:25:fe:1c:bd:f3:3d:38:15:d1:03:e0:
+         53:6e:2d:48:fa:0e:77:d3:a1:20:83:f1:5e:19:6c:fe:6d:68:
+         b5:a4:97:ab:ca:b0:79:e7:33:be:ae:98:0c:ca:02:97:17:65:
+         94:f9:c4:7b:f1:92:80:3f:09:27:a8:9e:f5:0e:82:95:2b:06:
+         8d:7c:51:7b:e8:6b:0a:6f:ea:91:90:83:3b:c5:e2:85:7d:b1:
+         13:c7:e8:94:a2:e0:14:e2:d7:43:29:dc:5d:cc:fa:f3:b2:8b:
+         6e:6a:cf:cc:65:98:77:a3:16:5e:8c:fb:57:30:b4:a1:03:d6:
+         d9:22:6a:a8:8e:19:0f:09:9a:30:ee:73:97:41:8e:ab:94:34:
+         95:90:48:49:b6:b6:9b:36:54:e6:db:d8:8c:2f:e3:35:d8:70:
+         4e:37:63:aa:c8:e2:da:96:5a:30:44:fa:43:a4:97:8e:ed:2e:
+         4d:4c:6e:84:15:72:e9:a5:5b:9c:f3:84:2c:6c:bd:db:54:4c:
+         c4:9a:e6:3d:52:30:17:11:e1:2b:cb:f9:90:53:4e:5f:12:d3:
+         81:ff:7d:21
 -----BEGIN CERTIFICATE-----
 MIIDcDCCAligAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+jmitQU
-zzYz4RudmszQLB1Q3zIyx9gnzGghi20bsBSPUWR/baTKjXOyZJP+Y1VQCWTmK3zg
-Icg5mBMSNHBgDGcgSjU9n5sR9I00P7j7t4hCy3CUp5+28kYkIT/sJqY5Y4cEBJoz
-AbbcBWd5FtbiC/7eMZqnogeL3BzrcOpKdrHNuHn44o6kSqfGm600ph1AyY0E32aH
-odSLWU7pEUIsfRnW6bvTLLPV32nCAIP4O4CYcZJiNItt1Ppd2TGm1Pv/4p/irQq/
-FWNVVJbZ8kYByAaoAEWttdFN8OSo9RkEewMzj7uUnbMjzV5zVGI7CQ9zjE8MWixk
-uzNwSStvzJNJkQIDAQABo4HOMIHLMB0GA1UdDgQWBBRITZONoeBGfy/dYN/R31gp
-LBvLTzAfBgNVHSMEGDAWgBQaejJHH4ovqPz38KNnNz45yPRGAjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylTUFRfd
+sdsV0ThbG1AULG9qt2icHSIlX21gjMoMAAOhySnJO5lwiVxoqEUDwwzDKNF49yVQ
+gnqR88tFd27one4lYcNodeoSVQ3raH1/oimon/CfWl1JwflCK9hufU56PJ6lGoi2
+S6DJrXBxuIfgjRz0m3PDcVOUWdrI0bi3RfUHJ4slUJdJ0vIY5FQg8uRzMrrr1I+R
+mEew1qKESutvg3SHA9/xLT2AmAKgOWQanMp29YlfBU5fVOO/kx74B+BraJjGB2WH
+oil95Cy2dM6D65Dh+Q97bSILBWDJVl9091KhNdyT6lXo8+4+rypjgprQmYs6mzGY
+rolHHMghCwJJFQIDAQABo4HOMIHLMB0GA1UdDgQWBBRW558lpLewaS9T8COa5haI
+sru5vDAfBgNVHSMEGDAWgBR57bWFZHAhqvCfqWSC1Z1Gx4ZFwzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQAD
-ggEBAJS84WQIysIHXm4WCpV4JoHRbxRdELBKC/kEH1hoNRtwzdMiWGJ9OKLzaa+j
-HqAiTZtaSzY+eEmgqgKd/lzO32vo9PtbBXx4T/RmVgyVxDFZM/Dovq0cXTZkDbTu
-SRmfrbf1xEyOWNtht6Kn94Yi2i8HZTMKI4ZZLTM3j+mpJIRaQ1+AWoiXHLPqUA4Q
-9E82KDpqSnALeBaXg+quNJSHAnttoH0bjJtmPmn10W4Eg2vxaKBpK4h8V+FCgdOo
-2Md+qjq/Nx79ZKc6ShA7fsn+0KzA1PAWSnjyf9vbTIyWQieFAjK4ccpBrKleEaH3
-O0v0rrAl/8xOElvKpq7tccgUR1Y=
+ggEBADc1N3mWKJhE6voTv/4iq9TK9Fsx9mMkmBNGnlpShfj+4pIkFxqWk/e/QGsl
+/hy98z04FdED4FNuLUj6DnfToSCD8V4ZbP5taLWkl6vKsHnnM76umAzKApcXZZT5
+xHvxkoA/CSeonvUOgpUrBo18UXvoawpv6pGQgzvF4oV9sRPH6JSi4BTi10Mp3F3M
++vOyi25qz8xlmHejFl6M+1cwtKED1tkiaqiOGQ8JmjDuc5dBjquUNJWQSEm2tps2
+VObb2Iwv4zXYcE43Y6rI4tqWWjBE+kOkl47tLk1MboQVcumlW5zzhCxsvdtUTMSa
+5j1SMBcR4SvL+ZBTTl8S04H/fSE=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -286,30 +286,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:da:42:ae:40:b4:79:95:43:58:4b:a9:e0:62:96:
-                    d0:f2:19:7c:6e:dc:8a:96:f6:5a:ec:66:f6:c3:9d:
-                    3f:0e:18:b9:7a:60:da:df:e1:67:ce:ec:4c:8d:45:
-                    8a:76:5f:1b:c7:22:1c:2b:40:4d:83:ed:1d:94:f0:
-                    21:0f:d1:37:8e:9c:4e:98:29:94:3c:e3:e2:79:74:
-                    4d:12:91:c9:32:b8:6e:7f:7a:d8:26:44:3d:f6:3d:
-                    b6:6b:0f:2a:bd:cd:3d:24:e0:34:bc:53:8b:fa:c6:
-                    86:66:ec:9e:f9:b3:c0:41:cc:23:c2:5a:72:da:de:
-                    f6:56:6e:10:d0:5a:26:d1:e5:7e:f5:bb:6b:67:47:
-                    2a:01:d4:5c:d2:40:89:c5:0b:19:b7:63:32:af:d9:
-                    85:f2:79:77:6a:81:e1:27:13:c7:da:b9:94:7b:25:
-                    c5:d0:ca:67:bb:26:8f:7a:0f:8d:19:67:6d:96:2f:
-                    24:7a:76:50:c3:62:fa:ae:47:99:a4:97:af:f1:ce:
-                    02:8b:fe:50:09:a2:16:07:b3:08:65:e9:35:e8:f5:
-                    b6:54:c2:66:15:ac:97:76:ee:da:0d:92:6e:f1:be:
-                    18:2d:8d:c5:8e:de:fc:a7:b9:fa:27:43:19:4a:08:
-                    d5:ae:0e:9c:7e:7a:8e:36:2f:1d:11:5b:70:c0:77:
-                    90:af
+                    00:b0:41:66:34:fa:a7:25:3b:3f:2b:52:d9:40:dc:
+                    86:a7:31:c8:38:fc:ff:d9:b0:f5:68:f1:41:2d:4e:
+                    53:a2:c1:54:6b:73:e0:5d:33:73:0d:be:ff:09:31:
+                    4f:60:79:04:19:23:b0:ad:19:a7:8e:77:dd:f9:60:
+                    c2:6e:3f:b2:20:71:bb:32:6b:71:59:16:0b:b4:84:
+                    47:7c:89:7a:06:80:2b:ce:67:be:c3:82:b2:41:5c:
+                    4a:a9:af:08:e0:06:40:26:0c:fd:02:51:bd:5f:5b:
+                    89:13:41:bc:da:cf:ac:f7:8a:9b:23:d3:6f:d1:b4:
+                    0e:93:fb:30:b6:42:62:c4:e5:c3:70:81:65:2f:e6:
+                    eb:d9:98:6f:73:23:44:1e:5f:d9:4c:55:ec:40:8c:
+                    3d:84:7e:ca:76:31:8a:05:74:b2:f6:ad:dd:1e:b5:
+                    e3:fa:5e:68:3a:46:ed:7d:33:e1:0b:f2:0c:a5:24:
+                    ee:76:a8:ba:7b:24:a3:b8:55:23:eb:f4:ea:1e:13:
+                    e9:ca:ac:ca:ce:fc:2e:d4:0d:5d:19:a8:6a:8e:d5:
+                    c3:5d:9a:05:08:4e:ae:88:6a:05:d7:06:c4:63:a3:
+                    ec:ba:67:5c:77:83:b6:c3:5d:da:6b:2f:8e:3a:62:
+                    0c:95:15:e8:91:20:86:37:b0:2f:c7:ec:55:bd:7c:
+                    34:df
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                1A:7A:32:47:1F:8A:2F:A8:FC:F7:F0:A3:67:37:3E:39:C8:F4:46:02
+                79:ED:B5:85:64:70:21:AA:F0:9F:A9:64:82:D5:9D:46:C7:86:45:C3
             X509v3 Authority Key Identifier: 
-                keyid:1A:7A:32:47:1F:8A:2F:A8:FC:F7:F0:A3:67:37:3E:39:C8:F4:46:02
+                keyid:79:ED:B5:85:64:70:21:AA:F0:9F:A9:64:82:D5:9D:46:C7:86:45:C3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -324,41 +324,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         c4:30:1e:17:33:a6:67:a2:0f:5e:a9:53:54:f6:2f:f6:18:ad:
-         21:b8:48:8a:81:38:62:1d:63:9f:2e:ef:a6:d2:56:c4:19:b5:
-         00:8e:19:fd:29:35:b9:a5:c1:26:9b:81:4a:2a:a6:37:8a:bf:
-         23:5e:2c:ca:e7:8a:a6:75:7f:fd:49:1b:cc:e8:42:99:2a:b0:
-         44:e3:27:17:11:88:bc:1b:b1:40:f5:5c:f0:85:22:ad:41:8d:
-         a0:95:d7:94:5b:f0:a7:da:56:3a:db:5d:d3:29:d9:87:e3:1e:
-         34:14:c3:91:f9:0b:91:fb:40:f4:9f:44:d9:e3:68:b8:fe:b7:
-         20:8c:d4:63:da:45:60:7f:2d:42:d5:15:b5:9c:69:d6:ed:ff:
-         2b:aa:49:43:0f:a8:52:0c:91:28:88:0f:da:7b:92:66:63:85:
-         b6:f2:29:8f:2c:aa:c4:b4:53:32:a1:00:2f:a5:1d:34:f0:32:
-         b2:59:a1:61:f4:16:42:a5:9a:fb:62:31:e3:85:3b:23:73:2d:
-         c1:cc:88:97:f6:12:95:01:52:5d:c2:06:aa:85:1c:25:78:9e:
-         f5:e6:8f:59:49:7c:d1:a6:e2:f4:1f:a2:7f:92:2b:6a:c0:44:
-         d7:c0:e5:7f:d9:44:13:82:ae:06:ee:1f:64:04:c4:7d:7f:cf:
-         04:97:2e:41
+         15:f2:28:3b:3d:cf:e7:4d:3b:d1:04:a7:16:05:66:3a:ab:20:
+         23:0a:ea:62:e0:0a:7a:00:3f:e8:50:79:8b:27:56:07:39:b2:
+         15:f3:f5:42:dc:ea:fe:3e:7e:f8:36:c5:62:c8:f2:ff:48:0f:
+         22:c3:2d:7d:1a:17:c5:8f:0b:10:1a:16:0c:28:a4:d5:62:3d:
+         b8:c9:03:9f:7b:c0:67:bc:6f:d6:46:14:ae:79:12:da:00:23:
+         1a:6a:47:c4:74:4d:80:9f:2d:ac:14:98:0a:03:d3:56:81:aa:
+         06:5b:30:d0:3e:1c:7c:87:7c:9e:d5:c9:00:b6:e1:14:ef:de:
+         ec:88:3e:a9:37:17:e0:f9:91:8e:f5:65:db:98:14:a2:22:9b:
+         5e:72:40:3f:4d:02:06:71:2f:15:5b:f1:a2:40:c2:07:3b:69:
+         bd:70:91:0b:67:61:36:c2:92:2e:54:c2:ef:c8:6d:1b:4b:46:
+         c4:e7:61:0e:ce:77:31:05:0e:04:d3:05:e8:b9:48:8e:fa:d3:
+         9b:fc:49:7f:43:18:75:cf:99:40:4c:6b:4d:bd:9d:89:9e:b4:
+         32:0d:3c:ac:2a:d0:a1:07:c1:53:17:f8:94:14:fb:ce:65:99:
+         3a:b5:3e:0d:cd:f6:54:7c:9c:cd:0e:47:1f:c0:86:c3:ea:1d:
+         3e:b9:29:26
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANpCrkC0eZVDWEup4GKW
-0PIZfG7cipb2Wuxm9sOdPw4YuXpg2t/hZ87sTI1FinZfG8ciHCtATYPtHZTwIQ/R
-N46cTpgplDzj4nl0TRKRyTK4bn962CZEPfY9tmsPKr3NPSTgNLxTi/rGhmbsnvmz
-wEHMI8Jactre9lZuENBaJtHlfvW7a2dHKgHUXNJAicULGbdjMq/ZhfJ5d2qB4ScT
-x9q5lHslxdDKZ7smj3oPjRlnbZYvJHp2UMNi+q5HmaSXr/HOAov+UAmiFgezCGXp
-Nej1tlTCZhWsl3bu2g2SbvG+GC2NxY7e/Ke5+idDGUoI1a4OnH56jjYvHRFbcMB3
-kK8CAwEAAaOByzCByDAdBgNVHQ4EFgQUGnoyRx+KL6j89/CjZzc+Ocj0RgIwHwYD
-VR0jBBgwFoAUGnoyRx+KL6j89/CjZzc+Ocj0RgIwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALBBZjT6pyU7PytS2UDc
+hqcxyDj8/9mw9WjxQS1OU6LBVGtz4F0zcw2+/wkxT2B5BBkjsK0Zp4533flgwm4/
+siBxuzJrcVkWC7SER3yJegaAK85nvsOCskFcSqmvCOAGQCYM/QJRvV9biRNBvNrP
+rPeKmyPTb9G0DpP7MLZCYsTlw3CBZS/m69mYb3MjRB5f2UxV7ECMPYR+ynYxigV0
+svat3R614/peaDpG7X0z4QvyDKUk7naounsko7hVI+v06h4T6cqsys78LtQNXRmo
+ao7Vw12aBQhOrohqBdcGxGOj7LpnXHeDtsNd2msvjjpiDJUV6JEghjewL8fsVb18
+NN8CAwEAAaOByzCByDAdBgNVHQ4EFgQUee21hWRwIarwn6lkgtWdRseGRcMwHwYD
+VR0jBBgwFoAUee21hWRwIarwn6lkgtWdRseGRcMwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDEMB4XM6Zn
-og9eqVNU9i/2GK0huEiKgThiHWOfLu+m0lbEGbUAjhn9KTW5pcEmm4FKKqY3ir8j
-XizK54qmdX/9SRvM6EKZKrBE4ycXEYi8G7FA9VzwhSKtQY2gldeUW/Cn2lY6213T
-KdmH4x40FMOR+QuR+0D0n0TZ42i4/rcgjNRj2kVgfy1C1RW1nGnW7f8rqklDD6hS
-DJEoiA/ae5JmY4W28imPLKrEtFMyoQAvpR008DKyWaFh9BZCpZr7YjHjhTsjcy3B
-zIiX9hKVAVJdwgaqhRwleJ715o9ZSXzRpuL0H6J/kitqwETXwOV/2UQTgq4G7h9k
-BMR9f88Ely5B
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAV8ig7Pc/n
+TTvRBKcWBWY6qyAjCupi4Ap6AD/oUHmLJ1YHObIV8/VC3Or+Pn74NsViyPL/SA8i
+wy19GhfFjwsQGhYMKKTVYj24yQOfe8BnvG/WRhSueRLaACMaakfEdE2Any2sFJgK
+A9NWgaoGWzDQPhx8h3ye1ckAtuEU797siD6pNxfg+ZGO9WXbmBSiIpteckA/TQIG
+cS8VW/GiQMIHO2m9cJELZ2E2wpIuVMLvyG0bS0bE52EOzncxBQ4E0wXouUiO+tOb
+/El/Qxh1z5lATGtNvZ2JnrQyDTysKtChB8FTF/iUFPvOZZk6tT4NzfZUfJzNDkcf
+wIbD6h0+uSkm
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -370,3 +370,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/common.py b/net/data/verify_certificate_chain_unittest/common.py
index 14ee909..a3d8642 100755
--- a/net/data/verify_certificate_chain_unittest/common.py
+++ b/net/data/verify_certificate_chain_unittest/common.py
@@ -42,6 +42,12 @@
 # The default time tests should use when verifying.
 DEFAULT_TIME = MARCH_2_2015_UTC
 
+KEY_PURPOSE_ANY = 'anyExtendedKeyUsage'
+KEY_PURPOSE_SERVER_AUTH = 'serverAuth'
+KEY_PURPOSE_CLIENT_AUTH = 'clientAuth'
+
+DEFAULT_KEY_PURPOSE = KEY_PURPOSE_SERVER_AUTH
+
 # Counters used to generate unique (but readable) path names.
 g_cur_path_id = {}
 
@@ -451,10 +457,10 @@
     return cert_data.replace('CERTIFICATE', block_name)
 
 
-def write_test_file(description, chain, trust_anchor, utc_time, verify_result,
-                    errors, out_pem=None):
+def write_test_file(description, chain, trust_anchor, utc_time, key_purpose,
+                    verify_result, errors, out_pem=None):
   """Writes a test file that contains all the inputs necessary to run a
-  verification on a certificate chain"""
+  verification on a certificate chain."""
 
   # Prepend the script name that generated the file to the description.
   test_data = '[Created by: %s]\n\n%s\n' % (sys.argv[0], description)
@@ -469,6 +475,8 @@
   verify_result_string = 'SUCCESS' if verify_result else 'FAIL'
   test_data += '\n' + text_data_to_pem('VERIFY_RESULT', verify_result_string)
 
+  test_data += '\n' + text_data_to_pem('KEY_PURPOSE', key_purpose)
+
   if errors is not None:
     test_data += '\n' + text_data_to_pem('ERRORS', errors)
 
diff --git a/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem b/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem
index b8f2d4e..af255e63 100644
--- a/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem
+++ b/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b3:aa:6c:0c:2e:35:34:f6:1f:5d:c3:8b:9e:fe:
-                    f7:7e:5b:26:fd:2b:ba:20:83:92:3a:4e:02:18:7c:
-                    1d:49:c5:05:15:c1:fa:98:b3:5d:0c:e8:03:9b:60:
-                    d4:e3:a6:3e:0c:ae:b3:c5:21:38:3b:a0:02:fd:80:
-                    a6:05:47:29:d2:12:95:6b:41:7b:41:94:45:ce:bd:
-                    65:84:d4:5a:51:cc:81:2a:a4:03:8f:31:00:d5:15:
-                    06:13:54:07:87:99:d9:55:fa:23:a8:19:56:11:87:
-                    78:4d:62:15:55:4d:b1:5f:00:c3:ce:a1:f0:21:6f:
-                    97:01:ef:76:49:6d:21:6b:f8:50:12:e9:48:94:3e:
-                    cd:01:d2:30:1f:2d:e2:25:f8:b5:ee:ad:a8:91:e9:
-                    0d:03:be:b4:11:84:1c:9f:9f:09:60:37:bf:52:c4:
-                    ad:2c:12:6d:eb:2d:1f:e2:c5:64:a8:55:c3:01:e8:
-                    19:f8:be:96:07:e2:3b:32:7f:59:28:12:79:f2:fd:
-                    e4:98:a7:f1:77:9f:28:13:1e:b7:2c:56:d9:af:8f:
-                    a4:9c:ac:4e:7d:3a:3c:a0:a6:06:61:d2:9c:88:d0:
-                    4b:72:d4:f3:88:18:b5:53:90:ae:b2:80:dd:b4:90:
-                    c4:e4:76:20:c3:ee:ed:ce:bb:44:d9:ad:39:b1:dd:
-                    27:cf
+                    00:e6:27:55:64:41:33:04:6b:80:a5:13:f1:bf:73:
+                    1c:1a:4f:ba:fe:8a:34:0d:aa:5a:1e:a0:58:f6:ae:
+                    53:bf:e1:86:1c:b3:6f:92:fa:52:4e:56:81:12:8a:
+                    24:3f:78:6d:0e:98:1a:c4:7f:14:2c:f1:72:3c:0d:
+                    d2:7c:1d:e4:11:24:73:9e:8f:6a:1b:1d:c4:46:b7:
+                    dd:8a:8c:df:04:31:a7:67:c8:68:08:4e:f9:45:68:
+                    17:aa:00:10:44:16:3b:8c:63:93:d7:7e:c5:79:9a:
+                    bc:e1:2e:cc:57:0d:ae:b4:35:63:10:3f:6b:46:19:
+                    48:2c:80:f4:03:0c:f4:f6:5b:e0:3f:35:90:97:80:
+                    42:35:ed:30:6d:8d:25:a4:24:b7:61:95:02:ec:a7:
+                    9b:89:7e:75:22:80:34:3c:c8:9b:ea:72:5f:85:38:
+                    f5:28:2a:54:f4:59:d0:9a:34:04:df:26:5f:67:17:
+                    9a:8c:fd:a3:c4:be:c5:8c:8e:72:29:b5:bf:ce:17:
+                    f5:6a:68:0e:6b:9b:7a:94:3d:d0:6a:58:72:58:9a:
+                    a1:4f:eb:1d:14:26:ea:f9:e2:16:d8:c9:68:c9:14:
+                    04:2e:3c:5f:ec:69:f2:b9:0f:e3:84:30:01:7a:54:
+                    98:fb:b5:2f:e0:e1:ef:f2:dd:fa:b5:41:0c:4e:76:
+                    d1:95
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4C:67:B6:67:88:D3:B0:33:53:B8:A0:1F:0F:63:46:A3:28:35:A9:A3
+                32:15:E6:F8:4B:BD:4C:36:3B:51:35:D9:6E:0D:00:1C:A5:6E:DF:EF
             X509v3 Authority Key Identifier: 
-                keyid:9C:54:60:08:5E:37:A1:FA:4A:EA:A7:CB:AB:E1:74:51:84:5F:46:FD
+                keyid:FB:DA:0E:92:4D:60:FD:C1:2C:1C:F6:9B:00:54:DA:31:BA:D0:98:F9
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         26:13:cf:55:3b:59:ce:94:65:01:3e:96:fb:c5:62:d9:d8:0c:
-         53:f2:23:12:f6:a1:a5:c7:30:f3:2b:f2:68:7d:ed:6a:c9:9d:
-         a5:21:b5:5d:1c:aa:4e:af:57:8c:3d:08:e7:72:d6:8c:20:9f:
-         25:f5:cf:31:91:23:47:4e:cc:cc:db:9c:e3:f7:53:d4:46:8f:
-         ea:92:05:37:12:c8:4b:c8:e5:57:24:ed:86:93:0f:14:1b:ea:
-         83:5c:87:c5:52:a4:bb:1c:48:80:4a:28:f6:ef:e6:6d:9a:0c:
-         62:75:11:6d:87:bf:8e:79:14:ed:4a:3f:74:5c:5f:7d:f6:53:
-         f1:dc:94:9b:67:cb:ae:da:18:80:db:31:85:64:ee:b9:36:67:
-         50:a8:26:55:0e:38:74:e3:b3:4f:19:10:b4:82:2b:90:18:34:
-         eb:89:47:3c:2a:fc:e5:06:01:99:fe:8c:56:6c:a1:5b:d6:5f:
-         22:b5:00:c8:dd:fc:ae:43:5a:77:ee:17:1c:27:73:7f:71:a9:
-         e1:e1:0d:7c:81:31:b7:7d:8d:3f:3e:96:8a:2c:5f:bb:8d:7b:
-         ad:b3:91:3a:ce:68:f2:25:02:cf:ca:84:0b:91:4f:b3:f5:d3:
-         e2:34:b6:4a:d7:92:c4:f0:4d:d2:40:f9:46:b7:60:ff:84:95:
-         cd:da:73:73
+         04:cb:ae:c2:7e:4b:84:73:79:b0:b9:a8:1c:39:0e:87:6c:e5:
+         ca:8e:64:6e:59:31:bd:be:63:c9:24:4d:fb:a2:c9:c0:4d:09:
+         5f:53:28:a6:17:7e:3a:dd:03:31:0c:85:9e:c5:2c:5d:4c:3c:
+         ef:57:2b:03:93:4a:de:6d:19:ba:9e:ae:d6:32:9f:5b:35:24:
+         f0:45:d9:65:07:bf:8c:0e:e7:e2:01:06:0e:e8:3d:27:55:bd:
+         76:06:26:90:e0:75:29:2f:d5:e7:c9:ed:c1:27:7d:45:f4:5b:
+         88:f2:2a:7c:ef:c8:bb:e5:b2:0b:01:19:ef:f5:93:29:d5:5e:
+         f1:0e:cf:68:7b:c7:88:40:39:f1:5d:90:c1:45:5e:82:7e:85:
+         a8:ff:af:71:7f:a8:e2:63:f4:7a:d9:9e:e1:af:e2:90:53:8d:
+         1a:b3:75:29:9c:bd:71:53:8b:bc:fe:af:47:b9:7e:9e:8d:fd:
+         6c:23:7b:44:83:61:9f:3e:6a:92:4b:88:80:c5:53:95:32:a3:
+         11:e7:f1:76:1d:21:3f:29:92:53:dd:c2:41:fd:31:bf:78:6a:
+         01:87:70:e3:89:9f:f9:1e:b6:c6:f5:77:d4:67:99:0f:96:35:
+         0b:2b:d9:5e:25:97:b8:5d:b2:ea:cf:38:f3:b2:b6:be:44:12:
+         24:62:b6:9f
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzqmwM
-LjU09h9dw4ue/vd+Wyb9K7ogg5I6TgIYfB1JxQUVwfqYs10M6AObYNTjpj4MrrPF
-ITg7oAL9gKYFRynSEpVrQXtBlEXOvWWE1FpRzIEqpAOPMQDVFQYTVAeHmdlV+iOo
-GVYRh3hNYhVVTbFfAMPOofAhb5cB73ZJbSFr+FAS6UiUPs0B0jAfLeIl+LXuraiR
-6Q0DvrQRhByfnwlgN79SxK0sEm3rLR/ixWSoVcMB6Bn4vpYH4jsyf1koEnny/eSY
-p/F3nygTHrcsVtmvj6ScrE59OjygpgZh0pyI0Ety1POIGLVTkK6ygN20kMTkdiDD
-7u3Ou0TZrTmx3SfPAgMBAAGjgekwgeYwHQYDVR0OBBYEFExntmeI07AzU7igHw9j
-RqMoNamjMB8GA1UdIwQYMBaAFJxUYAheN6H6Suqny6vhdFGEX0b9MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmJ1Vk
+QTMEa4ClE/G/cxwaT7r+ijQNqloeoFj2rlO/4YYcs2+S+lJOVoESiiQ/eG0OmBrE
+fxQs8XI8DdJ8HeQRJHOej2obHcRGt92KjN8EMadnyGgITvlFaBeqABBEFjuMY5PX
+fsV5mrzhLsxXDa60NWMQP2tGGUgsgPQDDPT2W+A/NZCXgEI17TBtjSWkJLdhlQLs
+p5uJfnUigDQ8yJvqcl+FOPUoKlT0WdCaNATfJl9nF5qM/aPEvsWMjnIptb/OF/Vq
+aA5rm3qUPdBqWHJYmqFP6x0UJur54hbYyWjJFAQuPF/safK5D+OEMAF6VJj7tS/g
+4e/y3fq1QQxOdtGVAgMBAAGjgekwgeYwHQYDVR0OBBYEFDIV5vhLvUw2O1E12W4N
+ABylbt/vMB8GA1UdIwQYMBaAFPvaDpJNYP3BLBz2mwBU2jG60Jj5MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAJhPPVTtZzpRlAT6W+8Vi
-2dgMU/IjEvahpccw8yvyaH3tasmdpSG1XRyqTq9XjD0I53LWjCCfJfXPMZEjR07M
-zNuc4/dT1EaP6pIFNxLIS8jlVyTthpMPFBvqg1yHxVKkuxxIgEoo9u/mbZoMYnUR
-bYe/jnkU7Uo/dFxfffZT8dyUm2fLrtoYgNsxhWTuuTZnUKgmVQ44dOOzTxkQtIIr
-kBg064lHPCr85QYBmf6MVmyhW9ZfIrUAyN38rkNad+4XHCdzf3Gp4eENfIExt32N
-Pz6Wiixfu417rbOROs5o8iUCz8qEC5FPs/XT4jS2SteSxPBN0kD5Rrdg/4SVzdpz
-cw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEABMuuwn5LhHN5sLmoHDkO
+h2zlyo5kblkxvb5jySRN+6LJwE0JX1Mophd+Ot0DMQyFnsUsXUw871crA5NK3m0Z
+up6u1jKfWzUk8EXZZQe/jA7n4gEGDug9J1W9dgYmkOB1KS/V58ntwSd9RfRbiPIq
+fO/Iu+WyCwEZ7/WTKdVe8Q7PaHvHiEA58V2QwUVegn6FqP+vcX+o4mP0etme4a/i
+kFONGrN1KZy9cVOLvP6vR7l+no39bCN7RINhnz5qkkuIgMVTlTKjEefxdh0hPymS
+U93CQf0xv3hqAYdw44mf+R62xvV31GeZD5Y1CyvZXiWXuF2y6s8487K2vkQSJGK2
+nw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c6:0a:10:7c:70:eb:74:84:70:54:78:38:0e:6b:
-                    da:e4:e6:9c:3b:92:69:8c:5f:eb:ab:11:af:56:27:
-                    1d:59:94:21:91:c3:5c:2b:cd:67:75:95:5d:fc:d6:
-                    04:e6:65:0d:9b:4b:70:ce:e5:23:11:a8:a3:f5:61:
-                    d4:5b:d0:99:b8:4b:44:51:3d:7a:ed:9d:5d:e7:82:
-                    09:25:23:60:12:16:0f:b9:9a:3d:9f:02:22:39:f3:
-                    02:85:b2:45:a6:f4:81:e7:2f:6a:f9:65:28:94:b4:
-                    61:b2:4b:04:6e:2d:dd:a9:75:3e:d4:78:16:8a:45:
-                    6f:3c:85:81:b2:f1:8d:3b:84:ff:19:bd:c5:4d:58:
-                    d4:87:ec:dc:34:23:5c:e3:67:d8:26:c0:dc:ae:ad:
-                    27:34:8b:60:9d:47:bb:be:54:c1:4a:0d:56:91:c6:
-                    54:2d:07:51:d5:87:5d:e4:d5:b6:ee:1a:50:51:99:
-                    c4:2d:37:2d:47:4a:3e:19:1c:4f:ba:14:2d:0b:b0:
-                    e7:87:ab:d4:e4:ca:93:a7:77:13:6f:10:c6:df:dd:
-                    f0:86:53:03:0d:b6:92:66:1d:bf:63:1c:84:f0:63:
-                    cb:18:d3:f4:54:20:a8:e8:4c:94:21:7e:3f:b5:81:
-                    49:9f:bc:51:b9:eb:12:ab:6d:cb:03:37:d0:30:a8:
-                    1b:11
+                    00:f0:15:83:ff:9f:31:22:1a:3d:4a:0c:45:cf:41:
+                    5e:a1:d0:58:3e:77:f0:8f:78:5b:64:e2:c2:d2:0e:
+                    b4:f8:c3:f3:ba:9a:10:d6:90:9d:93:f9:35:ad:4e:
+                    96:35:e5:e6:a3:52:1b:23:13:3c:3d:e8:9b:ad:de:
+                    7d:05:52:40:f1:c1:90:af:a2:29:2e:81:99:7e:24:
+                    e3:34:b5:cf:01:f2:96:25:40:97:4e:61:29:88:5e:
+                    f6:74:ed:79:94:8c:92:23:dd:56:4d:77:3e:f2:5c:
+                    59:1f:7c:21:37:6b:df:27:d1:13:3a:96:0d:e5:e4:
+                    3c:60:18:42:df:b0:c1:50:b5:e3:4c:83:c9:7f:b5:
+                    f2:06:c4:fd:eb:ea:1d:e6:d8:bc:6f:37:a7:d2:2d:
+                    e6:88:b4:a2:66:cc:5c:43:68:90:b5:ad:af:3f:12:
+                    44:5a:93:27:97:5a:72:bb:a2:88:87:87:44:17:72:
+                    8e:c0:43:67:84:c6:63:66:b8:c4:93:89:b2:a8:6d:
+                    4f:18:fd:39:6f:66:34:1a:b8:f6:ee:40:d7:60:10:
+                    7e:e4:30:fc:08:85:43:6a:8b:3c:05:66:1e:e0:6a:
+                    90:c3:fa:ef:09:e9:eb:a4:08:9d:08:af:d0:f6:b0:
+                    20:ff:9e:7d:7b:ec:57:0b:d7:ab:7a:b2:b2:50:26:
+                    d2:6d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9C:54:60:08:5E:37:A1:FA:4A:EA:A7:CB:AB:E1:74:51:84:5F:46:FD
+                FB:DA:0E:92:4D:60:FD:C1:2C:1C:F6:9B:00:54:DA:31:BA:D0:98:F9
             X509v3 Authority Key Identifier: 
-                keyid:4E:4A:66:D2:28:27:6E:75:19:FA:97:E6:3D:38:18:C6:A6:56:68:69
+                keyid:2A:0D:A0:73:85:3A:BA:A8:17:8D:8D:97:60:4F:7E:3C:85:53:B8:F2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         5e:d4:51:bf:58:80:db:77:af:e6:7c:a7:03:ab:95:ae:e6:0f:
-         26:64:63:b0:70:30:92:1c:f0:d8:7c:f8:93:13:14:e3:62:6e:
-         45:ed:cf:dd:c0:4d:8d:b7:b7:2f:bc:29:2d:6e:c2:ed:d5:10:
-         e6:80:53:91:88:18:35:c5:88:63:69:95:c1:f2:bc:e6:5c:02:
-         01:e7:e8:22:f4:3e:6d:91:09:82:64:12:86:80:b1:27:3c:9b:
-         ee:61:43:c2:1f:54:dc:31:9b:89:38:fe:3d:48:27:f0:fb:c6:
-         44:58:c6:de:21:19:b1:e1:4a:70:e4:1b:aa:ea:ad:e9:d3:a8:
-         bd:23:9a:95:d8:06:3c:32:9d:21:28:7c:de:37:d7:47:a6:96:
-         a0:d1:98:04:19:f5:47:bc:19:f8:9e:b6:dc:4b:d5:39:c6:27:
-         88:ab:9a:19:f1:f1:33:af:e0:62:36:f7:2e:5d:26:5c:70:55:
-         5e:3c:df:20:12:42:54:64:e0:5e:5f:2e:ee:6a:85:a4:1e:15:
-         52:0b:01:01:1b:70:19:fe:67:31:b7:6e:5e:4d:61:93:6b:3c:
-         c3:fd:c7:55:a8:f0:bc:81:5e:2b:38:84:ab:d8:b8:54:3c:a1:
-         59:db:ae:70:2b:71:ca:f3:5f:f8:ce:d0:67:af:45:99:19:8c:
-         25:9d:d1:e9
+         30:00:47:cc:03:e0:c2:98:f6:a9:44:a4:e0:31:40:63:47:a4:
+         67:df:98:9b:d9:d4:67:56:d4:9c:d9:83:31:54:d7:16:16:11:
+         af:04:39:08:d0:3a:3d:e1:ca:29:19:34:b9:0c:dc:f1:1e:3d:
+         98:88:d4:e3:64:3d:6b:fb:f4:f2:57:87:a9:e3:92:ba:33:a7:
+         0c:33:86:ee:b7:59:9d:29:b0:85:ec:c0:00:31:99:1c:5d:08:
+         74:6d:43:b5:44:84:2f:83:02:b8:e3:c0:33:7f:13:29:d2:52:
+         3d:b8:08:e2:ba:c8:fb:fc:08:2c:c7:ed:f0:12:8e:d6:b2:56:
+         9f:38:aa:ad:7e:63:42:ab:96:9a:e6:9c:d8:87:6a:70:5b:04:
+         52:0f:c0:3c:ae:5b:24:8c:42:8b:71:1f:ef:7d:c5:97:c2:5d:
+         47:fa:9a:02:7a:c3:92:b2:bc:8a:e1:ba:81:d6:c1:09:49:29:
+         48:80:a1:ff:23:42:96:a8:57:e6:bb:5d:70:e7:08:59:88:66:
+         48:02:51:e9:5f:2f:04:cb:05:45:36:0b:18:a2:64:d1:d4:66:
+         fb:c9:5b:c3:22:38:ca:0f:c6:62:de:b3:ad:a5:84:78:e5:bd:
+         c5:ea:17:65:4e:14:41:a9:bc:d8:60:5f:09:a2:6c:72:a0:5e:
+         18:0e:69:24
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxgoQfHDr
-dIRwVHg4Dmva5OacO5JpjF/rqxGvVicdWZQhkcNcK81ndZVd/NYE5mUNm0twzuUj
-Eaij9WHUW9CZuEtEUT167Z1d54IJJSNgEhYPuZo9nwIiOfMChbJFpvSB5y9q+WUo
-lLRhsksEbi3dqXU+1HgWikVvPIWBsvGNO4T/Gb3FTVjUh+zcNCNc42fYJsDcrq0n
-NItgnUe7vlTBSg1WkcZULQdR1Ydd5NW27hpQUZnELTctR0o+GRxPuhQtC7Dnh6vU
-5MqTp3cTbxDG393whlMDDbaSZh2/YxyE8GPLGNP0VCCo6EyUIX4/tYFJn7xRuesS
-q23LAzfQMKgbEQIDAQABo4HLMIHIMB0GA1UdDgQWBBScVGAIXjeh+krqp8ur4XRR
-hF9G/TAfBgNVHSMEGDAWgBROSmbSKCdudRn6l+Y9OBjGplZoaTA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8BWD/58x
+Iho9SgxFz0FeodBYPnfwj3hbZOLC0g60+MPzupoQ1pCdk/k1rU6WNeXmo1IbIxM8
+Peibrd59BVJA8cGQr6IpLoGZfiTjNLXPAfKWJUCXTmEpiF72dO15lIySI91WTXc+
+8lxZH3whN2vfJ9ETOpYN5eQ8YBhC37DBULXjTIPJf7XyBsT96+od5ti8bzen0i3m
+iLSiZsxcQ2iQta2vPxJEWpMnl1pyu6KIh4dEF3KOwENnhMZjZrjEk4myqG1PGP05
+b2Y0Grj27kDXYBB+5DD8CIVDaos8BWYe4GqQw/rvCenrpAidCK/Q9rAg/559e+xX
+C9ererKyUCbSbQIDAQABo4HLMIHIMB0GA1UdDgQWBBT72g6STWD9wSwc9psAVNox
+utCY+TAfBgNVHSMEGDAWgBQqDaBzhTq6qBeNjZdgT348hVO48jA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AF7UUb9YgNt3r+Z8pwOrla7mDyZkY7BwMJIc8Nh8+JMTFONibkXtz93ATY23ty+8
-KS1uwu3VEOaAU5GIGDXFiGNplcHyvOZcAgHn6CL0Pm2RCYJkEoaAsSc8m+5hQ8If
-VNwxm4k4/j1IJ/D7xkRYxt4hGbHhSnDkG6rqrenTqL0jmpXYBjwynSEofN4310em
-lqDRmAQZ9Ue8GfiettxL1TnGJ4irmhnx8TOv4GI29y5dJlxwVV483yASQlRk4F5f
-Lu5qhaQeFVILAQEbcBn+ZzG3bl5NYZNrPMP9x1Wo8LyBXis4hKvYuFQ8oVnbrnAr
-ccrzX/jO0GevRZkZjCWd0ek=
+ADAAR8wD4MKY9qlEpOAxQGNHpGffmJvZ1GdW1JzZgzFU1xYWEa8EOQjQOj3hyikZ
+NLkM3PEePZiI1ONkPWv79PJXh6njkrozpwwzhu63WZ0psIXswAAxmRxdCHRtQ7VE
+hC+DArjjwDN/EynSUj24COK6yPv8CCzH7fASjtayVp84qq1+Y0KrlprmnNiHanBb
+BFIPwDyuWySMQotxH+99xZfCXUf6mgJ6w5KyvIrhuoHWwQlJKUiAof8jQpaoV+a7
+XXDnCFmIZkgCUelfLwTLBUU2CxiiZNHUZvvJW8MiOMoPxmLes62lhHjlvcXqF2VO
+FEGpvNhgXwmibHKgXhgOaSQ=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a5:1a:7b:1e:97:d2:f5:6c:17:83:73:76:62:4f:
-                    12:53:75:3d:4b:86:2d:42:77:e7:11:75:65:cd:43:
-                    69:5a:b3:80:ad:42:87:a0:8e:9e:cf:e5:9e:6a:2d:
-                    1f:3e:0a:9a:6e:2b:01:e9:aa:d5:bd:91:50:38:f8:
-                    16:04:79:d3:fe:69:1c:82:9d:e7:10:2c:19:31:8a:
-                    1b:8d:a7:ef:f2:4c:36:de:f6:2f:65:93:78:0a:77:
-                    ba:1d:5b:b1:39:bf:55:71:05:43:fb:6c:d4:49:b2:
-                    35:93:85:c0:99:4e:3b:d2:4d:bf:19:4c:1b:55:b6:
-                    ef:ca:40:b3:6e:6a:18:29:eb:78:fa:f5:7e:15:61:
-                    85:70:1d:1f:a4:cd:59:eb:86:c1:a5:c4:8b:74:22:
-                    e1:5d:9b:80:d4:26:a1:a1:7d:40:4d:89:17:4f:ef:
-                    ea:04:d0:d1:b8:7a:38:b1:a5:13:9a:08:64:4d:85:
-                    88:4e:8d:07:fc:55:0b:22:7e:b7:ab:85:28:b9:d9:
-                    71:c9:99:cb:fb:85:fb:cf:8a:2e:cd:98:90:bb:b1:
-                    17:5f:50:02:5e:23:9c:55:d7:f2:fa:76:47:d6:ee:
-                    12:44:9a:17:c4:67:83:9d:75:5f:20:b1:a8:70:c4:
-                    22:69:00:17:26:a8:9d:c5:88:1a:e5:29:bb:63:c8:
-                    02:f5
+                    00:b9:6b:4b:41:42:a1:61:15:05:4a:1b:4d:cf:26:
+                    42:0f:9d:86:1e:29:97:4c:fd:2a:c3:bd:dd:58:56:
+                    46:85:20:c9:12:98:c1:cc:7c:c7:c6:43:16:47:7e:
+                    f8:37:2c:60:07:e1:a3:45:f8:79:a3:68:f5:3a:90:
+                    5d:2b:b5:74:ea:13:91:69:46:0d:32:c7:9a:a4:a3:
+                    54:cd:16:50:dc:11:62:58:bf:ef:cc:40:d3:76:b9:
+                    0c:a2:45:12:a9:63:f9:40:3f:4c:44:78:87:45:c6:
+                    cc:eb:5a:c5:4f:7f:0c:8f:15:a9:bb:3c:2e:55:1c:
+                    bf:75:73:7d:e3:1e:62:c6:79:08:0e:ec:c9:83:61:
+                    92:b6:71:43:c4:91:a6:d3:11:c7:89:d7:92:e2:32:
+                    21:9b:61:13:84:89:ab:d0:02:9b:72:2e:30:bc:19:
+                    d5:56:d5:e7:ae:e4:e5:ee:59:a1:29:6b:1b:22:ac:
+                    3b:33:2b:3f:06:f6:24:92:04:85:bf:fa:e2:86:06:
+                    f1:46:a4:fd:1c:31:c4:1f:6e:c9:95:27:6a:9d:e9:
+                    0a:24:05:c6:ad:d0:14:16:53:3c:c7:49:da:06:89:
+                    89:ed:ff:0f:c3:76:ba:f6:e6:6b:f9:54:de:c3:7c:
+                    4b:4e:ad:ce:fb:15:90:48:07:f6:6a:1b:f1:e3:70:
+                    37:37
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4E:4A:66:D2:28:27:6E:75:19:FA:97:E6:3D:38:18:C6:A6:56:68:69
+                2A:0D:A0:73:85:3A:BA:A8:17:8D:8D:97:60:4F:7E:3C:85:53:B8:F2
             X509v3 Authority Key Identifier: 
-                keyid:8F:01:DF:48:8B:1D:55:FA:61:CF:0A:EF:D6:89:C1:E7:69:7E:24:51
+                keyid:3C:49:3D:9A:7E:00:F0:23:D1:08:68:01:1A:EB:50:33:F2:B5:1F:F2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/UberRoot.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         c8:bb:c7:40:ef:2b:d4:1d:61:92:65:48:61:99:5b:d4:5b:1d:
-         8d:c6:ea:b8:d4:bf:1b:e9:ea:5a:f0:21:f3:95:b8:e7:cf:e7:
-         c3:8b:68:b2:14:53:fc:c8:07:4d:d8:fc:97:27:8d:0d:41:68:
-         4c:5e:c8:ab:ee:e3:9c:72:d3:d5:5b:a4:3a:2b:e4:2f:e2:13:
-         c8:a5:8d:63:61:c9:f8:e1:99:3f:c4:22:36:0d:bb:88:28:85:
-         99:23:ae:b9:0b:4e:50:7b:81:2d:28:da:9e:9e:7e:86:21:99:
-         ac:f1:a9:bc:1f:cf:6c:5f:90:91:b1:bf:76:b2:3a:5f:f3:e6:
-         54:89:bf:db:1e:f5:3a:93:53:ec:80:75:7e:ea:81:e0:c1:8b:
-         2d:89:f8:62:16:f0:96:ae:8e:be:d7:af:e6:fa:d4:54:b4:01:
-         bc:dd:f0:93:cc:89:b7:f2:06:81:2e:df:02:11:ac:22:21:44:
-         77:de:22:aa:9f:2b:05:3a:4e:a9:b4:a2:15:50:13:03:b1:a1:
-         1a:f4:de:c4:7b:2e:84:56:80:7c:98:db:82:af:a0:8e:79:a5:
-         b1:81:b7:0f:9b:60:78:5b:57:fc:eb:8e:74:91:e5:e3:58:c6:
-         b7:82:b2:88:d2:83:5f:b4:94:75:6b:97:8a:3f:88:40:ad:5d:
-         a1:18:da:7a
+         4d:22:da:99:6e:42:69:9e:c5:d4:77:0a:71:ff:d5:f9:20:bd:
+         8c:4c:3e:7d:17:55:c8:18:09:10:99:4d:eb:e7:4d:35:63:30:
+         ea:6c:b0:c7:de:2f:16:ac:f6:a6:90:61:92:c5:9b:46:31:44:
+         e4:30:c3:22:6a:a1:85:e1:9c:b1:93:61:66:67:a1:89:99:bf:
+         2f:b7:7e:75:83:a9:c8:c2:46:90:0d:fd:be:3c:c3:93:25:f2:
+         8a:c3:6d:21:ab:cf:56:27:55:7d:05:c1:27:9a:29:5e:e5:5d:
+         36:63:7e:e9:c9:56:22:c0:61:40:8a:24:ea:c1:18:7d:f5:fb:
+         11:4d:92:93:49:54:6e:c2:cf:6d:19:7a:16:c7:1f:79:3d:73:
+         41:17:38:5c:93:e0:b5:c3:18:27:07:3c:ae:3a:29:a1:73:60:
+         12:d2:69:64:47:68:5c:75:78:78:f8:19:a4:04:25:a5:37:9b:
+         ef:a8:e6:aa:d4:2c:19:48:72:9b:bb:75:30:77:46:69:e7:08:
+         2b:ef:06:d3:70:d6:d2:94:45:83:91:f8:4b:e5:0c:42:72:11:
+         e2:68:31:27:95:59:cd:e9:a0:06:3f:93:bd:13:fc:f9:7a:a9:
+         e0:f1:7f:f6:ed:aa:3b:d4:51:39:af:f8:58:ad:9d:85:01:88:
+         3e:0d:74:75
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDcTCCAlmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhVYmVy
 Um9vdDAeFw0xNTAxMDExMjAwMDBaFw0xNjAxMDExMjAwMDBaMA8xDTALBgNVBAMM
-BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClGnsel9L1bBeD
-c3ZiTxJTdT1Lhi1Cd+cRdWXNQ2las4CtQoegjp7P5Z5qLR8+CppuKwHpqtW9kVA4
-+BYEedP+aRyCnecQLBkxihuNp+/yTDbe9i9lk3gKd7odW7E5v1VxBUP7bNRJsjWT
-hcCZTjvSTb8ZTBtVtu/KQLNuahgp63j69X4VYYVwHR+kzVnrhsGlxIt0IuFdm4DU
-JqGhfUBNiRdP7+oE0NG4ejixpROaCGRNhYhOjQf8VQsifrerhSi52XHJmcv7hfvP
-ii7NmJC7sRdfUAJeI5xV1/L6dkfW7hJEmhfEZ4OddV8gsahwxCJpABcmqJ3FiBrl
-KbtjyAL1AgMBAAGjgdMwgdAwHQYDVR0OBBYEFE5KZtIoJ251GfqX5j04GMamVmhp
-MB8GA1UdIwQYMBaAFI8B30iLHVX6Yc8K79aJwedpfiRRMDsGCCsGAQUFBwEBBC8w
+BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5a0tBQqFhFQVK
+G03PJkIPnYYeKZdM/SrDvd1YVkaFIMkSmMHMfMfGQxZHfvg3LGAH4aNF+HmjaPU6
+kF0rtXTqE5FpRg0yx5qko1TNFlDcEWJYv+/MQNN2uQyiRRKpY/lAP0xEeIdFxszr
+WsVPfwyPFam7PC5VHL91c33jHmLGeQgO7MmDYZK2cUPEkabTEceJ15LiMiGbYROE
+iavQAptyLjC8GdVW1eeu5OXuWaEpaxsirDszKz8G9iSSBIW/+uKGBvFGpP0cMcQf
+bsmVJ2qd6QokBcat0BQWUzzHSdoGiYnt/w/Ddrr25mv5VN7DfEtOrc77FZBIB/Zq
+G/HjcDc3AgMBAAGjgdMwgdAwHQYDVR0OBBYEFCoNoHOFOrqoF42Nl2BPfjyFU7jy
+MB8GA1UdIwQYMBaAFDxJPZp+APAj0QhoARrrUDPytR/yMDsGCCsGAQUFBwEBBC8w
 LTArBggrBgEFBQcwAoYfaHR0cDovL3VybC1mb3ItYWlhL1ViZXJSb290LmNlcjAw
 BgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vdXJsLWZvci1jcmwvVWJlclJvb3QuY3Js
 MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
-A4IBAQDIu8dA7yvUHWGSZUhhmVvUWx2Nxuq41L8b6epa8CHzlbjnz+fDi2iyFFP8
-yAdN2PyXJ40NQWhMXsir7uOcctPVW6Q6K+Qv4hPIpY1jYcn44Zk/xCI2DbuIKIWZ
-I665C05Qe4EtKNqenn6GIZms8am8H89sX5CRsb92sjpf8+ZUib/bHvU6k1PsgHV+
-6oHgwYstifhiFvCWro6+16/m+tRUtAG83fCTzIm38gaBLt8CEawiIUR33iKqnysF
-Ok6ptKIVUBMDsaEa9N7Eey6EVoB8mNuCr6COeaWxgbcPm2B4W1f86450keXjWMa3
-grKI0oNftJR1a5eKP4hArV2hGNp6
+A4IBAQBNItqZbkJpnsXUdwpx/9X5IL2MTD59F1XIGAkQmU3r5001YzDqbLDH3i8W
+rPamkGGSxZtGMUTkMMMiaqGF4Zyxk2FmZ6GJmb8vt351g6nIwkaQDf2+PMOTJfKK
+w20hq89WJ1V9BcEnmile5V02Y37pyVYiwGFAiiTqwRh99fsRTZKTSVRuws9tGXoW
+xx95PXNBFzhck+C1wxgnBzyuOimhc2AS0mlkR2hcdXh4+BmkBCWlN5vvqOaq1CwZ
+SHKbu3Uwd0Zp5wgr7wbTcNbSlEWDkfhL5QxCchHiaDEnlVnN6aAGP5O9E/z5eqng
+8X/27ao71FE5r/hYrZ2FAYg+DXR1
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -281,3 +281,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem b/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem
index f884298..829ceb2 100644
--- a/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem
+++ b/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b8:b6:4b:46:a5:2a:82:68:2c:9f:19:09:8f:0c:
-                    c6:ad:af:bf:e1:8f:86:e5:2b:7b:b6:53:cd:bf:cf:
-                    57:f2:c9:19:55:2c:3e:d5:33:b6:5f:0c:d6:65:4b:
-                    f0:37:49:28:32:68:c5:56:32:a1:8d:13:5f:2a:7e:
-                    ff:b4:13:b4:69:07:df:82:04:f9:bf:9e:06:61:ad:
-                    4b:82:2c:12:3e:d6:37:ef:1f:be:4c:6e:16:5b:f1:
-                    02:ea:31:75:40:2b:f1:6d:2d:7b:fb:5c:43:7a:34:
-                    70:23:c5:dc:80:fa:76:4b:36:28:91:7c:0f:14:01:
-                    5b:66:51:89:54:79:3c:d5:c3:e3:4f:6a:a9:d6:ab:
-                    ba:57:f9:6d:13:b3:cc:2c:7a:5f:87:06:62:9e:31:
-                    9b:e2:5c:5e:b7:70:e1:1a:dc:02:0a:23:cb:dc:28:
-                    fb:85:03:b0:5b:a0:94:d8:4a:6a:8e:dc:02:2a:19:
-                    c1:ea:32:9d:a2:9b:84:34:6c:79:90:d6:bf:9d:74:
-                    02:cd:21:a3:bf:57:46:db:4e:5a:76:3e:32:54:66:
-                    7e:2f:f1:4b:40:72:9d:bf:c3:fc:33:8b:6b:cc:a4:
-                    ce:2a:dd:74:13:7b:e7:3d:31:26:ae:a8:88:83:ab:
-                    24:27:31:21:55:17:de:a9:d6:d4:ae:c1:6e:b0:ca:
-                    e5:9f
+                    00:ad:9f:31:d8:58:8d:85:d4:1e:b4:31:59:e6:a8:
+                    38:c0:68:c6:1b:57:24:de:1d:bd:f7:d0:d8:49:b3:
+                    1f:94:88:f3:bc:e2:ab:a6:38:35:88:1f:87:53:73:
+                    b3:66:34:fd:1d:05:9c:be:6b:3f:68:2a:65:a5:ff:
+                    8a:5e:fb:11:80:a6:dd:27:85:50:e6:5a:45:4c:1c:
+                    2f:d8:f2:f7:29:a3:d5:a2:50:3c:aa:be:b9:ce:ba:
+                    7e:97:6e:e8:c2:93:31:26:3f:b7:a7:9f:00:5d:a9:
+                    2d:bc:a2:af:62:0e:ca:7a:f2:fe:a5:5f:b1:da:d1:
+                    81:c3:70:d9:19:94:43:21:0f:b9:c9:ef:82:7c:03:
+                    62:aa:25:ad:cc:43:0a:e7:cb:89:83:81:9c:13:fb:
+                    4e:e8:6f:8c:44:f5:b2:49:55:bf:e7:55:83:32:08:
+                    40:30:e0:24:55:a9:90:0b:b1:4d:af:81:90:3b:24:
+                    7d:75:99:74:64:d8:1d:83:94:d1:40:1f:5d:23:74:
+                    bd:1b:a1:3e:b4:f0:b9:e9:97:6f:ae:a2:15:af:a4:
+                    12:e2:b0:5d:a5:4c:31:8c:2a:23:3c:32:f0:a8:a9:
+                    ca:f0:00:a1:b4:e3:a2:97:f7:82:2e:39:d9:02:85:
+                    35:51:f1:27:46:34:e0:b9:4e:b6:c0:70:f9:1d:1b:
+                    d8:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CB:79:A5:28:D4:40:7E:78:F4:F3:C5:7B:21:DA:CF:D8:4C:95:FC:EE
+                59:79:5B:6D:64:E8:28:D9:94:0C:36:92:CD:EF:90:95:F0:FE:AA:AC
             X509v3 Authority Key Identifier: 
-                keyid:21:63:3C:E9:BA:5F:79:17:3D:28:91:51:B7:72:6E:26:3C:9E:9C:65
+                keyid:ED:AE:33:A9:E1:04:6D:F8:AF:86:87:70:E7:D8:A9:01:0E:75:4A:3F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         96:8e:91:69:58:40:6d:ef:8b:60:3f:35:57:0a:93:85:6d:e5:
-         a5:df:99:05:e4:b9:32:c6:e3:9b:e6:2e:8c:4c:b5:4d:c4:fa:
-         40:cd:44:2c:f1:b3:bd:d2:24:9a:d7:cb:1b:64:46:b7:db:11:
-         a0:7f:49:5b:ec:fc:0e:d5:36:73:f7:60:48:82:11:be:92:1c:
-         41:0f:96:85:ef:c3:e5:cf:3b:a6:2e:41:99:6c:77:6b:3b:74:
-         e3:a9:d0:35:9f:17:f8:7f:4d:a7:33:6c:ce:fa:a3:be:f4:0d:
-         fb:38:02:ab:10:d3:46:22:e6:ae:a6:62:5b:5f:48:98:cd:ba:
-         4b:ef:1f:5c:3b:2a:2e:ef:48:76:8b:3d:05:d6:e4:25:2b:60:
-         2d:a8:cd:64:98:95:73:22:62:d7:67:7f:35:93:2f:2f:cc:99:
-         ac:d2:07:1f:9d:ff:1f:e3:33:84:4f:ff:a6:b7:48:7a:fc:24:
-         c5:25:c1:22:b4:4e:f1:cd:10:10:0a:b8:9b:1d:9e:86:d9:9d:
-         52:3c:af:04:76:b8:3b:98:83:6d:82:51:ca:b2:ff:15:e4:22:
-         50:98:8f:fb:2c:bc:2e:77:8e:11:6b:5b:06:97:ff:da:ea:29:
-         51:88:df:94:2f:7c:75:26:54:99:d9:0a:bc:bb:8d:a0:23:6a:
-         db:cc:85:4e
+         31:64:a4:b0:f8:b5:ae:c5:2b:6b:cf:1a:44:fa:f6:a7:f0:d7:
+         dc:20:f9:10:e7:9f:67:cd:ed:94:97:10:ba:7a:9e:d1:1b:b7:
+         24:45:f7:92:10:bc:35:22:10:09:ac:fc:58:24:2f:c3:ad:5f:
+         95:71:76:91:70:53:92:00:33:a5:f2:ce:fb:f9:d3:99:7a:44:
+         1e:47:4c:c4:35:b3:71:0f:98:ce:cd:5f:aa:f4:40:6b:66:89:
+         91:af:e9:90:66:61:0f:14:b5:ee:d7:65:fe:51:78:01:ed:88:
+         11:6b:f6:36:e9:0d:35:13:70:13:90:37:ad:4b:91:23:61:6d:
+         40:82:d6:f6:14:6f:9b:9b:f8:34:8a:2a:4d:1a:8f:16:df:7d:
+         a6:b0:c0:51:ad:c8:21:49:84:26:64:4a:09:cc:44:1b:3b:98:
+         4c:8a:c1:e4:d6:f1:df:a4:d1:93:ec:f9:98:99:9e:60:27:59:
+         9c:90:bd:fd:21:b6:eb:d5:0f:6c:7d:1e:3d:5f:ff:60:cd:dd:
+         ee:28:2e:d2:c3:6a:38:b6:91:f5:59:f5:33:b9:7f:48:cf:63:
+         3f:61:33:b6:9e:74:38:9b:84:d7:42:70:2f:02:eb:26:10:c3:
+         09:6a:6b:c5:27:a0:b3:9c:78:a1:36:4e:bd:fd:d1:6d:31:19:
+         55:32:81:22
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4tktG
-pSqCaCyfGQmPDMatr7/hj4blK3u2U82/z1fyyRlVLD7VM7ZfDNZlS/A3SSgyaMVW
-MqGNE18qfv+0E7RpB9+CBPm/ngZhrUuCLBI+1jfvH75MbhZb8QLqMXVAK/FtLXv7
-XEN6NHAjxdyA+nZLNiiRfA8UAVtmUYlUeTzVw+NPaqnWq7pX+W0Ts8wsel+HBmKe
-MZviXF63cOEa3AIKI8vcKPuFA7BboJTYSmqO3AIqGcHqMp2im4Q0bHmQ1r+ddALN
-IaO/V0bbTlp2PjJUZn4v8UtAcp2/w/wzi2vMpM4q3XQTe+c9MSauqIiDqyQnMSFV
-F96p1tSuwW6wyuWfAgMBAAGjgekwgeYwHQYDVR0OBBYEFMt5pSjUQH549PPFeyHa
-z9hMlfzuMB8GA1UdIwQYMBaAFCFjPOm6X3kXPSiRUbdybiY8npxlMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtnzHY
+WI2F1B60MVnmqDjAaMYbVyTeHb330NhJsx+UiPO84qumODWIH4dTc7NmNP0dBZy+
+az9oKmWl/4pe+xGApt0nhVDmWkVMHC/Y8vcpo9WiUDyqvrnOun6XbujCkzEmP7en
+nwBdqS28oq9iDsp68v6lX7Ha0YHDcNkZlEMhD7nJ74J8A2KqJa3MQwrny4mDgZwT
++07ob4xE9bJJVb/nVYMyCEAw4CRVqZALsU2vgZA7JH11mXRk2B2DlNFAH10jdL0b
+oT608Lnpl2+uohWvpBLisF2lTDGMKiM8MvCoqcrwAKG046KX94IuOdkChTVR8SdG
+NOC5TrbAcPkdG9ipAgMBAAGjgekwgeYwHQYDVR0OBBYEFFl5W21k6CjZlAw2ks3v
+kJXw/qqsMB8GA1UdIwQYMBaAFO2uM6nhBG34r4aHcOfYqQEOdUo/MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAlo6RaVhAbe+LYD81VwqT
-hW3lpd+ZBeS5Msbjm+YujEy1TcT6QM1ELPGzvdIkmtfLG2RGt9sRoH9JW+z8DtU2
-c/dgSIIRvpIcQQ+Whe/D5c87pi5BmWx3azt046nQNZ8X+H9NpzNszvqjvvQN+zgC
-qxDTRiLmrqZiW19ImM26S+8fXDsqLu9Idos9BdbkJStgLajNZJiVcyJi12d/NZMv
-L8yZrNIHH53/H+MzhE//prdIevwkxSXBIrRO8c0QEAq4mx2ehtmdUjyvBHa4O5iD
-bYJRyrL/FeQiUJiP+yy8LneOEWtbBpf/2uopUYjflC98dSZUmdkKvLuNoCNq28yF
-Tg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAMWSksPi1rsUra88aRPr2
+p/DX3CD5EOefZ83tlJcQunqe0Ru3JEX3khC8NSIQCaz8WCQvw61flXF2kXBTkgAz
+pfLO+/nTmXpEHkdMxDWzcQ+Yzs1fqvRAa2aJka/pkGZhDxS17tdl/lF4Ae2IEWv2
+NukNNRNwE5A3rUuRI2FtQILW9hRvm5v4NIoqTRqPFt99prDAUa3IIUmEJmRKCcxE
+GzuYTIrB5Nbx36TRk+z5mJmeYCdZnJC9/SG269UPbH0ePV//YM3d7igu0sNqOLaR
+9Vn1M7l/SM9jP2Eztp50OJuE10JwLwLrJhDDCWprxSegs5x4oTZOvf3RbTEZVTKB
+Ig==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a9:38:35:27:ba:37:72:ce:20:03:31:f3:dc:4e:
-                    96:e4:69:f4:d4:d1:77:8f:59:a8:93:d8:02:d3:a6:
-                    14:c1:d4:a2:8e:a2:69:0b:fa:28:1d:3c:71:f4:59:
-                    de:c7:a0:80:09:7a:3e:b0:74:be:50:29:93:ce:73:
-                    66:67:64:30:5f:e0:8c:8a:05:2a:18:16:77:03:c6:
-                    09:26:b6:dd:c0:5d:d3:99:07:71:98:02:82:bd:ff:
-                    d4:5a:f2:84:6c:9f:3c:90:d5:d7:fb:06:24:65:12:
-                    fd:df:29:f1:2e:81:d0:b8:2f:ea:dd:0f:52:15:50:
-                    91:b4:10:6b:2d:88:d5:91:44:57:51:ff:1f:db:62:
-                    47:5d:41:9a:b1:3f:03:f6:fd:3b:79:e0:46:b0:69:
-                    01:ee:72:d9:48:22:6a:b7:59:2e:39:6f:1f:01:1b:
-                    e0:b2:c4:a1:9e:b8:dc:c5:99:87:0f:84:d5:55:4d:
-                    bb:0b:73:fc:85:62:a6:14:53:13:1d:d8:36:a1:96:
-                    b8:7f:65:81:e6:04:20:97:e8:05:ca:c9:4e:55:9b:
-                    eb:74:97:7d:cf:72:52:17:7b:ac:a2:10:0f:96:7d:
-                    0c:f3:d3:52:6d:d0:af:36:44:be:6f:18:d9:39:0c:
-                    75:b8:e0:9e:5c:38:ec:47:72:a3:61:cc:e1:e9:de:
-                    a5:a9
+                    00:c4:01:7b:4f:02:d0:de:88:53:75:4b:44:50:d4:
+                    93:6d:42:9d:62:6c:62:67:a9:e7:eb:d0:08:2a:01:
+                    be:06:20:38:2b:5e:a3:1a:5b:59:d3:91:9d:5e:30:
+                    f7:f7:d1:7b:e3:75:08:6e:d2:c5:95:9a:6b:d2:0f:
+                    67:c9:6f:43:74:36:ac:b7:49:8b:b5:45:dd:34:d8:
+                    60:f0:ca:3f:e9:1a:95:be:3a:05:93:e4:95:85:c7:
+                    ad:09:04:46:c1:8d:c2:c8:81:93:56:3d:a9:dc:5a:
+                    30:4b:1a:ff:25:11:18:e5:17:a4:50:ff:29:49:ed:
+                    70:d6:28:92:61:3c:ca:61:30:b4:11:90:c6:92:f5:
+                    75:b2:1d:9c:e1:67:ef:16:f6:82:ad:fc:7f:99:98:
+                    cc:b1:73:68:6d:56:a9:a0:b9:b7:4d:c8:d8:90:bf:
+                    b8:34:95:8f:40:89:a3:8e:99:f7:3e:34:99:e9:60:
+                    7c:b9:50:af:00:8b:1c:92:3a:90:b5:06:00:7f:7b:
+                    12:0b:57:5d:e6:8a:75:a4:57:f9:11:db:c1:54:71:
+                    52:da:48:04:27:7f:22:a3:e7:3b:86:72:e9:81:9e:
+                    24:25:63:85:0e:c4:da:54:c2:56:af:e0:2a:9c:0d:
+                    bc:b7:21:f3:0d:42:d9:f9:4c:d8:a8:49:f8:1a:08:
+                    e8:51
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                21:63:3C:E9:BA:5F:79:17:3D:28:91:51:B7:72:6E:26:3C:9E:9C:65
+                ED:AE:33:A9:E1:04:6D:F8:AF:86:87:70:E7:D8:A9:01:0E:75:4A:3F
             X509v3 Authority Key Identifier: 
-                keyid:A4:4A:EF:8D:03:05:5A:85:D8:D5:43:64:B2:EE:06:D6:D1:75:36:8B
+                keyid:AA:B5:14:AD:96:39:AF:2F:D2:C0:EC:05:9F:91:2C:0E:04:0A:72:EF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         ad:e7:db:f0:f9:65:22:52:9d:80:63:50:03:43:15:e2:19:44:
-         93:31:c8:7b:f3:8c:81:d4:72:84:5c:a3:b9:90:b3:97:78:c6:
-         7c:c3:50:8c:29:e9:49:d6:f1:cc:6e:f0:20:a2:2c:ff:ab:52:
-         15:04:90:73:b1:3f:7f:be:21:87:96:c4:31:87:ae:15:ca:33:
-         4a:79:84:11:11:4f:2c:dd:12:36:b0:c4:03:dd:c6:a5:a4:d2:
-         5b:71:23:40:56:4e:49:97:1f:cb:af:c3:93:69:69:a0:6d:cd:
-         ac:47:9a:65:d1:c0:2f:d8:6d:56:4e:a4:90:16:6c:8b:fb:38:
-         b7:b3:ac:52:d6:0a:17:21:8d:a6:6e:ff:f3:15:13:d4:3b:0d:
-         74:77:4e:60:63:9c:10:6f:36:70:a6:a8:93:8a:88:ff:82:13:
-         25:0a:ba:5e:e6:09:c9:bb:8b:3d:cb:e4:d3:c0:28:6e:c6:2d:
-         21:82:d3:81:b1:28:41:dd:7a:aa:cd:be:66:1e:06:3a:99:cf:
-         41:ed:02:81:0a:0e:98:a2:f4:03:4b:31:c1:d8:78:79:a0:fd:
-         25:a1:30:09:1c:29:e5:38:3a:b3:f2:48:70:5f:82:b6:71:b7:
-         f4:cd:99:e6:62:f2:78:b7:8c:92:af:d6:ce:96:c8:0f:84:60:
-         93:19:fa:21
+         99:1e:ca:2c:10:fe:17:0e:0c:b0:f2:b4:36:50:16:e6:8f:22:
+         2f:c3:5d:9d:c0:da:de:24:b2:b3:c8:8c:47:bf:fb:16:52:87:
+         80:bd:db:3f:74:dd:d1:0d:16:77:cf:54:72:ee:b8:59:64:24:
+         96:bf:20:22:d8:50:2b:23:7c:27:a0:b2:72:b5:a3:79:37:12:
+         c7:d0:1b:cf:fb:8e:9e:0a:2f:62:b9:df:9f:83:b8:8f:d4:33:
+         7c:99:a9:ce:d0:b0:ae:f1:cb:71:bd:f5:ab:ed:ce:45:30:1d:
+         a3:b9:9a:0c:07:1a:5c:19:e4:28:83:40:4a:31:c6:49:6e:7d:
+         44:e0:c6:ab:96:dd:47:e9:4c:94:2f:63:d0:89:ce:09:a5:cd:
+         da:e0:9f:41:47:25:d1:1a:51:91:66:48:dc:eb:28:ba:b4:55:
+         c3:08:a0:67:a6:63:d8:a9:27:e8:f2:43:e6:c1:75:b4:5e:ac:
+         9b:8f:97:f6:4c:db:03:ce:3b:cc:49:0e:df:70:6c:69:41:eb:
+         56:6a:85:b3:42:03:1a:63:67:24:9a:8c:e4:7c:9b:bf:f4:43:
+         07:1a:84:d7:af:10:c2:ce:d2:06:d6:a0:ba:22:9d:1b:70:85:
+         73:de:61:3e:d3:48:23:84:9c:6e:4a:6b:3d:0b:64:0d:0d:e2:
+         ab:e3:6d:8c
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqTg1J7o3
-cs4gAzHz3E6W5Gn01NF3j1mok9gC06YUwdSijqJpC/ooHTxx9Fnex6CACXo+sHS+
-UCmTznNmZ2QwX+CMigUqGBZ3A8YJJrbdwF3TmQdxmAKCvf/UWvKEbJ88kNXX+wYk
-ZRL93ynxLoHQuC/q3Q9SFVCRtBBrLYjVkURXUf8f22JHXUGasT8D9v07eeBGsGkB
-7nLZSCJqt1kuOW8fARvgssShnrjcxZmHD4TVVU27C3P8hWKmFFMTHdg2oZa4f2WB
-5gQgl+gFyslOVZvrdJd9z3JSF3usohAPln0M89NSbdCvNkS+bxjZOQx1uOCeXDjs
-R3KjYczh6d6lqQIDAQABo4HLMIHIMB0GA1UdDgQWBBQhYzzpul95Fz0okVG3cm4m
-PJ6cZTAfBgNVHSMEGDAWgBSkSu+NAwVahdjVQ2Sy7gbW0XU2izA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxAF7TwLQ
+3ohTdUtEUNSTbUKdYmxiZ6nn69AIKgG+BiA4K16jGltZ05GdXjD399F743UIbtLF
+lZpr0g9nyW9DdDast0mLtUXdNNhg8Mo/6RqVvjoFk+SVhcetCQRGwY3CyIGTVj2p
+3FowSxr/JREY5RekUP8pSe1w1iiSYTzKYTC0EZDGkvV1sh2c4WfvFvaCrfx/mZjM
+sXNobVapoLm3TcjYkL+4NJWPQImjjpn3PjSZ6WB8uVCvAIsckjqQtQYAf3sSC1dd
+5op1pFf5EdvBVHFS2kgEJ38io+c7hnLpgZ4kJWOFDsTaVMJWr+AqnA28tyHzDULZ
++UzYqEn4GgjoUQIDAQABo4HLMIHIMB0GA1UdDgQWBBTtrjOp4QRt+K+Gh3Dn2KkB
+DnVKPzAfBgNVHSMEGDAWgBSqtRStljmvL9LA7AWfkSwOBApy7zA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AK3n2/D5ZSJSnYBjUANDFeIZRJMxyHvzjIHUcoRco7mQs5d4xnzDUIwp6UnW8cxu
-8CCiLP+rUhUEkHOxP3++IYeWxDGHrhXKM0p5hBERTyzdEjawxAPdxqWk0ltxI0BW
-TkmXH8uvw5NpaaBtzaxHmmXRwC/YbVZOpJAWbIv7OLezrFLWChchjaZu//MVE9Q7
-DXR3TmBjnBBvNnCmqJOKiP+CEyUKul7mCcm7iz3L5NPAKG7GLSGC04GxKEHdeqrN
-vmYeBjqZz0HtAoEKDpii9ANLMcHYeHmg/SWhMAkcKeU4OrPySHBfgrZxt/TNmeZi
-8ni3jJKv1s6WyA+EYJMZ+iE=
+AJkeyiwQ/hcODLDytDZQFuaPIi/DXZ3A2t4ksrPIjEe/+xZSh4C92z903dENFnfP
+VHLuuFlkJJa/ICLYUCsjfCegsnK1o3k3EsfQG8/7jp4KL2K535+DuI/UM3yZqc7Q
+sK7xy3G99avtzkUwHaO5mgwHGlwZ5CiDQEoxxklufUTgxquW3UfpTJQvY9CJzgml
+zdrgn0FHJdEaUZFmSNzrKLq0VcMIoGemY9ipJ+jyQ+bBdbRerJuPl/ZM2wPOO8xJ
+Dt9wbGlB61ZqhbNCAxpjZySajOR8m7/0QwcahNevEMLO0gbWoLoinRtwhXPeYT7T
+SCOEnG5Kaz0LZA0N4qvjbYw=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e9:d3:1f:75:ed:64:d9:2b:d9:1c:3b:ab:db:86:
-                    88:7a:65:57:87:7c:b9:51:2f:57:7f:34:7d:73:5d:
-                    53:8f:a0:13:08:26:ec:46:0d:05:cb:91:36:4a:9b:
-                    13:65:76:9d:68:b9:30:6a:13:9e:b2:1b:95:e7:3e:
-                    11:fc:16:50:ff:6f:8e:bd:88:79:4d:9e:fa:74:20:
-                    2d:1c:f0:15:98:d7:de:f9:99:46:f3:f5:c2:17:08:
-                    c2:c3:3b:e3:6e:1b:bf:c9:3f:db:c3:ff:a4:d2:ee:
-                    c4:8e:91:e6:af:12:e7:5c:1c:73:af:df:0f:0f:05:
-                    d8:f0:f6:21:95:5e:40:97:ee:5d:1b:df:a8:89:30:
-                    f4:08:e6:e4:c6:ca:aa:58:fa:e6:8c:b4:2f:3e:56:
-                    ea:9b:02:4f:bc:65:c5:a7:41:bf:8d:e2:34:dc:f3:
-                    da:f3:23:36:07:32:62:96:5b:be:44:69:39:47:44:
-                    70:96:96:03:f1:d8:1b:e3:bd:32:bc:9e:3b:5a:4c:
-                    38:fa:75:d1:af:2c:30:d3:59:0b:87:43:85:b1:2e:
-                    43:15:97:13:89:8e:e7:15:c2:8b:39:be:5f:f1:59:
-                    57:45:b8:ac:e8:bd:4a:46:a6:50:5e:22:40:68:60:
-                    5a:77:81:2f:3d:be:03:13:3b:70:2c:a6:ad:eb:58:
-                    c1:05
+                    00:9e:35:c6:7b:c5:c8:62:47:51:3e:e2:02:5c:47:
+                    ea:01:5b:46:12:0b:50:d3:56:5c:d2:9e:37:92:f6:
+                    dd:c3:b6:89:d6:26:47:2f:22:96:93:f4:4e:ac:f7:
+                    02:01:37:a8:be:3a:98:51:9c:6d:ae:03:70:dd:9d:
+                    f0:a1:1d:a2:cf:81:ec:d7:cf:73:34:4b:29:59:bd:
+                    7d:a1:2b:72:10:79:28:ce:25:c1:08:57:03:d9:b7:
+                    26:cd:f2:58:7e:4a:fa:22:81:8f:f6:c9:03:08:6d:
+                    53:25:dd:1b:ad:0f:64:88:59:1c:91:13:fa:b7:87:
+                    4d:6b:7d:1a:6e:63:4e:08:03:d3:2d:94:35:6c:82:
+                    a2:63:35:a5:e0:78:cc:75:33:1c:fa:5c:e3:c7:64:
+                    cd:d3:b7:b8:cd:0b:41:a4:9e:7c:fc:c7:76:34:9e:
+                    37:d1:4a:5b:fe:94:d2:6f:1a:db:6c:14:8c:46:5d:
+                    c5:d3:5a:39:6c:db:1a:03:e2:9a:ab:b2:7d:77:f9:
+                    68:07:b9:b0:56:43:d3:2e:2d:a4:c1:5a:98:63:26:
+                    0c:65:bc:ed:35:5c:25:6c:64:86:2e:45:5d:47:b3:
+                    79:21:f2:07:17:a1:08:d3:68:f6:d4:07:91:b6:85:
+                    41:bd:5f:bf:58:31:a4:6c:3f:f1:2b:ac:d3:01:d3:
+                    47:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A4:4A:EF:8D:03:05:5A:85:D8:D5:43:64:B2:EE:06:D6:D1:75:36:8B
+                AA:B5:14:AD:96:39:AF:2F:D2:C0:EC:05:9F:91:2C:0E:04:0A:72:EF
             X509v3 Authority Key Identifier: 
-                keyid:A4:4A:EF:8D:03:05:5A:85:D8:D5:43:64:B2:EE:06:D6:D1:75:36:8B
+                keyid:AA:B5:14:AD:96:39:AF:2F:D2:C0:EC:05:9F:91:2C:0E:04:0A:72:EF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:FALSE
     Signature Algorithm: sha256WithRSAEncryption
-         26:9d:8a:78:1d:b6:59:cd:cc:23:10:2b:9b:2c:a1:b4:fc:53:
-         1e:c5:57:d8:d8:05:f2:dc:a6:13:2e:4b:13:af:14:bf:fa:c0:
-         af:3e:96:24:4a:ed:38:0f:10:f0:90:a9:c4:0d:92:59:6d:c7:
-         12:bf:17:e2:d7:1b:20:1c:74:ab:7a:50:38:52:cf:55:58:40:
-         f7:c4:ee:78:a4:c1:79:ab:50:0c:a7:90:86:09:b0:05:bd:2a:
-         ec:31:00:a5:83:43:95:45:27:06:c0:e7:49:a3:81:9e:90:56:
-         97:29:fc:b0:f1:4d:75:68:04:93:a2:1b:8e:fd:52:e1:2d:b8:
-         30:be:4e:3d:e9:2b:96:4e:38:a3:26:4b:fe:36:72:45:55:57:
-         f1:c9:98:a7:9d:17:e2:b6:05:c8:bb:a4:ed:5e:be:23:8b:60:
-         e0:c8:42:c6:29:5f:37:37:2c:86:7d:06:67:5e:67:44:19:7f:
-         13:5d:d3:8a:1e:50:b7:1c:03:52:0d:ff:4e:3c:69:f6:2f:d1:
-         70:37:47:63:fa:60:1f:34:a4:1f:d8:2f:ed:e0:0e:f2:68:f8:
-         e3:58:34:33:3b:af:8f:15:c8:fe:2e:73:17:60:a9:49:7e:7e:
-         1a:0e:9a:a2:60:bf:09:8d:85:8c:a3:dc:77:5f:45:b4:f9:f0:
-         6d:a0:29:2a
+         82:39:f7:d4:dd:8c:fd:7d:9a:50:88:6c:3d:30:a6:b8:5b:1d:
+         23:f1:c1:7c:bf:33:9d:b1:0d:19:e9:33:bb:d9:fd:7b:b6:06:
+         32:13:be:d9:33:92:51:ab:20:ca:4e:50:55:52:ab:bf:8a:f4:
+         d7:ee:eb:e4:ca:9f:76:a7:39:1b:e2:6e:c9:04:56:e2:5d:6f:
+         37:48:08:2e:73:66:d6:fb:a6:95:9d:cf:d5:24:ac:08:89:42:
+         6f:0f:ac:40:dc:a6:9f:3e:ee:e7:78:60:fc:b3:12:6d:50:b2:
+         b9:84:49:7f:39:75:2d:8f:a9:a5:15:39:58:01:ad:c9:69:36:
+         f5:22:5f:ba:a4:cc:3b:0f:4c:21:b8:c9:6f:22:44:2f:28:63:
+         86:30:4d:c0:c9:d0:32:9e:67:dc:22:9d:f1:1c:56:6c:5e:da:
+         38:7f:08:42:c9:a8:d9:7a:35:a5:67:28:5c:d7:da:a3:c1:ff:
+         65:39:a1:e4:8b:72:d4:2d:d4:5a:ab:e4:6f:b6:fd:53:82:fd:
+         23:25:ea:70:8f:6a:85:ff:48:d2:83:47:71:d6:4f:86:4f:4c:
+         13:16:5e:8f:8b:9a:50:5a:76:53:ad:ad:cb:11:c4:7c:3d:8a:
+         bf:c5:ae:2b:1f:4a:d6:ac:58:64:9a:a7:bd:31:aa:7b:4a:67:
+         2d:32:74:0d
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDYjCCAkqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOnTH3XtZNkr2Rw7q9uG
-iHplV4d8uVEvV380fXNdU4+gEwgm7EYNBcuRNkqbE2V2nWi5MGoTnrIblec+EfwW
-UP9vjr2IeU2e+nQgLRzwFZjX3vmZRvP1whcIwsM7424bv8k/28P/pNLuxI6R5q8S
-51wcc6/fDw8F2PD2IZVeQJfuXRvfqIkw9Ajm5MbKqlj65oy0Lz5W6psCT7xlxadB
-v43iNNzz2vMjNgcyYpZbvkRpOUdEcJaWA/HYG+O9MryeO1pMOPp10a8sMNNZC4dD
-hbEuQxWXE4mO5xXCizm+X/FZV0W4rOi9SkamUF4iQGhgWneBLz2+AxM7cCymretY
-wQUCAwEAAaOByDCBxTAdBgNVHQ4EFgQUpErvjQMFWoXY1UNksu4G1tF1NoswHwYD
-VR0jBBgwFoAUpErvjQMFWoXY1UNksu4G1tF1NoswNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ41xnvFyGJHUT7iAlxH
+6gFbRhILUNNWXNKeN5L23cO2idYmRy8ilpP0Tqz3AgE3qL46mFGcba4DcN2d8KEd
+os+B7NfPczRLKVm9faErchB5KM4lwQhXA9m3Js3yWH5K+iKBj/bJAwhtUyXdG60P
+ZIhZHJET+reHTWt9Gm5jTggD0y2UNWyComM1peB4zHUzHPpc48dkzdO3uM0LQaSe
+fPzHdjSeN9FKW/6U0m8a22wUjEZdxdNaOWzbGgPimquyfXf5aAe5sFZD0y4tpMFa
+mGMmDGW87TVcJWxkhi5FXUezeSHyBxehCNNo9tQHkbaFQb1fv1gxpGw/8Sus0wHT
+R6kCAwEAAaOByDCBxTAdBgNVHQ4EFgQUqrUUrZY5ry/SwOwFn5EsDgQKcu8wHwYD
+VR0jBBgwFoAUqrUUrZY5ry/SwOwFn5EsDgQKcu8wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAmnYp4HbZZzcwj
-ECubLKG0/FMexVfY2AXy3KYTLksTrxS/+sCvPpYkSu04DxDwkKnEDZJZbccSvxfi
-1xsgHHSrelA4Us9VWED3xO54pMF5q1AMp5CGCbAFvSrsMQClg0OVRScGwOdJo4Ge
-kFaXKfyw8U11aASTohuO/VLhLbgwvk496SuWTjijJkv+NnJFVVfxyZinnRfitgXI
-u6TtXr4ji2DgyELGKV83NyyGfQZnXmdEGX8TXdOKHlC3HANSDf9OPGn2L9FwN0dj
-+mAfNKQf2C/t4A7yaPjjWDQzO6+PFcj+LnMXYKlJfn4aDpqiYL8JjYWMo9x3X0W0
-+fBtoCkq
+AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCCOffU3Yz9fZpQ
+iGw9MKa4Wx0j8cF8vzOdsQ0Z6TO72f17tgYyE77ZM5JRqyDKTlBVUqu/ivTX7uvk
+yp92pzkb4m7JBFbiXW83SAguc2bW+6aVnc/VJKwIiUJvD6xA3KafPu7neGD8sxJt
+ULK5hEl/OXUtj6mlFTlYAa3JaTb1Il+6pMw7D0whuMlvIkQvKGOGME3AydAynmfc
+Ip3xHFZsXto4fwhCyajZejWlZyhc19qjwf9lOaHki3LULdRaq+Rvtv1Tgv0jJepw
+j2qF/0jSg0dx1k+GT0wTFl6Pi5pQWnZTra3LEcR8PYq/xa4rH0rWrFhkmqe9Map7
+SmctMnQN
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem b/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem
index 307b9f2..acf4292 100644
--- a/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem
+++ b/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ad:75:ea:d9:63:a8:36:b6:47:9e:1f:f4:c4:38:
-                    b8:81:a1:cb:46:09:41:00:e8:12:9e:fd:c1:f8:92:
-                    cc:cb:92:90:72:e3:8c:74:20:9a:b2:d7:17:2a:c5:
-                    91:d7:2f:99:64:ad:96:52:16:bc:cd:f0:7a:5d:c8:
-                    04:90:f9:28:ec:05:40:4a:ca:29:33:9f:6c:98:5b:
-                    da:9d:be:6a:a5:2d:82:a5:78:2e:b9:a9:20:77:c0:
-                    53:3c:63:19:af:ca:1c:20:da:b6:69:bc:0b:ba:b5:
-                    f0:a0:92:e7:f5:34:af:a2:41:32:86:6d:67:03:5e:
-                    d5:e6:68:d0:e5:8d:54:89:5d:39:66:ae:af:f2:2f:
-                    38:e2:f6:64:a5:7c:84:fe:2b:87:73:1b:76:29:c8:
-                    d9:06:a8:bf:c7:c9:90:a2:7a:ab:36:b5:96:b2:e4:
-                    1c:68:3a:27:d6:80:e8:f6:cd:61:cf:c5:a6:f8:60:
-                    bf:bc:2c:8c:aa:fb:ae:a4:12:b7:3f:a5:db:cc:25:
-                    f7:7e:fe:01:bf:0e:2d:26:ef:b4:da:d0:e7:31:53:
-                    88:e6:3f:bc:85:f9:e7:9d:40:a9:70:8a:73:8d:f7:
-                    b3:dd:7d:67:52:a5:98:7a:22:2b:e8:15:3f:82:4e:
-                    10:27:ed:92:f8:fa:41:89:6b:26:e9:dd:93:4a:74:
-                    d3:a9
+                    00:b7:36:7c:df:9b:72:f6:3e:9c:69:62:49:17:32:
+                    9b:26:b4:c9:53:83:cb:d1:4c:bd:f3:3e:b1:06:f6:
+                    b7:8b:78:8f:26:4f:72:92:03:7e:99:f3:61:60:c2:
+                    44:ae:ba:50:72:49:cc:7c:be:89:88:2c:cf:fc:67:
+                    61:cf:8b:3f:ec:84:29:11:61:18:25:b7:1e:1a:3c:
+                    38:f0:17:e4:54:14:3f:ee:42:35:f6:be:c2:9a:ab:
+                    9d:dc:f9:a4:a4:4c:9b:3b:36:66:64:09:44:07:35:
+                    ea:1c:82:e6:6e:d2:a8:6d:76:9f:8c:cc:7f:38:c6:
+                    f0:c6:cc:b9:6e:ba:7c:28:b8:35:48:59:f2:f8:19:
+                    1b:bd:2f:bd:9f:0f:4e:53:4a:9c:a4:c2:34:7b:1f:
+                    97:d0:02:58:b8:6c:a3:f5:c9:81:ac:cc:5a:25:b6:
+                    fe:45:15:91:b6:ea:ab:56:82:2f:04:00:df:37:a5:
+                    87:b5:de:e9:aa:2c:8a:79:c2:8b:aa:d8:2c:2f:f8:
+                    72:f2:cd:96:70:27:a6:b0:d7:11:02:b8:20:8a:9b:
+                    01:36:71:cb:f5:f1:fa:55:4a:f4:a6:e4:84:ba:f4:
+                    5b:c4:e0:5d:f7:d5:a9:e8:18:77:57:b1:f8:2f:da:
+                    07:4b:38:cd:9f:43:2d:06:60:aa:7b:2d:dc:cf:df:
+                    1b:3d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                92:9A:80:3A:5C:7F:B9:45:6C:C1:79:03:FC:BE:1D:F9:00:A5:ED:9E
+                51:BA:12:8F:AE:B3:25:F2:B6:00:9B:C9:E3:C8:0C:B0:D7:A3:82:68
             X509v3 Authority Key Identifier: 
-                keyid:A4:79:C2:53:F1:7B:AF:B0:97:61:6B:AE:EA:24:7A:98:C7:D7:41:18
+                keyid:63:82:98:2F:91:C3:4A:70:69:98:B9:A5:D2:E7:33:E1:D5:37:9F:94
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         5e:39:9f:dc:2f:71:14:dc:68:84:af:52:a3:3d:07:68:3f:cc:
-         db:fa:4e:b9:d8:7e:7a:a0:7c:9a:75:81:55:a4:c2:45:4f:90:
-         46:d4:8d:08:ca:3a:fa:64:04:b0:1c:42:e4:64:ad:4b:d3:c3:
-         3c:57:b5:47:76:fd:7e:e4:a5:6c:22:71:4b:1c:d2:0d:23:8c:
-         b1:9a:20:18:f5:78:49:fa:06:e6:47:e5:4a:43:88:b4:8e:b8:
-         d9:23:b8:75:97:d4:cd:db:58:dd:7a:21:c6:65:47:fa:2f:f5:
-         c5:c7:c3:43:7f:e2:61:ff:55:e5:0e:1e:f7:2b:a7:1a:45:16:
-         16:e6:bb:4b:f5:f5:2d:fd:01:f2:e3:41:b9:d1:dc:bb:52:97:
-         c5:90:cf:d1:57:70:46:46:ad:0f:e3:81:cc:18:e6:ce:05:fd:
-         29:09:b2:eb:91:18:79:38:92:23:33:9b:0f:53:b1:fe:5d:81:
-         65:b9:49:c9:64:6a:75:c4:e6:fe:8b:fc:3f:06:22:ab:e0:0a:
-         18:d9:d5:5e:a6:d5:bd:2d:9f:b4:48:b5:ba:42:54:c7:75:be:
-         8d:95:8b:ef:27:68:2a:a9:82:14:e4:9f:2c:ec:fd:27:cb:56:
-         c3:26:ec:10:96:85:f5:9b:42:b6:9c:99:ee:48:4a:3e:1b:81:
-         9c:5f:7d:ad
+         20:8f:fb:50:37:02:9f:0c:c4:9d:02:37:46:80:4d:cc:a9:03:
+         5d:5f:95:9e:d1:3b:13:c3:59:af:7a:cb:4c:46:25:b5:8d:1a:
+         78:3d:41:69:fc:d6:e4:03:1d:be:5d:cf:0b:19:13:4c:12:0e:
+         6a:46:94:da:10:bb:e7:57:6b:1c:1d:d4:6e:41:13:69:d2:89:
+         bb:eb:2e:87:18:7d:f2:dc:69:6e:76:e0:dd:91:f8:8b:ef:5a:
+         0c:48:02:41:c7:69:cd:ad:20:05:b6:61:12:12:2a:fa:86:5e:
+         b4:2d:2d:df:72:b6:0d:76:07:8c:d9:a4:4d:73:f3:3c:32:25:
+         eb:28:f3:12:b1:05:d5:87:fb:07:96:0f:96:63:94:e1:bc:59:
+         99:ee:b1:eb:f2:17:c4:31:ef:60:20:e5:d1:4e:53:80:65:4c:
+         e9:e4:be:34:9e:03:66:be:be:50:85:f1:91:d0:01:e2:b9:48:
+         f6:6e:de:da:fc:da:15:0a:c6:ec:cf:4a:64:e2:21:20:6e:28:
+         8a:55:fd:d5:98:10:6a:f4:cf:dd:3e:51:79:de:76:16:35:75:
+         cc:ca:b5:49:e4:48:54:03:d8:50:62:90:38:c1:c4:f1:4b:06:
+         f6:9f:f7:64:f7:11:17:f1:bd:13:8a:8f:66:01:8a:99:97:00:
+         c8:4f:a4:33
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtderZ
-Y6g2tkeeH/TEOLiBoctGCUEA6BKe/cH4kszLkpBy44x0IJqy1xcqxZHXL5lkrZZS
-FrzN8HpdyASQ+SjsBUBKyikzn2yYW9qdvmqlLYKleC65qSB3wFM8Yxmvyhwg2rZp
-vAu6tfCgkuf1NK+iQTKGbWcDXtXmaNDljVSJXTlmrq/yLzji9mSlfIT+K4dzG3Yp
-yNkGqL/HyZCieqs2tZay5BxoOifWgOj2zWHPxab4YL+8LIyq+66kErc/pdvMJfd+
-/gG/Di0m77Ta0OcxU4jmP7yF+eedQKlwinON97PdfWdSpZh6IivoFT+CThAn7ZL4
-+kGJaybp3ZNKdNOpAgMBAAGjgekwgeYwHQYDVR0OBBYEFJKagDpcf7lFbMF5A/y+
-HfkApe2eMB8GA1UdIwQYMBaAFKR5wlPxe6+wl2FrruokepjH10EYMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3Nnzf
+m3L2PpxpYkkXMpsmtMlTg8vRTL3zPrEG9reLeI8mT3KSA36Z82FgwkSuulByScx8
+vomILM/8Z2HPiz/shCkRYRgltx4aPDjwF+RUFD/uQjX2vsKaq53c+aSkTJs7NmZk
+CUQHNeocguZu0qhtdp+MzH84xvDGzLluunwouDVIWfL4GRu9L72fD05TSpykwjR7
+H5fQAli4bKP1yYGszFoltv5FFZG26qtWgi8EAN83pYe13umqLIp5wouq2Cwv+HLy
+zZZwJ6aw1xECuCCKmwE2ccv18fpVSvSm5IS69FvE4F331anoGHdXsfgv2gdLOM2f
+Qy0GYKp7LdzP3xs9AgMBAAGjgekwgeYwHQYDVR0OBBYEFFG6Eo+usyXytgCbyePI
+DLDXo4JoMB8GA1UdIwQYMBaAFGOCmC+Rw0pwaZi5pdLnM+HVN5+UMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAXjmf3C9xFNxohK9Soz0H
-aD/M2/pOudh+eqB8mnWBVaTCRU+QRtSNCMo6+mQEsBxC5GStS9PDPFe1R3b9fuSl
-bCJxSxzSDSOMsZogGPV4SfoG5kflSkOItI642SO4dZfUzdtY3XohxmVH+i/1xcfD
-Q3/iYf9V5Q4e9yunGkUWFua7S/X1Lf0B8uNBudHcu1KXxZDP0VdwRkatD+OBzBjm
-zgX9KQmy65EYeTiSIzObD1Ox/l2BZblJyWRqdcTm/ov8PwYiq+AKGNnVXqbVvS2f
-tEi1ukJUx3W+jZWL7ydoKqmCFOSfLOz9J8tWwybsEJaF9ZtCtpyZ7khKPhuBnF99
-rQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAII/7UDcCnwzEnQI3RoBN
+zKkDXV+VntE7E8NZr3rLTEYltY0aeD1BafzW5AMdvl3PCxkTTBIOakaU2hC751dr
+HB3UbkETadKJu+suhxh98txpbnbg3ZH4i+9aDEgCQcdpza0gBbZhEhIq+oZetC0t
+33K2DXYHjNmkTXPzPDIl6yjzErEF1Yf7B5YPlmOU4bxZme6x6/IXxDHvYCDl0U5T
+gGVM6eS+NJ4DZr6+UIXxkdAB4rlI9m7e2vzaFQrG7M9KZOIhIG4oilX91ZgQavTP
+3T5Red52FjV1zMq1SeRIVAPYUGKQOMHE8UsG9p/3ZPcRF/G9E4qPZgGKmZcAyE+k
+Mw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:9b:ae:24:f7:35:a1:99:8f:a3:2e:f8:62:c1:ba:
-                    f3:f3:92:a8:18:1e:57:b1:40:17:0a:3a:3b:67:64:
-                    7d:7c:97:98:ce:b0:e4:4b:aa:98:5e:66:4f:d6:4a:
-                    83:2d:c2:db:ac:4e:d0:83:3c:07:0a:f1:51:3f:7d:
-                    8f:5f:1d:48:14:e1:39:98:bf:c9:44:f6:a0:72:6c:
-                    1d:1c:13:91:cd:90:e2:19:88:80:59:2f:13:62:ac:
-                    9b:d0:19:53:a8:fe:f3:43:a7:94:fb:8c:df:98:10:
-                    48:6c:4b:20:c5:70:21:27:43:02:fe:15:ed:37:bf:
-                    ee:71:d0:7d:69:f6:94:82:8e:83:a5:f8:b2:31:47:
-                    bf:af:5c:94:d8:d8:a7:f8:bd:a2:fa:89:62:61:43:
-                    9e:46:10:e9:32:73:9c:32:bd:b9:a2:fe:35:96:df:
-                    10:b5:a6:8f:af:ed:4b:e0:4b:22:00:7f:e8:78:bf:
-                    e9:0f:2d:26:80:d2:96:3a:0a:2e:02:b9:f7:49:57:
-                    d6:7e:df:e4:97:dd:50:69:c7:49:f2:b2:74:94:1e:
-                    ea:f9:7b:61:45:36:3b:7d:29:6b:09:de:ac:58:19:
-                    14:58:2c:83:b8:99:08:ba:be:78:ba:e8:f1:bb:f1:
-                    09:32:44:18:fb:72:4e:41:1c:6b:43:16:a2:73:6a:
-                    63:65
+                    00:af:2b:dd:ce:94:26:44:b4:47:07:b5:6f:6b:6d:
+                    a4:e1:55:90:8b:18:52:b0:18:f2:e9:c0:5e:de:bd:
+                    1f:7e:b6:82:5f:a0:c2:76:d7:32:50:13:6a:33:91:
+                    93:40:ab:21:42:41:1b:cf:01:2c:99:8c:b3:dc:a0:
+                    7f:77:a6:af:4b:6a:fe:cc:13:4d:5b:8d:17:a1:fc:
+                    a5:27:22:86:73:c0:5c:ce:9d:41:c5:f0:37:49:7f:
+                    58:6e:72:48:f8:5e:2f:ad:3d:20:81:0b:e9:02:58:
+                    15:79:75:68:79:6b:73:2e:04:3a:df:0a:77:f6:b0:
+                    08:94:00:39:0b:b3:6e:eb:4d:c9:0e:89:c4:d0:21:
+                    36:53:18:e9:74:42:0e:a4:fd:2d:ef:5f:14:73:8e:
+                    2f:40:9f:9b:6d:19:ad:95:f9:ba:a5:a9:4a:08:b7:
+                    33:8d:7d:23:3e:4c:0f:d1:02:42:18:fc:d9:a5:b8:
+                    fd:52:3a:e8:7b:01:1f:b7:a4:88:d7:db:32:f2:94:
+                    ab:4d:41:f4:d5:ec:81:5a:65:10:02:bd:16:06:45:
+                    21:55:c9:cc:80:87:99:24:ad:58:64:da:08:79:fe:
+                    21:03:c8:60:9b:a1:fb:dd:05:20:99:6b:17:74:2a:
+                    b1:60:62:86:6a:a7:b0:e4:1a:23:4a:97:37:1f:86:
+                    3d:13
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A4:79:C2:53:F1:7B:AF:B0:97:61:6B:AE:EA:24:7A:98:C7:D7:41:18
+                63:82:98:2F:91:C3:4A:70:69:98:B9:A5:D2:E7:33:E1:D5:37:9F:94
             X509v3 Authority Key Identifier: 
-                keyid:75:7D:62:57:BC:81:26:58:67:4D:49:F8:04:11:12:62:63:3C:3C:DC
+                keyid:55:7A:9A:44:7D:DA:2D:AE:CD:FD:6F:F3:27:75:B0:B3:1B:38:97:C2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         93:d8:9b:e5:69:16:43:e6:5b:3b:c0:70:44:ec:1d:7d:9e:4f:
-         28:16:99:b5:70:6f:5a:f6:f3:90:1f:e9:3c:eb:8f:bb:3b:28:
-         d0:e1:3f:60:6d:81:de:01:77:71:88:54:44:41:16:73:48:3c:
-         f6:5c:7d:6b:6d:81:e4:35:05:f6:4c:91:cb:a3:bf:06:d3:b2:
-         33:39:06:07:4f:2d:99:ff:34:85:6b:75:02:18:5f:b1:9e:5d:
-         a7:a0:78:b9:26:aa:1e:87:51:37:3f:47:af:56:07:04:95:01:
-         cf:40:39:0a:ce:01:7b:e0:34:dc:14:e3:06:57:d8:93:0c:6c:
-         90:51:92:51:6e:b8:f7:ff:62:81:e3:73:f1:34:5f:a0:19:7c:
-         39:d7:d1:81:10:5a:90:52:e1:32:c7:3a:66:69:c5:5b:d7:54:
-         15:70:d0:9b:42:bd:70:74:37:2b:a2:e7:ee:d3:20:96:3a:32:
-         ee:53:21:f0:f6:4b:c8:fb:a7:e1:ce:9d:72:cf:d0:e2:7c:e4:
-         13:20:66:62:8d:b6:b9:9d:56:4b:c8:cc:e9:00:b6:c7:f7:e4:
-         dc:ed:2c:25:af:32:05:98:ef:56:de:7a:07:ff:eb:62:c1:7b:
-         0b:56:95:ee:90:55:d6:6f:c9:8d:8f:15:dd:d3:65:c1:c7:8c:
-         94:f9:82:5d
+         15:35:ad:b6:a5:5b:7c:ba:fe:6e:62:c0:0e:6e:31:b7:08:15:
+         db:23:4d:4f:6a:ae:aa:0c:d6:87:b2:86:84:75:10:f9:b9:47:
+         63:6d:a9:b8:a8:2e:53:27:45:18:c5:d5:dd:cc:78:08:0e:ef:
+         ff:0d:d7:d8:91:54:1f:59:68:1b:48:e2:f6:10:9e:cb:7a:99:
+         f7:ee:1f:60:72:c0:9f:15:25:8a:74:87:61:fe:f2:79:2e:6a:
+         a6:5b:c2:40:da:3d:c6:e9:05:f3:1c:8f:01:59:a7:e3:da:d9:
+         b7:d5:09:81:49:87:cd:44:f4:ac:58:1d:e5:55:57:35:c6:8a:
+         b9:82:72:b9:cc:6c:2a:94:91:c0:b5:c1:e8:5c:80:ed:67:35:
+         35:eb:e0:0b:b8:5c:5d:6a:b4:d4:7b:4c:5f:1a:d2:62:2f:93:
+         54:83:bc:4f:92:2f:59:5b:cc:b7:aa:bb:49:04:6d:ee:7f:b1:
+         3b:45:52:69:b6:19:f6:69:96:be:d1:cc:56:c1:5f:dd:ff:76:
+         fc:d4:d3:fb:0c:43:e4:44:fd:eb:5a:7c:f2:97:68:93:51:db:
+         b7:e9:5e:c1:53:a3:99:69:18:9c:95:09:31:80:53:79:81:9a:
+         c3:19:1b:3a:1c:64:e3:50:ee:ff:f9:46:30:31:d5:7f:a2:c2:
+         5f:70:b8:1b
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm64k9zWh
-mY+jLvhiwbrz85KoGB5XsUAXCjo7Z2R9fJeYzrDkS6qYXmZP1kqDLcLbrE7QgzwH
-CvFRP32PXx1IFOE5mL/JRPagcmwdHBORzZDiGYiAWS8TYqyb0BlTqP7zQ6eU+4zf
-mBBIbEsgxXAhJ0MC/hXtN7/ucdB9afaUgo6DpfiyMUe/r1yU2Nin+L2i+oliYUOe
-RhDpMnOcMr25ov41lt8QtaaPr+1L4EsiAH/oeL/pDy0mgNKWOgouArn3SVfWft/k
-l91QacdJ8rJ0lB7q+XthRTY7fSlrCd6sWBkUWCyDuJkIur54uujxu/EJMkQY+3JO
-QRxrQxaic2pjZQIDAQABo4HLMIHIMB0GA1UdDgQWBBSkecJT8XuvsJdha67qJHqY
-x9dBGDAfBgNVHSMEGDAWgBR1fWJXvIEmWGdNSfgEERJiYzw83DA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAryvdzpQm
+RLRHB7Vva22k4VWQixhSsBjy6cBe3r0ffraCX6DCdtcyUBNqM5GTQKshQkEbzwEs
+mYyz3KB/d6avS2r+zBNNW40XofylJyKGc8Bczp1BxfA3SX9YbnJI+F4vrT0ggQvp
+AlgVeXVoeWtzLgQ63wp39rAIlAA5C7Nu603JDonE0CE2UxjpdEIOpP0t718Uc44v
+QJ+bbRmtlfm6palKCLczjX0jPkwP0QJCGPzZpbj9UjroewEft6SI19sy8pSrTUH0
+1eyBWmUQAr0WBkUhVcnMgIeZJK1YZNoIef4hA8hgm6H73QUgmWsXdCqxYGKGaqew
+5BojSpc3H4Y9EwIDAQABo4HLMIHIMB0GA1UdDgQWBBRjgpgvkcNKcGmYuaXS5zPh
+1TeflDAfBgNVHSMEGDAWgBRVeppEfdotrs39b/MndbCzGziXwjA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AJPYm+VpFkPmWzvAcETsHX2eTygWmbVwb1r285Af6Tzrj7s7KNDhP2Btgd4Bd3GI
-VERBFnNIPPZcfWttgeQ1BfZMkcujvwbTsjM5BgdPLZn/NIVrdQIYX7GeXaegeLkm
-qh6HUTc/R69WBwSVAc9AOQrOAXvgNNwU4wZX2JMMbJBRklFuuPf/YoHjc/E0X6AZ
-fDnX0YEQWpBS4TLHOmZpxVvXVBVw0JtCvXB0Nyui5+7TIJY6Mu5TIfD2S8j7p+HO
-nXLP0OJ85BMgZmKNtrmdVkvIzOkAtsf35NztLCWvMgWY71beegf/62LBewtWle6Q
-VdZvyY2PFd3TZcHHjJT5gl0=
+ABU1rbalW3y6/m5iwA5uMbcIFdsjTU9qrqoM1oeyhoR1EPm5R2NtqbioLlMnRRjF
+1d3MeAgO7/8N19iRVB9ZaBtI4vYQnst6mffuH2BywJ8VJYp0h2H+8nkuaqZbwkDa
+PcbpBfMcjwFZp+Pa2bfVCYFJh81E9KxYHeVVVzXGirmCcrnMbCqUkcC1wehcgO1n
+NTXr4Au4XF1qtNR7TF8a0mIvk1SDvE+SL1lbzLequ0kEbe5/sTtFUmm2GfZplr7R
+zFbBX93/dvzU0/sMQ+RE/etafPKXaJNR27fpXsFTo5lpGJyVCTGAU3mBmsMZGzoc
+ZONQ7v/5RjAx1X+iwl9wuBs=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d6:d2:49:ce:36:d3:12:76:22:3f:67:89:7e:64:
-                    6e:09:f4:eb:b8:d7:66:3e:92:18:f2:2b:2c:4e:4a:
-                    ca:77:97:83:cc:79:38:d2:50:ea:cf:7e:cf:dc:fa:
-                    83:05:61:d1:70:8f:e3:32:85:39:52:57:0b:77:62:
-                    a0:63:ce:69:79:d0:a5:2c:95:06:92:38:f1:12:41:
-                    4b:5d:87:1e:8e:c5:40:28:36:16:c6:bd:fc:1f:ca:
-                    07:73:d5:1d:c5:5d:46:56:03:c7:f6:67:fb:91:ab:
-                    43:fb:53:48:a4:6f:75:e7:0b:10:f1:3d:aa:14:42:
-                    32:0b:b1:fc:10:81:d0:18:1b:1b:bd:d1:fd:e9:0d:
-                    53:64:3e:8f:3e:df:f0:07:2e:b8:b2:23:74:ea:9b:
-                    23:7c:15:42:e5:53:1a:0c:80:1e:49:dd:4e:fa:e4:
-                    50:a8:e2:74:3f:09:4f:bc:1c:71:7d:72:fe:7a:15:
-                    ac:2e:0b:9b:8c:41:2b:ce:32:a4:f5:40:71:6b:e8:
-                    2c:93:a9:41:03:53:95:a0:4a:68:2d:f0:b6:1e:01:
-                    da:7d:34:47:3d:d5:fb:ef:63:9a:72:df:e8:14:08:
-                    1a:29:29:aa:c3:ff:37:f4:ee:37:a4:45:da:d1:2c:
-                    94:1c:f3:df:62:41:f2:d0:00:0e:2c:06:88:12:71:
-                    8d:7f
+                    00:a6:73:2c:85:79:b0:7f:38:4f:b7:25:27:86:91:
+                    4b:eb:1e:15:30:b3:65:07:71:0e:a3:23:b0:33:51:
+                    9d:14:58:93:ee:42:4e:9f:87:27:a2:a9:cb:85:b4:
+                    63:9a:e0:c1:56:2a:98:07:fe:0c:d8:09:9c:0a:6f:
+                    4f:89:09:fc:7e:a7:1d:6b:74:82:97:3d:39:87:33:
+                    eb:32:c3:72:bc:0d:05:5a:f5:02:af:f0:bc:2b:3a:
+                    9a:30:a1:3e:da:6d:25:4e:ae:b6:6a:62:e6:15:39:
+                    13:6a:d3:ad:5d:b8:d3:bb:09:fe:4c:f9:f5:7a:13:
+                    03:98:a9:ef:29:27:ec:4b:94:fb:fc:91:a9:b6:b4:
+                    86:39:44:d3:29:00:4f:88:ba:48:37:8a:f9:d1:88:
+                    d7:fc:26:1f:8c:f9:58:84:6f:bf:35:62:38:81:54:
+                    7b:b4:d2:d7:f1:7b:5b:6c:2b:ce:86:91:a6:e1:d4:
+                    fa:d5:bb:07:c4:97:30:50:78:5f:59:a9:a1:2c:1f:
+                    2b:d1:fb:88:73:dd:19:7d:4a:7e:99:bc:49:33:dd:
+                    fd:37:b4:27:bf:1d:96:c6:9f:d6:af:45:b6:67:17:
+                    bc:e1:09:a7:39:39:89:d4:c2:83:70:06:44:99:2b:
+                    1e:73:7c:59:aa:bb:cd:20:0c:31:6e:57:cd:9e:7a:
+                    d5:d5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                75:7D:62:57:BC:81:26:58:67:4D:49:F8:04:11:12:62:63:3C:3C:DC
+                55:7A:9A:44:7D:DA:2D:AE:CD:FD:6F:F3:27:75:B0:B3:1B:38:97:C2
             X509v3 Authority Key Identifier: 
-                keyid:75:7D:62:57:BC:81:26:58:67:4D:49:F8:04:11:12:62:63:3C:3C:DC
+                keyid:55:7A:9A:44:7D:DA:2D:AE:CD:FD:6F:F3:27:75:B0:B3:1B:38:97:C2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -233,40 +233,40 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-         52:16:ce:5c:55:aa:c3:76:80:5a:60:ee:8a:85:f5:9f:64:ca:
-         6d:b9:66:53:73:a4:92:47:a9:d5:8e:b5:90:b2:a9:62:69:32:
-         e3:2c:f5:28:e6:d3:6c:d9:94:af:83:11:04:30:95:48:e2:9e:
-         2d:bf:67:63:95:97:32:99:28:b7:87:3d:dc:97:41:08:72:f7:
-         89:6a:94:bb:fe:62:cd:08:f6:d6:0b:86:60:5b:d7:4d:eb:df:
-         40:70:d9:bd:cb:e0:24:b8:ee:62:5a:7f:58:d3:3d:11:53:63:
-         34:aa:af:59:6b:86:30:ab:fb:55:40:cc:e3:65:0e:d6:36:b4:
-         dc:d1:db:a4:bc:1c:7a:51:cf:8a:7d:41:0a:e6:3a:16:c9:43:
-         e6:9e:41:31:f3:4f:81:c1:24:e8:fb:c5:db:87:c8:01:f5:b8:
-         60:ed:2a:0e:fc:31:59:26:63:fb:60:26:8f:52:0c:7c:19:b7:
-         29:18:c9:12:eb:80:6c:aa:25:46:41:92:1a:3a:e1:df:9e:94:
-         1f:92:01:90:b0:92:2c:e0:dd:31:81:a2:c0:ae:05:ae:85:c2:
-         ee:ce:63:2c:c8:3f:41:f9:06:8b:66:56:05:e7:58:7d:3f:d0:
-         ed:05:25:ea:1e:d0:69:24:f0:e3:dd:0a:d8:2e:ba:fe:d9:1a:
-         ba:39:2b:7d
+         1a:6e:d8:a7:3d:20:74:d6:60:5b:41:26:b8:b4:d2:ab:64:83:
+         76:83:b8:6f:68:14:87:0f:83:7a:52:f8:f5:66:9e:7c:27:8c:
+         71:58:17:08:3e:24:df:a3:d8:ed:41:c1:2d:26:0c:93:24:8a:
+         3d:52:7d:05:26:e2:0e:fc:da:88:7f:f4:5e:ac:d8:d1:8e:e4:
+         84:a0:ef:9a:9d:ff:98:75:56:23:83:17:c9:4a:8d:44:c5:ae:
+         30:f5:99:58:77:9d:69:bf:fa:eb:28:f4:e1:a2:06:57:cb:a5:
+         9b:be:d0:3d:0a:aa:56:03:12:9b:ce:88:91:e6:28:fc:51:e2:
+         32:fc:b0:80:88:43:74:44:e4:77:d3:67:cd:f7:f6:bb:50:8b:
+         ba:66:5f:95:c1:05:8c:f0:01:aa:b3:5e:4e:fa:29:dc:1d:23:
+         a7:9b:eb:27:6d:21:a1:2f:8f:f9:5f:5f:28:0b:9b:14:dd:17:
+         c0:0f:74:54:d7:66:91:5e:c8:f3:61:78:be:1d:45:f8:f7:73:
+         a9:2a:5e:7b:de:6d:b0:86:c2:21:61:f7:2e:00:dc:b8:e5:a4:
+         89:db:b5:77:bd:49:86:d0:99:83:39:8d:da:77:31:bb:b0:9e:
+         ca:7c:d5:3c:ff:41:2e:2e:81:21:1b:40:f6:9d:a7:e1:74:77:
+         df:d6:fe:3d
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDVDCCAjygAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbSSc420xJ2Ij9niX5k
-bgn067jXZj6SGPIrLE5KyneXg8x5ONJQ6s9+z9z6gwVh0XCP4zKFOVJXC3dioGPO
-aXnQpSyVBpI48RJBS12HHo7FQCg2Fsa9/B/KB3PVHcVdRlYDx/Zn+5GrQ/tTSKRv
-decLEPE9qhRCMgux/BCB0BgbG73R/ekNU2Q+jz7f8AcuuLIjdOqbI3wVQuVTGgyA
-HkndTvrkUKjidD8JT7wccX1y/noVrC4Lm4xBK84ypPVAcWvoLJOpQQNTlaBKaC3w
-th4B2n00Rz3V++9jmnLf6BQIGikpqsP/N/TuN6RF2tEslBzz32JB8tAADiwGiBJx
-jX8CAwEAAaOBujCBtzAdBgNVHQ4EFgQUdX1iV7yBJlhnTUn4BBESYmM8PNwwHwYD
-VR0jBBgwFoAUdX1iV7yBJlhnTUn4BBESYmM8PNwwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKZzLIV5sH84T7clJ4aR
+S+seFTCzZQdxDqMjsDNRnRRYk+5CTp+HJ6Kpy4W0Y5rgwVYqmAf+DNgJnApvT4kJ
+/H6nHWt0gpc9OYcz6zLDcrwNBVr1Aq/wvCs6mjChPtptJU6utmpi5hU5E2rTrV24
+07sJ/kz59XoTA5ip7ykn7EuU+/yRqba0hjlE0ykAT4i6SDeK+dGI1/wmH4z5WIRv
+vzViOIFUe7TS1/F7W2wrzoaRpuHU+tW7B8SXMFB4X1mpoSwfK9H7iHPdGX1Kfpm8
+STPd/Te0J78dlsaf1q9FtmcXvOEJpzk5idTCg3AGRJkrHnN8Waq7zSAMMW5XzZ56
+1dUCAwEAAaOBujCBtzAdBgNVHQ4EFgQUVXqaRH3aLa7N/W/zJ3Wwsxs4l8IwHwYD
+VR0jBBgwFoAUVXqaRH3aLa7N/W/zJ3Wwsxs4l8IwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAUhbOXFWqw3aAWmDuioX1n2TKbblmU3Ok
-kkep1Y61kLKpYmky4yz1KObTbNmUr4MRBDCVSOKeLb9nY5WXMpkot4c93JdBCHL3
-iWqUu/5izQj21guGYFvXTevfQHDZvcvgJLjuYlp/WNM9EVNjNKqvWWuGMKv7VUDM
-42UO1ja03NHbpLwcelHPin1BCuY6FslD5p5BMfNPgcEk6PvF24fIAfW4YO0qDvwx
-WSZj+2Amj1IMfBm3KRjJEuuAbKolRkGSGjrh356UH5IBkLCSLODdMYGiwK4FroXC
-7s5jLMg/QfkGi2ZWBedYfT/Q7QUl6h7QaSTw490K2C66/tkaujkrfQ==
+AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAGm7Ypz0gdNZgW0EmuLTSq2SDdoO4b2gU
+hw+DelL49WaefCeMcVgXCD4k36PY7UHBLSYMkySKPVJ9BSbiDvzaiH/0XqzY0Y7k
+hKDvmp3/mHVWI4MXyUqNRMWuMPWZWHedab/66yj04aIGV8ulm77QPQqqVgMSm86I
+keYo/FHiMvywgIhDdETkd9Nnzff2u1CLumZflcEFjPABqrNeTvop3B0jp5vrJ20h
+oS+P+V9fKAubFN0XwA90VNdmkV7I82F4vh1F+PdzqSpee95tsIbCIWH3LgDcuOWk
+idu1d71JhtCZgzmN2ncxu7CeynzVPP9BLi6BIRtA9p2n4XR339b+PQ==
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -278,3 +278,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem b/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem
index 190fb56..78db71b1 100644
--- a/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem
+++ b/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a8:bc:a9:2c:1c:80:81:33:16:83:62:e9:f7:0a:
-                    0d:5a:8b:86:da:a8:45:2f:04:1c:18:c0:d6:e5:f7:
-                    33:f3:76:86:eb:a3:07:6b:83:e1:75:e5:da:6d:1c:
-                    ee:99:a1:d7:38:bb:29:9a:7d:8f:54:c6:d4:0e:88:
-                    dd:b7:59:b2:a8:45:c3:c8:82:42:ca:8c:e5:21:f6:
-                    94:b0:8f:59:41:64:0c:31:a2:93:f9:2a:38:fe:d8:
-                    f5:e1:2e:b6:6c:f8:51:3f:9b:85:53:48:4e:34:30:
-                    f1:cc:2b:c5:32:6d:ce:85:ed:69:d0:a3:53:3e:8c:
-                    f7:4e:b1:d7:a6:ea:18:08:c6:23:d2:9e:13:e0:a6:
-                    50:e7:ea:da:f8:a0:d0:0f:ef:54:9b:fe:8c:3f:a1:
-                    ea:c8:13:1b:84:f6:44:c1:a9:7a:69:ef:34:99:41:
-                    ec:a9:1c:b0:9b:39:ae:98:4c:fc:68:2d:ba:96:68:
-                    d5:b7:cf:2c:f0:2f:35:8a:0f:73:7c:8a:a0:e1:7a:
-                    0a:e4:3d:d0:05:e2:d9:d1:bd:30:d2:69:82:ba:31:
-                    b4:c7:9a:29:d5:aa:97:36:e5:2a:92:85:fa:a9:87:
-                    00:ef:5b:ec:db:5e:82:2b:78:dd:89:de:99:ff:d8:
-                    35:17:eb:bc:57:c1:ae:11:52:63:ef:23:54:09:18:
-                    f9:7f
+                    00:de:6f:00:3c:55:a6:0d:08:55:ef:d0:a4:d8:57:
+                    41:19:b0:78:3a:c4:48:f7:b0:4e:11:46:b1:5f:16:
+                    6a:33:5d:ae:d7:d3:80:78:2e:4e:63:9f:0b:ac:47:
+                    72:5b:c1:a8:b2:1c:99:2e:de:f9:f2:6e:10:73:64:
+                    f7:94:95:be:e7:46:37:fd:4b:d4:95:54:bb:dd:ba:
+                    99:9b:83:89:38:6e:43:22:6b:97:8b:4f:34:28:94:
+                    5e:0e:31:6b:0f:70:06:6e:80:aa:1d:a3:48:c0:ed:
+                    f8:6b:11:94:87:17:22:10:2e:fd:24:8c:b0:2d:34:
+                    d2:1d:32:8b:66:d7:65:34:10:e1:2a:39:70:7e:55:
+                    b0:ba:0c:13:a1:0c:56:2d:35:bf:67:69:4f:19:b6:
+                    0d:b1:a4:71:f5:74:22:d6:87:17:09:cc:be:8a:23:
+                    55:45:c8:d9:b6:1c:d9:f1:a4:51:7a:be:0d:a9:f6:
+                    f6:cc:43:85:a0:eb:8d:0d:68:12:f2:77:8c:96:31:
+                    12:c4:dd:68:0d:14:6a:80:ad:83:92:08:77:29:f9:
+                    1f:2f:37:84:2b:75:d9:c6:80:c6:ca:ba:61:f1:40:
+                    d0:d6:2c:3b:69:f2:94:1f:33:17:57:27:bb:fd:ac:
+                    f1:db:22:7e:da:18:ca:4a:13:54:3d:7c:a1:0b:a0:
+                    0a:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                27:5D:22:BE:A2:20:5F:DC:69:8D:8A:6F:5B:CC:EF:D1:2A:AE:57:5B
+                36:B3:FD:9C:3B:AB:7A:63:A3:05:4E:3C:FB:71:11:21:D3:1D:45:AC
             X509v3 Authority Key Identifier: 
-                keyid:9F:6B:C0:D8:24:51:E0:D7:89:F4:E0:74:B7:0D:D6:FF:8B:AF:58:04
+                keyid:67:DA:2F:45:54:93:91:B7:44:F5:7F:18:C4:4A:9D:AA:5D:A4:5A:56
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         1d:e0:a8:55:02:9d:d1:70:c6:ca:d2:82:75:35:ce:14:88:18:
-         65:5d:12:42:b2:80:8d:ae:c1:24:fe:e2:c8:ca:b0:51:d0:39:
-         24:e2:82:c1:96:bb:38:d1:54:dc:c0:51:dd:96:c0:d7:45:76:
-         cf:5c:37:fc:53:96:b0:c8:84:99:f9:4a:ad:03:98:1e:44:86:
-         81:36:e1:4b:3a:3d:bc:f0:b5:58:4d:83:3a:30:56:45:e0:89:
-         67:f6:61:cb:18:60:e9:53:42:a2:92:0b:dc:8f:6e:59:b2:9a:
-         bc:36:61:11:f2:90:17:72:5f:a8:e2:2f:43:22:e2:b0:7c:00:
-         69:64:e2:3f:69:15:32:56:1a:58:c3:b3:61:ec:37:a7:58:e3:
-         df:e2:e2:f0:04:5e:37:f5:07:7d:52:aa:21:32:35:d2:18:5a:
-         b8:17:ef:7a:cc:de:10:10:2b:ae:73:a7:d8:38:a5:32:58:65:
-         6c:9c:8e:e6:c9:93:e9:e0:54:bf:8b:01:cf:ee:a0:b6:dc:68:
-         26:af:fe:39:48:8b:aa:37:37:ca:9c:28:97:0a:60:f6:53:dd:
-         ff:81:34:c1:68:2f:05:84:86:9e:7e:89:cd:21:a5:66:85:63:
-         33:fb:1d:e6:70:88:56:f6:c2:34:60:0b:c3:f4:49:2a:c5:81:
-         82:72:da:1a
+         2c:c8:92:ca:af:b3:42:dd:4e:13:a4:71:2b:60:4c:61:a3:5d:
+         67:62:bf:4f:fe:ad:07:17:44:37:80:d7:f0:4f:be:ed:26:1c:
+         e2:30:53:cb:f1:d5:7c:63:3c:a5:f4:56:71:17:c4:8e:8c:52:
+         e1:27:76:e3:55:54:e5:40:50:16:78:8a:70:db:19:4d:ff:b5:
+         12:45:8c:9a:4f:15:3f:a8:3a:61:c5:d8:b1:f0:ca:ed:82:b2:
+         44:ce:a1:58:d3:87:b6:c0:0f:69:a8:3f:f1:f1:c5:ba:46:37:
+         fe:84:da:c3:b2:6e:1c:19:fb:b8:91:d2:c7:1f:54:b5:c8:a7:
+         1c:ad:44:18:67:6d:18:eb:41:22:be:40:4f:a9:13:37:c5:28:
+         80:dc:a0:43:cc:08:4b:e1:57:b4:b9:0b:f6:9f:97:62:55:d1:
+         24:ee:d3:22:00:11:65:46:0d:78:8e:8f:68:b7:8e:e5:74:12:
+         4b:e8:08:36:08:bc:5b:ec:4b:2b:72:d0:0f:2a:56:c5:b2:db:
+         1a:27:6e:0c:f3:4f:e7:36:72:47:b0:d9:f7:df:48:1a:1c:2c:
+         ae:3c:63:e6:c3:44:6c:5a:2e:24:11:72:9a:31:89:05:7d:f7:
+         a2:ab:f3:9e:f0:24:43:3c:ea:45:b1:2f:01:be:da:a5:7c:21:
+         35:9b:da:03
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCovKks
-HICBMxaDYun3Cg1ai4baqEUvBBwYwNbl9zPzdobrowdrg+F15dptHO6Zodc4uyma
-fY9UxtQOiN23WbKoRcPIgkLKjOUh9pSwj1lBZAwxopP5Kjj+2PXhLrZs+FE/m4VT
-SE40MPHMK8Uybc6F7WnQo1M+jPdOsdem6hgIxiPSnhPgplDn6tr4oNAP71Sb/ow/
-oerIExuE9kTBqXpp7zSZQeypHLCbOa6YTPxoLbqWaNW3zyzwLzWKD3N8iqDhegrk
-PdAF4tnRvTDSaYK6MbTHminVqpc25SqShfqphwDvW+zbXoIreN2J3pn/2DUX67xX
-wa4RUmPvI1QJGPl/AgMBAAGjgekwgeYwHQYDVR0OBBYEFCddIr6iIF/caY2Kb1vM
-79EqrldbMB8GA1UdIwQYMBaAFJ9rwNgkUeDXifTgdLcN1v+Lr1gEMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDebwA8
+VaYNCFXv0KTYV0EZsHg6xEj3sE4RRrFfFmozXa7X04B4Lk5jnwusR3JbwaiyHJku
+3vnybhBzZPeUlb7nRjf9S9SVVLvdupmbg4k4bkMia5eLTzQolF4OMWsPcAZugKod
+o0jA7fhrEZSHFyIQLv0kjLAtNNIdMotm12U0EOEqOXB+VbC6DBOhDFYtNb9naU8Z
+tg2xpHH1dCLWhxcJzL6KI1VFyNm2HNnxpFF6vg2p9vbMQ4Wg640NaBLyd4yWMRLE
+3WgNFGqArYOSCHcp+R8vN4QrddnGgMbKumHxQNDWLDtp8pQfMxdXJ7v9rPHbIn7a
+GMpKE1Q9fKELoAqpAgMBAAGjgekwgeYwHQYDVR0OBBYEFDaz/Zw7q3pjowVOPPtx
+ESHTHUWsMB8GA1UdIwQYMBaAFGfaL0VUk5G3RPV/GMRKnapdpFpWMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAHeCoVQKd0XDGytKCdTXO
-FIgYZV0SQrKAja7BJP7iyMqwUdA5JOKCwZa7ONFU3MBR3ZbA10V2z1w3/FOWsMiE
-mflKrQOYHkSGgTbhSzo9vPC1WE2DOjBWReCJZ/Zhyxhg6VNCopIL3I9uWbKavDZh
-EfKQF3JfqOIvQyLisHwAaWTiP2kVMlYaWMOzYew3p1jj3+Li8AReN/UHfVKqITI1
-0hhauBfveszeEBArrnOn2DilMlhlbJyO5smT6eBUv4sBz+6gttxoJq/+OUiLqjc3
-ypwolwpg9lPd/4E0wWgvBYSGnn6JzSGlZoVjM/sd5nCIVvbCNGALw/RJKsWBgnLa
-Gg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEALMiSyq+zQt1OE6RxK2BM
+YaNdZ2K/T/6tBxdEN4DX8E++7SYc4jBTy/HVfGM8pfRWcRfEjoxS4Sd241VU5UBQ
+FniKcNsZTf+1EkWMmk8VP6g6YcXYsfDK7YKyRM6hWNOHtsAPaag/8fHFukY3/oTa
+w7JuHBn7uJHSxx9UtcinHK1EGGdtGOtBIr5AT6kTN8UogNygQ8wIS+FXtLkL9p+X
+YlXRJO7TIgARZUYNeI6PaLeO5XQSS+gINgi8W+xLK3LQDypWxbLbGiduDPNP5zZy
+R7DZ999IGhwsrjxj5sNEbFouJBFymjGJBX33oqvznvAkQzzqRbEvAb7apXwhNZva
+Aw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ae:5d:2a:68:be:2b:83:82:45:26:41:fc:7d:0a:
-                    0a:91:4c:d4:b6:83:35:d5:ba:81:07:57:ce:9b:2c:
-                    28:b0:e9:34:e3:60:f3:93:71:b2:a1:a7:57:9a:a4:
-                    fb:5f:2f:22:c8:71:37:0a:22:de:b9:3d:d1:19:89:
-                    06:3f:cd:bd:50:8d:57:4b:86:ca:2e:2c:5a:57:dd:
-                    0d:2d:3b:83:31:d2:3a:ca:92:a1:a6:a5:79:3f:94:
-                    a6:b3:b6:d0:64:31:ad:3e:28:cf:9c:6d:da:f4:df:
-                    46:55:4b:89:ce:38:b1:dc:33:1d:05:56:ad:c0:75:
-                    c2:21:0e:29:f5:10:52:85:a9:dd:cd:b1:cb:b3:74:
-                    d7:d6:36:13:42:8b:d1:bc:71:8a:b9:65:64:b9:b4:
-                    84:b7:49:6d:f7:95:f5:48:d9:0c:5f:84:b7:84:ab:
-                    4c:4c:78:ed:b6:70:7b:f6:0c:3d:74:00:4a:e7:68:
-                    fe:c2:00:f9:2e:dc:10:e7:4e:6e:87:6f:db:c7:cb:
-                    06:53:2a:44:53:2f:84:f2:d0:2d:21:fc:60:00:69:
-                    ba:fd:52:a0:86:84:c4:7e:88:7f:35:ab:41:45:38:
-                    a7:c2:3f:d2:0f:20:26:3e:a4:8c:35:10:d3:93:52:
-                    70:18:44:25:ef:89:ea:f3:10:a1:ce:33:69:88:11:
-                    d1:09
+                    00:e7:37:c2:8d:0b:b4:b3:09:f1:4f:f2:1f:46:46:
+                    6e:41:af:62:51:c9:22:5f:a8:96:e0:13:66:83:17:
+                    a3:ec:f0:5a:48:91:66:78:6f:c5:cd:42:d2:c7:ca:
+                    35:df:41:ec:d4:1b:4a:1a:94:d8:c8:e2:e6:8f:c8:
+                    09:9f:92:67:40:c2:93:b3:dd:85:b2:83:c6:0f:07:
+                    ef:54:09:f1:fc:16:a7:7a:1a:dc:57:f5:4f:bb:78:
+                    bd:e8:fc:cb:9c:ae:aa:d2:f0:e2:93:52:72:c6:f4:
+                    3a:1b:b6:21:21:da:0f:8e:39:47:03:34:4b:b1:ee:
+                    0c:bf:f0:22:b6:b1:07:c6:f3:7e:e8:27:57:3f:e5:
+                    a5:fb:f8:62:6f:d4:42:ba:15:94:6c:df:5a:cc:fb:
+                    9f:6b:3c:df:de:7d:dc:44:41:94:71:b4:43:ad:85:
+                    5a:3e:a6:8f:0a:d8:c4:8d:a3:5b:20:99:fc:f6:e4:
+                    10:0f:52:8a:22:82:0f:62:a8:2c:33:ce:1f:50:34:
+                    5b:f1:97:00:9d:33:a3:85:f7:b0:50:aa:1d:f0:d2:
+                    b4:c6:6b:10:1d:5e:be:9b:cc:65:bc:ad:46:88:ba:
+                    49:65:a2:62:21:53:39:22:76:bd:af:e6:18:f3:9a:
+                    56:14:ff:27:a9:7e:21:5e:a2:a2:21:9b:2e:e2:8c:
+                    e1:cb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9F:6B:C0:D8:24:51:E0:D7:89:F4:E0:74:B7:0D:D6:FF:8B:AF:58:04
+                67:DA:2F:45:54:93:91:B7:44:F5:7F:18:C4:4A:9D:AA:5D:A4:5A:56
             X509v3 Authority Key Identifier: 
-                keyid:A8:0C:3D:AD:82:26:A9:EB:AF:61:CC:3D:E0:68:1D:82:DE:DB:D1:FD
+                keyid:56:E7:E2:76:12:26:8B:A6:6F:7A:E9:E2:33:F9:CE:9B:56:73:F2:F2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         69:1c:29:c5:7c:e3:18:58:86:0c:88:41:20:23:9d:75:07:22:
-         4b:89:1d:6a:08:15:cf:85:c2:8d:f4:17:37:9e:a0:7e:67:b9:
-         0e:95:80:b1:a8:8f:06:2d:5e:9d:67:5c:d3:a7:47:74:d3:f7:
-         00:fb:84:75:99:d4:b9:07:ba:3b:63:2c:d9:57:04:48:35:f4:
-         20:91:39:55:ad:86:27:4e:ba:22:17:85:9a:dd:e4:4f:dd:dd:
-         d4:d0:0a:5b:43:6c:2e:d1:4f:f8:50:32:64:a2:15:46:bb:82:
-         ef:d1:ff:17:2a:dd:13:50:81:7e:1c:5b:6e:50:7b:8c:72:03:
-         eb:58:9a:fd:e8:e6:f1:d7:c5:59:ff:18:2a:95:64:c0:53:84:
-         0f:c1:1c:66:73:24:29:81:ae:0d:b7:b1:fc:44:2d:fb:02:89:
-         70:97:c0:ed:91:6f:9b:57:7b:40:38:29:8c:fa:87:52:f8:db:
-         8a:3b:1c:a2:a3:c1:08:8b:cf:9a:6e:dc:a8:b3:96:5e:31:05:
-         af:5c:1c:21:8e:d3:fe:18:17:af:a9:77:92:6f:46:93:36:d2:
-         e1:4f:a2:d9:e4:5d:bf:61:ad:db:c4:87:61:79:c3:bd:c3:e1:
-         5b:d7:76:03:e3:fe:4a:75:a0:84:2b:ea:82:c1:d5:2c:6f:e7:
-         55:46:1f:36
+         06:d9:0a:6c:b9:69:0b:d0:77:a3:ce:81:38:fd:46:0a:fd:4c:
+         0d:ca:a5:85:13:2c:e2:c4:97:90:3d:7a:57:61:cf:bb:f2:f3:
+         ca:d9:a9:ba:c7:dd:b7:0b:89:a9:c5:8b:59:3a:a6:33:e6:de:
+         90:53:6b:80:a9:a7:4a:99:1f:37:d2:55:40:40:1b:15:0a:f4:
+         7a:24:14:6c:8e:20:5f:b5:f5:eb:7b:a4:4c:c9:71:8f:53:e2:
+         9c:52:da:35:91:0d:6f:f4:a1:54:45:3a:34:a8:cc:a2:e0:a0:
+         45:59:ed:d8:ae:4b:8a:73:4f:1a:6a:17:2f:3b:70:0b:1e:86:
+         91:46:f7:80:e6:d2:4b:94:9c:f2:b1:62:dd:ad:ac:11:1b:60:
+         b4:4e:d3:ff:9a:c0:73:88:27:ee:7b:68:ab:37:c2:8a:af:71:
+         89:82:32:c1:ec:82:15:e3:d3:28:1a:41:66:c7:74:aa:ac:41:
+         22:34:2c:eb:5c:8e:82:38:b3:19:30:a3:1c:9e:4a:32:14:1b:
+         f3:08:c9:e0:7b:6f:12:49:42:87:53:50:aa:5e:4d:72:68:4c:
+         c9:96:b0:0b:d8:88:a0:ac:28:a4:0d:b7:25:93:b0:b8:fa:96:
+         b6:af:bb:76:3c:0a:6b:a4:b5:05:d9:2b:8e:94:a1:61:9f:be:
+         d9:56:dd:88
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArl0qaL4r
-g4JFJkH8fQoKkUzUtoM11bqBB1fOmywosOk042Dzk3GyoadXmqT7Xy8iyHE3CiLe
-uT3RGYkGP829UI1XS4bKLixaV90NLTuDMdI6ypKhpqV5P5Sms7bQZDGtPijPnG3a
-9N9GVUuJzjix3DMdBVatwHXCIQ4p9RBShandzbHLs3TX1jYTQovRvHGKuWVkubSE
-t0lt95X1SNkMX4S3hKtMTHjttnB79gw9dABK52j+wgD5LtwQ505uh2/bx8sGUypE
-Uy+E8tAtIfxgAGm6/VKghoTEfoh/NatBRTinwj/SDyAmPqSMNRDTk1JwGEQl74nq
-8xChzjNpiBHRCQIDAQABo4HLMIHIMB0GA1UdDgQWBBSfa8DYJFHg14n04HS3Ddb/
-i69YBDAfBgNVHSMEGDAWgBSoDD2tgiap669hzD3gaB2C3tvR/TA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5zfCjQu0
+swnxT/IfRkZuQa9iUckiX6iW4BNmgxej7PBaSJFmeG/FzULSx8o130Hs1BtKGpTY
+yOLmj8gJn5JnQMKTs92FsoPGDwfvVAnx/BanehrcV/VPu3i96PzLnK6q0vDik1Jy
+xvQ6G7YhIdoPjjlHAzRLse4Mv/AitrEHxvN+6CdXP+Wl+/hib9RCuhWUbN9azPuf
+azzf3n3cREGUcbRDrYVaPqaPCtjEjaNbIJn89uQQD1KKIoIPYqgsM84fUDRb8ZcA
+nTOjhfewUKod8NK0xmsQHV6+m8xlvK1GiLpJZaJiIVM5Ina9r+YY85pWFP8nqX4h
+XqKiIZsu4ozhywIDAQABo4HLMIHIMB0GA1UdDgQWBBRn2i9FVJORt0T1fxjESp2q
+XaRaVjAfBgNVHSMEGDAWgBRW5+J2EiaLpm966eIz+c6bVnPy8jA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AGkcKcV84xhYhgyIQSAjnXUHIkuJHWoIFc+Fwo30FzeeoH5nuQ6VgLGojwYtXp1n
-XNOnR3TT9wD7hHWZ1LkHujtjLNlXBEg19CCROVWthidOuiIXhZrd5E/d3dTQCltD
-bC7RT/hQMmSiFUa7gu/R/xcq3RNQgX4cW25Qe4xyA+tYmv3o5vHXxVn/GCqVZMBT
-hA/BHGZzJCmBrg23sfxELfsCiXCXwO2Rb5tXe0A4KYz6h1L424o7HKKjwQiLz5pu
-3Kizll4xBa9cHCGO0/4YF6+pd5JvRpM20uFPotnkXb9hrdvEh2F5w73D4VvXdgPj
-/kp1oIQr6oLB1Sxv51VGHzY=
+AAbZCmy5aQvQd6POgTj9Rgr9TA3KpYUTLOLEl5A9eldhz7vy88rZqbrH3bcLianF
+i1k6pjPm3pBTa4Cpp0qZHzfSVUBAGxUK9HokFGyOIF+19et7pEzJcY9T4pxS2jWR
+DW/0oVRFOjSozKLgoEVZ7diuS4pzTxpqFy87cAsehpFG94Dm0kuUnPKxYt2trBEb
+YLRO0/+awHOIJ+57aKs3woqvcYmCMsHsghXj0ygaQWbHdKqsQSI0LOtcjoI4sxkw
+oxyeSjIUG/MIyeB7bxJJQodTUKpeTXJoTMmWsAvYiKCsKKQNtyWTsLj6lravu3Y8
+CmuktQXZK46UoWGfvtlW3Yg=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b1:3a:fd:fa:bf:99:17:55:07:e6:61:ce:aa:d9:
-                    34:6c:24:96:c6:72:78:40:b4:98:21:ba:82:d4:3c:
-                    63:a2:17:75:45:d5:92:ee:63:e5:e1:75:16:cf:69:
-                    fb:92:ee:80:a1:61:60:c4:bf:d1:a2:d8:e2:45:6b:
-                    6b:0a:a0:2b:ee:c7:d4:9e:db:c7:7e:30:93:17:d8:
-                    66:0d:c3:9e:da:d9:98:97:a2:bd:1a:3a:6e:cf:14:
-                    d4:50:c6:30:60:09:9c:5c:4c:65:dd:23:5d:90:87:
-                    80:06:16:5d:8b:0a:af:37:9b:bc:e9:83:61:dd:3e:
-                    50:07:42:52:17:bc:68:de:20:d2:98:ee:5d:e5:24:
-                    4d:7a:9d:50:e7:6a:81:2c:43:3f:0a:57:c1:a7:03:
-                    a8:94:2e:e7:4f:0c:29:8e:cf:a2:13:06:e9:6f:e0:
-                    22:ba:39:a9:d6:0f:0a:55:13:38:9b:67:5d:fa:59:
-                    b5:6a:8c:8a:af:9e:73:b4:67:47:56:7f:1f:f6:96:
-                    81:7f:b3:7f:9c:18:1e:3c:c6:76:3a:2d:ed:b0:ea:
-                    81:60:0a:a1:d4:e3:70:c0:ef:62:58:4e:7e:43:c3:
-                    3e:8e:c4:dd:13:64:57:ee:14:df:24:93:73:27:c4:
-                    df:13:9a:87:67:b5:ea:e0:7e:0c:dd:1b:b2:88:1c:
-                    a5:9d
+                    00:ba:98:6c:5a:c8:0e:52:5f:2e:60:52:d5:05:66:
+                    4f:2a:a2:52:b1:28:96:8e:08:35:90:28:7a:11:33:
+                    ec:2b:93:81:d6:93:ec:18:d4:35:17:8e:8c:e6:74:
+                    1c:fb:92:53:f4:cb:03:cf:1f:eb:3d:c7:2e:8c:26:
+                    30:63:57:7a:f6:a6:34:60:35:72:4f:6c:0f:bd:9f:
+                    bd:23:7b:a1:ed:ac:01:52:c2:27:46:29:3c:e9:9c:
+                    33:96:1d:71:77:43:22:cc:0d:05:cc:1c:c3:04:b4:
+                    5b:a1:dc:e4:b0:b1:88:18:35:17:19:a6:bc:6f:b5:
+                    3b:93:34:f6:de:c0:b9:ef:f3:cd:45:11:48:de:31:
+                    6e:e1:c4:d3:8a:3e:65:cf:78:af:83:ed:70:4b:bd:
+                    bb:1d:3a:d9:99:38:55:81:8f:01:0c:d3:d4:a8:3b:
+                    e7:c9:1e:64:a9:a1:13:a0:6f:19:6e:69:54:25:2c:
+                    25:bd:6e:97:a1:21:34:d9:ec:33:b5:89:84:35:25:
+                    5b:ed:08:b9:47:f6:ec:a2:1c:8e:37:5f:1d:d4:31:
+                    9e:93:94:db:f8:57:f2:40:2c:45:46:2c:c9:7b:2c:
+                    28:b5:79:a7:62:00:68:2a:50:50:15:69:65:07:53:
+                    b5:ba:cb:43:8d:2a:09:33:fb:8f:4a:93:9f:cd:a6:
+                    ee:a3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A8:0C:3D:AD:82:26:A9:EB:AF:61:CC:3D:E0:68:1D:82:DE:DB:D1:FD
+                56:E7:E2:76:12:26:8B:A6:6F:7A:E9:E2:33:F9:CE:9B:56:73:F2:F2
             X509v3 Authority Key Identifier: 
-                keyid:A8:0C:3D:AD:82:26:A9:EB:AF:61:CC:3D:E0:68:1D:82:DE:DB:D1:FD
+                keyid:56:E7:E2:76:12:26:8B:A6:6F:7A:E9:E2:33:F9:CE:9B:56:73:F2:F2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         45:91:23:ab:2f:b8:a2:2e:24:63:4b:bb:54:17:29:3d:86:9c:
-         7d:f8:a3:9d:88:4c:9e:89:bf:e9:1a:bc:35:73:27:e1:9d:3e:
-         e4:fc:3c:87:71:21:be:a5:bd:e7:e1:dd:44:b1:67:36:b6:1f:
-         0a:7c:a1:30:8a:57:23:5f:61:88:18:48:a4:15:0e:58:81:27:
-         a3:9a:42:f4:47:d7:f1:0c:c6:84:dd:03:8f:63:49:07:01:38:
-         6f:88:60:33:4d:45:73:9f:02:78:a2:1d:e1:a7:75:d7:18:7c:
-         b9:89:e5:ff:30:e6:45:5f:80:5f:f9:88:b5:89:bd:8f:d4:6c:
-         7d:af:c2:c7:4e:a1:83:74:08:cb:4d:e9:c1:e6:c6:c4:de:55:
-         10:19:fa:6a:04:89:0a:d8:54:cf:5d:58:f0:17:63:cb:db:0a:
-         18:6b:75:2a:36:97:3f:f9:ed:3c:c9:2d:8b:40:dd:63:3b:82:
-         f6:fa:0f:5a:31:6e:f9:4a:b8:18:ca:1a:0d:77:6b:b6:01:8e:
-         a8:4b:15:be:29:b6:9a:db:15:2a:8a:66:49:29:74:c2:68:c9:
-         80:0b:ce:de:aa:4d:54:d2:43:c2:7f:6b:ed:80:5a:0a:c7:bf:
-         d3:95:ed:d1:c1:e8:d0:f2:1f:dc:a7:22:e6:2d:52:b0:fe:d8:
-         b7:3d:bc:d1
+         4d:c4:c6:47:69:78:06:88:e5:5e:ae:c6:bc:b1:f5:7f:49:ac:
+         e6:51:bc:dc:dd:7b:28:fc:ee:b1:ca:6d:bd:ad:fb:e8:76:53:
+         5a:7a:2d:4c:76:b5:89:4b:69:cc:f6:2d:1b:45:f5:f8:04:cd:
+         e8:34:8b:f3:3b:cb:8b:04:9e:a7:8f:e2:85:6d:20:3c:0a:8e:
+         d9:d1:45:84:a7:06:f6:e9:0e:e0:fa:5d:28:89:84:6a:b2:1b:
+         08:55:5f:6c:0d:d8:47:9a:cb:cc:fa:e9:b7:fe:15:fa:6c:ae:
+         ab:7b:4a:c6:b2:fc:f3:96:ac:36:6c:e9:4a:ef:ad:27:75:9a:
+         b9:67:7c:cd:d5:83:f3:ab:2d:4d:66:2d:c5:5e:a1:01:42:2f:
+         a2:ff:5b:2f:0e:ec:e5:74:cb:15:0d:c4:e4:15:65:31:41:a3:
+         f1:11:a1:18:2b:af:1e:d4:09:66:f3:d7:f6:fc:a7:6b:cc:8f:
+         f7:d7:f7:7f:5e:19:50:32:d7:f9:0d:69:60:bd:b9:f0:9b:ed:
+         f9:b8:81:1d:70:44:0a:49:87:b8:c2:93:46:4f:13:c1:e8:a7:
+         50:f9:dc:f3:39:4f:cb:4a:85:92:ca:9b:2e:e1:b7:4c:ed:18:
+         9a:9a:cd:51:12:47:dd:b9:ba:f1:36:7e:b5:34:1e:c7:4e:36:
+         45:e2:ca:99
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE1MDMwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALE6/fq/mRdVB+ZhzqrZ
-NGwklsZyeEC0mCG6gtQ8Y6IXdUXVku5j5eF1Fs9p+5LugKFhYMS/0aLY4kVrawqg
-K+7H1J7bx34wkxfYZg3DntrZmJeivRo6bs8U1FDGMGAJnFxMZd0jXZCHgAYWXYsK
-rzebvOmDYd0+UAdCUhe8aN4g0pjuXeUkTXqdUOdqgSxDPwpXwacDqJQu508MKY7P
-ohMG6W/gIro5qdYPClUTOJtnXfpZtWqMiq+ec7RnR1Z/H/aWgX+zf5wYHjzGdjot
-7bDqgWAKodTjcMDvYlhOfkPDPo7E3RNkV+4U3ySTcyfE3xOah2e16uB+DN0bsogc
-pZ0CAwEAAaOByzCByDAdBgNVHQ4EFgQUqAw9rYImqeuvYcw94Ggdgt7b0f0wHwYD
-VR0jBBgwFoAUqAw9rYImqeuvYcw94Ggdgt7b0f0wNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALqYbFrIDlJfLmBS1QVm
+TyqiUrEolo4INZAoehEz7CuTgdaT7BjUNReOjOZ0HPuSU/TLA88f6z3HLowmMGNX
+evamNGA1ck9sD72fvSN7oe2sAVLCJ0YpPOmcM5YdcXdDIswNBcwcwwS0W6Hc5LCx
+iBg1FxmmvG+1O5M09t7Aue/zzUURSN4xbuHE04o+Zc94r4PtcEu9ux062Zk4VYGP
+AQzT1Kg758keZKmhE6BvGW5pVCUsJb1ul6EhNNnsM7WJhDUlW+0IuUf27KIcjjdf
+HdQxnpOU2/hX8kAsRUYsyXssKLV5p2IAaCpQUBVpZQdTtbrLQ40qCTP7j0qTn82m
+7qMCAwEAAaOByzCByDAdBgNVHQ4EFgQUVufidhImi6ZveuniM/nOm1Zz8vIwHwYD
+VR0jBBgwFoAUVufidhImi6ZveuniM/nOm1Zz8vIwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBFkSOrL7ii
-LiRjS7tUFyk9hpx9+KOdiEyeib/pGrw1cyfhnT7k/DyHcSG+pb3n4d1EsWc2th8K
-fKEwilcjX2GIGEikFQ5YgSejmkL0R9fxDMaE3QOPY0kHAThviGAzTUVznwJ4oh3h
-p3XXGHy5ieX/MOZFX4Bf+Yi1ib2P1Gx9r8LHTqGDdAjLTenB5sbE3lUQGfpqBIkK
-2FTPXVjwF2PL2woYa3UqNpc/+e08yS2LQN1jO4L2+g9aMW75SrgYyhoNd2u2AY6o
-SxW+Kbaa2xUqimZJKXTCaMmAC87eqk1U0kPCf2vtgFoKx7/Tle3RwejQ8h/cpyLm
-LVKw/ti3PbzR
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBNxMZHaXgG
+iOVersa8sfV/SazmUbzc3Xso/O6xym29rfvodlNaei1MdrWJS2nM9i0bRfX4BM3o
+NIvzO8uLBJ6nj+KFbSA8Co7Z0UWEpwb26Q7g+l0oiYRqshsIVV9sDdhHmsvM+um3
+/hX6bK6re0rGsvzzlqw2bOlK760ndZq5Z3zN1YPzqy1NZi3FXqEBQi+i/1svDuzl
+dMsVDcTkFWUxQaPxEaEYK68e1Alm89f2/KdrzI/31/d/XhlQMtf5DWlgvbnwm+35
+uIEdcEQKSYe4wpNGTxPB6KdQ+dzzOU/LSoWSypsu4bdM7Riams1REkfdubrxNn61
+NB7HTjZF4sqZ
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/expired-intermediate.pem b/net/data/verify_certificate_chain_unittest/expired-intermediate.pem
index 621f1da..baf7b58 100644
--- a/net/data/verify_certificate_chain_unittest/expired-intermediate.pem
+++ b/net/data/verify_certificate_chain_unittest/expired-intermediate.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c0:b3:a7:c8:34:e7:e2:df:55:43:80:00:33:96:
-                    78:2c:3a:ac:7e:79:5d:86:9f:df:7e:9b:7a:30:d0:
-                    5b:30:2b:26:cc:06:e7:1f:13:6c:80:36:59:ec:1c:
-                    4b:c9:70:c2:79:14:f4:83:2f:cf:39:a2:9d:96:5c:
-                    f2:91:90:ae:8f:f6:63:f6:cc:fb:1b:eb:fe:53:9b:
-                    b6:27:8b:52:bb:bb:94:1b:8b:e5:76:cc:5a:4d:d7:
-                    9c:96:05:62:f4:c8:bf:87:cf:a7:6e:55:fd:b5:ab:
-                    28:ae:08:c3:cd:5f:72:77:e3:d8:8d:de:1b:cb:17:
-                    bb:4c:b3:3d:6d:f2:84:22:5c:fb:84:31:46:68:3e:
-                    bd:b5:83:81:24:01:80:7d:eb:76:8e:1f:7b:8f:e7:
-                    77:cb:8f:ca:69:77:5a:7a:56:f3:1c:3c:16:bf:00:
-                    2b:9f:2d:f5:3a:59:e0:f5:84:91:d3:7a:3e:90:39:
-                    44:5a:65:36:ab:5f:25:5d:9b:57:1e:13:91:97:88:
-                    cb:36:39:d3:10:ee:2c:54:4d:6c:d7:22:92:37:0b:
-                    04:05:8f:1d:c3:58:b4:87:7c:db:17:2b:fc:db:00:
-                    eb:0f:8c:75:96:e5:12:96:37:fe:b2:d5:68:1c:67:
-                    fe:fb:60:c2:30:85:ae:0d:9b:62:50:6f:32:ae:fc:
-                    85:77
+                    00:bb:96:f1:5b:2b:5a:7e:e7:6f:38:53:81:52:60:
+                    7f:76:fc:e3:03:d7:43:ea:3a:28:23:5b:03:21:6a:
+                    6c:23:88:96:83:4a:e7:d0:6e:21:0d:29:28:99:a4:
+                    5a:5c:75:5b:0b:82:ff:84:e1:8e:82:01:70:0a:16:
+                    5d:dd:b7:2f:a8:44:66:8f:c5:18:0b:f4:5c:ac:0e:
+                    55:dc:68:c3:16:9e:ea:86:b3:29:f9:5f:39:e8:c5:
+                    13:51:f6:89:ee:bb:cb:81:12:e4:fa:cf:69:1b:cb:
+                    46:42:f5:ef:e3:9f:c5:06:8b:30:f0:2b:6d:b0:00:
+                    ce:d9:01:a2:79:39:ee:14:bc:38:b1:3d:9d:7c:b7:
+                    5c:dc:6d:ae:af:6a:dd:19:5f:87:01:3a:46:db:35:
+                    ef:f2:72:1b:82:25:3d:07:d4:eb:03:75:ff:d3:9f:
+                    f5:8f:92:6b:86:d2:50:e1:3c:0b:78:da:2f:35:ed:
+                    ee:2e:8f:bb:cb:b2:36:83:cf:13:2c:11:e5:f2:84:
+                    9c:c1:6d:a7:8b:4c:2b:18:09:7e:48:3a:41:36:37:
+                    f6:80:e5:99:4d:ac:13:97:be:ff:99:89:84:45:fd:
+                    2f:f7:db:65:40:0c:ac:8d:26:2f:dc:13:13:01:ad:
+                    41:0c:87:eb:f7:9d:bd:f6:2a:4b:a9:34:27:f0:63:
+                    0d:65
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                FC:25:45:D2:F9:2D:71:1C:EA:7B:79:2C:C5:C7:37:5F:9E:2A:5F:5D
+                3B:B6:93:A0:97:08:69:A7:DA:9B:4B:98:F9:73:34:EF:E6:F0:77:7F
             X509v3 Authority Key Identifier: 
-                keyid:4C:33:3C:86:48:60:C6:50:02:47:AF:DE:60:2F:A0:5C:96:EE:70:7B
+                keyid:CE:1B:E0:BB:3C:38:CE:25:A4:97:48:9E:FA:83:B5:97:B9:83:9C:AF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         46:d0:27:3e:e6:49:d1:48:c4:0e:d3:0e:d0:3e:be:44:7f:0e:
-         a0:38:92:84:c4:ed:60:65:1c:26:3f:12:dd:d8:e3:49:c6:c8:
-         42:86:67:95:6c:61:e7:61:8c:da:0a:db:90:d0:6f:e7:9f:05:
-         38:a5:4a:4e:c3:40:f8:2b:ff:67:ad:9f:70:27:10:8d:68:f2:
-         ee:78:d5:a7:83:2f:e3:67:b3:47:8c:39:c9:29:97:f0:77:b7:
-         fe:7f:c7:6b:aa:6d:4c:83:39:e3:dc:bd:c3:18:e3:d8:d3:50:
-         8a:97:d3:ee:59:3a:62:20:5b:e7:99:77:e6:d1:d2:d3:d0:d5:
-         04:7d:86:8e:26:30:05:d1:0e:0f:d6:d2:1e:49:42:67:61:81:
-         3d:10:75:d6:ba:c4:07:bb:e7:43:c8:a6:f7:56:e3:2b:d4:35:
-         d1:56:94:5c:0b:b6:25:02:d7:cd:74:e7:4d:1d:02:d3:43:ab:
-         dd:50:9f:c4:cf:15:4c:77:87:48:1e:57:3f:3d:7e:7e:67:9b:
-         ae:2f:79:ea:16:a9:cd:c6:76:cb:3c:75:75:a7:78:22:af:a9:
-         b4:83:d3:b2:72:e8:43:cc:4a:8d:ee:b4:5a:ac:b2:30:96:52:
-         91:26:4b:17:29:4e:53:b4:58:df:f9:1d:53:2c:66:3d:c5:d7:
-         11:99:b6:f5
+         39:5d:5e:53:44:d5:b1:f8:cb:10:f4:0c:d4:47:d3:57:e1:2a:
+         55:b7:30:c2:41:36:b8:18:e4:df:6c:d2:3e:84:ad:a1:a4:dd:
+         a3:3e:3c:9d:8c:e7:79:4b:9e:87:4c:f4:fe:42:69:40:b1:1b:
+         64:ee:a2:fa:6d:ad:b3:b1:09:1a:7f:2a:74:f0:be:1a:f7:a8:
+         46:5b:c7:26:e0:a6:7e:1e:42:cf:26:7b:39:ca:cc:c4:38:58:
+         46:03:48:77:ea:93:23:1f:6b:24:88:f6:d0:a6:d4:eb:2c:e5:
+         48:26:49:69:84:0f:84:56:12:75:ef:ec:fd:81:f4:d4:bf:51:
+         da:ab:3f:77:d8:03:f4:36:41:7e:59:39:81:45:2f:22:8a:fa:
+         18:d4:e4:22:4c:6a:73:b3:5f:a1:e7:17:82:1c:1a:30:0f:e8:
+         2f:b5:e2:61:62:1a:cb:5c:1b:c5:2c:71:13:c4:18:c0:c6:42:
+         6e:26:50:80:b2:67:f0:6e:b4:23:ae:73:c8:83:ab:41:e2:eb:
+         2d:e5:ad:50:5c:38:37:3f:b9:3e:1d:5e:c4:b6:75:79:8c:2a:
+         8d:a0:02:b1:fc:76:cb:70:ff:46:b2:8f:b0:66:b6:9b:b6:e6:
+         ff:ad:fa:0b:d1:f3:4b:98:ed:ee:88:2a:0c:e6:62:0b:15:37:
+         9d:d3:01:08
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAs6fI
-NOfi31VDgAAzlngsOqx+eV2Gn99+m3ow0FswKybMBucfE2yANlnsHEvJcMJ5FPSD
-L885op2WXPKRkK6P9mP2zPsb6/5Tm7Yni1K7u5Qbi+V2zFpN15yWBWL0yL+Hz6du
-Vf21qyiuCMPNX3J349iN3hvLF7tMsz1t8oQiXPuEMUZoPr21g4EkAYB963aOH3uP
-53fLj8ppd1p6VvMcPBa/ACufLfU6WeD1hJHTej6QOURaZTarXyVdm1ceE5GXiMs2
-OdMQ7ixUTWzXIpI3CwQFjx3DWLSHfNsXK/zbAOsPjHWW5RKWN/6y1WgcZ/77YMIw
-ha4Nm2JQbzKu/IV3AgMBAAGjgekwgeYwHQYDVR0OBBYEFPwlRdL5LXEc6nt5LMXH
-N1+eKl9dMB8GA1UdIwQYMBaAFEwzPIZIYMZQAkev3mAvoFyW7nB7MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7lvFb
+K1p+5284U4FSYH92/OMD10PqOigjWwMhamwjiJaDSufQbiENKSiZpFpcdVsLgv+E
+4Y6CAXAKFl3dty+oRGaPxRgL9FysDlXcaMMWnuqGsyn5XznoxRNR9onuu8uBEuT6
+z2kby0ZC9e/jn8UGizDwK22wAM7ZAaJ5Oe4UvDixPZ18t1zcba6vat0ZX4cBOkbb
+Ne/ychuCJT0H1OsDdf/Tn/WPkmuG0lDhPAt42i817e4uj7vLsjaDzxMsEeXyhJzB
+baeLTCsYCX5IOkE2N/aA5ZlNrBOXvv+ZiYRF/S/322VADKyNJi/cExMBrUEMh+v3
+nb32KkupNCfwYw1lAgMBAAGjgekwgeYwHQYDVR0OBBYEFDu2k6CXCGmn2ptLmPlz
+NO/m8Hd/MB8GA1UdIwQYMBaAFM4b4Ls8OM4lpJdInvqDtZe5g5yvMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEARtAnPuZJ0UjEDtMO0D6+
-RH8OoDiShMTtYGUcJj8S3djjScbIQoZnlWxh52GM2grbkNBv558FOKVKTsNA+Cv/
-Z62fcCcQjWjy7njVp4Mv42ezR4w5ySmX8He3/n/Ha6ptTIM549y9wxjj2NNQipfT
-7lk6YiBb55l35tHS09DVBH2GjiYwBdEOD9bSHklCZ2GBPRB11rrEB7vnQ8im91bj
-K9Q10VaUXAu2JQLXzXTnTR0C00Or3VCfxM8VTHeHSB5XPz1+fmebri956hapzcZ2
-yzx1dad4Iq+ptIPTsnLoQ8xKje60WqyyMJZSkSZLFylOU7RY3/kdUyxmPcXXEZm2
-9Q==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAOV1eU0TVsfjLEPQM1EfT
+V+EqVbcwwkE2uBjk32zSPoStoaTdoz48nYzneUueh0z0/kJpQLEbZO6i+m2ts7EJ
+Gn8qdPC+GveoRlvHJuCmfh5CzyZ7OcrMxDhYRgNId+qTIx9rJIj20KbU6yzlSCZJ
+aYQPhFYSde/s/YH01L9R2qs/d9gD9DZBflk5gUUvIor6GNTkIkxqc7NfoecXghwa
+MA/oL7XiYWIay1wbxSxxE8QYwMZCbiZQgLJn8G60I65zyIOrQeLrLeWtUFw4Nz+5
+Ph1exLZ1eYwqjaACsfx2y3D/RrKPsGa2m7bm/636C9HzS5jt7ogqDOZiCxU3ndMB
+CA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ae:f8:c2:3a:71:85:a2:bd:ca:2c:30:b7:22:3a:
-                    f3:c9:24:7e:74:86:98:af:cd:13:0a:c1:4c:52:56:
-                    f6:03:19:af:7d:67:73:2e:e2:99:e4:3b:f7:7a:7c:
-                    dc:8d:83:61:36:c4:89:bc:14:aa:11:8d:e7:fe:3d:
-                    61:e5:1a:78:88:9b:af:63:05:30:78:f8:1e:f5:92:
-                    e5:2d:02:d4:b4:cb:a4:44:a4:cc:1b:38:52:fb:55:
-                    4a:b9:37:d4:bb:d0:13:20:69:cb:1f:34:4c:d0:ca:
-                    32:04:23:f3:52:1f:39:e8:90:a3:3d:68:f5:a9:e3:
-                    fc:e3:f1:e2:c3:47:55:68:ab:7e:90:77:87:90:00:
-                    e9:30:05:ea:30:07:6d:66:d6:c8:98:bd:8b:81:18:
-                    c6:c5:45:26:30:ce:c8:61:6a:dc:70:7a:23:8a:4d:
-                    b8:ca:94:68:a7:48:ba:d6:fb:10:89:a9:9d:5e:1c:
-                    43:10:b5:de:33:68:a3:2c:91:2b:70:da:be:bd:1e:
-                    b2:30:2e:b9:f7:57:fc:d9:d1:4a:92:78:34:93:df:
-                    89:6a:85:1c:df:23:f3:30:fb:7d:9f:7b:b3:cc:9d:
-                    85:98:f8:64:7a:34:ba:7a:51:80:01:eb:91:77:7f:
-                    77:f6:65:86:9e:51:5e:4e:20:6f:c9:ed:3c:50:1c:
-                    cd:8f
+                    00:d2:ac:b0:9d:ea:a3:98:bd:31:99:4a:5c:52:d4:
+                    e6:36:79:ae:03:e3:6c:f2:f9:05:51:dd:3e:38:d5:
+                    3c:02:e8:ea:74:66:62:c7:63:9f:ce:91:ef:c3:0b:
+                    b9:08:ce:cc:cd:86:26:83:f0:c7:d2:1a:6c:21:8c:
+                    68:f3:2c:f7:28:e6:20:e7:7e:78:1a:18:67:40:70:
+                    f5:eb:ce:39:52:2d:35:75:00:a6:cc:13:24:47:58:
+                    9b:59:7c:ec:17:b8:e4:8b:94:94:06:00:0f:16:c9:
+                    14:b4:95:86:67:2e:e2:d7:16:86:81:2d:a3:4d:66:
+                    60:81:cc:83:d8:6a:ca:36:9e:7b:0c:06:ab:01:a9:
+                    08:99:ee:a1:ba:c3:fa:0d:4d:dd:c6:1a:59:8b:93:
+                    cc:16:3e:07:62:99:3f:14:e5:04:10:c3:ec:7e:03:
+                    5d:6e:a2:aa:c2:8c:13:ec:7b:18:34:2d:b9:46:a7:
+                    00:24:67:3e:ff:46:f9:e9:a8:6a:00:db:8d:af:02:
+                    0d:cd:1d:00:53:81:d4:d8:b0:d3:14:32:95:21:fe:
+                    02:f6:27:15:55:5a:51:cc:dc:d4:ff:e5:12:28:ff:
+                    af:be:23:5e:36:f6:8b:14:c2:4e:cb:c4:8b:03:79:
+                    e4:19:db:a6:6b:5a:92:83:67:95:c9:c6:44:77:66:
+                    ee:b7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4C:33:3C:86:48:60:C6:50:02:47:AF:DE:60:2F:A0:5C:96:EE:70:7B
+                CE:1B:E0:BB:3C:38:CE:25:A4:97:48:9E:FA:83:B5:97:B9:83:9C:AF
             X509v3 Authority Key Identifier: 
-                keyid:FB:59:3E:CC:A2:42:62:72:9F:53:96:95:3A:48:EA:16:80:C8:42:40
+                keyid:14:D6:00:BC:9A:53:1E:C0:23:29:37:45:60:EF:11:A1:AF:CE:2B:1A
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         4f:a5:3b:98:b8:a9:83:3a:35:3d:75:a8:f6:e8:59:43:95:3a:
-         0b:37:dc:ac:d0:12:82:31:2a:64:c8:64:81:f4:f8:d7:28:2c:
-         bf:6f:81:79:a8:21:7b:70:62:4b:7f:c8:b1:bf:69:8b:38:14:
-         e8:78:aa:61:f1:6f:6b:1a:81:93:e7:c4:7b:9f:99:75:2c:90:
-         e9:8d:3a:7e:4e:2f:09:f9:0a:20:04:cb:3e:c6:ed:59:f5:2e:
-         2e:be:73:b4:40:4f:9d:96:f0:8c:b8:01:88:fa:bf:7a:ed:f6:
-         cc:46:c5:62:1b:bb:f3:1d:3a:4b:02:7c:aa:6e:61:1f:5b:4e:
-         0e:d5:3f:c3:5c:c0:5f:1a:aa:fb:bb:4f:4d:a4:45:4c:2a:cd:
-         c0:c2:29:3d:1f:31:2b:0d:80:45:c7:5f:4b:09:96:88:a6:4a:
-         b0:fb:66:3f:4b:41:c3:5b:a7:f7:7f:ce:cb:b5:c9:54:62:66:
-         61:d1:20:73:f6:c2:e0:81:11:20:b1:a0:a5:44:3f:52:4a:77:
-         9d:b9:b9:99:e7:73:a8:23:1f:02:91:03:e5:90:ad:23:00:2a:
-         08:99:37:16:df:ca:70:bf:da:e9:50:1d:c5:94:81:57:97:7d:
-         3f:d2:4f:91:74:94:90:2e:5c:dd:33:13:a0:83:25:4d:c0:7e:
-         19:97:e3:d6
+         85:90:10:59:59:a7:08:ac:49:ac:37:1f:11:2b:ad:5e:ea:7d:
+         7a:f5:10:9a:a8:33:a2:67:ac:d0:fa:0f:ac:b6:c5:c5:e8:6f:
+         3a:82:72:99:b1:b1:8c:3b:1a:af:10:03:b5:a4:21:f6:3b:a0:
+         a8:80:84:b0:8c:11:64:b7:e1:79:d9:a3:21:64:24:ed:97:a8:
+         65:e1:62:e6:44:fa:cc:49:bd:fe:43:cc:69:ff:95:bb:6f:ac:
+         58:25:3a:da:57:42:e9:4b:32:3b:c5:ab:02:87:c9:d0:ea:8a:
+         7f:51:6f:b5:c0:1f:97:95:50:c1:e2:70:ac:af:fe:7d:49:bc:
+         d0:80:19:a7:bc:80:28:cb:73:93:fb:06:83:29:23:bb:b1:10:
+         b9:51:a9:bf:73:87:15:05:39:92:1e:ec:9a:48:b0:ea:c4:e1:
+         c5:c8:22:04:aa:e2:29:d5:31:f8:b1:4c:9e:e6:0f:a5:62:68:
+         71:3b:1b:7b:4d:c6:b0:01:51:ae:99:da:77:77:41:2b:c7:4b:
+         d3:83:d2:a0:d9:48:0a:4a:e6:52:91:a3:27:16:7c:0d:c4:93:
+         2c:fc:5c:51:bf:dc:b0:81:1a:80:d2:58:87:bc:26:08:13:cd:
+         d3:c0:26:40:23:e8:6b:b0:18:95:c5:d7:6a:a2:1a:19:00:62:
+         3d:92:94:45
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE1MDMwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArvjCOnGF
-or3KLDC3IjrzySR+dIaYr80TCsFMUlb2AxmvfWdzLuKZ5Dv3enzcjYNhNsSJvBSq
-EY3n/j1h5Rp4iJuvYwUwePge9ZLlLQLUtMukRKTMGzhS+1VKuTfUu9ATIGnLHzRM
-0MoyBCPzUh856JCjPWj1qeP84/Hiw0dVaKt+kHeHkADpMAXqMAdtZtbImL2LgRjG
-xUUmMM7IYWrccHojik24ypRop0i61vsQiamdXhxDELXeM2ijLJErcNq+vR6yMC65
-91f82dFKkng0k9+JaoUc3yPzMPt9n3uzzJ2FmPhkejS6elGAAeuRd3939mWGnlFe
-TiBvye08UBzNjwIDAQABo4HLMIHIMB0GA1UdDgQWBBRMMzyGSGDGUAJHr95gL6Bc
-lu5wezAfBgNVHSMEGDAWgBT7WT7MokJicp9TlpU6SOoWgMhCQDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0qywneqj
+mL0xmUpcUtTmNnmuA+Ns8vkFUd0+ONU8AujqdGZix2OfzpHvwwu5CM7MzYYmg/DH
+0hpsIYxo8yz3KOYg5354GhhnQHD16845Ui01dQCmzBMkR1ibWXzsF7jki5SUBgAP
+FskUtJWGZy7i1xaGgS2jTWZggcyD2GrKNp57DAarAakIme6husP6DU3dxhpZi5PM
+Fj4HYpk/FOUEEMPsfgNdbqKqwowT7HsYNC25RqcAJGc+/0b56ahqANuNrwINzR0A
+U4HU2LDTFDKVIf4C9icVVVpRzNzU/+USKP+vviNeNvaLFMJOy8SLA3nkGduma1qS
+g2eVycZEd2butwIDAQABo4HLMIHIMB0GA1UdDgQWBBTOG+C7PDjOJaSXSJ76g7WX
+uYOcrzAfBgNVHSMEGDAWgBQU1gC8mlMewCMpN0Vg7xGhr84rGjA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AE+lO5i4qYM6NT11qPboWUOVOgs33KzQEoIxKmTIZIH0+NcoLL9vgXmoIXtwYkt/
-yLG/aYs4FOh4qmHxb2sagZPnxHufmXUskOmNOn5OLwn5CiAEyz7G7Vn1Li6+c7RA
-T52W8Iy4AYj6v3rt9sxGxWIbu/MdOksCfKpuYR9bTg7VP8NcwF8aqvu7T02kRUwq
-zcDCKT0fMSsNgEXHX0sJloimSrD7Zj9LQcNbp/d/zsu1yVRiZmHRIHP2wuCBESCx
-oKVEP1JKd525uZnnc6gjHwKRA+WQrSMAKgiZNxbfynC/2ulQHcWUgVeXfT/ST5F0
-lJAuXN0zE6CDJU3AfhmX49Y=
+AIWQEFlZpwisSaw3HxErrV7qfXr1EJqoM6JnrND6D6y2xcXobzqCcpmxsYw7Gq8Q
+A7WkIfY7oKiAhLCMEWS34XnZoyFkJO2XqGXhYuZE+sxJvf5DzGn/lbtvrFglOtpX
+QulLMjvFqwKHydDqin9Rb7XAH5eVUMHicKyv/n1JvNCAGae8gCjLc5P7BoMpI7ux
+ELlRqb9zhxUFOZIe7JpIsOrE4cXIIgSq4inVMfixTJ7mD6ViaHE7G3tNxrABUa6Z
+2nd3QSvHS9OD0qDZSApK5lKRoycWfA3Ekyz8XFG/3LCBGoDSWIe8JggTzdPAJkAj
+6GuwGJXF12qiGhkAYj2SlEU=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c9:53:af:4f:d1:35:5f:3e:69:08:13:28:41:5b:
-                    69:25:b0:ee:39:75:73:4c:63:c4:08:42:0c:5e:04:
-                    04:62:21:1a:92:5d:c8:6d:e8:44:6a:3b:3e:c5:6a:
-                    22:56:86:db:cb:38:c8:c7:55:ed:2c:dc:bc:36:39:
-                    76:96:3f:6a:5f:3d:12:43:60:b1:94:13:75:94:02:
-                    8b:ad:f4:be:85:5b:ed:f1:c5:03:2c:3c:0c:e3:eb:
-                    7f:ab:94:4a:79:8b:48:fd:ad:7a:c3:e0:a8:de:40:
-                    ea:f0:a7:87:54:40:6e:f4:74:88:aa:2b:bb:21:bf:
-                    d6:7f:da:bc:cf:52:48:3d:b6:75:0d:e2:6b:ea:03:
-                    0a:d7:39:f5:78:45:63:05:1a:4b:99:40:5e:97:08:
-                    0a:5d:34:63:fa:ba:de:a7:f5:1c:e8:b2:26:96:0f:
-                    c9:c1:ac:6d:ef:05:8d:1c:dc:09:0b:bc:d3:f3:fb:
-                    10:43:2f:b2:36:3e:cf:84:1a:37:1e:fc:81:67:c6:
-                    14:87:bb:87:33:16:2a:95:cf:e7:0a:b7:52:00:05:
-                    09:08:a9:a5:97:5d:be:ed:19:92:4e:6c:4f:94:7f:
-                    e5:1a:34:c0:dc:3f:02:8e:ae:77:fc:b6:27:77:78:
-                    48:e7:ca:a1:bd:27:1d:3c:a3:2d:8d:46:d5:a6:9d:
-                    53:cd
+                    00:b6:13:fa:98:f7:b4:55:90:4b:c0:e4:41:74:47:
+                    e1:ca:ac:c0:84:7e:0a:55:af:06:c5:39:50:87:8a:
+                    35:c2:36:e0:01:8c:e5:4d:ff:a6:74:cc:76:b6:a5:
+                    91:ce:ff:95:86:7c:d1:5d:14:b4:30:04:7d:c6:41:
+                    2c:85:99:08:fa:b7:8f:92:86:3d:03:c1:83:5a:b0:
+                    d2:f7:93:ba:03:9c:8c:30:2f:e4:d5:d2:a7:be:70:
+                    d4:1c:71:71:00:8a:ac:df:ff:ff:27:05:27:ba:c2:
+                    6a:91:33:51:d3:8b:50:3a:bc:80:80:1b:cc:ff:6c:
+                    62:d2:a9:a2:c8:ef:99:02:86:2f:c0:4f:b0:84:38:
+                    43:d3:78:f7:c9:53:75:4a:75:3a:e4:60:1d:64:43:
+                    6b:8c:88:ff:c5:0b:f1:d2:36:9c:52:df:92:00:70:
+                    ff:15:e2:0d:08:be:b1:94:b8:11:a1:40:b2:6f:aa:
+                    dd:9a:bf:4a:83:93:d4:b1:bc:07:47:e9:22:55:7c:
+                    f2:c1:89:8a:b0:34:b0:e8:5a:34:70:56:e7:b3:4d:
+                    51:a0:9e:ba:f6:66:76:5f:dc:1f:0d:6a:18:fb:85:
+                    41:dd:d4:c9:8f:0f:f6:9c:66:2a:b0:ab:af:43:16:
+                    5e:79:d7:2b:f2:91:74:f6:5c:72:b4:bb:eb:ea:02:
+                    1f:53
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                FB:59:3E:CC:A2:42:62:72:9F:53:96:95:3A:48:EA:16:80:C8:42:40
+                14:D6:00:BC:9A:53:1E:C0:23:29:37:45:60:EF:11:A1:AF:CE:2B:1A
             X509v3 Authority Key Identifier: 
-                keyid:FB:59:3E:CC:A2:42:62:72:9F:53:96:95:3A:48:EA:16:80:C8:42:40
+                keyid:14:D6:00:BC:9A:53:1E:C0:23:29:37:45:60:EF:11:A1:AF:CE:2B:1A
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         34:3c:af:58:31:78:ea:c0:32:23:d8:b0:8e:84:44:9c:a3:b7:
-         0b:b5:a4:4b:3d:21:d2:8a:02:ec:4c:ed:ab:c3:0a:17:89:50:
-         45:fc:43:0b:db:6c:e6:69:56:3c:41:b0:c9:2d:12:19:bd:a1:
-         b6:a7:fa:25:a4:73:6f:32:06:b7:f5:ac:64:b3:b9:b6:44:65:
-         83:b2:48:cc:3c:68:69:ae:16:0a:c0:c5:57:39:00:51:16:97:
-         0e:03:7d:e7:02:65:f2:84:de:e9:a6:9d:d5:83:73:37:9d:f5:
-         bc:d8:ef:dc:6f:1b:48:db:f6:ca:a0:00:d5:e6:c0:f6:94:2d:
-         a9:4e:b4:4d:cf:49:7d:c4:4d:3a:68:a2:b2:d8:e8:67:77:98:
-         6f:1c:2d:4a:74:13:2b:24:04:67:50:38:7e:e9:cb:0c:94:0d:
-         d0:07:50:52:a5:03:10:07:6a:04:ef:33:ea:b0:70:9f:27:34:
-         47:b0:f8:41:81:7e:f2:93:0b:c0:cf:c3:d7:06:59:f1:24:2a:
-         61:64:7f:38:f0:4f:77:d3:92:e4:1f:e4:44:a4:b6:85:40:59:
-         3d:df:f2:cc:57:ea:1a:58:1d:f8:90:d4:2d:53:67:56:c3:88:
-         9d:17:0f:19:19:fc:ed:4e:cc:b9:76:fa:fc:93:e5:bf:08:e7:
-         a9:d6:46:0f
+         a8:92:8b:16:34:ca:84:e9:d6:0c:85:9a:b2:c7:e0:ab:37:50:
+         dd:68:2e:ba:93:22:17:09:53:a5:a1:4b:0d:75:8a:e6:38:8a:
+         0f:eb:5e:a4:fb:2d:7f:ce:39:6c:f8:c1:2b:25:03:a3:16:49:
+         61:e3:b1:04:68:c7:2b:38:f7:06:0a:e6:59:07:46:65:05:ef:
+         63:90:2b:28:58:58:95:8b:7a:02:32:f3:64:fc:79:77:45:47:
+         d0:9e:21:18:28:e2:1f:b1:f6:2d:af:bc:77:ff:37:c2:61:e2:
+         bc:56:c5:f3:e8:ed:12:3f:9f:ab:6f:7d:2d:14:92:47:79:f7:
+         1a:73:2a:f4:20:df:c6:87:10:80:2b:f7:08:09:3d:61:56:a7:
+         3d:27:71:19:c7:38:b2:36:13:0a:91:2a:c5:e0:a0:72:d6:2e:
+         de:ff:da:e5:80:f7:c8:55:b7:c1:d5:84:f7:31:e0:50:72:55:
+         09:bc:cb:ac:84:c6:b6:91:25:73:a4:4c:a3:5d:90:a9:9b:a8:
+         1a:44:d9:46:48:69:17:59:85:6e:0c:54:27:db:7d:4a:91:96:
+         71:ec:ff:a1:58:41:d1:06:4a:8b:12:2b:01:fb:98:06:8a:c7:
+         3e:df:01:23:a8:cf:04:d6:35:8a:95:c0:97:9f:f6:e4:38:20:
+         ab:15:f3:2f
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMlTr0/RNV8+aQgTKEFb
-aSWw7jl1c0xjxAhCDF4EBGIhGpJdyG3oRGo7PsVqIlaG28s4yMdV7SzcvDY5dpY/
-al89EkNgsZQTdZQCi630voVb7fHFAyw8DOPrf6uUSnmLSP2tesPgqN5A6vCnh1RA
-bvR0iKoruyG/1n/avM9SSD22dQ3ia+oDCtc59XhFYwUaS5lAXpcICl00Y/q63qf1
-HOiyJpYPycGsbe8FjRzcCQu80/P7EEMvsjY+z4QaNx78gWfGFIe7hzMWKpXP5wq3
-UgAFCQippZddvu0Zkk5sT5R/5Ro0wNw/Ao6ud/y2J3d4SOfKob0nHTyjLY1G1aad
-U80CAwEAAaOByzCByDAdBgNVHQ4EFgQU+1k+zKJCYnKfU5aVOkjqFoDIQkAwHwYD
-VR0jBBgwFoAU+1k+zKJCYnKfU5aVOkjqFoDIQkAwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALYT+pj3tFWQS8DkQXRH
+4cqswIR+ClWvBsU5UIeKNcI24AGM5U3/pnTMdralkc7/lYZ80V0UtDAEfcZBLIWZ
+CPq3j5KGPQPBg1qw0veTugOcjDAv5NXSp75w1BxxcQCKrN///ycFJ7rCapEzUdOL
+UDq8gIAbzP9sYtKposjvmQKGL8BPsIQ4Q9N498lTdUp1OuRgHWRDa4yI/8UL8dI2
+nFLfkgBw/xXiDQi+sZS4EaFAsm+q3Zq/SoOT1LG8B0fpIlV88sGJirA0sOhaNHBW
+57NNUaCeuvZmdl/cHw1qGPuFQd3UyY8P9pxmKrCrr0MWXnnXK/KRdPZccrS76+oC
+H1MCAwEAAaOByzCByDAdBgNVHQ4EFgQUFNYAvJpTHsAjKTdFYO8Roa/OKxowHwYD
+VR0jBBgwFoAUFNYAvJpTHsAjKTdFYO8Roa/OKxowNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA0PK9YMXjq
-wDIj2LCOhESco7cLtaRLPSHSigLsTO2rwwoXiVBF/EML22zmaVY8QbDJLRIZvaG2
-p/olpHNvMga39axks7m2RGWDskjMPGhprhYKwMVXOQBRFpcOA33nAmXyhN7ppp3V
-g3M3nfW82O/cbxtI2/bKoADV5sD2lC2pTrRNz0l9xE06aKKy2Ohnd5hvHC1KdBMr
-JARnUDh+6csMlA3QB1BSpQMQB2oE7zPqsHCfJzRHsPhBgX7ykwvAz8PXBlnxJCph
-ZH848E9305LkH+REpLaFQFk93/LMV+oaWB34kNQtU2dWw4idFw8ZGfztTsy5dvr8
-k+W/COep1kYP
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCokosWNMqE
+6dYMhZqyx+CrN1DdaC66kyIXCVOloUsNdYrmOIoP616k+y1/zjls+MErJQOjFklh
+47EEaMcrOPcGCuZZB0ZlBe9jkCsoWFiVi3oCMvNk/Hl3RUfQniEYKOIfsfYtr7x3
+/zfCYeK8VsXz6O0SP5+rb30tFJJHefcacyr0IN/GhxCAK/cICT1hVqc9J3EZxziy
+NhMKkSrF4KBy1i7e/9rlgPfIVbfB1YT3MeBQclUJvMushMa2kSVzpEyjXZCpm6ga
+RNlGSGkXWYVuDFQn231KkZZx7P+hWEHRBkqLEisB+5gGisc+3wEjqM8E1jWKlcCX
+n/bkOCCrFfMv
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,6 +281,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Time is after notAfter
 
diff --git a/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem b/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem
index 84b78fc..7628ea84 100644
--- a/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem
+++ b/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d8:d8:32:e7:2a:be:55:8d:e7:e8:ae:ee:1d:c6:
-                    f5:3b:0c:6d:25:d9:53:8e:4a:84:0c:1e:7b:cb:30:
-                    2f:5f:1f:85:a3:e7:e0:92:79:b4:a2:35:fe:b7:71:
-                    b4:a3:c0:79:dd:50:e5:e4:b0:61:b5:2c:97:2e:e6:
-                    4a:bc:c6:3c:c7:20:f3:87:20:4e:27:d8:8a:f6:0d:
-                    a9:ac:0a:57:9a:53:03:9e:5f:32:ef:07:18:0a:ab:
-                    f6:a7:42:4e:ef:36:9a:10:4a:db:d3:9f:49:d7:04:
-                    3a:95:61:77:ba:5e:d2:84:cb:57:ec:45:91:d0:fd:
-                    be:5b:8b:4d:2f:0b:21:ab:89:ab:92:d9:fc:18:0c:
-                    44:bb:54:0a:94:5d:bd:ee:ac:a9:ee:f2:27:a8:3f:
-                    30:b1:e7:f6:fd:1a:05:86:56:db:22:de:bd:e5:a6:
-                    d2:50:2d:4c:0c:ab:1c:b2:49:6c:23:9a:46:d8:f5:
-                    53:f4:9d:52:2c:f0:25:e3:a8:e7:99:d3:6d:ec:f0:
-                    0c:d1:bd:1e:73:c6:8f:5d:11:50:88:b3:63:bc:c7:
-                    c5:eb:36:74:8f:03:fe:1a:36:d7:ac:5f:18:ae:73:
-                    11:7f:dc:81:dc:7c:77:17:ec:2c:91:c5:db:cc:2d:
-                    1a:a0:f1:ad:aa:d4:b6:1d:22:ee:22:bd:48:c9:f0:
-                    df:7f
+                    00:ac:a3:a7:c6:1e:71:aa:8e:cf:a1:00:f6:ad:4c:
+                    a0:92:eb:eb:4f:18:02:be:72:71:9f:3a:aa:c0:b6:
+                    ef:99:fb:dd:21:06:c2:fa:c8:e3:bc:43:c2:fd:30:
+                    44:2f:a8:60:e7:d3:6e:b6:9b:b0:1d:f6:13:8d:42:
+                    62:c2:f4:71:6f:28:89:bb:9b:c3:5e:e8:53:64:7e:
+                    ed:70:dd:fd:f5:33:ec:14:dc:10:47:58:db:8e:2d:
+                    63:5b:73:6f:81:b6:d8:79:31:01:80:c0:77:14:a4:
+                    af:85:34:6c:e8:ed:da:7a:fb:7d:cb:a9:2a:fb:9b:
+                    5a:18:42:a0:56:29:e4:92:e9:e0:80:cf:0b:b8:fc:
+                    52:da:09:7a:dd:2e:0c:79:e0:b0:60:88:6d:e8:65:
+                    8b:d5:fb:ea:65:f6:d2:5e:7c:34:1c:4f:1b:e5:28:
+                    9c:9a:bc:b4:bd:2f:23:9d:6a:be:56:af:89:0e:11:
+                    9a:b2:cd:51:8b:b5:d6:d3:9c:18:e0:2d:d4:96:e1:
+                    e2:64:34:a8:a0:fe:87:7b:81:33:b7:63:59:22:c9:
+                    41:59:00:44:7c:ed:60:1a:85:38:02:64:ca:16:8d:
+                    0a:de:f9:8e:47:14:2f:04:24:f9:fd:d6:58:e8:eb:
+                    78:70:86:87:45:91:09:06:55:20:55:49:65:2e:c6:
+                    ac:ab
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E6:C3:54:85:55:F1:44:F6:4B:55:D3:EA:09:69:E3:95:F6:DA:2A:FA
+                71:C3:9D:BC:84:61:67:9E:2F:3E:A4:68:1D:CE:1A:1D:AF:E9:91:C0
             X509v3 Authority Key Identifier: 
-                keyid:EC:3F:B7:92:DD:EA:7D:97:A5:77:22:28:E9:98:4D:0D:07:69:C4:86
+                keyid:FF:3D:EF:B0:91:47:17:69:4F:6F:13:60:CE:45:AD:51:B9:56:0B:05
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         27:8e:41:9c:f0:5c:4a:e0:b0:63:c7:fa:cc:1f:d4:21:35:33:
-         87:13:68:b7:18:08:0e:ba:22:a1:51:1a:d9:ba:31:a7:35:80:
-         c7:75:35:a4:68:c8:3e:91:79:55:e3:60:34:79:a1:0f:a9:cc:
-         05:92:61:40:b0:66:2b:fe:c7:29:a2:54:f3:7c:71:b6:36:fe:
-         a9:fd:7b:79:ea:66:19:c0:2f:d2:56:97:2f:ca:12:a3:96:6b:
-         b3:57:c8:06:58:6f:de:53:d7:63:ee:93:d6:b2:f2:11:9c:8a:
-         a1:00:26:6c:9a:bd:dd:da:97:ea:07:61:5e:48:8e:dd:3f:10:
-         4b:39:d1:9a:ba:8f:14:30:b3:36:3c:9f:a7:2c:68:b4:3c:da:
-         f2:90:24:4a:03:19:38:24:73:b5:72:b3:ae:31:b3:44:96:36:
-         3d:38:c5:c7:07:62:78:06:d8:5d:01:07:d9:b3:2d:be:0f:46:
-         13:8c:25:f9:d7:e0:84:5d:a4:62:a7:5d:3b:22:cf:e6:95:97:
-         20:d3:24:40:cc:cf:3d:72:17:f9:c1:8e:ee:15:6f:99:8f:24:
-         d1:83:6b:f9:fe:6b:94:3a:9c:2c:02:5c:1d:70:d6:f8:d6:69:
-         0d:99:f5:53:89:4f:21:7b:a6:34:dd:ce:27:ef:45:a5:e0:c6:
-         e5:f5:fc:5f
+         aa:47:6d:8b:a4:17:44:75:4d:70:14:bd:44:05:ad:08:a2:57:
+         34:2b:e9:20:76:d3:5a:97:b4:d7:07:78:4a:02:dc:61:a8:cc:
+         e1:11:70:ca:6d:2d:50:8f:7a:bb:a2:02:52:24:95:41:6e:8f:
+         48:ec:29:98:42:2d:4b:49:db:84:e4:f1:96:32:21:6e:db:40:
+         34:78:22:2e:94:11:4c:d4:02:e4:d0:eb:7d:16:3f:65:59:bd:
+         8b:57:1a:95:c0:d5:8b:2b:63:85:5a:c7:7d:2a:2f:f9:5a:e2:
+         45:77:cf:ee:2e:01:68:de:69:e0:7e:78:f2:f5:ef:af:4c:85:
+         54:7a:a2:01:d9:d9:23:d4:da:ed:49:91:fb:59:22:ee:f4:a9:
+         37:84:e3:0e:3e:0f:e6:43:fd:27:d1:7b:67:76:ea:6d:e6:56:
+         b5:47:d2:b7:b1:ff:d2:4e:a5:fe:ae:63:6e:f8:28:19:5e:c7:
+         ec:9c:54:e4:b3:73:89:bc:d1:b0:ac:31:60:80:8e:fc:ef:c2:
+         a3:ef:fc:9b:cc:8a:ad:a2:de:4f:c1:40:64:13:f0:17:0b:19:
+         8c:5b:f3:d9:5a:11:b6:f1:6d:e9:52:87:f5:58:e4:8d:6b:96:
+         66:48:c7:43:c6:87:0a:ea:87:2c:c6:c6:99:f1:c2:bd:01:d8:
+         5d:eb:02:c3
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMzAyMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDY2DLn
-Kr5Vjeforu4dxvU7DG0l2VOOSoQMHnvLMC9fH4Wj5+CSebSiNf63cbSjwHndUOXk
-sGG1LJcu5kq8xjzHIPOHIE4n2Ir2DamsCleaUwOeXzLvBxgKq/anQk7vNpoQStvT
-n0nXBDqVYXe6XtKEy1fsRZHQ/b5bi00vCyGriauS2fwYDES7VAqUXb3urKnu8ieo
-PzCx5/b9GgWGVtsi3r3lptJQLUwMqxyySWwjmkbY9VP0nVIs8CXjqOeZ023s8AzR
-vR5zxo9dEVCIs2O8x8XrNnSPA/4aNtesXxiucxF/3IHcfHcX7CyRxdvMLRqg8a2q
-1LYdIu4ivUjJ8N9/AgMBAAGjgekwgeYwHQYDVR0OBBYEFObDVIVV8UT2S1XT6glp
-45X22ir6MB8GA1UdIwQYMBaAFOw/t5Ld6n2XpXciKOmYTQ0HacSGMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCso6fG
+HnGqjs+hAPatTKCS6+tPGAK+cnGfOqrAtu+Z+90hBsL6yOO8Q8L9MEQvqGDn0262
+m7Ad9hONQmLC9HFvKIm7m8Ne6FNkfu1w3f31M+wU3BBHWNuOLWNbc2+Btth5MQGA
+wHcUpK+FNGzo7dp6+33LqSr7m1oYQqBWKeSS6eCAzwu4/FLaCXrdLgx54LBgiG3o
+ZYvV++pl9tJefDQcTxvlKJyavLS9LyOdar5Wr4kOEZqyzVGLtdbTnBjgLdSW4eJk
+NKig/od7gTO3Y1kiyUFZAER87WAahTgCZMoWjQre+Y5HFC8EJPn91ljo63hwhodF
+kQkGVSBVSWUuxqyrAgMBAAGjgekwgeYwHQYDVR0OBBYEFHHDnbyEYWeeLz6kaB3O
+Gh2v6ZHAMB8GA1UdIwQYMBaAFP8977CRRxdpT28TYM5FrVG5VgsFMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAJ45BnPBcSuCwY8f6zB/U
-ITUzhxNotxgIDroioVEa2boxpzWAx3U1pGjIPpF5VeNgNHmhD6nMBZJhQLBmK/7H
-KaJU83xxtjb+qf17eepmGcAv0laXL8oSo5Zrs1fIBlhv3lPXY+6T1rLyEZyKoQAm
-bJq93dqX6gdhXkiO3T8QSznRmrqPFDCzNjyfpyxotDza8pAkSgMZOCRztXKzrjGz
-RJY2PTjFxwdieAbYXQEH2bMtvg9GE4wl+dfghF2kYqddOyLP5pWXINMkQMzPPXIX
-+cGO7hVvmY8k0YNr+f5rlDqcLAJcHXDW+NZpDZn1U4lPIXumNN3OJ+9FpeDG5fX8
-Xw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAqkdti6QXRHVNcBS9RAWt
+CKJXNCvpIHbTWpe01wd4SgLcYajM4RFwym0tUI96u6ICUiSVQW6PSOwpmEItS0nb
+hOTxljIhbttANHgiLpQRTNQC5NDrfRY/ZVm9i1calcDViytjhVrHfSov+VriRXfP
+7i4BaN5p4H548vXvr0yFVHqiAdnZI9Ta7UmR+1ki7vSpN4TjDj4P5kP9J9F7Z3bq
+beZWtUfSt7H/0k6l/q5jbvgoGV7H7JxU5LNzibzRsKwxYICO/O/Co+/8m8yKraLe
+T8FAZBPwFwsZjFvz2VoRtvFt6VKH9VjkjWuWZkjHQ8aHCuqHLMbGmfHCvQHYXesC
+ww==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e4:7c:a3:bb:4c:6d:c3:5e:ae:62:cd:af:18:39:
-                    c5:4b:6a:a3:fd:85:d0:ed:8b:25:93:bd:2b:06:22:
-                    b2:6b:c1:ff:73:c9:26:dd:d6:eb:eb:ee:93:4a:6d:
-                    df:10:02:b8:c5:72:d4:2f:c7:b4:1a:06:e9:38:b4:
-                    90:ae:9f:5f:69:45:47:07:68:17:b2:84:8a:65:b8:
-                    1e:ef:de:f1:b4:8a:6b:ab:de:55:79:5d:f5:2e:96:
-                    46:5b:5c:87:0b:4a:a8:53:70:4f:6f:f3:9e:9d:f4:
-                    f8:38:fa:1f:a6:5f:a3:25:08:f2:e9:63:fc:3c:98:
-                    4d:91:df:77:60:e7:e2:bd:af:bb:d9:23:38:2d:6e:
-                    07:07:0c:1a:59:5e:8a:43:c7:da:b2:ce:39:3a:80:
-                    c6:72:60:1f:d3:93:45:cd:63:b8:8b:96:bf:30:cd:
-                    b1:f6:56:d7:a9:de:14:42:ae:42:40:f8:e9:7b:47:
-                    a3:63:a1:5d:b9:2b:c0:3b:2b:81:56:11:54:ce:96:
-                    85:e6:3a:8c:66:ff:42:9f:ce:e4:a4:80:f5:59:8a:
-                    4b:ae:b2:37:c2:1f:45:9b:49:cd:db:0f:8b:a7:37:
-                    31:20:19:b4:42:20:aa:e9:e4:af:13:5a:b9:ea:d2:
-                    2c:9a:15:48:af:8d:ed:d0:fe:02:c0:a2:c6:47:bd:
-                    dd:2f
+                    00:ab:f9:3f:ad:20:59:6b:b4:1c:0e:cf:ae:16:46:
+                    92:ba:d7:7b:05:16:b9:e3:00:71:fb:36:25:c0:35:
+                    75:b3:d6:c0:7e:f1:99:3b:83:f6:0d:97:b7:ea:1e:
+                    7d:cd:32:bc:00:ca:b8:23:24:f3:d0:b9:7a:16:33:
+                    82:69:71:ef:33:3f:7d:f4:e8:1a:41:6a:7c:44:d3:
+                    19:36:7b:ec:2d:0b:3f:53:67:41:2f:c7:07:d3:f0:
+                    95:a4:71:95:62:96:e7:fa:77:80:48:c4:5e:62:54:
+                    d8:10:85:3d:9b:dc:74:b0:66:c7:49:d4:64:a3:92:
+                    49:6a:e6:e1:4a:92:8b:65:9b:30:ae:55:16:37:0e:
+                    46:b7:ff:47:72:7b:d3:d3:b4:61:7e:aa:3f:4c:a0:
+                    df:f8:4c:0e:6b:96:f8:05:49:5d:0e:2c:1f:f6:83:
+                    42:4c:ed:89:58:98:94:72:8d:a5:9c:2b:a8:02:67:
+                    36:c1:b7:70:7c:64:cb:c8:65:68:ac:6f:b9:a7:97:
+                    57:06:45:f0:cf:f6:03:c1:db:e6:f2:be:57:4a:2c:
+                    36:01:35:96:4a:65:d5:b9:05:4e:5e:b0:62:2f:1d:
+                    57:8e:7e:bb:ad:9e:50:76:cb:61:f5:f6:45:bb:78:
+                    c9:e8:21:f4:4e:47:99:3c:7e:db:b6:e9:7a:51:7e:
+                    bd:ad
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                EC:3F:B7:92:DD:EA:7D:97:A5:77:22:28:E9:98:4D:0D:07:69:C4:86
+                FF:3D:EF:B0:91:47:17:69:4F:6F:13:60:CE:45:AD:51:B9:56:0B:05
             X509v3 Authority Key Identifier: 
-                keyid:44:FC:9D:F0:51:F2:23:99:FE:A4:76:CB:CB:5C:39:BD:FC:68:38:45
+                keyid:BC:51:CC:60:8E:1D:48:EC:F0:3B:2C:20:26:63:AB:C0:CB:1D:69:B5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         40:21:7c:15:90:68:e9:aa:b0:ab:21:63:e7:21:f1:92:5b:75:
-         02:34:b4:cd:06:b3:45:f4:93:07:d1:0f:f2:bc:92:ac:75:94:
-         43:ad:a8:4f:91:6a:28:0c:cd:47:8d:01:de:54:51:aa:14:e3:
-         35:f8:eb:d8:d4:59:f5:86:ef:55:e6:6f:54:17:47:c1:5f:e8:
-         be:0d:7f:34:d2:88:2d:b5:04:29:25:11:cc:a3:d7:0e:49:b2:
-         9a:e3:01:1d:3f:15:89:68:41:19:4d:ee:8d:12:0e:96:ce:5e:
-         e5:08:31:64:4f:89:e0:91:1b:a9:b0:3c:4e:50:cb:83:a0:df:
-         d0:d3:df:af:53:d5:99:6b:88:dd:9c:4f:98:f1:0d:1d:f5:29:
-         f6:c5:be:18:84:4f:1f:76:ce:6f:c8:08:a0:f4:58:af:a3:ff:
-         cb:44:55:ad:2e:6e:e0:44:07:f4:a3:d4:08:9c:d1:0e:04:29:
-         34:54:1b:bd:e8:e3:b4:56:e1:0b:05:bd:ee:6d:47:fb:10:42:
-         d2:14:12:e4:15:29:bd:06:13:7d:12:41:fa:5f:5d:01:27:69:
-         99:76:ff:76:74:c8:c8:fe:11:c5:2e:67:44:d3:32:6d:8f:45:
-         e4:0a:5a:73:ef:74:75:6a:6c:d6:c2:c5:e8:73:bc:be:29:b3:
-         3a:01:cf:02
+         3d:38:96:2b:a7:e2:04:4c:b2:7e:e5:d9:d1:c3:b3:5a:7f:3d:
+         92:a7:6f:f3:5f:94:8b:5a:33:e0:11:05:16:ad:10:6f:3f:f9:
+         78:a3:56:99:be:c6:df:55:f9:e3:e4:64:75:cb:65:9a:f9:d8:
+         42:bc:92:45:c7:13:58:e8:d6:1a:80:08:ea:c5:05:2f:dd:8f:
+         34:74:24:89:6a:a8:8d:e0:e7:e0:43:cc:91:69:dc:bb:0a:80:
+         3b:b4:dd:d1:a9:da:26:18:f6:8c:7d:eb:bd:97:ae:eb:e8:cb:
+         53:d2:c4:42:a1:71:86:49:95:e2:14:87:ad:4b:d6:58:d6:2b:
+         74:5f:30:ad:b8:af:e7:82:5f:2b:60:6e:8e:62:6d:28:6b:b0:
+         c6:88:cf:55:c9:df:a6:5f:2f:a3:c0:81:f8:d3:db:90:3e:ee:
+         8c:3f:3f:55:69:2c:0a:1e:b9:c7:ef:3d:34:5a:41:55:9e:34:
+         f6:81:2a:20:65:3b:85:c3:42:2a:c7:2a:4c:02:30:39:7e:2d:
+         9d:2a:f9:6c:e5:bb:e6:8f:3b:02:ee:6f:a3:c9:b3:82:97:66:
+         59:77:52:aa:d5:c6:ba:73:26:5a:83:c5:b3:36:8a:a1:5b:6a:
+         cc:ff:4c:e4:6d:cd:1d:ed:05:7f:8a:d1:1b:63:53:2d:53:cc:
+         c7:25:03:fd
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5Hyju0xt
-w16uYs2vGDnFS2qj/YXQ7Yslk70rBiKya8H/c8km3dbr6+6TSm3fEAK4xXLUL8e0
-GgbpOLSQrp9faUVHB2gXsoSKZbge797xtIprq95VeV31LpZGW1yHC0qoU3BPb/Oe
-nfT4OPofpl+jJQjy6WP8PJhNkd93YOfiva+72SM4LW4HBwwaWV6KQ8fass45OoDG
-cmAf05NFzWO4i5a/MM2x9lbXqd4UQq5CQPjpe0ejY6FduSvAOyuBVhFUzpaF5jqM
-Zv9Cn87kpID1WYpLrrI3wh9Fm0nN2w+LpzcxIBm0QiCq6eSvE1q56tIsmhVIr43t
-0P4CwKLGR73dLwIDAQABo4HLMIHIMB0GA1UdDgQWBBTsP7eS3ep9l6V3IijpmE0N
-B2nEhjAfBgNVHSMEGDAWgBRE/J3wUfIjmf6kdsvLXDm9/Gg4RTA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq/k/rSBZ
+a7QcDs+uFkaSutd7BRa54wBx+zYlwDV1s9bAfvGZO4P2DZe36h59zTK8AMq4IyTz
+0Ll6FjOCaXHvMz999OgaQWp8RNMZNnvsLQs/U2dBL8cH0/CVpHGVYpbn+neASMRe
+YlTYEIU9m9x0sGbHSdRko5JJaubhSpKLZZswrlUWNw5Gt/9HcnvT07Rhfqo/TKDf
++EwOa5b4BUldDiwf9oNCTO2JWJiUco2lnCuoAmc2wbdwfGTLyGVorG+5p5dXBkXw
+z/YDwdvm8r5XSiw2ATWWSmXVuQVOXrBiLx1Xjn67rZ5Qdsth9fZFu3jJ6CH0TkeZ
+PH7btul6UX69rQIDAQABo4HLMIHIMB0GA1UdDgQWBBT/Pe+wkUcXaU9vE2DORa1R
+uVYLBTAfBgNVHSMEGDAWgBS8Ucxgjh1I7PA7LCAmY6vAyx1ptTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AEAhfBWQaOmqsKshY+ch8ZJbdQI0tM0Gs0X0kwfRD/K8kqx1lEOtqE+RaigMzUeN
-Ad5UUaoU4zX469jUWfWG71Xmb1QXR8Ff6L4NfzTSiC21BCklEcyj1w5JsprjAR0/
-FYloQRlN7o0SDpbOXuUIMWRPieCRG6mwPE5Qy4Og39DT369T1ZlriN2cT5jxDR31
-KfbFvhiETx92zm/ICKD0WK+j/8tEVa0ubuBEB/Sj1Aic0Q4EKTRUG73o47RW4QsF
-ve5tR/sQQtIUEuQVKb0GE30SQfpfXQEnaZl2/3Z0yMj+EcUuZ0TTMm2PReQKWnPv
-dHVqbNbCxehzvL4pszoBzwI=
+AD04liun4gRMsn7l2dHDs1p/PZKnb/NflItaM+ARBRatEG8/+XijVpm+xt9V+ePk
+ZHXLZZr52EK8kkXHE1jo1hqACOrFBS/djzR0JIlqqI3g5+BDzJFp3LsKgDu03dGp
+2iYY9ox9672Xruvoy1PSxEKhcYZJleIUh61L1ljWK3RfMK24r+eCXytgbo5ibShr
+sMaIz1XJ36ZfL6PAgfjT25A+7ow/P1VpLAoeucfvPTRaQVWeNPaBKiBlO4XDQirH
+KkwCMDl+LZ0q+Wzlu+aPOwLub6PJs4KXZll3UqrVxrpzJlqDxbM2iqFbasz/TORt
+zR3tBX+K0RtjUy1TzMclA/0=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a0:21:1c:d1:00:97:80:26:4c:59:fe:1f:73:23:
-                    48:97:10:b0:7f:bb:bb:34:00:76:fb:5d:e6:1f:59:
-                    ed:24:d9:25:9c:16:06:50:8e:83:da:d6:93:22:80:
-                    34:69:d3:d2:ee:98:9b:51:09:02:25:e4:04:fa:cc:
-                    de:4f:f6:3d:9c:65:80:b3:83:19:dd:74:b7:3f:84:
-                    86:7f:77:f9:5b:bc:c9:5c:0d:98:3e:77:df:3b:f1:
-                    43:cd:3d:4a:88:81:76:08:cb:56:25:5f:ff:56:7e:
-                    e1:e2:ab:41:60:9a:89:32:cf:9b:5e:3f:95:17:04:
-                    75:2d:a2:b7:e8:02:ea:6e:a0:2f:69:9f:30:a7:cd:
-                    7b:e6:e5:3d:98:01:51:b4:3e:c2:cf:87:f9:a1:e8:
-                    9d:69:43:91:37:58:b9:ec:2e:64:5f:76:21:e5:09:
-                    8c:6e:72:31:f4:c5:79:2f:14:1f:84:17:10:e3:50:
-                    0f:5d:d2:dd:f1:33:cb:57:f2:19:8c:04:96:e8:a7:
-                    3b:77:51:3a:6e:03:2b:29:2a:db:40:da:fb:41:f2:
-                    bc:37:ef:31:5c:2b:0f:b2:f4:58:27:b6:0f:24:4d:
-                    1d:97:ca:bd:00:c8:5f:eb:c4:3d:5d:b7:9e:d6:58:
-                    45:8a:20:af:2f:16:fc:51:6c:55:66:24:19:21:66:
-                    38:9f
+                    00:c4:82:4f:23:96:10:a0:b9:d9:e7:f0:8a:ca:2f:
+                    33:21:c4:ab:06:e4:a8:bc:21:7b:49:db:66:ce:45:
+                    0a:f8:c6:31:9a:2f:62:0c:e0:f2:23:6b:22:b6:4b:
+                    91:54:cc:d7:2e:75:a0:41:8d:ce:b9:4d:f2:e5:ca:
+                    4c:dc:53:cb:ff:cd:be:79:1e:e0:f2:b6:be:5f:16:
+                    c4:7b:11:15:b7:24:35:fe:3a:b4:b5:17:bd:7a:9d:
+                    14:1f:e7:73:bd:31:ba:02:42:35:43:1d:7a:8a:5d:
+                    f8:e4:75:8c:db:b8:48:c2:d1:01:50:a7:d1:74:0d:
+                    b2:ea:b9:b2:ad:49:bc:fe:e4:cf:d5:d6:28:a3:43:
+                    1b:33:c7:62:64:88:62:2d:54:b8:2a:9f:01:c7:42:
+                    06:a3:61:2b:d2:19:0e:98:34:8b:ff:42:be:6b:c1:
+                    80:92:e8:9c:26:88:90:a6:ef:1f:cd:f7:cc:4f:af:
+                    2e:7b:b7:29:ae:26:42:a9:de:b2:29:79:eb:29:71:
+                    1c:8b:41:6d:82:c5:0b:56:f8:fd:f2:40:08:c6:8c:
+                    62:f9:c9:d1:d8:c5:e0:e1:19:d8:9d:c4:8f:d3:b4:
+                    69:41:72:d3:00:20:de:53:dc:91:2b:5f:ac:a7:8e:
+                    7d:15:c0:54:90:b1:e2:81:6d:ea:08:43:a1:5c:b5:
+                    b4:b7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                44:FC:9D:F0:51:F2:23:99:FE:A4:76:CB:CB:5C:39:BD:FC:68:38:45
+                BC:51:CC:60:8E:1D:48:EC:F0:3B:2C:20:26:63:AB:C0:CB:1D:69:B5
             X509v3 Authority Key Identifier: 
-                keyid:44:FC:9D:F0:51:F2:23:99:FE:A4:76:CB:CB:5C:39:BD:FC:68:38:45
+                keyid:BC:51:CC:60:8E:1D:48:EC:F0:3B:2C:20:26:63:AB:C0:CB:1D:69:B5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         94:de:4b:73:02:e3:22:7f:1e:82:0c:64:a8:de:79:70:34:96:
-         9d:b5:e9:a0:51:bc:5c:3a:b1:97:7e:a4:0a:04:60:5a:3b:3a:
-         88:7e:ff:67:1a:19:7f:61:c0:6a:f9:73:14:b4:6b:be:21:fd:
-         f3:e2:7a:61:56:73:15:9e:8d:c5:bb:21:47:8a:1f:fa:03:0d:
-         0a:90:20:37:69:49:0b:2e:6a:9c:64:5b:e8:f0:ed:29:32:5f:
-         bc:f8:59:81:ad:d8:d9:71:ef:8d:bd:9c:ed:2e:c3:53:4f:12:
-         ec:f3:83:24:36:30:b1:c6:59:a7:2c:a8:6d:62:30:bc:a3:28:
-         13:0a:09:ed:47:a9:f5:68:e9:97:33:b2:e7:e7:5c:f9:bb:c1:
-         4b:7b:63:62:0a:0f:31:58:7e:24:88:30:f5:42:cf:3e:86:ca:
-         48:5b:83:44:b0:04:fa:0b:e2:9c:8b:5f:9c:68:77:23:79:40:
-         29:95:0d:6e:32:bf:ab:b4:ae:8a:2a:ca:f2:2a:92:a7:0d:b4:
-         80:5d:ce:be:f8:68:24:00:d9:30:9c:de:ba:35:d4:22:b5:dd:
-         15:37:70:bd:2e:7c:53:65:db:6f:1d:47:fa:53:56:dd:d0:9f:
-         e7:d5:d5:27:7f:c7:2e:9b:55:c2:70:1f:5e:66:b8:d1:2e:ac:
-         c6:e9:de:aa
+         12:dc:f7:d4:f8:1c:f1:5e:26:fe:e1:3e:18:21:3f:3d:02:63:
+         89:28:77:18:ed:8c:2f:85:38:18:4c:68:0c:8c:69:97:93:97:
+         ab:1b:0d:0b:4c:f8:89:67:5e:a8:a1:db:4e:27:4e:d8:79:8b:
+         da:4c:ab:e1:2f:1c:da:87:78:47:ea:16:b3:e8:a5:0f:a2:bf:
+         34:be:4d:e2:1f:ec:2d:1d:39:b1:43:5b:c1:d4:ef:17:0f:04:
+         62:dc:60:cf:0c:1b:98:5f:79:19:a4:f1:f8:51:e9:cd:5e:cb:
+         59:0a:f9:1e:dd:26:b1:7e:a6:b5:14:61:a2:5c:26:5f:bf:ce:
+         8f:f7:4a:58:e4:eb:79:7e:d8:91:be:c8:dc:17:5b:55:9f:9d:
+         02:07:7d:7c:24:67:68:b4:00:6a:66:90:55:1f:e9:8a:d3:3c:
+         38:b5:99:ac:ab:43:bb:bd:dc:28:fe:90:15:83:c6:bf:eb:9c:
+         84:89:2c:7b:15:81:60:d4:c6:35:7e:13:55:58:1f:38:fd:02:
+         9b:4c:47:e7:69:32:24:b2:89:3f:30:1d:2a:32:e5:e8:a2:e0:
+         9d:43:b1:be:76:cd:e2:7a:20:9b:67:6c:dd:30:60:79:57:2b:
+         0c:42:3f:29:8d:d4:42:83:e5:5c:b2:9e:ed:64:d1:4e:b1:ef:
+         81:8c:1d:c4
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKAhHNEAl4AmTFn+H3Mj
-SJcQsH+7uzQAdvtd5h9Z7STZJZwWBlCOg9rWkyKANGnT0u6Ym1EJAiXkBPrM3k/2
-PZxlgLODGd10tz+Ehn93+Vu8yVwNmD533zvxQ809SoiBdgjLViVf/1Z+4eKrQWCa
-iTLPm14/lRcEdS2it+gC6m6gL2mfMKfNe+blPZgBUbQ+ws+H+aHonWlDkTdYuewu
-ZF92IeUJjG5yMfTFeS8UH4QXEONQD13S3fEzy1fyGYwEluinO3dROm4DKykq20Da
-+0HyvDfvMVwrD7L0WCe2DyRNHZfKvQDIX+vEPV23ntZYRYogry8W/FFsVWYkGSFm
-OJ8CAwEAAaOByzCByDAdBgNVHQ4EFgQURPyd8FHyI5n+pHbLy1w5vfxoOEUwHwYD
-VR0jBBgwFoAURPyd8FHyI5n+pHbLy1w5vfxoOEUwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMSCTyOWEKC52efwisov
+MyHEqwbkqLwhe0nbZs5FCvjGMZovYgzg8iNrIrZLkVTM1y51oEGNzrlN8uXKTNxT
+y//Nvnke4PK2vl8WxHsRFbckNf46tLUXvXqdFB/nc70xugJCNUMdeopd+OR1jNu4
+SMLRAVCn0XQNsuq5sq1JvP7kz9XWKKNDGzPHYmSIYi1UuCqfAcdCBqNhK9IZDpg0
+i/9CvmvBgJLonCaIkKbvH833zE+vLnu3Ka4mQqnesil56ylxHItBbYLFC1b4/fJA
+CMaMYvnJ0djF4OEZ2J3Ej9O0aUFy0wAg3lPckStfrKeOfRXAVJCx4oFt6ghDoVy1
+tLcCAwEAAaOByzCByDAdBgNVHQ4EFgQUvFHMYI4dSOzwOywgJmOrwMsdabUwHwYD
+VR0jBBgwFoAUvFHMYI4dSOzwOywgJmOrwMsdabUwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCU3ktzAuMi
-fx6CDGSo3nlwNJadtemgUbxcOrGXfqQKBGBaOzqIfv9nGhl/YcBq+XMUtGu+If3z
-4nphVnMVno3FuyFHih/6Aw0KkCA3aUkLLmqcZFvo8O0pMl+8+FmBrdjZce+NvZzt
-LsNTTxLs84MkNjCxxlmnLKhtYjC8oygTCgntR6n1aOmXM7Ln51z5u8FLe2NiCg8x
-WH4kiDD1Qs8+hspIW4NEsAT6C+Kci1+caHcjeUAplQ1uMr+rtK6KKsryKpKnDbSA
-Xc6++GgkANkwnN66NdQitd0VN3C9LnxTZdtvHUf6U1bd0J/n1dUnf8cum1XCcB9e
-ZrjRLqzG6d6q
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAS3PfU+Bzx
+Xib+4T4YIT89AmOJKHcY7YwvhTgYTGgMjGmXk5erGw0LTPiJZ16oodtOJ07YeYva
+TKvhLxzah3hH6haz6KUPor80vk3iH+wtHTmxQ1vB1O8XDwRi3GDPDBuYX3kZpPH4
+UenNXstZCvke3Saxfqa1FGGiXCZfv86P90pY5Ot5ftiRvsjcF1tVn50CB318JGdo
+tABqZpBVH+mK0zw4tZmsq0O7vdwo/pAVg8a/65yEiSx7FYFg1MY1fhNVWB84/QKb
+TEfnaTIksok/MB0qMuXoouCdQ7G+ds3ieiCbZ2zdMGB5VysMQj8pjdRCg+Vcsp7t
+ZNFOse+BjB3E
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150301120000Z
@@ -281,6 +281,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Time is before notBefore
 
diff --git a/net/data/verify_certificate_chain_unittest/expired-target.pem b/net/data/verify_certificate_chain_unittest/expired-target.pem
index 10a24ebc..10a6f1cb 100644
--- a/net/data/verify_certificate_chain_unittest/expired-target.pem
+++ b/net/data/verify_certificate_chain_unittest/expired-target.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:df:82:6a:2a:fe:30:47:00:84:06:de:48:a1:fc:
-                    a5:d9:2c:d5:7d:e2:71:eb:ff:b5:7b:da:8c:c7:fc:
-                    38:8a:a3:64:5a:f8:01:70:e0:c0:26:d4:70:2c:08:
-                    da:6b:5c:b4:40:41:aa:9e:b4:1d:05:9b:54:7c:54:
-                    a4:b8:07:03:b0:69:95:98:c5:e6:7a:7f:71:6f:07:
-                    dd:a5:21:59:79:7c:58:7c:00:0d:9d:18:6b:c0:3d:
-                    2d:fe:c6:63:58:c6:5f:29:47:01:b6:a2:dd:bb:f4:
-                    8a:8b:d0:15:3e:0b:01:18:34:0a:d4:a1:d3:e9:7a:
-                    c3:5d:97:2b:c7:53:ff:49:81:34:fc:16:b4:02:f8:
-                    7c:55:6e:fa:9b:4f:cd:31:1a:f5:d2:5c:8f:92:d7:
-                    bd:48:50:a9:b1:c4:89:cd:6d:c8:1d:99:77:34:d1:
-                    d3:61:8f:b9:f8:3b:3e:c6:b3:2e:5f:3c:d0:f7:04:
-                    34:51:9f:83:4e:7b:1d:c9:59:53:81:6e:d9:f7:4b:
-                    36:dc:80:9e:b4:a4:cb:5d:18:1d:d3:52:3e:d8:b3:
-                    4e:28:c5:ba:2c:bd:dc:d1:e2:4a:21:e5:2a:ed:6f:
-                    97:84:a9:01:89:eb:2e:21:9e:b9:4a:6a:9b:c5:fe:
-                    b0:5a:34:cf:25:0f:55:53:41:be:94:b9:8d:81:44:
-                    fa:b5
+                    00:a6:a2:e2:2b:94:f1:2d:8e:32:96:75:ec:49:9f:
+                    37:c1:f3:06:90:be:8a:16:78:23:35:a9:00:47:cf:
+                    d9:87:32:7f:8d:cd:1d:88:c1:5d:54:d0:1f:bd:eb:
+                    fa:09:1f:63:3b:4d:a9:6d:f3:2a:f4:c0:54:5d:42:
+                    e5:f6:2c:e0:f9:6e:35:6e:52:93:a1:58:a3:80:22:
+                    2e:10:9b:50:5c:db:d6:4f:20:6c:a9:2d:51:82:46:
+                    7b:60:f6:c4:78:dc:9a:79:e4:32:7e:98:1b:92:03:
+                    c3:7f:aa:67:9c:3a:9a:cb:4c:3c:3f:5e:f9:d9:59:
+                    a5:6c:8e:49:d1:e7:42:83:17:a4:a7:03:da:c1:d0:
+                    a0:81:90:aa:ac:eb:7c:db:11:bf:a0:17:3d:c8:4f:
+                    ff:99:35:b3:fa:02:96:1d:c0:63:ca:13:2e:18:68:
+                    ce:14:26:e8:8e:99:5b:d1:a6:16:9f:08:fe:3d:38:
+                    52:bc:a8:6a:f8:d7:28:c6:7a:cb:46:4a:4c:98:ac:
+                    d5:e6:6b:b5:dd:47:b7:c6:f0:61:dc:df:af:e2:0a:
+                    d6:3a:3f:ba:52:82:5a:d7:43:7b:90:78:38:fb:9b:
+                    e5:4b:60:17:52:21:b6:16:96:17:d1:85:ba:ff:49:
+                    dd:d6:09:ef:f6:a0:e6:bf:eb:f1:b4:61:c1:43:6d:
+                    e5:95
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A1:54:DE:B4:8A:C7:C9:C4:33:C6:9B:40:BF:3D:6E:CF:DB:47:EC:8C
+                1E:7B:16:66:04:07:9C:19:2D:FF:9B:1C:9A:0F:3E:45:6B:BF:1E:C9
             X509v3 Authority Key Identifier: 
-                keyid:13:F7:B3:D5:1C:C9:63:BD:3A:24:01:43:AE:4A:26:96:46:55:F5:F0
+                keyid:CA:B8:E9:2C:83:2C:C1:BA:51:E1:CB:B6:78:C8:94:A8:45:09:45:63
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         aa:f9:d5:79:52:fa:99:3e:d8:cd:ab:c3:e4:05:a9:85:c5:bf:
-         78:3b:d6:14:0b:06:f4:62:77:8e:70:40:a5:b9:b4:46:52:5d:
-         86:ad:52:52:f7:c3:1f:e9:e8:8a:e2:5b:23:63:bf:e8:5c:d8:
-         a6:11:ad:02:94:09:04:3b:67:cb:62:a3:09:67:eb:b3:68:0f:
-         81:6d:0f:d6:4e:6c:d8:a3:e5:85:8f:8f:7e:65:a4:c7:d9:ba:
-         a8:05:22:2c:94:9d:8f:e4:d1:a5:5c:7e:c0:0f:39:3e:d7:b4:
-         2c:df:d7:c1:ab:9e:5d:8d:28:51:d5:fa:2f:c6:fa:85:17:d4:
-         05:d5:4d:d8:ee:6a:14:23:da:a0:cc:43:7b:65:54:71:e1:e1:
-         79:b0:62:0a:a3:70:56:9b:53:5d:70:b7:78:6f:fd:ba:13:a7:
-         99:0a:0a:b3:46:2a:7b:48:26:31:b2:50:aa:5e:29:d9:1b:55:
-         1f:cb:de:2a:17:4d:ee:0d:67:2b:4e:dd:f6:54:d0:72:ec:e3:
-         53:4e:24:26:a6:1e:17:e8:94:ca:a8:4a:3a:af:b8:48:51:1a:
-         76:38:bd:bf:cb:c5:56:e4:a8:e4:f8:cb:cb:e9:97:ed:4e:b9:
-         af:fb:e7:92:d3:b7:ba:81:a0:13:e8:09:31:f3:45:91:2a:5c:
-         93:12:a9:99
+         68:d0:70:03:90:29:44:fe:54:34:da:2e:57:6a:68:9b:9c:54:
+         0a:92:13:07:c9:e2:1b:30:f7:9b:0a:a6:c7:6a:28:c4:41:e7:
+         40:27:51:49:5d:a9:d5:11:0e:c3:86:25:96:70:5e:8e:74:da:
+         17:7d:82:01:6a:d1:33:f9:0c:56:30:4c:3a:67:c4:aa:b2:d7:
+         93:17:d2:73:51:71:ec:c0:88:98:7d:70:cb:a1:f7:87:dc:f3:
+         2b:90:ce:50:00:a3:88:b6:2a:90:c6:42:d7:95:c3:ec:01:cf:
+         0a:11:f9:50:33:d8:23:ab:9c:b3:8b:38:62:84:80:3e:35:d5:
+         58:53:ab:05:c3:ef:cd:27:7f:00:aa:cb:93:d6:48:5b:cd:eb:
+         9d:09:23:75:4d:3d:d6:16:69:b7:2f:b2:c1:b6:f6:f8:d4:03:
+         ff:c2:b3:82:76:04:51:7e:76:ab:db:8d:31:24:a6:4b:fe:34:
+         ca:9e:dd:11:71:84:37:7b:5e:0b:b1:ef:54:10:fb:ea:59:65:
+         48:e8:27:4a:82:9a:a9:a8:ef:80:b1:a6:21:45:32:95:c4:ed:
+         fd:1a:8a:fc:5e:e3:87:72:50:90:40:a9:c8:f3:7e:7f:26:6c:
+         c9:54:87:7a:e9:09:a0:a4:f0:06:6d:ac:8f:ee:f0:62:ab:d0:
+         77:8b:ce:56
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTUwMzAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfgmoq
-/jBHAIQG3kih/KXZLNV94nHr/7V72ozH/DiKo2Ra+AFw4MAm1HAsCNprXLRAQaqe
-tB0Fm1R8VKS4BwOwaZWYxeZ6f3FvB92lIVl5fFh8AA2dGGvAPS3+xmNYxl8pRwG2
-ot279IqL0BU+CwEYNArUodPpesNdlyvHU/9JgTT8FrQC+HxVbvqbT80xGvXSXI+S
-171IUKmxxInNbcgdmXc00dNhj7n4Oz7Gsy5fPND3BDRRn4NOex3JWVOBbtn3Szbc
-gJ60pMtdGB3TUj7Ys04oxbosvdzR4koh5Srtb5eEqQGJ6y4hnrlKapvF/rBaNM8l
-D1VTQb6UuY2BRPq1AgMBAAGjgekwgeYwHQYDVR0OBBYEFKFU3rSKx8nEM8abQL89
-bs/bR+yMMB8GA1UdIwQYMBaAFBP3s9UcyWO9OiQBQ65KJpZGVfXwMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmouIr
+lPEtjjKWdexJnzfB8waQvooWeCM1qQBHz9mHMn+NzR2IwV1U0B+96/oJH2M7Talt
+8yr0wFRdQuX2LOD5bjVuUpOhWKOAIi4Qm1Bc29ZPIGypLVGCRntg9sR43Jp55DJ+
+mBuSA8N/qmecOprLTDw/XvnZWaVsjknR50KDF6SnA9rB0KCBkKqs63zbEb+gFz3I
+T/+ZNbP6ApYdwGPKEy4YaM4UJuiOmVvRphafCP49OFK8qGr41yjGestGSkyYrNXm
+a7XdR7fG8GHc36/iCtY6P7pSglrXQ3uQeDj7m+VLYBdSIbYWlhfRhbr/Sd3WCe/2
+oOa/6/G0YcFDbeWVAgMBAAGjgekwgeYwHQYDVR0OBBYEFB57FmYEB5wZLf+bHJoP
+PkVrvx7JMB8GA1UdIwQYMBaAFMq46SyDLMG6UeHLtnjIlKhFCUVjMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAqvnVeVL6mT7YzavD5AWp
-hcW/eDvWFAsG9GJ3jnBApbm0RlJdhq1SUvfDH+noiuJbI2O/6FzYphGtApQJBDtn
-y2KjCWfrs2gPgW0P1k5s2KPlhY+PfmWkx9m6qAUiLJSdj+TRpVx+wA85Pte0LN/X
-waueXY0oUdX6L8b6hRfUBdVN2O5qFCPaoMxDe2VUceHhebBiCqNwVptTXXC3eG/9
-uhOnmQoKs0Yqe0gmMbJQql4p2RtVH8veKhdN7g1nK07d9lTQcuzjU04kJqYeF+iU
-yqhKOq+4SFEadji9v8vFVuSo5PjLy+mX7U65r/vnktO3uoGgE+gJMfNFkSpckxKp
-mQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAaNBwA5ApRP5UNNouV2po
+m5xUCpITB8niGzD3mwqmx2ooxEHnQCdRSV2p1REOw4YllnBejnTaF32CAWrRM/kM
+VjBMOmfEqrLXkxfSc1Fx7MCImH1wy6H3h9zzK5DOUACjiLYqkMZC15XD7AHPChH5
+UDPYI6ucs4s4YoSAPjXVWFOrBcPvzSd/AKrLk9ZIW83rnQkjdU091hZpty+ywbb2
++NQD/8KzgnYEUX52q9uNMSSmS/40yp7dEXGEN3teC7HvVBD76lllSOgnSoKaqajv
+gLGmIUUylcTt/RqK/F7jh3JQkECpyPN+fyZsyVSHeukJoKTwBm2sj+7wYqvQd4vO
+Vg==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ba:33:55:c9:1e:c0:91:17:3a:eb:30:8c:ed:23:
-                    cc:1d:6d:1e:e7:6e:4e:ac:23:63:23:ae:48:87:13:
-                    61:0f:0c:0b:ee:72:f7:c2:7b:95:2e:7b:25:34:08:
-                    b6:e1:f5:ae:50:bf:8f:cf:81:6e:e6:26:9f:92:61:
-                    c4:fb:44:9e:23:09:df:13:80:bc:38:5b:db:08:6c:
-                    68:60:46:d4:e3:e0:41:91:c4:42:d5:d9:75:d2:c4:
-                    df:29:b8:04:bb:96:dc:9d:e4:0b:f7:de:ab:cf:90:
-                    ad:22:c8:ab:56:65:84:00:3b:b9:e6:29:b5:e2:96:
-                    88:bd:95:e5:10:6d:57:ab:be:d1:f4:61:bb:1d:b4:
-                    7f:f9:02:db:48:d3:21:9d:f1:03:77:bf:f9:ca:f3:
-                    4e:2d:44:1c:28:1d:c5:4f:30:1b:0a:8b:71:0e:5f:
-                    86:0a:3f:97:7f:47:a6:a2:3c:60:02:c6:e8:bd:e9:
-                    52:b1:0b:cb:53:d4:09:f4:b6:20:23:b4:89:09:ff:
-                    1a:61:e8:dd:ac:19:4d:be:94:1e:60:24:d4:6c:89:
-                    03:3a:c4:44:5b:dd:7c:59:37:b7:0c:83:40:24:0e:
-                    ed:ab:02:cf:cd:93:d2:3d:5d:e0:c6:c4:c5:1d:1a:
-                    01:d1:e1:77:58:62:90:e1:83:af:d2:ee:31:f3:29:
-                    0c:1f
+                    00:c5:4a:45:32:1d:7a:47:92:73:d0:af:4a:93:31:
+                    6d:5b:a6:b3:68:9e:46:a3:34:5e:75:cc:a7:09:da:
+                    ca:34:cf:6c:ed:74:fb:97:f5:c4:14:6f:e3:78:f4:
+                    1c:3d:d3:2a:6f:1e:1f:ef:61:2a:a5:f1:e6:87:0b:
+                    67:06:79:10:d6:2d:fc:f1:22:5f:28:8a:47:20:bb:
+                    29:f5:5a:25:8a:de:02:73:81:5a:5b:94:84:f7:5e:
+                    e4:8e:58:e6:29:21:0b:e2:86:0f:30:00:9e:a6:71:
+                    e5:56:7d:b7:be:43:6d:a1:d5:75:6b:4a:ef:7a:32:
+                    2b:9d:1b:9e:4f:a6:9a:21:a4:ed:ab:47:6a:af:66:
+                    d3:64:f3:cd:11:0a:5e:78:ec:c8:61:95:27:45:68:
+                    ac:41:c0:12:73:c6:1f:f0:45:03:ba:a5:f9:c9:ce:
+                    1e:a8:cf:3e:9c:28:1c:10:3e:d5:76:84:62:f5:e9:
+                    45:44:54:f6:d3:de:5b:59:52:07:9f:e1:98:7d:66:
+                    d1:da:aa:67:e6:d1:e9:57:bf:6e:8a:75:8f:3c:a0:
+                    27:7a:07:80:01:55:b2:e6:08:2a:45:8e:2b:7c:2b:
+                    d8:dc:21:c2:63:63:d5:fe:93:48:08:8b:16:4b:48:
+                    4e:8d:c0:ff:f1:49:62:a4:7b:79:26:ef:69:8c:71:
+                    a7:21
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                13:F7:B3:D5:1C:C9:63:BD:3A:24:01:43:AE:4A:26:96:46:55:F5:F0
+                CA:B8:E9:2C:83:2C:C1:BA:51:E1:CB:B6:78:C8:94:A8:45:09:45:63
             X509v3 Authority Key Identifier: 
-                keyid:5F:B1:E2:C5:58:EB:EF:73:DC:15:A3:0F:8E:24:0C:6C:67:65:00:04
+                keyid:E3:D2:BC:53:0E:ED:D3:06:BB:EC:E4:7E:D0:33:DE:1A:77:0A:62:A8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         a5:43:87:2e:d0:2c:51:df:a7:aa:48:b4:38:fc:1d:6f:c9:db:
-         23:32:75:f2:d1:52:45:ea:4a:89:1f:e9:10:0c:22:0d:70:3e:
-         f0:c1:cf:b7:a8:cd:af:d4:33:99:14:6e:62:b9:a8:0f:a6:2c:
-         75:dd:d8:79:88:fc:cb:c4:7e:64:b1:2f:7a:0b:b2:a4:6c:82:
-         29:7d:23:32:d3:de:a8:90:a8:77:f8:33:13:e9:3e:42:0b:32:
-         e8:50:e0:af:31:2f:b9:e5:be:b7:c7:16:ca:a7:96:9e:95:24:
-         d2:c1:b3:df:70:5f:7b:8a:33:6b:55:76:e8:18:32:66:0e:9a:
-         60:cf:dc:30:1e:38:15:05:6e:cc:4a:1e:e7:2e:e0:5a:de:ea:
-         84:a1:ce:04:fd:db:74:d6:fe:b6:4d:6b:86:38:22:78:f1:3e:
-         ba:dc:8b:85:a6:2f:56:10:1f:7d:b8:96:00:4c:d6:a3:fa:93:
-         fd:1b:29:64:40:7c:f8:65:3f:73:8a:7e:3e:72:c7:ce:19:74:
-         51:21:26:5d:2d:41:a0:95:c9:8f:70:fd:2a:60:7a:b0:fc:e5:
-         14:65:9a:3e:68:2c:4a:47:1b:5a:97:8a:31:a9:1a:1a:c9:fc:
-         e3:be:c9:dd:65:0f:33:2b:f9:d9:68:5b:54:22:c4:dc:a6:21:
-         42:6c:ec:64
+         0f:ca:f8:35:3d:da:a1:ba:e4:4d:dd:48:b6:38:a6:d9:f2:88:
+         2d:ae:5c:f3:79:4c:d4:81:d8:ab:1e:32:e5:5a:fa:5c:12:e8:
+         bc:b3:6c:e4:5c:19:8b:80:24:c8:8d:14:07:cc:2d:75:39:d8:
+         e7:7c:8d:3e:03:de:19:2f:e0:7c:07:26:85:aa:0d:92:11:97:
+         b5:e5:a7:f9:04:c5:22:be:82:35:10:f4:2b:7a:5f:4a:dc:c0:
+         e1:64:c3:5f:62:e3:9f:cd:fa:22:c4:e4:65:5b:0c:e6:bd:f8:
+         04:b0:3a:91:6c:8a:44:51:16:ca:13:92:55:9f:45:df:74:5c:
+         9c:ee:6a:83:db:0b:52:2c:68:3b:ac:6e:86:d8:1d:23:6d:95:
+         f5:87:d9:c9:14:0a:0f:2b:99:b1:d6:b3:38:73:a6:6e:d8:d7:
+         d9:1a:c0:33:98:6e:63:14:37:10:5b:c2:7d:03:37:49:2d:d7:
+         26:56:99:a2:ce:03:01:d0:b2:25:94:a2:69:e8:e0:30:42:11:
+         44:a9:89:d7:96:d4:c0:10:7a:64:79:88:d1:2b:e2:8a:b6:4a:
+         32:6f:2a:e1:2b:43:2a:44:b2:42:74:c8:27:1e:da:f2:9b:ac:
+         c6:03:4a:d0:c3:44:87:41:ec:cd:a5:9b:68:e2:e3:fd:01:fe:
+         40:a3:c2:e7
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAujNVyR7A
-kRc66zCM7SPMHW0e525OrCNjI65IhxNhDwwL7nL3wnuVLnslNAi24fWuUL+Pz4Fu
-5iafkmHE+0SeIwnfE4C8OFvbCGxoYEbU4+BBkcRC1dl10sTfKbgEu5bcneQL996r
-z5CtIsirVmWEADu55im14paIvZXlEG1Xq77R9GG7HbR/+QLbSNMhnfEDd7/5yvNO
-LUQcKB3FTzAbCotxDl+GCj+Xf0emojxgAsbovelSsQvLU9QJ9LYgI7SJCf8aYejd
-rBlNvpQeYCTUbIkDOsREW918WTe3DINAJA7tqwLPzZPSPV3gxsTFHRoB0eF3WGKQ
-4YOv0u4x8ykMHwIDAQABo4HLMIHIMB0GA1UdDgQWBBQT97PVHMljvTokAUOuSiaW
-RlX18DAfBgNVHSMEGDAWgBRfseLFWOvvc9wVow+OJAxsZ2UABDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxUpFMh16
+R5Jz0K9KkzFtW6azaJ5GozRedcynCdrKNM9s7XT7l/XEFG/jePQcPdMqbx4f72Eq
+pfHmhwtnBnkQ1i388SJfKIpHILsp9Volit4Cc4FaW5SE917kjljmKSEL4oYPMACe
+pnHlVn23vkNtodV1a0rvejIrnRueT6aaIaTtq0dqr2bTZPPNEQpeeOzIYZUnRWis
+QcASc8Yf8EUDuqX5yc4eqM8+nCgcED7VdoRi9elFRFT2095bWVIHn+GYfWbR2qpn
+5tHpV79uinWPPKAnegeAAVWy5ggqRY4rfCvY3CHCY2PV/pNICIsWS0hOjcD/8Uli
+pHt5Ju9pjHGnIQIDAQABo4HLMIHIMB0GA1UdDgQWBBTKuOksgyzBulHhy7Z4yJSo
+RQlFYzAfBgNVHSMEGDAWgBTj0rxTDu3TBrvs5H7QM94adwpiqDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AKVDhy7QLFHfp6pItDj8HW/J2yMydfLRUkXqSokf6RAMIg1wPvDBz7eoza/UM5kU
-bmK5qA+mLHXd2HmI/MvEfmSxL3oLsqRsgil9IzLT3qiQqHf4MxPpPkILMuhQ4K8x
-L7nlvrfHFsqnlp6VJNLBs99wX3uKM2tVdugYMmYOmmDP3DAeOBUFbsxKHucu4Fre
-6oShzgT923TW/rZNa4Y4InjxPrrci4WmL1YQH324lgBM1qP6k/0bKWRAfPhlP3OK
-fj5yx84ZdFEhJl0tQaCVyY9w/SpgerD85RRlmj5oLEpHG1qXijGpGhrJ/OO+yd1l
-DzMr+dloW1QixNymIUJs7GQ=
+AA/K+DU92qG65E3dSLY4ptnyiC2uXPN5TNSB2KseMuVa+lwS6LyzbORcGYuAJMiN
+FAfMLXU52Od8jT4D3hkv4HwHJoWqDZIRl7Xlp/kExSK+gjUQ9Ct6X0rcwOFkw19i
+45/N+iLE5GVbDOa9+ASwOpFsikRRFsoTklWfRd90XJzuaoPbC1IsaDusbobYHSNt
+lfWH2ckUCg8rmbHWszhzpm7Y19kawDOYbmMUNxBbwn0DN0kt1yZWmaLOAwHQsiWU
+omno4DBCEUSpideW1MAQemR5iNEr4oq2SjJvKuErQypEskJ0yCce2vKbrMYDStDD
+RIdB7M2lm2ji4/0B/kCjwuc=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:df:9c:45:02:46:38:eb:d4:64:cd:8e:95:65:63:
-                    d5:e6:71:8b:67:13:d8:bc:6d:64:73:d7:40:17:79:
-                    80:a4:8d:8e:5f:bf:5e:48:b0:2f:bc:49:08:71:b4:
-                    80:38:00:cd:e9:ee:2e:6e:73:8a:77:56:b4:b3:d0:
-                    e3:0c:40:c9:ca:1f:9b:a0:89:68:07:34:cd:f4:f4:
-                    b9:a2:c1:ca:42:0e:da:90:cf:95:89:3a:3c:de:ad:
-                    a6:ff:49:6c:e2:5e:f5:0b:ff:be:06:ee:ab:e1:81:
-                    e9:da:a3:b8:d5:63:af:5e:10:63:49:23:0a:1d:ca:
-                    3e:bc:96:6e:82:5c:4f:ce:56:a7:8f:53:34:65:cb:
-                    47:88:3e:38:4d:71:b6:8a:06:e4:ed:4f:d2:df:59:
-                    3e:a7:03:a7:be:c2:14:a6:cf:9e:4b:c8:a3:25:21:
-                    b2:3e:f8:cd:65:de:fc:0e:52:fd:fa:cf:d3:07:af:
-                    79:53:11:bf:e6:77:ce:d8:1a:4b:4f:cb:d2:35:28:
-                    f8:5a:4b:05:a2:dd:88:e1:54:ac:1a:15:8d:54:a2:
-                    b7:ac:66:7a:f8:4a:2a:75:94:15:b3:44:c2:05:ff:
-                    e3:a0:34:40:84:00:39:6d:6d:e1:8e:16:f3:d3:60:
-                    2b:95:2f:fc:74:6e:b1:83:b7:0b:9d:9e:d8:34:45:
-                    21:f7
+                    00:b1:cc:77:be:73:84:5e:fd:71:f9:35:59:4c:a4:
+                    3c:83:2a:bb:cd:49:ee:69:c2:35:b9:00:8a:0c:29:
+                    49:52:f2:89:ff:87:5a:99:e3:d7:1d:99:c8:2a:8b:
+                    d8:83:44:65:89:a9:41:46:71:8a:49:73:9e:c3:96:
+                    ed:12:b4:a6:ae:ba:ab:84:28:79:3d:2f:c7:37:4b:
+                    85:35:37:59:94:55:2f:d0:d5:1c:c6:32:85:17:c3:
+                    2d:0f:5b:92:be:75:2a:9f:05:67:74:37:59:b5:c6:
+                    34:d6:7c:56:b8:d2:a2:13:d1:41:71:84:df:4b:10:
+                    af:63:8d:83:6d:87:c2:aa:c1:ba:9e:0a:bc:57:36:
+                    09:9d:5a:a6:e4:31:a6:8a:f1:82:5c:4f:cd:cf:79:
+                    69:6f:51:89:63:82:e1:0e:78:a7:bf:43:d1:c5:be:
+                    12:87:81:10:67:13:67:da:36:6f:37:03:12:32:39:
+                    62:1f:a4:43:5d:d4:65:e3:44:4c:ca:da:9d:1c:22:
+                    60:00:3d:fd:d1:8e:66:e2:e3:1f:d1:72:b3:53:4e:
+                    2f:9b:2f:67:72:f2:9c:b7:c7:a3:0b:27:75:85:c9:
+                    d3:90:7c:1c:59:ae:b9:47:25:57:08:51:45:f0:8b:
+                    a0:37:62:a9:7e:3e:ee:53:08:47:c7:d5:e4:29:b1:
+                    7c:4d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5F:B1:E2:C5:58:EB:EF:73:DC:15:A3:0F:8E:24:0C:6C:67:65:00:04
+                E3:D2:BC:53:0E:ED:D3:06:BB:EC:E4:7E:D0:33:DE:1A:77:0A:62:A8
             X509v3 Authority Key Identifier: 
-                keyid:5F:B1:E2:C5:58:EB:EF:73:DC:15:A3:0F:8E:24:0C:6C:67:65:00:04
+                keyid:E3:D2:BC:53:0E:ED:D3:06:BB:EC:E4:7E:D0:33:DE:1A:77:0A:62:A8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         98:24:67:cd:0c:c3:0f:c5:09:c1:b3:b2:c3:eb:90:d5:1b:7e:
-         ce:45:7e:e8:f9:ae:bd:54:46:58:4e:0f:b3:65:30:45:98:3e:
-         02:bf:a0:a9:e6:9c:69:f7:94:c8:bc:3d:33:ed:ac:52:5e:65:
-         58:f1:ef:4d:bd:bf:39:65:62:e1:75:35:b2:27:92:fa:9b:3d:
-         92:ed:51:f3:73:9a:73:2f:2f:61:2a:1d:34:e0:a1:fa:fc:b3:
-         dc:24:40:af:14:fd:d5:26:d0:5e:cb:fd:05:8b:88:f5:5c:0f:
-         6f:75:68:c5:32:f1:1d:cd:a2:be:b2:66:0c:1a:4c:d6:df:1b:
-         e4:09:b9:bf:32:41:59:ca:bc:48:33:b1:ec:6a:fa:4d:dc:72:
-         ae:96:15:29:35:78:85:96:f9:64:05:75:50:b3:3e:b0:f8:15:
-         7c:06:54:ff:36:98:2a:6d:4f:33:b0:78:1c:d3:be:12:2d:5b:
-         b4:37:2b:04:1b:d8:ce:28:db:9c:6d:49:e8:6f:f6:45:75:0a:
-         fb:69:dc:71:63:cd:c6:17:84:4b:8a:14:a0:ef:42:6a:6f:f2:
-         a8:76:e9:c6:4b:94:d2:24:f5:aa:80:d2:b6:81:17:c6:7d:7d:
-         88:36:fe:26:44:cf:36:5a:5e:de:c4:34:da:54:1e:89:1f:d6:
-         98:9e:3c:f7
+         62:ea:d8:8a:ac:91:27:7c:7e:b1:ab:a4:5e:80:2c:2a:88:0e:
+         fe:f4:0e:58:6a:78:b7:84:86:fa:fa:a6:44:28:40:a1:ca:61:
+         98:b7:23:14:64:15:67:20:c9:2c:83:11:de:62:9d:af:9f:bb:
+         46:7b:c5:53:8a:77:88:bb:ef:04:7a:fe:d2:12:98:60:4f:9e:
+         e7:0d:a5:68:41:59:9b:1e:02:4d:62:50:ee:85:e0:ce:5a:61:
+         6e:eb:7c:a7:4e:1a:2c:16:53:72:89:8a:45:0a:42:b0:da:7b:
+         bd:dd:22:c5:b7:f4:fc:7d:ff:4c:04:93:d2:1a:5e:78:de:b6:
+         07:65:19:0e:4d:51:7f:37:e6:05:ac:61:42:ef:65:14:84:7e:
+         03:80:3a:24:23:22:38:3d:60:36:45:60:d6:a5:37:f7:94:27:
+         a8:e9:91:93:61:f0:1f:20:ac:3b:5f:62:d7:f0:28:1b:aa:46:
+         4b:5e:36:f6:11:c7:68:d1:39:61:2d:a9:a5:8d:88:b0:bf:92:
+         35:c1:7b:d4:ea:6b:d4:b7:8a:8b:c7:d9:79:93:2e:aa:73:a7:
+         1e:4e:70:8d:6a:7d:1a:2b:0e:cf:7f:f0:5b:be:ec:5f:bf:f2:
+         c7:da:be:c2:93:96:80:fc:e1:2a:19:d8:58:53:36:09:e0:39:
+         ea:1c:9a:76
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+cRQJGOOvUZM2OlWVj
-1eZxi2cT2LxtZHPXQBd5gKSNjl+/XkiwL7xJCHG0gDgAzenuLm5zindWtLPQ4wxA
-ycofm6CJaAc0zfT0uaLBykIO2pDPlYk6PN6tpv9JbOJe9Qv/vgbuq+GB6dqjuNVj
-r14QY0kjCh3KPryWboJcT85Wp49TNGXLR4g+OE1xtooG5O1P0t9ZPqcDp77CFKbP
-nkvIoyUhsj74zWXe/A5S/frP0weveVMRv+Z3ztgaS0/L0jUo+FpLBaLdiOFUrBoV
-jVSit6xmevhKKnWUFbNEwgX/46A0QIQAOW1t4Y4W89NgK5Uv/HRusYO3C52e2DRF
-IfcCAwEAAaOByzCByDAdBgNVHQ4EFgQUX7HixVjr73PcFaMPjiQMbGdlAAQwHwYD
-VR0jBBgwFoAUX7HixVjr73PcFaMPjiQMbGdlAAQwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALHMd75zhF79cfk1WUyk
+PIMqu81J7mnCNbkAigwpSVLyif+HWpnj1x2ZyCqL2INEZYmpQUZxiklznsOW7RK0
+pq66q4QoeT0vxzdLhTU3WZRVL9DVHMYyhRfDLQ9bkr51Kp8FZ3Q3WbXGNNZ8VrjS
+ohPRQXGE30sQr2ONg22HwqrBup4KvFc2CZ1apuQxporxglxPzc95aW9RiWOC4Q54
+p79D0cW+EoeBEGcTZ9o2bzcDEjI5Yh+kQ13UZeNETMranRwiYAA9/dGOZuLjH9Fy
+s1NOL5svZ3LynLfHowsndYXJ05B8HFmuuUclVwhRRfCLoDdiqX4+7lMIR8fV5Cmx
+fE0CAwEAAaOByzCByDAdBgNVHQ4EFgQU49K8Uw7t0wa77OR+0DPeGncKYqgwHwYD
+VR0jBBgwFoAU49K8Uw7t0wa77OR+0DPeGncKYqgwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCYJGfNDMMP
-xQnBs7LD65DVG37ORX7o+a69VEZYTg+zZTBFmD4Cv6Cp5pxp95TIvD0z7axSXmVY
-8e9Nvb85ZWLhdTWyJ5L6mz2S7VHzc5pzLy9hKh004KH6/LPcJECvFP3VJtBey/0F
-i4j1XA9vdWjFMvEdzaK+smYMGkzW3xvkCbm/MkFZyrxIM7HsavpN3HKulhUpNXiF
-lvlkBXVQsz6w+BV8BlT/NpgqbU8zsHgc074SLVu0NysEG9jOKNucbUnob/ZFdQr7
-adxxY83GF4RLihSg70Jqb/KodunGS5TSJPWqgNK2gRfGfX2INv4mRM82Wl7exDTa
-VB6JH9aYnjz3
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBi6tiKrJEn
+fH6xq6RegCwqiA7+9A5Yani3hIb6+qZEKEChymGYtyMUZBVnIMksgxHeYp2vn7tG
+e8VTineIu+8Eev7SEphgT57nDaVoQVmbHgJNYlDuheDOWmFu63ynThosFlNyiYpF
+CkKw2nu93SLFt/T8ff9MBJPSGl543rYHZRkOTVF/N+YFrGFC72UUhH4DgDokIyI4
+PWA2RWDWpTf3lCeo6ZGTYfAfIKw7X2LX8CgbqkZLXjb2Ecdo0TlhLamljYiwv5I1
+wXvU6mvUt4qLx9l5ky6qc6ceTnCNan0aKw7Pf/Bbvuxfv/LH2r7Ck5aA/OEqGdhY
+UzYJ4DnqHJp2
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,6 +281,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Time is after notAfter
 
diff --git a/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem b/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem
index cdb2ede..198ed24 100644
--- a/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem
+++ b/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b3:fa:1c:ab:da:95:23:00:c5:f7:9d:3e:fa:be:
-                    50:46:36:b3:b8:6c:9b:ed:57:22:ae:c1:19:65:f5:
-                    53:9b:55:48:bd:9f:59:95:8f:a6:a8:33:25:87:f8:
-                    69:be:58:ac:73:1f:aa:5b:0d:8d:ed:65:53:a8:fd:
-                    a4:99:92:d7:9f:a2:ce:9d:09:a7:af:65:dd:e7:1c:
-                    18:9d:61:6e:3f:05:7c:09:10:03:50:90:03:3a:20:
-                    7c:b5:80:f3:16:8b:d8:1e:c9:e4:53:5d:1c:6e:e2:
-                    b3:b3:9d:87:fa:2b:47:25:fe:ee:8b:4e:22:35:cc:
-                    22:59:94:78:13:57:67:69:ab:99:14:70:94:2c:0e:
-                    32:e3:bc:89:b4:e4:b1:09:4b:ae:bd:6d:7e:cd:a8:
-                    ff:ee:37:8b:1a:25:5e:ae:21:51:e2:cb:9c:6a:a5:
-                    27:23:62:c7:62:89:a1:69:13:c3:03:ec:f9:a7:5a:
-                    90:e2:e0:c5:c7:6d:ec:76:f5:76:88:f5:15:1a:4d:
-                    00:da:38:51:ea:03:16:a4:90:74:87:6e:ba:23:3a:
-                    91:58:a0:94:6c:3c:8c:f1:c6:2f:69:9e:41:1a:50:
-                    ea:3b:d1:a6:d2:9b:50:04:63:ca:b7:c1:eb:04:07:
-                    89:40:43:07:1e:84:d5:6c:08:01:50:7f:7b:aa:9e:
-                    c4:4d
+                    00:c0:9c:7a:54:dd:91:b9:88:ea:c9:1c:de:ab:33:
+                    a0:17:76:a0:ea:f3:d2:23:3d:ed:2d:69:ea:ae:b1:
+                    13:39:c7:0b:1e:f3:17:6d:f3:3b:70:3a:c7:c8:dd:
+                    5a:23:9a:5c:60:86:85:d9:43:45:76:fd:c0:15:3d:
+                    32:de:54:36:ef:69:96:8e:36:fe:01:6a:03:ca:ba:
+                    3e:93:65:b3:24:d4:af:15:e2:0c:ab:66:a5:3b:b1:
+                    8e:a9:33:3f:d7:da:c5:05:1e:fd:c0:28:c5:b0:59:
+                    b0:f3:fe:1c:76:5c:1d:c4:a5:c8:de:e7:90:da:31:
+                    fa:29:0e:c0:03:74:8c:75:e2:42:b3:41:ea:00:bd:
+                    d1:44:94:c2:8b:d6:74:82:db:e1:b7:8b:b9:ac:69:
+                    23:59:03:53:bc:95:bc:54:e1:2b:20:05:e5:88:f6:
+                    a2:f8:b5:bc:5b:9c:be:26:37:87:71:45:f8:7f:ea:
+                    1a:bc:71:23:f0:ea:6e:8f:92:29:7f:5b:a4:87:f2:
+                    7e:1d:fd:52:73:eb:80:75:df:0b:93:52:1c:04:83:
+                    15:9b:75:53:41:7f:4d:4a:30:32:d7:14:f7:32:e3:
+                    ac:94:de:a3:7f:3d:48:8e:2d:ab:6f:57:c2:e5:34:
+                    98:c3:d5:06:b2:fb:37:53:55:b7:5f:fe:2a:79:e0:
+                    b8:ab
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                BD:E0:2F:8E:DD:4A:65:2F:EE:52:E4:0F:3B:8A:28:80:D6:17:C4:76
+                B7:E2:28:7D:8F:77:36:F1:C0:CB:79:8B:74:69:91:F2:BA:87:CC:E9
             X509v3 Authority Key Identifier: 
-                keyid:A8:9E:04:25:6D:55:C9:D7:11:47:D3:DD:67:71:0E:7E:88:89:49:71
+                keyid:1A:FB:8F:0C:10:69:F1:A4:80:32:09:03:A4:26:A9:66:2C:EF:4E:2A
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         95:07:d3:f3:57:d3:2d:c3:f9:d5:4a:d4:54:85:1f:25:3d:3c:
-         e8:34:6f:6e:bc:5a:b3:50:fd:4f:b5:cf:87:54:26:7b:ab:4d:
-         5d:28:af:29:d1:24:ad:75:5d:3f:5b:68:63:b3:c0:20:82:8e:
-         c4:7f:58:7c:74:ea:d8:0d:50:11:63:43:ee:67:af:9f:16:c3:
-         89:f1:15:a6:94:a9:72:bb:0c:40:48:54:25:87:e7:94:6f:34:
-         f5:83:03:ed:2a:6f:b6:2d:b7:70:4d:8b:6e:31:80:0c:dd:3d:
-         9a:84:5a:55:ce:b7:08:a9:15:59:66:ec:a9:a1:4f:79:73:16:
-         a2:6a:44:1f:7a:6d:69:f2:de:a0:50:07:da:01:4b:22:2e:40:
-         f4:8b:e7:7c:f3:cd:27:fd:92:eb:fd:e8:4a:da:32:91:6a:ec:
-         b8:0c:49:db:f8:73:5e:a4:83:a2:c2:40:dd:e0:78:f9:3c:83:
-         39:e4:22:88:7c:d1:cf:58:4a:4c:f1:0b:4f:21:94:c4:fb:4e:
-         a8:c4:84:ce:6a:7c:ff:0c:9b:1f:c6:db:67:22:6d:29:2f:28:
-         81:60:c2:a3:ab:af:fa:f9:a5:55:83:35:97:1d:17:23:2a:32:
-         75:92:7b:2b:67:99:3c:25:f4:b5:c8:74:ac:05:7e:59:43:5c:
-         47:38:16:9b
+         36:fd:d6:dd:d4:38:e7:81:d2:ee:2a:4b:3e:d0:0d:7b:2e:56:
+         9e:99:67:f1:26:77:38:cb:b7:8b:8d:ec:64:6f:cb:c6:96:2d:
+         39:d4:da:8c:34:84:08:7d:20:fb:cd:2f:25:26:bb:1b:69:d5:
+         07:e8:d5:2f:8f:fb:c1:32:16:03:b1:ec:6c:a9:62:63:4d:57:
+         8a:39:2f:df:3e:2a:57:7b:22:5c:43:31:ae:d6:de:a0:2c:77:
+         c4:ef:d3:d5:06:db:61:5b:68:a2:3b:63:36:07:60:fa:8b:ed:
+         c9:70:89:14:7f:6d:26:3f:12:d6:04:8b:22:46:f3:a2:e8:42:
+         16:3e:b2:0a:d1:02:fe:01:12:48:e9:3e:7a:40:2d:f3:c2:db:
+         ed:69:88:52:68:a7:bd:12:3a:66:08:55:ce:a7:06:4c:ec:ff:
+         5c:3e:ba:6e:a3:5a:1b:60:30:7b:1e:87:ae:a4:9b:c5:57:cd:
+         95:31:1f:7f:e0:b4:7f:a9:23:fb:70:19:c1:c4:c8:ee:52:e2:
+         8b:5d:2f:78:45:69:1a:29:0c:25:5a:0d:d2:1f:70:06:70:c2:
+         4b:03:e1:47:0d:38:f8:49:1a:87:d0:53:58:1d:8e:b9:e8:c2:
+         a6:1c:c1:e8:d2:e9:40:85:3c:c7:81:21:f4:e7:ed:d3:29:28:
+         61:dd:54:4a
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+hyr
-2pUjAMX3nT76vlBGNrO4bJvtVyKuwRll9VObVUi9n1mVj6aoMyWH+Gm+WKxzH6pb
-DY3tZVOo/aSZktefos6dCaevZd3nHBidYW4/BXwJEANQkAM6IHy1gPMWi9geyeRT
-XRxu4rOznYf6K0cl/u6LTiI1zCJZlHgTV2dpq5kUcJQsDjLjvIm05LEJS669bX7N
-qP/uN4saJV6uIVHiy5xqpScjYsdiiaFpE8MD7PmnWpDi4MXHbex29XaI9RUaTQDa
-OFHqAxakkHSHbrojOpFYoJRsPIzxxi9pnkEaUOo70abSm1AEY8q3wesEB4lAQwce
-hNVsCAFQf3uqnsRNAgMBAAGjgekwgeYwHQYDVR0OBBYEFL3gL47dSmUv7lLkDzuK
-KIDWF8R2MB8GA1UdIwQYMBaAFKieBCVtVcnXEUfT3WdxDn6IiUlxMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAnHpU
+3ZG5iOrJHN6rM6AXdqDq89IjPe0taequsRM5xwse8xdt8ztwOsfI3VojmlxghoXZ
+Q0V2/cAVPTLeVDbvaZaONv4BagPKuj6TZbMk1K8V4gyrZqU7sY6pMz/X2sUFHv3A
+KMWwWbDz/hx2XB3Epcje55DaMfopDsADdIx14kKzQeoAvdFElMKL1nSC2+G3i7ms
+aSNZA1O8lbxU4SsgBeWI9qL4tbxbnL4mN4dxRfh/6hq8cSPw6m6Pkil/W6SH8n4d
+/VJz64B13wuTUhwEgxWbdVNBf01KMDLXFPcy46yU3qN/PUiOLatvV8LlNJjD1Qay
++zdTVbdf/ip54LirAgMBAAGjgekwgeYwHQYDVR0OBBYEFLfiKH2PdzbxwMt5i3Rp
+kfK6h8zpMB8GA1UdIwQYMBaAFBr7jwwQafGkgDIJA6QmqWYs704qMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAlQfT81fTLcP51UrUVIUf
-JT086DRvbrxas1D9T7XPh1Qme6tNXSivKdEkrXVdP1toY7PAIIKOxH9YfHTq2A1Q
-EWND7mevnxbDifEVppSpcrsMQEhUJYfnlG809YMD7Spvti23cE2LbjGADN09moRa
-Vc63CKkVWWbsqaFPeXMWompEH3ptafLeoFAH2gFLIi5A9IvnfPPNJ/2S6/3oStoy
-kWrsuAxJ2/hzXqSDosJA3eB4+TyDOeQiiHzRz1hKTPELTyGUxPtOqMSEzmp8/wyb
-H8bbZyJtKS8ogWDCo6uv+vmlVYM1lx0XIyoydZJ7K2eZPCX0tch0rAV+WUNcRzgW
-mw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEANv3W3dQ454HS7ipLPtAN
+ey5Wnpln8SZ3OMu3i43sZG/LxpYtOdTajDSECH0g+80vJSa7G2nVB+jVL4/7wTIW
+A7HsbKliY01Xijkv3z4qV3siXEMxrtbeoCx3xO/T1QbbYVtoojtjNgdg+ovtyXCJ
+FH9tJj8S1gSLIkbzouhCFj6yCtEC/gESSOk+ekAt88Lb7WmIUminvRI6ZghVzqcG
+TOz/XD66bqNaG2Awex6HrqSbxVfNlTEff+C0f6kj+3AZwcTI7lLii10veEVpGikM
+JVoN0h9wBnDCSwPhRw04+Ekah9BTWB2OuejCphzB6NLpQIU8x4Eh9Oft0ykoYd1U
+Sg==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c0:b1:53:c8:38:a8:e5:4e:90:c9:19:52:07:46:
-                    ec:7c:87:46:9e:ac:a4:c9:51:89:9c:55:43:98:a0:
-                    58:60:59:ce:73:e2:53:df:4a:e5:fb:ee:57:a9:9c:
-                    da:d3:c4:76:6b:82:77:94:ee:83:39:e5:d6:6e:ed:
-                    e1:3f:6e:80:a0:51:82:85:79:14:53:b6:aa:15:d8:
-                    d7:7a:1a:96:26:8f:09:b8:29:b4:c8:6c:a7:80:e6:
-                    10:18:ec:d7:f7:b0:ff:59:19:45:f8:37:de:28:bd:
-                    56:4f:67:53:c1:80:44:7d:80:b5:dd:d6:6f:bf:3b:
-                    1f:02:f3:00:67:88:7d:36:65:13:39:7d:3e:a8:35:
-                    13:54:e4:91:c8:ee:f1:53:fd:af:f7:3b:f8:59:e0:
-                    bc:e0:1e:ac:41:01:d1:b8:01:ee:ae:d2:39:b8:fa:
-                    57:6e:b2:7a:98:5f:51:ac:d6:6a:38:80:6b:01:64:
-                    13:96:d7:0b:74:5f:76:82:d9:44:9d:47:26:cc:59:
-                    9a:22:3c:72:eb:20:9a:d9:2b:b1:dd:cd:0a:54:0b:
-                    77:0b:83:2c:0d:bf:b4:62:4a:fc:87:84:4f:29:8d:
-                    fc:6c:b9:3a:4c:8b:45:85:2b:48:7d:2c:33:1f:ac:
-                    8b:77:39:8c:cb:0c:f4:08:93:4c:ec:34:15:be:81:
-                    09:a3
+                    00:98:93:d4:b5:fc:f1:0f:29:a9:39:6a:d1:f8:5b:
+                    38:c4:35:70:4a:9a:32:32:4d:e1:06:9d:a2:03:60:
+                    0f:61:82:cd:ee:1e:5d:4a:cf:20:d0:6c:62:42:67:
+                    89:07:18:46:fc:d5:15:8f:59:39:48:84:02:ef:59:
+                    ba:7b:8c:e7:ec:ff:4a:a5:2c:a8:fd:de:8a:94:d9:
+                    19:d3:16:16:86:57:d4:35:7b:46:00:f8:29:5b:9e:
+                    f7:28:1a:3b:7a:13:ac:57:75:0b:3f:3b:0b:9a:04:
+                    10:d0:40:02:7a:6e:b3:aa:41:c5:7b:0a:ad:c4:dc:
+                    a7:d3:23:4e:9a:96:0e:45:e3:fe:a3:a2:4e:cf:ce:
+                    ec:69:b5:33:c0:f5:58:a4:d0:6a:3a:4d:5b:7a:71:
+                    95:13:51:e5:9b:03:c5:15:34:4e:a7:35:6d:9e:70:
+                    37:c1:d3:07:98:5e:af:db:71:49:de:62:72:5a:1f:
+                    dd:ee:3e:4e:aa:c6:bd:7a:47:e5:6d:29:a0:c0:85:
+                    00:4f:26:9b:8c:f3:e4:15:88:a8:50:7c:d5:02:ab:
+                    27:10:48:ba:ba:93:97:3f:33:00:1b:3e:51:a2:50:
+                    8c:33:e3:c9:cc:d5:99:b9:8c:f4:ba:52:73:59:ba:
+                    71:d4:7f:6c:09:0f:e8:0c:35:fc:52:6f:2e:40:cd:
+                    45:35
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A8:9E:04:25:6D:55:C9:D7:11:47:D3:DD:67:71:0E:7E:88:89:49:71
+                1A:FB:8F:0C:10:69:F1:A4:80:32:09:03:A4:26:A9:66:2C:EF:4E:2A
             X509v3 Authority Key Identifier: 
-                keyid:29:13:82:EE:25:10:7F:40:23:D6:A7:1B:28:25:35:8A:E8:B6:AA:28
+                keyid:E0:58:5D:EB:B3:B9:03:DE:D8:1E:42:7A:A6:BB:6E:5F:32:4A:50:B7
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         57:37:54:5c:fd:ce:4e:4c:0f:b5:37:13:0d:0e:5f:dd:d8:4c:
-         17:53:38:e6:07:65:6c:67:80:e0:75:25:26:78:7b:2e:b8:1a:
-         6c:31:44:a1:5f:73:83:6d:34:1e:ff:76:42:d5:ad:ab:c0:b9:
-         cc:25:9e:88:7f:be:29:db:49:25:08:5d:3b:7d:43:2e:85:66:
-         ff:fe:b5:d4:aa:21:7a:b8:5a:b4:49:ab:c6:ef:8d:28:64:f4:
-         ea:be:64:33:c4:94:c6:31:f5:cc:55:cb:f1:20:be:e6:85:03:
-         32:99:61:e0:09:3c:e6:df:61:9a:c5:45:ea:f8:a3:f8:c1:6d:
-         ff:7b:44:04:8e:7f:74:89:ab:39:5a:fc:a6:09:77:9c:5d:1c:
-         99:a8:db:bc:2a:8e:19:25:8d:e3:10:37:94:42:e7:37:9c:16:
-         ba:be:4b:67:94:5f:18:2e:ae:e3:fd:ef:15:12:7d:4b:5a:47:
-         b7:45:7a:ee:27:3f:e1:6b:42:02:75:40:36:50:fd:6c:1e:de:
-         8a:b9:f7:d5:f8:69:0c:fd:58:65:35:64:a2:ca:c5:1e:b3:aa:
-         a0:4b:42:22:00:e3:d8:e7:b4:e8:69:48:37:42:55:60:24:48:
-         9a:d8:42:9e:d9:cf:2b:3c:9e:b1:fc:2f:39:5d:b5:fe:e3:72:
-         44:e4:00:50
+         08:61:27:f8:7c:59:e5:b5:66:af:47:ce:5c:32:76:b3:48:4b:
+         c1:3c:63:75:42:c6:15:18:10:6f:82:28:4c:df:57:44:40:b4:
+         6a:93:f6:eb:a3:21:e5:01:3b:35:f4:df:ce:38:ea:47:be:7b:
+         9b:ee:1d:40:db:be:a4:4d:24:ce:73:95:40:f3:a0:8b:16:18:
+         16:f8:1c:40:8c:4d:09:85:d5:20:52:1e:3f:e4:47:58:4f:c6:
+         1d:01:b9:cc:30:4e:69:e0:4b:0a:fe:57:e3:0a:7b:dd:7b:6a:
+         57:47:6a:e5:d2:a5:63:95:3e:eb:9d:d4:14:a1:b4:ba:ed:dd:
+         f9:05:e1:8c:64:2b:29:d9:68:1d:27:58:e1:62:bb:95:0f:92:
+         82:4a:7e:2e:66:8f:a8:77:e0:11:7c:e2:bc:61:82:7e:b9:80:
+         c2:3c:4a:7d:dc:82:38:a6:9b:de:2d:92:ba:72:1e:aa:37:59:
+         67:5b:aa:9f:37:20:ac:d5:d7:00:4a:ea:8c:db:ed:f2:2e:a4:
+         5d:dc:66:6e:3a:58:3b:0a:c3:06:c9:1c:d8:57:8e:98:58:82:
+         66:a9:92:4d:28:54:27:3f:83:1a:c5:61:7c:e4:22:ed:32:2f:
+         8c:9a:22:2d:f2:b7:7e:14:06:3f:e3:55:aa:2c:a8:2d:87:f1:
+         b0:56:1e:ba
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwLFTyDio
-5U6QyRlSB0bsfIdGnqykyVGJnFVDmKBYYFnOc+JT30rl++5XqZza08R2a4J3lO6D
-OeXWbu3hP26AoFGChXkUU7aqFdjXehqWJo8JuCm0yGyngOYQGOzX97D/WRlF+Dfe
-KL1WT2dTwYBEfYC13dZvvzsfAvMAZ4h9NmUTOX0+qDUTVOSRyO7xU/2v9zv4WeC8
-4B6sQQHRuAHurtI5uPpXbrJ6mF9RrNZqOIBrAWQTltcLdF92gtlEnUcmzFmaIjxy
-6yCa2Sux3c0KVAt3C4MsDb+0Ykr8h4RPKY38bLk6TItFhStIfSwzH6yLdzmMywz0
-CJNM7DQVvoEJowIDAQABo4HLMIHIMB0GA1UdDgQWBBSongQlbVXJ1xFH091ncQ5+
-iIlJcTAfBgNVHSMEGDAWgBQpE4LuJRB/QCPWpxsoJTWK6LaqKDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmJPUtfzx
+DympOWrR+Fs4xDVwSpoyMk3hBp2iA2APYYLN7h5dSs8g0GxiQmeJBxhG/NUVj1k5
+SIQC71m6e4zn7P9KpSyo/d6KlNkZ0xYWhlfUNXtGAPgpW573KBo7ehOsV3ULPzsL
+mgQQ0EACem6zqkHFewqtxNyn0yNOmpYOReP+o6JOz87sabUzwPVYpNBqOk1benGV
+E1HlmwPFFTROpzVtnnA3wdMHmF6v23FJ3mJyWh/d7j5Oqsa9ekflbSmgwIUATyab
+jPPkFYioUHzVAqsnEEi6upOXPzMAGz5RolCMM+PJzNWZuYz0ulJzWbpx1H9sCQ/o
+DDX8Um8uQM1FNQIDAQABo4HLMIHIMB0GA1UdDgQWBBQa+48MEGnxpIAyCQOkJqlm
+LO9OKjAfBgNVHSMEGDAWgBTgWF3rs7kD3tgeQnqmu25fMkpQtzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AFc3VFz9zk5MD7U3Ew0OX93YTBdTOOYHZWxngOB1JSZ4ey64GmwxRKFfc4NtNB7/
-dkLVravAucwlnoh/vinbSSUIXTt9Qy6FZv/+tdSqIXq4WrRJq8bvjShk9Oq+ZDPE
-lMYx9cxVy/EgvuaFAzKZYeAJPObfYZrFRer4o/jBbf97RASOf3SJqzla/KYJd5xd
-HJmo27wqjhkljeMQN5RC5zecFrq+S2eUXxguruP97xUSfUtaR7dFeu4nP+FrQgJ1
-QDZQ/Wwe3oq599X4aQz9WGU1ZKLKxR6zqqBLQiIA49jntOhpSDdCVWAkSJrYQp7Z
-zys8nrH8Lzldtf7jckTkAFA=
+AAhhJ/h8WeW1Zq9HzlwydrNIS8E8Y3VCxhUYEG+CKEzfV0RAtGqT9uujIeUBOzX0
+38446ke+e5vuHUDbvqRNJM5zlUDzoIsWGBb4HECMTQmF1SBSHj/kR1hPxh0Bucww
+TmngSwr+V+MKe917aldHauXSpWOVPuud1BShtLrt3fkF4YxkKynZaB0nWOFiu5UP
+koJKfi5mj6h34BF84rxhgn65gMI8Sn3cgjimm94tkrpyHqo3WWdbqp83IKzV1wBK
+6ozb7fIupF3cZm46WDsKwwbJHNhXjphYgmapkk0oVCc/gxrFYXzkIu0yL4yaIi3y
+t34UBj/jVaosqC2H8bBWHro=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b4:d2:a3:a5:24:1a:21:0c:58:52:09:77:f1:ab:
-                    2d:49:cb:b0:e5:e2:3c:12:9a:bd:a8:df:36:37:fe:
-                    be:97:6f:18:b0:8e:51:08:94:c1:8e:3e:8f:f0:ae:
-                    23:19:5e:0a:eb:5e:02:a1:bb:be:61:83:39:cb:52:
-                    e1:8f:0e:ba:61:c4:4b:53:09:c3:f7:38:a3:95:fc:
-                    89:86:06:59:bc:0c:b5:e1:a2:d3:6d:d8:84:de:75:
-                    80:7b:1d:04:04:b0:94:03:07:42:b4:73:52:96:b0:
-                    68:3c:08:e3:b3:af:e9:29:60:f6:4f:6f:8a:42:fc:
-                    85:63:f6:18:d6:12:6c:6e:94:eb:c3:c0:60:12:19:
-                    f8:61:d6:47:72:46:1a:cd:ed:6a:0b:65:cc:91:68:
-                    ec:a7:c7:f1:c8:7a:44:5c:1e:e8:8e:2b:ed:50:82:
-                    a2:1d:31:31:be:bd:06:56:52:20:bf:37:25:3d:cf:
-                    18:7f:87:94:ba:c7:9d:6e:68:7f:96:29:20:b7:dc:
-                    fc:73:d9:26:82:6e:f1:97:c2:48:9d:71:35:5c:3e:
-                    b6:86:69:e5:b5:1a:e9:08:4e:dc:dd:c5:0d:e1:4e:
-                    08:97:0a:41:1a:39:56:b1:31:02:0f:c2:e2:94:a0:
-                    3a:e0:d8:77:6e:a9:b6:fe:1d:8e:38:ad:52:e6:de:
-                    59:e3
+                    00:c8:eb:a7:88:6d:a0:10:2f:9d:5a:19:d8:19:b2:
+                    37:74:77:59:93:63:03:af:79:18:16:72:7c:86:e2:
+                    9c:96:74:d8:0a:fc:88:1f:4a:0d:ed:54:84:da:56:
+                    1f:f6:af:e1:53:8d:0c:9f:d2:fb:43:03:f7:00:de:
+                    25:26:43:22:d6:51:d3:4c:50:f1:24:c5:f8:74:98:
+                    30:ab:30:57:b6:5d:ed:9c:7a:12:1d:f2:09:9f:b2:
+                    95:a5:90:65:c0:e1:35:a2:20:09:a3:6c:23:c1:20:
+                    a2:17:49:3b:39:77:ee:21:33:f8:d4:c2:51:07:b9:
+                    79:80:c4:32:c2:d6:72:a2:ec:1e:2a:a0:2a:2a:39:
+                    7b:8e:70:2e:3e:d4:31:11:b9:19:7e:b5:0e:7d:75:
+                    9f:7a:3e:3b:ad:9b:8d:6a:65:27:c9:0b:9b:c6:56:
+                    e8:cf:a6:51:95:7e:b7:d6:d2:a2:50:46:31:51:71:
+                    e5:94:79:1b:15:1f:3d:b4:45:6b:6c:bc:11:1e:6a:
+                    be:c6:08:47:4b:eb:8d:5d:cc:14:a7:e3:a8:fc:c2:
+                    84:9b:33:f9:72:41:8b:e3:54:ac:0b:52:f1:1f:f8:
+                    44:ee:c6:65:c9:4e:c6:65:35:2c:d4:86:3c:a1:17:
+                    69:ce:6b:e8:32:fb:6a:a9:2c:ce:0a:86:82:61:cc:
+                    a0:cd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                29:13:82:EE:25:10:7F:40:23:D6:A7:1B:28:25:35:8A:E8:B6:AA:28
+                E0:58:5D:EB:B3:B9:03:DE:D8:1E:42:7A:A6:BB:6E:5F:32:4A:50:B7
             X509v3 Authority Key Identifier: 
-                keyid:29:13:82:EE:25:10:7F:40:23:D6:A7:1B:28:25:35:8A:E8:B6:AA:28
+                keyid:E0:58:5D:EB:B3:B9:03:DE:D8:1E:42:7A:A6:BB:6E:5F:32:4A:50:B7
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         6a:88:6c:4d:9f:ee:e6:a5:ec:19:64:e7:b9:86:03:c5:f0:32:
-         92:69:3b:35:03:b8:87:12:db:48:78:5d:44:3b:75:e2:3b:87:
-         7d:ef:96:83:93:06:93:fc:17:58:71:3e:c6:b0:8b:5b:13:2b:
-         c7:97:42:ed:3e:de:4a:96:cd:f1:df:3a:90:96:7f:f1:21:72:
-         90:58:9b:77:cc:80:2d:19:5a:b1:6f:d6:dd:c8:fc:b7:32:1d:
-         8f:77:d4:5e:f0:9d:e4:05:8a:ae:d9:7c:58:fa:00:6e:9f:f9:
-         9a:2e:11:25:8b:28:5c:4b:76:ef:62:4d:ff:55:bc:aa:77:fa:
-         87:33:3c:f5:a9:87:b5:d5:7f:e0:ef:51:a5:74:9a:04:5b:e9:
-         35:f8:e6:43:d0:82:9a:db:4a:90:df:56:20:1d:31:b1:56:bc:
-         73:0b:5e:91:bb:a6:62:37:fc:ba:dd:f7:24:69:54:95:c3:28:
-         41:68:21:16:9f:d6:32:b6:17:88:29:52:f6:d3:2b:98:2f:28:
-         78:c3:67:b3:76:83:df:a9:86:01:cd:c2:bf:e0:84:61:56:76:
-         f5:1f:12:d4:d1:fb:9e:c0:1b:22:c8:9e:05:4c:34:3b:93:54:
-         1e:0a:db:41:91:9a:07:8d:aa:f8:fd:8d:89:ec:eb:32:b3:10:
-         4f:52:53:68
+         64:1b:2f:a1:77:3a:56:af:6e:4c:38:25:09:0c:1e:54:d6:3b:
+         57:e4:0c:82:e1:43:25:d8:a8:10:91:a7:08:79:89:13:75:8b:
+         0a:a3:35:6d:e5:f5:2a:b2:ba:35:6e:84:db:2d:f0:4c:34:b6:
+         75:bb:37:83:45:fd:e4:ea:9b:b4:a3:74:48:7b:b4:c5:b5:91:
+         56:e1:dc:2d:f6:bd:80:32:b7:85:05:bb:71:6d:d5:83:2f:9c:
+         05:ad:9a:cb:f3:c1:4e:63:05:10:6b:4a:70:aa:da:98:16:3d:
+         f4:72:aa:1c:c9:87:71:26:e2:5d:c8:e4:ec:31:84:f7:e2:3d:
+         6f:89:ed:1f:2f:89:2a:24:bb:be:f0:4f:8c:b9:fa:02:a2:83:
+         4f:bd:23:6a:19:77:bb:7a:4f:64:57:c8:a6:17:2e:52:a6:7a:
+         b5:26:50:9c:37:bd:3e:ed:a9:13:1a:51:d1:a8:2c:c0:b8:7f:
+         68:8b:4c:ad:31:41:7d:f7:19:6a:f8:60:c5:96:50:b2:98:3b:
+         5e:91:fe:da:22:69:00:dd:d4:f8:98:db:62:b3:5c:cf:b2:b0:
+         31:de:2a:c1:d2:7f:5e:fc:1d:fd:bd:4c:14:53:72:17:3e:fd:
+         a0:85:28:34:ca:36:86:a7:59:2b:72:3a:aa:3f:18:cc:83:27:
+         62:91:2c:89
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE1MDMwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTSo6UkGiEMWFIJd/Gr
-LUnLsOXiPBKavajfNjf+vpdvGLCOUQiUwY4+j/CuIxleCuteAqG7vmGDOctS4Y8O
-umHES1MJw/c4o5X8iYYGWbwMteGi023YhN51gHsdBASwlAMHQrRzUpawaDwI47Ov
-6Slg9k9vikL8hWP2GNYSbG6U68PAYBIZ+GHWR3JGGs3tagtlzJFo7KfH8ch6RFwe
-6I4r7VCCoh0xMb69BlZSIL83JT3PGH+HlLrHnW5of5YpILfc/HPZJoJu8ZfCSJ1x
-NVw+toZp5bUa6QhO3N3FDeFOCJcKQRo5VrExAg/C4pSgOuDYd26ptv4djjitUube
-WeMCAwEAAaOByzCByDAdBgNVHQ4EFgQUKROC7iUQf0Aj1qcbKCU1iui2qigwHwYD
-VR0jBBgwFoAUKROC7iUQf0Aj1qcbKCU1iui2qigwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMjrp4htoBAvnVoZ2Bmy
+N3R3WZNjA695GBZyfIbinJZ02Ar8iB9KDe1UhNpWH/av4VONDJ/S+0MD9wDeJSZD
+ItZR00xQ8STF+HSYMKswV7Zd7Zx6Eh3yCZ+ylaWQZcDhNaIgCaNsI8EgohdJOzl3
+7iEz+NTCUQe5eYDEMsLWcqLsHiqgKio5e45wLj7UMRG5GX61Dn11n3o+O62bjWpl
+J8kLm8ZW6M+mUZV+t9bSolBGMVFx5ZR5GxUfPbRFa2y8ER5qvsYIR0vrjV3MFKfj
+qPzChJsz+XJBi+NUrAtS8R/4RO7GZclOxmU1LNSGPKEXac5r6DL7aqkszgqGgmHM
+oM0CAwEAAaOByzCByDAdBgNVHQ4EFgQU4Fhd67O5A97YHkJ6prtuXzJKULcwHwYD
+VR0jBBgwFoAU4Fhd67O5A97YHkJ6prtuXzJKULcwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBqiGxNn+7m
-pewZZOe5hgPF8DKSaTs1A7iHEttIeF1EO3XiO4d975aDkwaT/BdYcT7GsItbEyvH
-l0LtPt5Kls3x3zqQln/xIXKQWJt3zIAtGVqxb9bdyPy3Mh2Pd9Re8J3kBYqu2XxY
-+gBun/maLhEliyhcS3bvYk3/Vbyqd/qHMzz1qYe11X/g71GldJoEW+k1+OZD0IKa
-20qQ31YgHTGxVrxzC16Ru6ZiN/y63fckaVSVwyhBaCEWn9YytheIKVL20yuYLyh4
-w2ezdoPfqYYBzcK/4IRhVnb1HxLU0fuewBsiyJ4FTDQ7k1QeCttBkZoHjar4/Y2J
-7OsysxBPUlNo
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBkGy+hdzpW
+r25MOCUJDB5U1jtX5AyC4UMl2KgQkacIeYkTdYsKozVt5fUqsro1boTbLfBMNLZ1
+uzeDRf3k6pu0o3RIe7TFtZFW4dwt9r2AMreFBbtxbdWDL5wFrZrL88FOYwUQa0pw
+qtqYFj30cqocyYdxJuJdyOTsMYT34j1vie0fL4kqJLu+8E+MufoCooNPvSNqGXe7
+ek9kV8imFy5Spnq1JlCcN70+7akTGlHRqCzAuH9oi0ytMUF99xlq+GDFllCymDte
+kf7aImkA3dT4mNtis1zPsrAx3irB0n9e/B39vUwUU3IXPv2ghSg0yjaGp1krcjqq
+PxjMgydikSyJ
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py b/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py
index 1d71f77..9db4ffec2 100755
--- a/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py
+++ b/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py
@@ -30,7 +30,9 @@
 chain = [target, intermediate2, intermediate1]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py b/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py
index fe2378d..b51c0da5 100755
--- a/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py
+++ b/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py
@@ -23,8 +23,10 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=True)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
 
diff --git a/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py b/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py
index dd4ae51..d8f1d3f 100755
--- a/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py
+++ b/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py
@@ -24,7 +24,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=True)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py b/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py
index b646d26..fe632b9 100755
--- a/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py
+++ b/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py
@@ -22,7 +22,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=True)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py b/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py
index bee2c1e..e62caa9 100755
--- a/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py
+++ b/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py
@@ -29,7 +29,9 @@
 # Both the target and intermediate are valid at this time, however the
 # root is not.
 time = common.MARCH_2_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py b/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py
index 0a38082..037bf01 100755
--- a/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py
+++ b/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py
@@ -27,10 +27,12 @@
 # Both the root and target are valid at this time, however the
 # intermediate certificate is not.
 time = common.MARCH_2_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Time is after notAfter
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py b/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py
index 2d077c8..a04f2f4c 100755
--- a/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py
+++ b/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py
@@ -27,10 +27,12 @@
 # Both the root and intermediate are valid at this time, however the
 # target is not.
 time = common.MARCH_1_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Time is before notBefore
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-expired-target.py b/net/data/verify_certificate_chain_unittest/generate-expired-target.py
index e01cc74..92456769 100755
--- a/net/data/verify_certificate_chain_unittest/generate-expired-target.py
+++ b/net/data/verify_certificate_chain_unittest/generate-expired-target.py
@@ -27,10 +27,12 @@
 # Both the root and intermediate are valid at this time, however the
 # target is not.
 time = common.MARCH_2_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Time is after notAfter
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py b/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py
index 7585cb2..e415072 100755
--- a/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py
+++ b/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py
@@ -30,7 +30,9 @@
 # root is not. This doesn't matter since the root certificate is
 # just a delivery mechanism for the name + SPKI.
 time = common.MARCH_2_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py b/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py
index 956bc2b..1d6eb5b 100755
--- a/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py
+++ b/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py
@@ -25,6 +25,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(bogus_root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Signature verification failed
@@ -33,4 +34,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py b/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py
index c49ea7a6b..faa9247 100755
--- a/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py
+++ b/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py
@@ -23,10 +23,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Basic Constraints indicates not a CA
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py b/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py
index 1e9bb3fb..ee4ab5e 100755
--- a/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py
+++ b/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py
@@ -23,7 +23,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py b/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py
index 7c1c5310..80743e7 100755
--- a/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py
+++ b/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py
@@ -22,10 +22,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Does not have Basic Constraints
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py b/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py
index 5b6e7d2..b04faef3c 100755
--- a/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py
+++ b/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py
@@ -23,10 +23,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: keyCertSign bit is not set
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py b/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py
index 087c11b7..a1d208c 100755
--- a/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py
+++ b/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py
@@ -22,6 +22,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Unacceptable signature algorithm
@@ -29,4 +30,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py b/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py
index 0229862..357cd906 100755
--- a/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py
+++ b/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py
@@ -24,6 +24,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Unconsumed critical extension
@@ -32,4 +33,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py b/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py
index 67879f65..ae4b03d 100755
--- a/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py
+++ b/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py
@@ -23,7 +23,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-key-rollover.py b/net/data/verify_certificate_chain_unittest/generate-key-rollover.py
index 686e53e..f8380987 100755
--- a/net/data/verify_certificate_chain_unittest/generate-key-rollover.py
+++ b/net/data/verify_certificate_chain_unittest/generate-key-rollover.py
@@ -78,15 +78,19 @@
 newtrusted = common.TrustAnchor(newroot, constrained=False)
 
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, oldchain, oldtrusted, time, verify_result,
-                       errors, out_pem="key-rollover-oldchain.pem")
-common.write_test_file(__doc__, rolloverchain, oldtrusted, time, verify_result,
-                       errors, out_pem="key-rollover-rolloverchain.pem")
-common.write_test_file(__doc__, longrolloverchain, oldtrusted, time,
+common.write_test_file(__doc__, oldchain, oldtrusted, time, key_purpose,
                        verify_result, errors,
+                       out_pem="key-rollover-oldchain.pem")
+common.write_test_file(__doc__, rolloverchain, oldtrusted, time, key_purpose,
+                       verify_result, errors,
+                       out_pem="key-rollover-rolloverchain.pem")
+common.write_test_file(__doc__, longrolloverchain, oldtrusted, time,
+                       key_purpose, verify_result, errors,
                        out_pem="key-rollover-longrolloverchain.pem")
-common.write_test_file(__doc__, newchain, newtrusted, time, verify_result,
-                       errors, out_pem="key-rollover-newchain.pem")
+common.write_test_file(__doc__, newchain, newtrusted, time, key_purpose,
+                       verify_result, errors,
+                       out_pem="key-rollover-newchain.pem")
diff --git a/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py b/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py
index d30e530..709c83c 100755
--- a/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py
+++ b/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py
@@ -23,7 +23,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py b/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py
index 1b5c80e..0132b2b 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py
@@ -20,7 +20,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py b/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py
index 585b02fe..7d361df 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py
@@ -25,10 +25,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Target certificate looks like a CA but does not set all CA properties
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py b/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py
index b8135e7..b8e7673 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py
@@ -24,10 +24,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Target certificate looks like a CA but does not set all CA properties
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py b/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py
index a9e17d0..59bc3aa 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py
@@ -21,7 +21,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py b/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py
index f86013b..f88b90b 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py
@@ -22,6 +22,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: RSA modulus too small
@@ -32,4 +33,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py b/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py
index b0a9fd2..b2acb8db 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py
@@ -21,7 +21,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py b/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py
index 7511486..6b9adc0 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py
@@ -21,6 +21,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Unacceptable signature algorithm
@@ -28,4 +29,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py b/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py
index 8179c08..375522c 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py
@@ -24,6 +24,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Unconsumed critical extension
@@ -32,4 +33,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py b/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py
index 368d4f0..b803a39 100755
--- a/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py
+++ b/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py
@@ -27,6 +27,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Signature verification failed
@@ -34,4 +35,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py b/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py
index 4d433a77..80a147b 100755
--- a/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py
+++ b/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py
@@ -23,8 +23,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
-
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py b/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py
index ba48dd8661..1f71d1e 100755
--- a/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py
+++ b/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py
@@ -24,8 +24,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
-
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py b/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py
index dbd1802..68a4941 100755
--- a/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py
+++ b/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py
@@ -22,7 +22,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py b/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py
index 4d4e40a..30e375a0 100755
--- a/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py
+++ b/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py
@@ -29,10 +29,12 @@
 chain = [target, intermediate2, intermediate1]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate2) -----
 ERROR: max_path_length reached
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py b/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py
index 7b73f39..ac8ed03 100755
--- a/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py
+++ b/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py
@@ -27,10 +27,12 @@
 chain = [target, intermediate2, intermediate1]
 trusted = common.TrustAnchor(root, constrained=True)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate2) -----
 ERROR: max_path_length reached
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py b/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py
index d51a38a..1a83ab0 100755
--- a/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py
+++ b/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py
@@ -27,7 +27,9 @@
 chain = [target, intermediate2, intermediate1]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem b/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem
index c486909..f81453e8 100644
--- a/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem
+++ b/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a3:7b:69:ed:ad:13:3f:59:75:63:cf:2a:9e:b0:
-                    78:06:62:e2:5e:40:3f:12:2e:61:1c:7f:2e:f8:4f:
-                    0e:92:28:80:18:d8:e2:e2:f4:b4:63:84:c8:0b:4d:
-                    ae:1b:f0:4d:d5:49:91:89:b9:a4:11:b3:77:72:ba:
-                    12:16:3e:29:7c:51:28:99:37:69:57:6d:3b:68:e1:
-                    58:83:c0:ad:13:af:63:2e:85:63:ab:92:11:7a:92:
-                    8b:fa:66:33:f9:3b:c9:ab:22:75:9f:6c:91:1b:22:
-                    6b:c9:2d:c8:6d:58:2b:bc:a9:f3:cf:24:8f:7a:37:
-                    9b:83:67:e5:b2:eb:ea:35:c6:9d:e4:a8:24:74:18:
-                    5b:8b:62:6b:cd:92:d7:c3:6c:b1:40:e1:2f:a3:16:
-                    52:92:df:59:70:bc:cc:37:27:8f:8e:3d:b9:fc:d6:
-                    ca:fb:63:89:b3:d0:64:24:2b:97:e3:a7:bc:6f:76:
-                    7e:e6:82:36:9f:c4:ea:b2:96:60:ac:86:57:09:55:
-                    d7:3b:45:a8:23:b8:b1:4a:92:f8:a9:66:1f:1a:0f:
-                    c5:f6:da:4e:6d:02:56:1b:8a:9f:52:9f:bd:b5:16:
-                    a6:fb:85:3d:fa:04:1d:8e:25:b4:03:9e:74:e4:98:
-                    4a:da:39:7b:d0:f2:7d:f9:f4:97:ce:d1:d8:4d:31:
-                    88:47
+                    00:d2:d5:0d:d0:0f:c6:e6:ff:bf:3b:49:ff:d5:9c:
+                    b4:03:9b:40:b3:ed:50:78:f8:80:91:06:18:d1:6a:
+                    fa:ed:0c:e4:57:24:75:fa:79:3c:30:b6:53:2b:61:
+                    bc:9a:46:37:01:94:c0:9c:aa:35:16:90:5a:22:25:
+                    6d:31:56:69:aa:7e:13:0c:5c:75:d0:21:31:49:02:
+                    8c:17:8f:e8:a6:15:86:3f:48:c7:a2:0a:7b:2f:bb:
+                    18:0f:d6:c7:21:68:66:ff:9d:d1:59:f4:0d:0a:67:
+                    e9:e0:18:9b:ec:1d:00:b2:83:25:54:94:dc:0c:09:
+                    e0:b6:2d:70:3e:7d:8c:87:5d:fd:cd:ba:d1:d2:0f:
+                    ac:22:43:d3:00:71:b4:99:eb:83:d4:6b:8a:b5:54:
+                    db:9b:02:96:99:2e:59:32:01:98:7f:15:c2:e7:ee:
+                    12:61:21:ed:28:15:78:98:45:93:89:29:ee:d0:c3:
+                    5b:9b:51:f3:52:01:d4:24:2d:94:cf:71:bf:1d:f4:
+                    8f:a0:2d:15:b2:8c:f7:ed:fa:5b:db:23:6e:ec:0a:
+                    a3:a5:41:64:55:32:f6:14:3e:cb:17:c7:29:81:65:
+                    2b:51:70:0e:b3:c4:d9:8c:1d:31:ee:34:02:89:7d:
+                    53:c3:69:b7:9e:ec:1f:d4:0c:92:f2:ed:d5:0e:bd:
+                    aa:eb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                94:D6:3E:50:DE:FF:47:B8:65:1A:C6:33:78:79:87:8D:F2:32:32:BA
+                73:6C:8B:E4:86:B3:59:CE:20:E0:D2:76:8A:07:C4:B7:32:3C:51:4D
             X509v3 Authority Key Identifier: 
-                keyid:CC:11:88:FF:DF:7E:14:06:07:B5:10:B6:C1:BC:CB:2B:65:FC:83:77
+                keyid:28:02:89:88:59:90:49:58:6C:2B:C7:05:2C:41:3B:6C:5E:45:82:5E
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         b4:9a:15:da:2b:7d:d4:26:f2:41:a2:04:1e:13:f3:b3:28:bf:
-         a3:85:34:fc:42:b1:57:05:0f:97:e5:f5:d9:d4:0e:eb:43:e8:
-         63:ce:5b:23:8b:48:ab:2f:25:03:81:43:ba:7e:9a:14:e4:4e:
-         9c:5b:d3:08:56:b7:00:7c:7f:fd:9e:ab:50:ce:09:95:2c:21:
-         00:74:22:26:83:fb:08:47:34:1b:67:0e:eb:e0:c4:ab:3d:00:
-         76:b2:9a:b1:00:c8:d0:17:0d:2e:81:43:71:51:f8:d7:f5:ad:
-         e9:f0:81:12:2a:e0:6f:c7:10:11:d7:f4:55:73:a4:7c:cb:97:
-         6c:fd:2b:34:bf:7e:a9:57:d8:e1:a9:05:01:5a:09:2b:49:bf:
-         bc:99:a3:a5:7c:b0:df:7a:32:0f:c2:94:0f:e0:15:f2:86:8f:
-         c3:19:44:49:02:10:56:f6:a9:58:38:7f:4d:f1:66:58:00:f9:
-         17:18:ab:b4:0c:c1:9e:f3:8d:5d:61:4d:02:8c:3a:97:89:8d:
-         5f:d0:98:f3:57:5c:85:35:b0:94:f8:02:7c:6f:bf:69:bf:7b:
-         91:5a:c3:38:88:0d:ec:42:3b:b5:29:6b:0a:2d:10:19:ae:bc:
-         6c:18:95:2e:cd:74:04:af:95:79:ab:8e:4a:cc:53:6e:4d:ad:
-         83:58:6d:c5
+         7d:c1:e7:bd:46:4a:d1:29:fc:94:59:4b:bc:9c:ec:5b:c8:f1:
+         a4:de:a6:47:d3:32:3c:7d:a3:8c:73:3f:a1:9d:c6:0b:80:a6:
+         18:60:c6:f5:86:92:e5:d0:c0:df:32:f2:cb:11:93:c1:9e:2c:
+         25:80:3c:ca:89:ff:53:ab:f6:dd:84:d0:15:9e:24:96:59:59:
+         66:16:87:47:2a:38:86:46:08:03:d2:8c:c1:b7:6c:b0:68:d0:
+         23:e9:b6:85:b3:68:fe:87:2a:4c:bd:92:b7:9e:c9:65:e7:1d:
+         8b:b1:39:a0:82:7a:38:e1:a1:06:54:7b:83:b1:6a:86:7a:e5:
+         f3:b0:1b:8a:43:48:88:49:e9:37:70:3a:c5:2b:36:da:86:5f:
+         c2:f0:89:fe:07:9f:2f:1d:d9:c7:86:29:f2:2a:4d:a4:eb:f4:
+         64:60:08:ed:a4:75:90:fe:80:74:a0:7a:7f:e8:9c:76:b2:a2:
+         d7:4a:d2:85:5b:95:e3:32:38:7a:c2:4d:d8:4c:3b:df:71:6c:
+         d7:eb:cf:95:74:6c:65:9f:84:f1:93:32:93:48:c1:56:98:31:
+         c5:92:c7:6a:d2:29:21:25:a9:4f:f3:65:bb:ca:8c:ef:2f:0c:
+         21:89:2b:bf:20:09:4d:85:a7:55:ac:6a:45:ae:40:7b:60:1c:
+         39:50:b8:e8
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCje2nt
-rRM/WXVjzyqesHgGYuJeQD8SLmEcfy74Tw6SKIAY2OLi9LRjhMgLTa4b8E3VSZGJ
-uaQRs3dyuhIWPil8USiZN2lXbTto4ViDwK0Tr2MuhWOrkhF6kov6ZjP5O8mrInWf
-bJEbImvJLchtWCu8qfPPJI96N5uDZ+Wy6+o1xp3kqCR0GFuLYmvNktfDbLFA4S+j
-FlKS31lwvMw3J4+OPbn81sr7Y4mz0GQkK5fjp7xvdn7mgjafxOqylmCshlcJVdc7
-RagjuLFKkvipZh8aD8X22k5tAlYbip9Sn721Fqb7hT36BB2OJbQDnnTkmEraOXvQ
-8n359JfO0dhNMYhHAgMBAAGjgekwgeYwHQYDVR0OBBYEFJTWPlDe/0e4ZRrGM3h5
-h43yMjK6MB8GA1UdIwQYMBaAFMwRiP/ffhQGB7UQtsG8yytl/IN3MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDS1Q3Q
+D8bm/787Sf/VnLQDm0Cz7VB4+ICRBhjRavrtDORXJHX6eTwwtlMrYbyaRjcBlMCc
+qjUWkFoiJW0xVmmqfhMMXHXQITFJAowXj+imFYY/SMeiCnsvuxgP1schaGb/ndFZ
+9A0KZ+ngGJvsHQCygyVUlNwMCeC2LXA+fYyHXf3NutHSD6wiQ9MAcbSZ64PUa4q1
+VNubApaZLlkyAZh/FcLn7hJhIe0oFXiYRZOJKe7Qw1ubUfNSAdQkLZTPcb8d9I+g
+LRWyjPft+lvbI27sCqOlQWRVMvYUPssXxymBZStRcA6zxNmMHTHuNAKJfVPDabee
+7B/UDJLy7dUOvarrAgMBAAGjgekwgeYwHQYDVR0OBBYEFHNsi+SGs1nOIODSdooH
+xLcyPFFNMB8GA1UdIwQYMBaAFCgCiYhZkElYbCvHBSxBO2xeRYJeMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAtJoV2it91CbyQaIEHhPz
-syi/o4U0/EKxVwUPl+X12dQO60PoY85bI4tIqy8lA4FDun6aFOROnFvTCFa3AHx/
-/Z6rUM4JlSwhAHQiJoP7CEc0G2cO6+DEqz0AdrKasQDI0BcNLoFDcVH41/Wt6fCB
-Eirgb8cQEdf0VXOkfMuXbP0rNL9+qVfY4akFAVoJK0m/vJmjpXyw33oyD8KUD+AV
-8oaPwxlESQIQVvapWDh/TfFmWAD5FxirtAzBnvONXWFNAow6l4mNX9CY81dchTWw
-lPgCfG+/ab97kVrDOIgN7EI7tSlrCi0QGa68bBiVLs10BK+VeauOSsxTbk2tg1ht
-xQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAfcHnvUZK0Sn8lFlLvJzs
+W8jxpN6mR9MyPH2jjHM/oZ3GC4CmGGDG9YaS5dDA3zLyyxGTwZ4sJYA8yon/U6v2
+3YTQFZ4klllZZhaHRyo4hkYIA9KMwbdssGjQI+m2hbNo/ocqTL2St57JZecdi7E5
+oIJ6OOGhBlR7g7Fqhnrl87AbikNIiEnpN3A6xSs22oZfwvCJ/gefLx3Zx4Yp8ipN
+pOv0ZGAI7aR1kP6AdKB6f+icdrKi10rShVuV4zI4esJN2Ew733Fs1+vPlXRsZZ+E
+8ZMyk0jBVpgxxZLHatIpISWpT/Nlu8qM7y8MIYkrvyAJTYWnVaxqRa5Ae2AcOVC4
+6A==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b6:cf:57:a5:6e:7c:9a:78:f2:c1:bd:99:eb:7c:
-                    af:6a:c8:38:2e:8e:cf:e5:20:c0:f9:57:5c:e2:83:
-                    29:33:2c:b1:9d:2b:91:ce:4c:da:27:62:5f:18:08:
-                    a8:f1:03:eb:0e:be:f2:1e:00:8c:63:f2:8f:d3:c1:
-                    e4:df:0a:d3:d4:82:0d:6c:c4:98:87:eb:5b:81:66:
-                    43:f3:38:5e:d4:8b:91:47:70:8b:89:90:a0:0b:9d:
-                    63:56:4f:58:4b:e2:36:e1:97:df:37:71:7a:90:f5:
-                    62:2c:3e:57:71:6a:75:db:10:66:22:4c:fd:e9:a0:
-                    78:5e:4c:e3:8c:d5:c2:c9:a0:10:3d:ec:bd:7b:76:
-                    9f:5f:54:e3:c3:88:9b:d7:7f:8c:80:79:87:0f:3c:
-                    aa:28:d9:f5:63:e8:f3:a5:6b:2b:e0:45:1c:af:94:
-                    00:84:b4:e4:fc:3a:5d:9c:bc:05:c2:04:b7:3a:23:
-                    84:56:66:a2:50:fc:8d:00:06:52:7f:a2:d3:9e:0b:
-                    fa:d5:ba:1b:1e:10:e9:13:60:56:a6:cd:ab:67:90:
-                    66:0c:3d:71:c0:46:42:13:48:74:a8:a8:6d:0c:a8:
-                    6d:7b:6b:57:f1:ba:c0:c5:c8:cd:d9:75:20:d3:59:
-                    ed:32:ed:5c:b6:63:b4:9b:0b:3a:05:7b:ad:38:70:
-                    e4:3d
+                    00:af:ce:d1:57:74:aa:26:65:67:76:e9:d3:53:12:
+                    d5:66:d3:98:c6:84:6f:b5:cc:bd:8e:b5:08:c2:49:
+                    06:c7:0c:8d:6e:3c:04:5a:92:8c:cf:b8:3a:25:99:
+                    7e:84:aa:60:cf:ff:a1:db:9d:26:3b:60:36:69:de:
+                    e9:61:34:cc:c9:4b:86:2f:00:17:0e:e3:30:3d:f3:
+                    b5:f1:74:b3:8d:2a:8e:13:fb:16:16:f0:a7:b1:07:
+                    0b:cc:c9:3f:f3:ee:2d:5f:3d:60:ee:e6:b1:d8:f7:
+                    d6:d6:30:49:44:52:be:41:bd:2c:9d:21:f0:67:6e:
+                    ed:4b:3c:b8:c7:d8:7b:8d:94:37:3c:62:e7:2d:30:
+                    01:a7:5b:00:05:0b:98:62:1a:79:c0:94:8d:90:74:
+                    25:03:58:f6:42:b6:4c:8c:83:dd:f7:a8:a2:96:98:
+                    66:ba:52:a2:e5:70:4c:b1:00:4e:cf:24:10:40:2f:
+                    5c:ca:3c:80:1f:d4:5c:23:1d:0b:08:34:d7:36:23:
+                    e0:50:cf:ea:10:09:49:ff:86:81:56:1f:45:64:a5:
+                    51:98:8c:60:73:f6:9b:ac:c5:32:fb:88:c3:dc:46:
+                    81:33:2c:23:7e:80:9c:22:f5:f7:8b:e2:ca:d2:1e:
+                    a2:c7:da:88:be:ea:1b:cb:05:2c:59:39:48:40:b7:
+                    b3:8f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CC:11:88:FF:DF:7E:14:06:07:B5:10:B6:C1:BC:CB:2B:65:FC:83:77
+                28:02:89:88:59:90:49:58:6C:2B:C7:05:2C:41:3B:6C:5E:45:82:5E
             X509v3 Authority Key Identifier: 
-                keyid:A7:26:DB:0B:03:E6:0B:32:0B:8C:34:AD:CE:60:CD:4C:89:9B:59:6E
+                keyid:BB:D1:D5:54:45:52:ED:03:40:FE:CD:9A:4F:66:90:09:28:0E:A6:5F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         69:10:d5:c3:ff:f0:65:c6:79:55:be:ba:6b:7c:7f:49:a2:47:
-         b0:d7:e9:28:9f:14:f6:11:6a:d7:1f:e3:11:30:c1:d0:0c:21:
-         8c:b3:21:95:c1:f3:2e:7c:8a:34:f6:d6:c7:49:9a:75:4c:93:
-         35:c4:88:f7:be:d6:ed:e0:75:22:29:4d:0f:59:80:1a:1b:9b:
-         a4:fd:86:af:1e:76:44:03:f9:42:f2:74:1e:6b:74:fc:fa:64:
-         67:33:4a:14:93:fc:84:1f:92:0c:62:ac:aa:e1:f0:6f:3e:09:
-         90:d5:67:68:2a:28:9c:5f:86:29:8d:48:ef:3e:a5:48:60:08:
-         b5:cf:ac:ba:ff:ba:d7:7d:9a:8e:b4:63:10:e3:14:12:12:89:
-         37:00:42:fb:4c:e5:b7:0d:e5:b8:28:5b:9f:79:48:aa:e4:ef:
-         17:ec:eb:f1:c3:82:d9:48:ec:cd:f4:f7:1f:8f:e2:9e:ec:71:
-         a6:7a:ce:c0:fc:14:8f:48:17:56:10:02:27:aa:d9:10:bb:fc:
-         6d:e2:d8:b6:66:27:08:e5:31:4d:fb:24:45:0f:da:7a:9c:8d:
-         e5:91:0c:80:91:1e:44:78:01:28:ca:db:40:87:db:38:0f:18:
-         1a:a9:ff:68:8c:03:b2:89:82:e2:80:ee:3c:77:e2:4e:85:a5:
-         cf:72:3f:24
+         41:60:3c:a8:ae:a7:cf:56:c3:bd:40:b1:ce:ea:68:bf:0b:04:
+         39:a0:f2:2b:41:f3:30:33:c2:35:4b:bd:84:da:6a:47:72:ef:
+         5b:fa:1e:e9:a9:2b:8c:1a:a0:48:21:20:9d:a2:1b:14:48:51:
+         86:a0:a8:5f:36:5e:bd:0a:17:f4:a2:49:c7:7e:b7:dc:9c:04:
+         0b:c0:92:2b:f6:de:db:21:b6:7a:b2:bc:7c:5d:cb:22:6c:61:
+         b0:83:84:d2:86:98:4a:20:7d:f3:cd:48:e3:30:00:70:f9:25:
+         ed:15:71:7f:27:8e:cd:4b:f8:34:42:23:90:b0:1e:2a:c7:58:
+         c2:74:fc:a8:34:02:04:fa:60:14:b4:68:18:3b:9d:c0:d3:77:
+         ec:86:b8:43:ad:37:80:2d:13:b4:d7:a9:ad:26:25:ef:30:2a:
+         0c:c4:2b:24:0b:05:f4:3b:77:e6:2f:d7:e2:8b:5d:d2:b2:2a:
+         55:bc:c9:e7:68:6c:68:49:9b:1f:6f:d4:02:21:18:ad:c8:d5:
+         4a:03:1b:aa:96:f1:8e:46:af:4a:40:24:4e:e7:db:e5:72:e4:
+         29:0c:13:85:19:74:ef:a6:68:8c:47:d4:b9:d4:79:6b:62:e0:
+         5b:55:68:2a:27:0e:14:1c:43:f7:ce:be:33:e9:a4:73:f3:03:
+         49:2b:4f:be
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAts9XpW58
-mnjywb2Z63yvasg4Lo7P5SDA+Vdc4oMpMyyxnSuRzkzaJ2JfGAio8QPrDr7yHgCM
-Y/KP08Hk3wrT1IINbMSYh+tbgWZD8zhe1IuRR3CLiZCgC51jVk9YS+I24ZffN3F6
-kPViLD5XcWp12xBmIkz96aB4XkzjjNXCyaAQPey9e3afX1Tjw4ib13+MgHmHDzyq
-KNn1Y+jzpWsr4EUcr5QAhLTk/DpdnLwFwgS3OiOEVmaiUPyNAAZSf6LTngv61bob
-HhDpE2BWps2rZ5BmDD1xwEZCE0h0qKhtDKhte2tX8brAxcjN2XUg01ntMu1ctmO0
-mws6BXutOHDkPQIDAQABo4HLMIHIMB0GA1UdDgQWBBTMEYj/334UBge1ELbBvMsr
-ZfyDdzAfBgNVHSMEGDAWgBSnJtsLA+YLMguMNK3OYM1MiZtZbjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr87RV3Sq
+JmVndunTUxLVZtOYxoRvtcy9jrUIwkkGxwyNbjwEWpKMz7g6JZl+hKpgz/+h250m
+O2A2ad7pYTTMyUuGLwAXDuMwPfO18XSzjSqOE/sWFvCnsQcLzMk/8+4tXz1g7uax
+2PfW1jBJRFK+Qb0snSHwZ27tSzy4x9h7jZQ3PGLnLTABp1sABQuYYhp5wJSNkHQl
+A1j2QrZMjIPd96iilphmulKi5XBMsQBOzyQQQC9cyjyAH9RcIx0LCDTXNiPgUM/q
+EAlJ/4aBVh9FZKVRmIxgc/abrMUy+4jD3EaBMywjfoCcIvX3i+LK0h6ix9qIvuob
+ywUsWTlIQLezjwIDAQABo4HLMIHIMB0GA1UdDgQWBBQoAomIWZBJWGwrxwUsQTts
+XkWCXjAfBgNVHSMEGDAWgBS70dVURVLtA0D+zZpPZpAJKA6mXzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AGkQ1cP/8GXGeVW+umt8f0miR7DX6SifFPYRatcf4xEwwdAMIYyzIZXB8y58ijT2
-1sdJmnVMkzXEiPe+1u3gdSIpTQ9ZgBobm6T9hq8edkQD+ULydB5rdPz6ZGczShST
-/IQfkgxirKrh8G8+CZDVZ2gqKJxfhimNSO8+pUhgCLXPrLr/utd9mo60YxDjFBIS
-iTcAQvtM5bcN5bgoW595SKrk7xfs6/HDgtlI7M309x+P4p7scaZ6zsD8FI9IF1YQ
-Aieq2RC7/G3i2LZmJwjlMU37JEUP2nqcjeWRDICRHkR4ASjK20CH2zgPGBqp/2iM
-A7KJguKA7jx34k6Fpc9yPyQ=
+AEFgPKiup89Ww71Asc7qaL8LBDmg8itB8zAzwjVLvYTaakdy71v6HumpK4waoEgh
+IJ2iGxRIUYagqF82Xr0KF/SiScd+t9ycBAvAkiv23tshtnqyvHxdyyJsYbCDhNKG
+mEogffPNSOMwAHD5Je0VcX8njs1L+DRCI5CwHirHWMJ0/Kg0AgT6YBS0aBg7ncDT
+d+yGuEOtN4AtE7TXqa0mJe8wKgzEKyQLBfQ7d+Yv1+KLXdKyKlW8yedobGhJmx9v
+1AIhGK3I1UoDG6qW8Y5Gr0pAJE7n2+Vy5CkME4UZdO+maIxH1LnUeWti4FtVaCon
+DhQcQ/fOvjPppHPzA0krT74=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a6:2e:77:a3:0d:0b:86:02:e4:79:46:6d:76:0e:
-                    de:ba:55:19:76:07:90:e5:7a:4b:9a:99:70:f2:91:
-                    f2:28:94:e7:e0:8b:aa:c4:a5:c1:82:36:d8:30:be:
-                    84:43:45:ae:2a:60:e7:fe:d4:a0:a1:a7:e9:30:56:
-                    d0:c9:5d:f8:5f:86:9c:ba:c9:ad:cc:29:77:15:0c:
-                    e8:7b:78:52:42:ec:69:db:db:38:d6:f5:25:75:50:
-                    6f:21:a0:9a:b2:4e:3a:33:6c:47:60:b2:a4:e7:ec:
-                    bc:c0:9f:d7:46:1b:bb:82:43:2a:22:6d:fb:65:0d:
-                    b5:cf:48:b9:a6:e3:2b:26:77:32:db:a6:80:b6:a7:
-                    63:f5:b9:d7:bf:f3:37:bd:2b:88:15:b5:50:06:0c:
-                    c9:6f:05:2b:97:ac:ff:01:d9:9e:55:b8:2d:90:62:
-                    a4:38:d4:d3:19:87:8f:b0:dd:88:4d:ca:19:f3:c9:
-                    2f:95:22:a8:19:be:98:38:6d:0f:17:65:d7:ee:5b:
-                    82:73:f8:c5:28:43:76:96:a6:ef:00:9c:5e:d0:9d:
-                    cc:52:dc:c8:6c:d6:4a:8e:2c:5a:c0:9b:e0:b4:1b:
-                    f4:5f:43:84:b7:ad:7d:d1:07:c6:79:16:d8:01:c2:
-                    73:e7:ad:dc:4c:d4:a5:bc:ab:99:60:6d:18:34:14:
-                    ed:07
+                    00:b6:f8:c2:50:35:39:c4:ad:3c:b5:81:77:33:8e:
+                    62:aa:ef:55:39:a6:68:1a:00:fb:98:7f:2e:c9:f7:
+                    1c:14:8b:57:ae:ea:a3:30:0d:a6:99:fc:a9:a2:f9:
+                    ca:11:57:2b:64:da:f1:a7:07:ac:68:17:e3:eb:d1:
+                    73:ab:b8:fc:cf:fd:69:02:0f:a0:d0:63:8d:fd:76:
+                    5a:a2:8d:82:6d:0c:94:7a:e2:21:79:01:db:fb:07:
+                    52:4b:bc:b9:b0:b4:16:90:f1:44:53:4b:64:30:d2:
+                    aa:ce:97:ff:2a:cb:d6:46:12:88:28:c5:61:3e:17:
+                    4f:44:9f:a1:a3:ca:51:74:8a:37:e6:4f:a5:58:46:
+                    ff:42:c5:00:20:2a:14:3d:fd:1e:88:c9:5d:9c:a1:
+                    c0:66:5f:53:e4:7f:87:97:e3:45:fb:30:d5:08:67:
+                    fe:7a:c3:1b:ed:0b:c0:d9:31:77:18:9f:98:58:09:
+                    1b:5e:88:08:ce:c0:ba:92:bd:ca:7f:ce:3d:68:cc:
+                    7c:14:4b:08:ba:d0:89:c1:8d:78:d5:55:bd:1f:af:
+                    0d:70:4e:24:7f:c8:3a:e6:57:86:57:a7:8a:5c:c4:
+                    b1:b2:5e:5f:3e:16:b8:5a:bb:d4:20:82:2d:a2:d7:
+                    5b:35:05:18:a5:f7:f3:96:8e:ab:22:b4:dd:1a:d7:
+                    bd:93
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                60:21:11:AF:90:99:E9:F8:9A:0B:80:16:9C:63:C3:DC:45:08:84:91
+                6A:92:E0:5C:B1:19:9D:04:CA:11:A8:53:24:59:A3:3F:75:3F:0F:BD
             X509v3 Authority Key Identifier: 
-                keyid:60:21:11:AF:90:99:E9:F8:9A:0B:80:16:9C:63:C3:DC:45:08:84:91
+                keyid:6A:92:E0:5C:B1:19:9D:04:CA:11:A8:53:24:59:A3:3F:75:3F:0F:BD
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/BogusRoot.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         97:aa:1c:16:64:05:60:ea:e0:5b:ae:7e:31:f3:6e:04:07:fe:
-         ba:34:6d:fd:b3:c9:74:d1:f8:b4:da:c2:97:1e:00:da:05:b6:
-         08:de:e3:8e:6e:5e:a9:9b:15:62:41:0b:2f:d2:bc:24:4a:47:
-         e9:7a:0c:6b:ba:c9:04:7c:82:ea:c5:89:5c:03:6f:8a:e6:a1:
-         13:4c:02:1a:5b:2e:ae:48:8b:16:f5:6d:01:89:89:66:29:06:
-         40:49:fe:b9:51:19:9e:ea:6d:76:ce:a7:78:7e:72:bf:04:4c:
-         bf:f6:17:b0:bc:79:3e:67:47:89:ec:d9:07:40:55:6e:5b:7c:
-         79:6e:7f:97:e9:1b:d3:df:b6:54:e5:53:44:32:e2:39:17:ea:
-         17:be:6c:82:8a:b6:c2:6a:b4:c5:b7:8c:6d:38:34:b4:b8:27:
-         66:1f:4f:70:1d:65:77:6c:73:d8:69:24:6f:06:09:d4:f9:a9:
-         7a:eb:47:cb:9b:3e:ec:42:89:2e:f4:2b:20:36:f1:fc:70:e2:
-         3b:83:0a:e0:3a:04:1e:bf:53:cb:b6:ca:fe:2f:25:d5:c6:aa:
-         71:39:a9:8e:25:4a:75:bb:15:fc:29:4f:ba:d6:a9:02:c7:8d:
-         d8:06:48:aa:6d:0b:34:bd:36:19:ea:87:a9:50:e5:a8:d8:31:
-         73:a2:30:44
+         26:e0:77:eb:1a:b0:5b:c6:64:45:f3:b8:e7:93:dc:a5:fd:0a:
+         70:b8:3a:de:eb:a3:84:6b:49:1e:34:f0:22:c3:6b:f7:06:eb:
+         5b:5d:5d:a5:58:10:4b:b8:20:db:8c:ad:41:6f:30:63:09:b6:
+         e9:3a:a3:5e:80:b5:74:42:e0:64:ab:dd:23:16:ff:fa:a8:3f:
+         d1:d2:25:cc:88:48:c8:79:8e:01:b4:b0:32:27:74:b9:2c:67:
+         28:05:c2:b7:18:e2:52:0d:ff:ed:a1:43:fc:ff:d4:f0:d0:7b:
+         14:aa:e6:6f:cf:b4:e4:83:30:97:67:cd:46:6b:15:d2:80:07:
+         0a:d5:e7:6f:9e:59:21:07:57:43:c7:f2:bc:2b:d2:e0:31:77:
+         46:92:64:39:cc:fe:30:b0:9e:c2:19:31:cd:66:6a:2d:44:35:
+         8c:b9:00:b0:6a:85:71:0e:d2:a7:a1:5e:89:70:82:3e:de:f3:
+         83:c8:e3:14:4b:c6:21:b9:c6:b7:43:86:37:19:11:28:fc:3b:
+         f5:99:e8:5f:46:1b:32:57:68:69:0b:37:30:10:41:91:70:04:
+         52:ea:e4:71:70:28:8a:91:69:03:f1:f4:3e:96:31:81:bc:51:
+         8a:a6:79:7f:1f:32:99:f5:d5:79:d9:82:5b:88:0a:d4:c9:b7:
+         b9:15:9f:e8
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDeTCCAmGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAlCb2d1
 c1Jvb3QwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjAUMRIwEAYDVQQD
-DAlCb2d1c1Jvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmLnej
-DQuGAuR5Rm12Dt66VRl2B5DlekuamXDykfIolOfgi6rEpcGCNtgwvoRDRa4qYOf+
-1KChp+kwVtDJXfhfhpy6ya3MKXcVDOh7eFJC7Gnb2zjW9SV1UG8hoJqyTjozbEdg
-sqTn7LzAn9dGG7uCQyoibftlDbXPSLmm4ysmdzLbpoC2p2P1ude/8ze9K4gVtVAG
-DMlvBSuXrP8B2Z5VuC2QYqQ41NMZh4+w3YhNyhnzyS+VIqgZvpg4bQ8XZdfuW4Jz
-+MUoQ3aWpu8AnF7QncxS3Mhs1kqOLFrAm+C0G/RfQ4S3rX3RB8Z5FtgBwnPnrdxM
-1KW8q5lgbRg0FO0HAgMBAAGjgdUwgdIwHQYDVR0OBBYEFGAhEa+Qmen4mguAFpxj
-w9xFCISRMB8GA1UdIwQYMBaAFGAhEa+Qmen4mguAFpxjw9xFCISRMDwGCCsGAQUF
+DAlCb2d1c1Jvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2+MJQ
+NTnErTy1gXczjmKq71U5pmgaAPuYfy7J9xwUi1eu6qMwDaaZ/Kmi+coRVytk2vGn
+B6xoF+Pr0XOruPzP/WkCD6DQY439dlqijYJtDJR64iF5Adv7B1JLvLmwtBaQ8URT
+S2Qw0qrOl/8qy9ZGEogoxWE+F09En6GjylF0ijfmT6VYRv9CxQAgKhQ9/R6IyV2c
+ocBmX1Pkf4eX40X7MNUIZ/56wxvtC8DZMXcYn5hYCRteiAjOwLqSvcp/zj1ozHwU
+Swi60InBjXjVVb0frw1wTiR/yDrmV4ZXp4pcxLGyXl8+Frhau9Qggi2i11s1BRil
+9/OWjqsitN0a172TAgMBAAGjgdUwgdIwHQYDVR0OBBYEFGqS4FyxGZ0EyhGoUyRZ
+oz91Pw+9MB8GA1UdIwQYMBaAFGqS4FyxGZ0EyhGoUyRZoz91Pw+9MDwGCCsGAQUF
 BwEBBDAwLjAsBggrBgEFBQcwAoYgaHR0cDovL3VybC1mb3ItYWlhL0JvZ3VzUm9v
 dC5jZXIwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL3VybC1mb3ItY3JsL0JvZ3Vz
 Um9vdC5jcmwwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
-hvcNAQELBQADggEBAJeqHBZkBWDq4FuufjHzbgQH/ro0bf2zyXTR+LTawpceANoF
-tgje445uXqmbFWJBCy/SvCRKR+l6DGu6yQR8gurFiVwDb4rmoRNMAhpbLq5Iixb1
-bQGJiWYpBkBJ/rlRGZ7qbXbOp3h+cr8ETL/2F7C8eT5nR4ns2QdAVW5bfHluf5fp
-G9PftlTlU0Qy4jkX6he+bIKKtsJqtMW3jG04NLS4J2YfT3AdZXdsc9hpJG8GCdT5
-qXrrR8ubPuxCiS70KyA28fxw4juDCuA6BB6/U8u2yv4vJdXGqnE5qY4lSnW7Ffwp
-T7rWqQLHjdgGSKptCzS9Nhnqh6lQ5ajYMXOiMEQ=
+hvcNAQELBQADggEBACbgd+sasFvGZEXzuOeT3KX9CnC4Ot7ro4RrSR408CLDa/cG
+61tdXaVYEEu4INuMrUFvMGMJtuk6o16AtXRC4GSr3SMW//qoP9HSJcyISMh5jgG0
+sDIndLksZygFwrcY4lIN/+2hQ/z/1PDQexSq5m/PtOSDMJdnzUZrFdKABwrV52+e
+WSEHV0PH8rwr0uAxd0aSZDnM/jCwnsIZMc1mai1ENYy5ALBqhXEO0qehXolwgj7e
+84PI4xRLxiG5xrdDhjcZESj8O/WZ6F9GGzJXaGkLNzAQQZFwBFLq5HFwKIqRaQPx
+9D6WMYG8UYqmeX8fMpn11XnZgluICtTJt7kVn+g=
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Signature verification failed
 ERROR: VerifySignedData failed
diff --git a/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem b/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem
index ccb91e6..0568376 100644
--- a/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem
+++ b/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b7:1c:6d:3b:54:28:d0:fa:14:25:fe:22:77:55:
-                    16:d3:25:34:af:cd:e7:5a:8a:38:4b:82:99:95:6d:
-                    e1:99:f7:f3:1d:53:2d:8e:90:b2:d5:4e:7e:e7:0c:
-                    9d:73:98:5e:3b:ed:bc:4f:fe:c7:38:f7:8a:ce:b7:
-                    08:0f:bd:78:18:9a:ec:f2:21:9e:25:ba:bc:24:3f:
-                    22:73:60:f7:2c:fa:9a:e9:aa:f8:75:65:4e:af:4e:
-                    d9:01:f3:27:3e:c8:f5:b5:27:98:bd:a2:f6:34:ad:
-                    70:c8:5e:fb:3f:87:08:dc:d0:a6:30:c1:35:ee:95:
-                    7b:f2:7a:59:03:7e:03:39:fb:51:be:b3:13:54:cc:
-                    15:68:e1:b7:97:40:cf:e4:ff:84:a2:10:75:6d:d5:
-                    29:f8:91:8d:38:0a:92:c6:34:89:89:c2:d4:49:84:
-                    35:94:f9:08:ad:8c:44:10:3e:49:40:21:53:bb:6e:
-                    1b:20:1c:ce:e3:c8:a7:c7:e9:ab:4f:3f:f2:21:47:
-                    3a:d5:0a:59:6f:a9:59:42:ff:c5:7c:6a:c5:fc:79:
-                    29:05:a0:07:47:64:39:d0:bc:a1:86:64:c8:4c:08:
-                    ec:f2:03:47:7c:00:ce:02:ff:5a:02:59:d3:ee:2c:
-                    db:35:32:e9:24:a2:c2:f8:50:c8:3e:10:b1:dd:0a:
-                    5d:1b
+                    00:eb:2f:b6:14:8e:0e:51:b5:d4:2f:0d:ff:fd:3b:
+                    e1:3b:c3:a1:2e:a4:4f:b2:c8:98:3f:95:c3:41:18:
+                    7e:04:f1:03:26:cd:f4:80:4e:82:3c:d2:e9:3c:53:
+                    7f:b6:ab:34:34:a2:e3:31:80:09:d3:07:4c:c4:ac:
+                    b8:59:e2:36:ac:59:f5:10:59:b4:94:71:a3:aa:3b:
+                    82:fb:98:83:22:3a:81:28:07:eb:df:c1:eb:95:15:
+                    13:7a:3f:31:fc:64:2c:c1:e3:2b:64:4c:34:af:21:
+                    e9:dd:0d:88:00:38:10:87:67:9e:a9:1f:01:32:c6:
+                    24:61:86:20:36:ac:8c:95:30:98:9b:4f:f7:2b:c2:
+                    67:43:fb:6a:8e:7e:a2:4b:34:cd:05:60:67:f3:16:
+                    df:c9:53:de:4e:70:91:d3:ff:1a:c6:81:82:48:01:
+                    3e:a1:f5:89:13:97:fd:41:fb:f0:19:12:90:08:f7:
+                    5b:9e:79:a6:c9:11:73:be:98:9f:cd:06:dc:09:30:
+                    b1:55:90:eb:c5:7c:5a:7c:69:18:75:99:99:07:e8:
+                    95:0d:2f:31:b1:68:fe:f9:2e:2b:da:88:61:5f:0f:
+                    1e:fa:d0:3c:43:64:c8:65:1b:6d:8e:b7:89:24:79:
+                    e5:80:41:de:9b:22:ce:c5:bc:bd:1a:9f:f8:9f:43:
+                    16:f9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                03:34:C9:78:9C:53:67:7A:2C:96:D9:3F:63:F2:18:3D:49:A8:44:87
+                F2:AE:16:44:FF:CD:C4:8A:12:A7:83:1A:6F:ED:96:E6:83:92:AD:B2
             X509v3 Authority Key Identifier: 
-                keyid:9C:93:40:54:48:97:2B:0C:3B:AF:CE:5C:79:97:26:EC:32:33:4C:FB
+                keyid:CC:76:BA:62:45:30:8F:0C:F1:16:BF:97:D6:1E:5F:0D:4A:E8:04:C4
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         72:78:37:46:b3:e3:d4:01:73:3a:59:1c:5f:13:27:10:46:dd:
-         ec:b1:9e:7c:6d:d8:a7:ac:b1:62:36:57:2a:44:17:d4:64:22:
-         18:67:ae:84:0b:6b:53:49:76:15:a3:d3:7e:69:ae:d4:54:5d:
-         46:11:0a:15:1c:ee:91:ab:da:6a:88:24:b0:ae:21:ee:a2:e6:
-         de:c4:cb:79:93:62:18:7d:4e:ee:d8:83:7d:65:63:f3:9c:08:
-         ca:28:5c:af:51:9f:36:b2:c3:06:3c:ec:cf:35:84:c5:9e:bc:
-         75:03:be:e5:23:4e:7f:67:7d:86:14:df:21:4d:5e:d3:b7:86:
-         d6:14:cd:84:3a:3d:29:4f:de:e5:db:ac:96:a9:58:cf:02:e4:
-         c4:b1:26:08:34:f5:a4:3f:47:a1:0f:b3:0b:69:29:78:50:ba:
-         a9:eb:4a:44:fc:e7:bf:e9:ce:ba:8b:dc:b9:6a:25:c6:11:32:
-         24:a0:59:7c:6e:4d:6c:cf:1b:f2:06:0f:5f:d7:4d:35:b1:f9:
-         a2:f7:c4:b0:b4:bb:ab:58:b5:ba:09:39:0d:50:d9:c2:a4:eb:
-         d9:79:23:40:ed:51:97:75:de:f5:14:c0:dc:ea:9f:6a:80:70:
-         ef:4e:b8:52:26:46:fc:70:e8:83:9c:2c:e8:63:b0:7f:81:a3:
-         4e:91:35:02
+         7f:a6:0e:b1:4a:2e:21:e7:f5:d6:a7:3c:c8:47:c1:89:4d:1c:
+         e4:51:c2:3e:ba:7c:05:aa:ca:73:55:34:fc:e1:12:06:c3:26:
+         6d:4e:22:53:71:b4:d4:55:1c:a4:86:5e:61:68:00:78:84:18:
+         c3:8e:e1:c0:42:fe:7e:ed:57:be:4e:5b:e9:4b:8e:ce:8a:f4:
+         93:7d:0d:73:4d:0c:7c:af:ac:14:bc:43:e3:6c:c5:bf:d8:1a:
+         b8:15:55:98:27:9c:a2:a8:34:9e:64:1e:4a:f2:a2:82:60:36:
+         57:ec:ab:8b:1e:17:0d:b8:82:32:ed:8e:c0:71:4c:27:94:6e:
+         fc:74:5a:9e:d2:a3:47:11:d2:cb:2b:da:ca:fd:37:fc:33:1e:
+         8d:a1:46:dd:3d:70:f9:d5:98:e1:4d:1b:09:44:2c:79:4e:db:
+         39:25:8b:9f:97:9e:f7:11:4a:6d:e4:dc:fb:54:02:dd:39:a4:
+         94:56:2b:e8:8d:18:21:a0:f3:91:cf:88:c2:2d:ac:2e:24:b3:
+         d1:ff:39:1d:94:f3:8a:ca:ea:5b:cb:bc:11:03:01:ad:8c:cb:
+         17:f5:8c:29:63:04:eb:52:9b:b8:a0:a2:2c:c5:d2:be:bc:fb:
+         64:26:5e:01:a8:db:2e:dc:56:9c:88:0a:17:b4:76:47:14:1e:
+         63:1f:49:69
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3HG07
-VCjQ+hQl/iJ3VRbTJTSvzedaijhLgpmVbeGZ9/MdUy2OkLLVTn7nDJ1zmF477bxP
-/sc494rOtwgPvXgYmuzyIZ4lurwkPyJzYPcs+prpqvh1ZU6vTtkB8yc+yPW1J5i9
-ovY0rXDIXvs/hwjc0KYwwTXulXvyelkDfgM5+1G+sxNUzBVo4beXQM/k/4SiEHVt
-1Sn4kY04CpLGNImJwtRJhDWU+QitjEQQPklAIVO7bhsgHM7jyKfH6atPP/IhRzrV
-CllvqVlC/8V8asX8eSkFoAdHZDnQvKGGZMhMCOzyA0d8AM4C/1oCWdPuLNs1Mukk
-osL4UMg+ELHdCl0bAgMBAAGjgekwgeYwHQYDVR0OBBYEFAM0yXicU2d6LJbZP2Py
-GD1JqESHMB8GA1UdIwQYMBaAFJyTQFRIlysMO6/OXHmXJuwyM0z7MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrL7YU
+jg5RtdQvDf/9O+E7w6EupE+yyJg/lcNBGH4E8QMmzfSAToI80uk8U3+2qzQ0ouMx
+gAnTB0zErLhZ4jasWfUQWbSUcaOqO4L7mIMiOoEoB+vfweuVFRN6PzH8ZCzB4ytk
+TDSvIendDYgAOBCHZ56pHwEyxiRhhiA2rIyVMJibT/crwmdD+2qOfqJLNM0FYGfz
+Ft/JU95OcJHT/xrGgYJIAT6h9YkTl/1B+/AZEpAI91ueeabJEXO+mJ/NBtwJMLFV
+kOvFfFp8aRh1mZkH6JUNLzGxaP75LivaiGFfDx760DxDZMhlG22Ot4kkeeWAQd6b
+Is7FvL0an/ifQxb5AgMBAAGjgekwgeYwHQYDVR0OBBYEFPKuFkT/zcSKEqeDGm/t
+luaDkq2yMB8GA1UdIwQYMBaAFMx2umJFMI8M8Ra/l9YeXw1K6ATEMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAcng3RrPj1AFzOlkcXxMn
-EEbd7LGefG3Yp6yxYjZXKkQX1GQiGGeuhAtrU0l2FaPTfmmu1FRdRhEKFRzukava
-aogksK4h7qLm3sTLeZNiGH1O7tiDfWVj85wIyihcr1GfNrLDBjzszzWExZ68dQO+
-5SNOf2d9hhTfIU1e07eG1hTNhDo9KU/e5duslqlYzwLkxLEmCDT1pD9HoQ+zC2kp
-eFC6qetKRPznv+nOuovcuWolxhEyJKBZfG5NbM8b8gYPX9dNNbH5ovfEsLS7q1i1
-ugk5DVDZwqTr2XkjQO1Rl3Xe9RTA3OqfaoBw7064UiZG/HDog5ws6GOwf4GjTpE1
-Ag==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAf6YOsUouIef11qc8yEfB
+iU0c5FHCPrp8BarKc1U0/OESBsMmbU4iU3G01FUcpIZeYWgAeIQYw47hwEL+fu1X
+vk5b6UuOzor0k30Nc00MfK+sFLxD42zFv9gauBVVmCecoqg0nmQeSvKigmA2V+yr
+ix4XDbiCMu2OwHFMJ5Ru/HRantKjRxHSyyvayv03/DMejaFG3T1w+dWY4U0bCUQs
+eU7bOSWLn5ee9xFKbeTc+1QC3TmklFYr6I0YIaDzkc+Iwi2sLiSz0f85HZTzisrq
+W8u8EQMBrYzLF/WMKWME61KbuKCiLMXSvrz7ZCZeAajbLtxWnIgKF7R2RxQeYx9J
+aQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c6:22:75:92:c4:7c:6f:77:4d:46:f7:17:84:1b:
-                    e2:08:1f:ff:71:7e:4d:6d:a4:e7:0f:58:46:84:61:
-                    22:02:70:4e:b8:45:3a:e2:10:d1:cf:ff:91:7c:12:
-                    8e:7d:19:ab:0a:46:ac:1b:d6:d6:05:b6:99:43:9b:
-                    ab:e5:cf:ee:62:e9:94:21:84:72:5b:63:6e:5a:e1:
-                    25:42:c3:b7:ee:31:5f:e0:e7:69:19:01:a2:d5:54:
-                    70:f8:aa:aa:24:5b:3b:4d:2b:cd:2f:e4:2a:a4:be:
-                    ba:2f:ab:a2:b6:f8:84:71:f3:23:bc:12:68:26:1e:
-                    49:d0:87:3e:46:46:33:47:70:f2:42:d4:3f:ba:9c:
-                    89:7d:4f:6e:a5:35:cf:d9:46:a8:63:c4:35:4a:e7:
-                    4f:f2:e0:51:90:8e:08:ed:2e:ae:18:ac:5d:16:44:
-                    25:32:fa:1b:3c:14:e9:37:69:9f:72:48:01:a5:1b:
-                    f3:e1:e7:75:ec:ca:92:83:48:a4:67:e1:8d:c1:dd:
-                    15:02:e4:4a:82:93:d3:f3:27:9e:66:ce:a8:3a:17:
-                    d2:c6:a7:08:31:ba:d2:e8:e7:fa:53:b6:4f:09:d8:
-                    7e:e4:53:b2:f1:03:d9:c4:31:0c:6d:32:a0:9d:08:
-                    d3:c4:bb:db:45:11:68:80:ba:f8:52:dc:19:9e:67:
-                    68:99
+                    00:c0:60:da:db:95:0d:0b:bd:bf:0d:7f:af:a5:83:
+                    43:5e:08:ac:12:17:cd:f2:fd:70:3e:b5:33:7d:ce:
+                    a7:1d:e9:4a:88:0c:83:76:71:78:38:65:91:76:70:
+                    f8:8e:be:d0:cf:8f:41:82:0c:96:95:f8:90:fe:d2:
+                    a6:99:58:07:f6:41:b2:eb:b0:41:8e:e2:7b:c2:26:
+                    34:54:98:2e:c9:8d:df:98:1c:08:58:26:a6:9f:a2:
+                    84:0e:90:1c:2d:7d:e5:01:bb:c0:cc:d1:06:b5:f3:
+                    4d:61:8d:dd:cf:3c:ca:af:ac:97:c4:98:d4:4f:1c:
+                    81:61:28:5c:08:77:bb:d2:b7:01:3c:e3:eb:78:95:
+                    ad:0e:aa:14:18:6a:71:21:e2:12:45:df:e1:33:03:
+                    03:de:2c:bc:9f:97:02:c6:cc:e0:fb:7c:05:37:6c:
+                    ed:4c:84:08:b0:bc:31:a3:cd:4a:8f:1c:f6:a4:2b:
+                    44:fa:7e:29:bd:41:76:b8:6b:cd:b4:cc:3d:1c:a1:
+                    01:27:2a:e9:64:cf:4e:97:34:00:15:18:5b:dc:53:
+                    a9:c5:c1:56:85:45:0e:e7:19:f5:b7:13:89:bc:7d:
+                    b5:7e:59:13:13:c9:dc:a0:11:13:98:1c:e5:e8:f7:
+                    be:37:84:99:ba:8c:22:3c:c4:59:4d:98:53:41:96:
+                    6e:27
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9C:93:40:54:48:97:2B:0C:3B:AF:CE:5C:79:97:26:EC:32:33:4C:FB
+                CC:76:BA:62:45:30:8F:0C:F1:16:BF:97:D6:1E:5F:0D:4A:E8:04:C4
             X509v3 Authority Key Identifier: 
-                keyid:6F:25:CD:4D:1F:09:D0:5A:D5:3A:23:08:72:F1:9D:08:8A:1D:CA:34
+                keyid:C6:71:71:41:0E:54:09:71:C4:D2:63:01:B4:56:E1:D4:F0:3C:52:B3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:FALSE
     Signature Algorithm: sha256WithRSAEncryption
-         14:4a:f9:6f:29:a6:a1:1b:2b:d7:3d:5d:14:83:05:1a:46:ac:
-         73:64:d5:b7:09:87:0f:08:1d:b2:ac:1c:db:79:05:e4:62:fa:
-         37:7d:78:82:c9:7c:44:f3:01:9a:a6:31:78:ac:af:1e:53:9e:
-         84:ab:95:f0:2e:48:62:d6:3e:a3:95:35:1e:18:c6:9e:0d:15:
-         9e:94:0f:bd:8c:1b:f6:de:48:d8:cd:7c:9b:23:4d:bb:d0:f6:
-         df:bb:27:a6:55:82:07:3e:27:2e:80:6e:b3:67:06:67:6d:b6:
-         f8:5f:60:58:ab:d8:9d:f6:4b:6b:a8:9a:be:9e:c3:69:e8:15:
-         00:61:9f:b2:24:6d:bd:d5:e3:7e:c7:83:66:4e:12:58:b7:c1:
-         c1:0e:de:1a:dc:ae:4d:19:78:b8:6c:48:fb:5b:fc:a2:86:0b:
-         60:77:d7:cb:d6:e6:c9:13:5f:cf:d6:98:6c:ab:9e:9b:9d:99:
-         4c:87:91:3e:d1:4a:ad:ef:84:f6:45:cc:da:99:fa:ff:57:df:
-         be:44:70:f9:0c:38:63:c0:31:44:45:05:46:9a:63:db:dd:a0:
-         f5:dc:1b:f8:51:d8:30:e5:47:23:29:d1:79:a5:e6:1e:87:2b:
-         c3:f8:0e:fe:de:13:bb:cd:a5:14:f3:d8:0b:34:73:47:68:07:
-         8a:ac:e0:65
+         11:24:4f:5a:a7:66:92:de:89:08:f6:49:7d:0c:76:be:e2:5f:
+         2f:1c:9d:f1:69:8a:f5:f7:5b:3b:24:83:40:51:06:67:61:40:
+         e0:5a:64:26:70:53:3b:17:78:b4:07:3a:7c:b9:6a:44:88:f3:
+         4f:2f:27:d1:1c:40:95:c4:0f:47:90:ee:da:87:f1:82:78:72:
+         3f:86:f2:7e:2e:b4:d3:18:02:48:dd:a5:6f:5f:ac:a2:c0:f0:
+         f6:50:6d:66:da:6f:8d:9b:b4:ce:df:fa:4f:13:e6:d3:c3:fd:
+         ff:f5:72:fc:65:b8:78:19:b9:d5:00:d0:13:00:1d:1e:28:05:
+         cc:dd:02:0d:48:20:24:b2:3a:1b:89:34:de:d9:24:fb:42:7f:
+         8a:5a:97:23:04:00:5e:8a:eb:2f:39:c0:e6:dc:c7:1b:d9:be:
+         12:df:1e:e9:62:9b:ff:cd:95:0e:9a:20:1b:6f:ae:e7:9f:33:
+         78:95:9c:c8:1d:a2:9b:6e:52:ff:8a:85:94:4a:d5:98:40:a0:
+         3e:ab:3a:a6:6f:21:ce:ef:06:5c:54:71:00:30:d0:aa:a6:25:
+         dc:44:fc:75:ca:77:c4:84:50:4f:3b:f5:c4:b3:fc:31:00:fb:
+         c2:f7:4b:6a:3b:7a:7c:34:89:fa:58:62:b3:a3:66:ea:b1:37:
+         38:e1:24:49
 -----BEGIN CERTIFICATE-----
 MIIDajCCAlKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxiJ1ksR8
-b3dNRvcXhBviCB//cX5NbaTnD1hGhGEiAnBOuEU64hDRz/+RfBKOfRmrCkasG9bW
-BbaZQ5ur5c/uYumUIYRyW2NuWuElQsO37jFf4OdpGQGi1VRw+KqqJFs7TSvNL+Qq
-pL66L6uitviEcfMjvBJoJh5J0Ic+RkYzR3DyQtQ/upyJfU9upTXP2UaoY8Q1SudP
-8uBRkI4I7S6uGKxdFkQlMvobPBTpN2mfckgBpRvz4ed17MqSg0ikZ+GNwd0VAuRK
-gpPT8yeeZs6oOhfSxqcIMbrS6Of6U7ZPCdh+5FOy8QPZxDEMbTKgnQjTxLvbRRFo
-gLr4UtwZnmdomQIDAQABo4HIMIHFMB0GA1UdDgQWBBSck0BUSJcrDDuvzlx5lybs
-MjNM+zAfBgNVHSMEGDAWgBRvJc1NHwnQWtU6Iwhy8Z0Iih3KNDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwGDa25UN
+C72/DX+vpYNDXgisEhfN8v1wPrUzfc6nHelKiAyDdnF4OGWRdnD4jr7Qz49BggyW
+lfiQ/tKmmVgH9kGy67BBjuJ7wiY0VJguyY3fmBwIWCamn6KEDpAcLX3lAbvAzNEG
+tfNNYY3dzzzKr6yXxJjUTxyBYShcCHe70rcBPOPreJWtDqoUGGpxIeISRd/hMwMD
+3iy8n5cCxszg+3wFN2ztTIQIsLwxo81Kjxz2pCtE+n4pvUF2uGvNtMw9HKEBJyrp
+ZM9OlzQAFRhb3FOpxcFWhUUO5xn1txOJvH21flkTE8ncoBETmBzl6Pe+N4SZuowi
+PMRZTZhTQZZuJwIDAQABo4HIMIHFMB0GA1UdDgQWBBTMdrpiRTCPDPEWv5fWHl8N
+SugExDAfBgNVHSMEGDAWgBTGcXFBDlQJccTSYwG0VuHU8DxSszA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBABRK
-+W8ppqEbK9c9XRSDBRpGrHNk1bcJhw8IHbKsHNt5BeRi+jd9eILJfETzAZqmMXis
-rx5TnoSrlfAuSGLWPqOVNR4Yxp4NFZ6UD72MG/beSNjNfJsjTbvQ9t+7J6ZVggc+
-Jy6AbrNnBmdttvhfYFir2J32S2uomr6ew2noFQBhn7Ikbb3V437Hg2ZOEli3wcEO
-3hrcrk0ZeLhsSPtb/KKGC2B318vW5skTX8/WmGyrnpudmUyHkT7RSq3vhPZFzNqZ
-+v9X375EcPkMOGPAMURFBUaaY9vdoPXcG/hR2DDlRyMp0Xml5h6HK8P4Dv7eE7vN
-pRTz2As0c0doB4qs4GU=
+VR0PAQH/BAQDAgEGMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBABEk
+T1qnZpLeiQj2SX0Mdr7iXy8cnfFpivX3Wzskg0BRBmdhQOBaZCZwUzsXeLQHOny5
+akSI808vJ9EcQJXED0eQ7tqH8YJ4cj+G8n4utNMYAkjdpW9frKLA8PZQbWbab42b
+tM7f+k8T5tPD/f/1cvxluHgZudUA0BMAHR4oBczdAg1IICSyOhuJNN7ZJPtCf4pa
+lyMEAF6K6y85wObcxxvZvhLfHulim//NlQ6aIBtvruefM3iVnMgdoptuUv+KhZRK
+1ZhAoD6rOqZvIc7vBlxUcQAw0KqmJdxE/HXKd8SEUE879cSz/DEA+8L3S2o7enw0
+ifpYYrOjZuqxNzjhJEk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c4:3e:31:36:4f:df:d0:36:0e:06:5c:89:2c:c8:
-                    01:c6:18:a4:e7:1f:82:11:af:30:66:28:7c:c3:14:
-                    b2:ff:a4:6c:6a:c0:f4:ae:58:82:5f:91:e6:78:19:
-                    d7:d2:87:5c:9e:75:3a:af:c0:fd:e8:18:c4:81:b4:
-                    51:be:f7:c3:0d:74:d7:8a:53:01:28:c9:da:93:f4:
-                    a6:da:51:6a:d1:23:78:1b:ab:17:46:e6:bb:71:4e:
-                    33:8b:9d:e1:75:7e:56:3b:00:02:74:fe:1f:49:01:
-                    81:0f:59:05:d6:2a:a0:48:db:9f:fc:29:6e:77:6e:
-                    e3:78:63:4d:12:9f:f5:54:63:a5:1e:b2:c4:83:62:
-                    ac:79:76:bd:80:d9:4c:dd:99:44:91:c3:31:fd:0f:
-                    3a:d8:13:6d:3c:4f:98:5b:50:e0:1a:84:b5:3b:e2:
-                    0f:52:89:7f:b0:de:97:e2:f9:e5:0b:2c:c4:61:9a:
-                    f3:4b:15:e3:f2:a3:30:44:b0:d4:a6:1a:dd:60:c0:
-                    85:21:30:ed:b5:1e:6f:9f:50:db:ad:42:a6:3a:04:
-                    7c:3f:ae:94:ed:eb:43:2a:d9:85:c8:1d:72:f4:61:
-                    d5:27:7a:a4:62:93:56:37:4b:4e:d5:44:02:f0:29:
-                    1f:70:2c:76:fb:2f:5b:d4:dc:86:09:03:fe:d9:13:
-                    5f:27
+                    00:be:73:10:40:dd:65:86:31:5c:ae:42:67:6c:47:
+                    fa:1c:5b:c5:22:46:fc:46:75:72:84:52:fe:f2:5a:
+                    fd:96:65:80:75:ba:43:d5:1e:ff:d9:9e:b4:f2:d3:
+                    c5:be:d6:b6:75:c9:33:e8:83:33:77:ec:17:90:e5:
+                    30:56:a3:f3:00:ab:cb:e9:ae:f3:69:04:07:e3:1f:
+                    11:ec:9f:78:b5:81:0a:ae:f5:52:bb:fb:ed:16:b4:
+                    6e:c1:af:ca:0b:be:eb:39:af:d8:97:7d:ef:63:0d:
+                    73:43:60:10:b0:71:9b:78:da:5f:19:a9:49:03:bf:
+                    50:49:f3:8b:2c:93:a4:c0:f8:e5:67:0c:3d:28:9c:
+                    51:f5:95:c9:7f:cc:be:6e:1a:3c:e4:20:cc:11:37:
+                    48:a5:4f:54:36:23:67:80:cf:be:2e:66:d1:a8:d6:
+                    83:cd:9d:40:a3:18:97:97:d5:98:d4:45:09:34:4c:
+                    4d:f3:d1:03:44:90:4a:fd:86:df:9e:92:ba:b1:59:
+                    9e:e1:e1:9d:1b:da:1e:a7:f0:9e:72:98:88:4c:cc:
+                    1d:38:4f:d6:8f:05:53:55:67:31:c3:d1:34:3e:3b:
+                    11:f4:c1:c6:63:77:17:64:dd:c6:b4:ab:bc:fd:c1:
+                    1f:34:59:56:48:53:95:36:97:ca:02:d0:31:da:70:
+                    70:c1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                6F:25:CD:4D:1F:09:D0:5A:D5:3A:23:08:72:F1:9D:08:8A:1D:CA:34
+                C6:71:71:41:0E:54:09:71:C4:D2:63:01:B4:56:E1:D4:F0:3C:52:B3
             X509v3 Authority Key Identifier: 
-                keyid:6F:25:CD:4D:1F:09:D0:5A:D5:3A:23:08:72:F1:9D:08:8A:1D:CA:34
+                keyid:C6:71:71:41:0E:54:09:71:C4:D2:63:01:B4:56:E1:D4:F0:3C:52:B3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         5e:dc:6f:dc:d9:7f:6f:75:c7:c8:27:62:2f:02:7c:c2:26:35:
-         82:6c:5e:93:88:34:9b:e2:fc:8a:89:9e:0a:a0:89:aa:08:e4:
-         1c:59:38:4b:c7:5c:ba:92:d5:ce:1a:b0:30:25:ba:69:c9:52:
-         6e:29:78:31:d6:49:c5:b3:64:e3:49:28:2d:3c:41:8a:10:c4:
-         77:f1:a8:77:37:50:52:ec:ed:bb:1a:61:3f:29:ad:3e:1a:56:
-         06:48:a0:89:17:91:77:67:bc:4d:68:9a:ac:a8:a8:ad:4a:05:
-         2a:33:18:7a:5e:b9:32:f5:c4:7b:c0:23:90:fb:78:9a:0a:18:
-         f3:9b:46:f1:3c:c5:f0:3c:1b:06:56:39:3b:ba:da:5e:7e:5f:
-         42:47:bc:fd:a6:bb:64:2d:db:9a:5b:60:61:e6:9d:a6:ac:c9:
-         24:20:ff:cd:b7:5d:ee:8e:04:92:a1:10:34:26:48:b2:b6:3a:
-         c7:9a:66:2e:f0:64:f0:61:64:ef:28:85:c9:94:46:6b:fb:c5:
-         0f:b9:f5:ef:51:5a:61:be:27:39:00:4c:00:7f:8a:49:14:7b:
-         1a:40:e5:e7:fe:d6:d0:a7:df:33:5c:86:1e:e5:4a:64:ff:e8:
-         8f:1f:9e:3c:d8:a9:a2:d2:0b:c3:53:b7:cf:f6:d1:92:84:be:
-         d9:e6:67:06
+         a0:fe:16:79:26:b5:c1:85:54:21:49:ea:b6:0b:03:14:1f:bb:
+         0c:e2:0c:35:d6:38:b6:0c:3e:39:d5:fb:5c:5d:db:73:99:1c:
+         b7:26:e4:d8:1d:87:59:8c:33:77:e6:58:8b:ec:5c:a6:2d:06:
+         c5:60:7d:c2:b3:dc:96:39:95:9e:12:06:19:2d:80:21:dc:cd:
+         2c:d9:12:b4:9e:fc:e8:47:61:4e:bb:56:c5:19:62:01:bd:e4:
+         70:60:91:6f:c6:5c:c8:e9:c0:af:a0:16:b9:20:cb:eb:19:9d:
+         49:03:52:01:09:4b:7d:f0:20:cc:96:b6:e8:b0:4d:55:65:a9:
+         dd:45:06:25:f6:54:37:8a:7a:81:c6:ce:65:18:99:a2:4b:e5:
+         5a:29:5f:fc:24:6e:07:67:33:dc:70:2e:1f:02:57:53:47:c4:
+         c9:2d:aa:dc:5c:d5:ce:16:30:8d:81:aa:fa:c3:92:cc:b6:a6:
+         fc:cd:e8:d5:90:b6:46:a9:6b:7b:3a:64:1b:e8:a6:d1:b0:24:
+         fd:e1:f5:be:d8:d8:e7:0b:f8:af:8b:9f:47:24:76:65:48:a7:
+         56:40:b2:e3:1a:52:b4:ae:9b:86:01:1f:89:86:0b:c6:dd:1b:
+         16:d2:6a:14:d4:de:35:19:9a:f0:7f:b2:96:56:ee:65:87:58:
+         25:15:98:be
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMQ+MTZP39A2DgZciSzI
-AcYYpOcfghGvMGYofMMUsv+kbGrA9K5Ygl+R5ngZ19KHXJ51Oq/A/egYxIG0Ub73
-ww1014pTASjJ2pP0ptpRatEjeBurF0bmu3FOM4ud4XV+VjsAAnT+H0kBgQ9ZBdYq
-oEjbn/wpbndu43hjTRKf9VRjpR6yxINirHl2vYDZTN2ZRJHDMf0POtgTbTxPmFtQ
-4BqEtTviD1KJf7Del+L55QssxGGa80sV4/KjMESw1KYa3WDAhSEw7bUeb59Q261C
-pjoEfD+ulO3rQyrZhcgdcvRh1Sd6pGKTVjdLTtVEAvApH3AsdvsvW9TchgkD/tkT
-XycCAwEAAaOByzCByDAdBgNVHQ4EFgQUbyXNTR8J0FrVOiMIcvGdCIodyjQwHwYD
-VR0jBBgwFoAUbyXNTR8J0FrVOiMIcvGdCIodyjQwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL5zEEDdZYYxXK5CZ2xH
++hxbxSJG/EZ1coRS/vJa/ZZlgHW6Q9Ue/9metPLTxb7WtnXJM+iDM3fsF5DlMFaj
+8wCry+mu82kEB+MfEeyfeLWBCq71Urv77Ra0bsGvygu+6zmv2Jd972MNc0NgELBx
+m3jaXxmpSQO/UEnziyyTpMD45WcMPSicUfWVyX/Mvm4aPOQgzBE3SKVPVDYjZ4DP
+vi5m0ajWg82dQKMYl5fVmNRFCTRMTfPRA0SQSv2G356SurFZnuHhnRvaHqfwnnKY
+iEzMHThP1o8FU1VnMcPRND47EfTBxmN3F2TdxrSrvP3BHzRZVkhTlTaXygLQMdpw
+cMECAwEAAaOByzCByDAdBgNVHQ4EFgQUxnFxQQ5UCXHE0mMBtFbh1PA8UrMwHwYD
+VR0jBBgwFoAUxnFxQQ5UCXHE0mMBtFbh1PA8UrMwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBe3G/c2X9v
-dcfIJ2IvAnzCJjWCbF6TiDSb4vyKiZ4KoImqCOQcWThLx1y6ktXOGrAwJbppyVJu
-KXgx1knFs2TjSSgtPEGKEMR38ah3N1BS7O27GmE/Ka0+GlYGSKCJF5F3Z7xNaJqs
-qKitSgUqMxh6Xrky9cR7wCOQ+3iaChjzm0bxPMXwPBsGVjk7utpefl9CR7z9prtk
-LduaW2Bh5p2mrMkkIP/Nt13ujgSSoRA0JkiytjrHmmYu8GTwYWTvKIXJlEZr+8UP
-ufXvUVphvic5AEwAf4pJFHsaQOXn/tbQp98zXIYe5Upk/+iPH5482Kmi0gvDU7fP
-9tGShL7Z5mcG
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCg/hZ5JrXB
+hVQhSeq2CwMUH7sM4gw11ji2DD451ftcXdtzmRy3JuTYHYdZjDN35liL7FymLQbF
+YH3Cs9yWOZWeEgYZLYAh3M0s2RK0nvzoR2FOu1bFGWIBveRwYJFvxlzI6cCvoBa5
+IMvrGZ1JA1IBCUt98CDMlrbosE1VZandRQYl9lQ3inqBxs5lGJmiS+VaKV/8JG4H
+ZzPccC4fAldTR8TJLarcXNXOFjCNgar6w5LMtqb8zejVkLZGqWt7OmQb6KbRsCT9
+4fW+2NjnC/ivi59HJHZlSKdWQLLjGlK0rpuGAR+JhgvG3RsW0moU1N41GZrwf7KW
+Vu5lh1glFZi+
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Basic Constraints indicates not a CA
 
diff --git a/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem b/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem
index 8a1ec44..cb075aa 100644
--- a/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem
+++ b/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:9f:2f:38:1d:84:e6:1c:ed:c4:47:2b:63:0b:41:
-                    73:dd:fe:74:c7:1a:d2:c8:7f:c1:90:ae:bf:6b:82:
-                    a1:17:93:80:a1:92:39:52:66:81:93:90:e6:15:d7:
-                    d6:bc:a4:03:eb:fc:50:b2:dc:f6:29:f7:a9:32:b6:
-                    23:6c:d4:d0:3e:d9:56:6e:9d:a0:91:10:2c:8a:1e:
-                    93:8d:38:37:ef:3e:7d:7a:de:15:07:c2:6c:62:1c:
-                    76:81:ce:a7:9e:be:44:57:1b:77:77:ed:fa:2f:e1:
-                    c5:53:83:65:74:c6:11:3c:f2:4d:84:89:1d:3b:54:
-                    93:5e:38:44:f1:d4:03:ad:03:69:fd:eb:da:02:aa:
-                    cf:6f:04:ea:22:0a:3f:a1:68:bc:56:a4:51:aa:93:
-                    8a:f2:22:47:42:04:98:48:68:40:2e:f6:a6:8d:38:
-                    84:ba:1a:56:0c:bc:53:85:77:b4:ba:e2:03:ac:10:
-                    0f:1d:52:64:ad:f5:92:20:38:dc:fa:dd:8b:c6:8d:
-                    96:30:ea:72:e2:aa:ff:5d:c3:fc:dc:1a:43:c6:da:
-                    48:56:f6:4c:d4:8d:00:da:28:5f:01:23:9b:b1:eb:
-                    b7:92:b7:35:43:5e:c0:21:96:22:b6:bd:c6:5f:1b:
-                    0b:58:88:44:a5:ee:90:f4:e6:d0:94:41:2c:44:8c:
-                    af:e9
+                    00:ed:76:79:eb:55:2f:66:53:1e:8c:9b:58:a4:77:
+                    cb:ac:a3:3b:a1:28:c0:e2:1d:b1:40:4e:61:89:43:
+                    ac:32:7d:8b:38:61:27:16:c9:1d:6e:67:c7:06:98:
+                    0d:64:e9:8f:42:82:6a:f4:e1:11:10:9c:d2:71:6c:
+                    08:5e:83:d2:76:0c:47:a6:86:74:e2:f4:26:10:85:
+                    9a:23:9e:d4:73:ea:f0:dc:80:43:a3:9a:23:01:b7:
+                    4f:7d:26:2e:b6:e5:4c:86:89:89:da:b9:77:60:a9:
+                    ff:37:57:a2:76:c0:85:53:b0:29:3a:d3:a4:83:2b:
+                    f4:70:71:2d:f9:20:ff:04:95:21:8a:56:18:e7:74:
+                    7f:6b:24:52:fb:79:1e:9a:5a:c6:81:5c:a2:97:bf:
+                    9b:0a:d5:18:6f:f0:07:08:54:ee:40:ad:2f:13:9e:
+                    75:3a:d2:7c:8a:40:a2:48:f9:10:84:ef:47:3b:5e:
+                    fd:78:67:19:d1:1d:97:d5:a5:b3:08:db:f4:36:aa:
+                    df:df:14:5c:24:11:38:3b:9b:ea:2e:35:c0:ae:8b:
+                    2b:55:07:01:77:aa:98:b2:b4:dc:f7:4e:82:55:e7:
+                    8e:ab:c5:bf:3e:c9:35:a5:b2:09:93:29:6c:c1:dc:
+                    b1:17:fd:f3:1b:7d:18:97:d6:3c:68:4e:4d:c6:3a:
+                    72:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                05:31:5F:95:5B:3C:43:02:74:27:C6:2E:06:50:92:FF:5C:54:AE:73
+                C0:8D:DC:47:E2:8A:82:BC:92:6D:8F:9F:F2:C7:F6:14:DE:09:CC:AC
             X509v3 Authority Key Identifier: 
-                keyid:77:27:6B:15:A8:06:86:AD:0D:67:E0:D6:5B:82:3A:F8:6B:00:A3:A7
+                keyid:8A:DE:CB:21:3C:DA:E9:1D:8B:27:C3:94:11:AD:14:38:5F:9F:9F:66
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         00:ba:cd:3c:7b:0f:eb:b3:b1:5f:5b:0a:83:12:4d:d6:28:7e:
-         ff:d9:65:2c:23:f8:d2:68:cc:25:14:0c:6e:9b:37:bb:72:66:
-         13:54:ff:b9:2f:f4:c8:9e:77:5b:31:2b:93:e6:94:cf:e9:bd:
-         43:1a:e8:f6:c3:c5:61:fa:ff:a7:72:09:ba:2b:08:02:e4:a5:
-         62:24:b1:b1:3b:0a:c0:bb:72:19:af:73:2d:9a:66:8e:f7:0f:
-         30:9f:49:0f:aa:83:87:ed:45:9e:75:3a:50:32:d6:c4:cf:20:
-         a0:31:73:16:98:69:e9:d7:16:5b:6f:6f:0a:d8:96:82:a3:d6:
-         a8:a4:84:d7:1a:50:22:bd:14:d7:61:d9:43:a9:58:cf:46:e8:
-         64:e9:1c:a9:d6:d3:49:45:1e:53:16:71:05:a7:0b:ae:d7:c0:
-         43:8c:24:02:07:6f:99:ed:4b:f6:89:a8:31:f5:ba:56:e3:db:
-         00:10:7e:0d:e0:46:96:b2:27:be:60:29:e8:91:e9:55:43:b1:
-         e6:74:e9:17:4e:bd:db:32:ec:61:7e:b0:d1:17:27:90:29:d9:
-         2e:53:6a:8f:de:77:ae:f4:ff:f4:96:84:e6:8d:37:43:63:17:
-         87:6a:8c:55:bd:ea:fd:2c:b2:83:10:3c:d7:f0:bd:21:45:ad:
-         ba:36:6d:43
+         67:4f:b4:2f:37:81:5d:d5:5b:50:a7:ae:65:06:9f:b2:90:1b:
+         dd:8e:5c:9e:77:05:ed:6e:50:bf:af:9d:0a:06:f0:5b:1e:ef:
+         ce:b4:2b:65:d3:93:46:cf:d4:3f:6e:b1:c4:92:35:15:e3:c9:
+         3e:01:56:6c:25:1f:d4:ab:04:14:f3:a5:68:33:aa:59:32:3b:
+         d1:24:fe:54:2f:df:6b:58:33:ab:2f:da:c4:47:4e:09:ea:32:
+         54:7e:46:52:03:23:d7:84:0d:b1:e1:8a:ee:79:cc:69:55:7e:
+         df:7a:f2:8a:21:b9:ba:f6:0e:29:4b:5b:bb:18:11:01:6c:22:
+         c4:17:eb:2b:6a:c7:af:f6:80:a5:c4:f3:e3:47:e0:e9:9d:47:
+         f5:77:6d:d2:da:96:93:bc:2c:25:d2:ec:eb:6b:e2:de:b2:9a:
+         bf:7b:41:a0:f9:07:3a:8a:00:30:14:40:6e:4f:f4:c4:c3:cb:
+         d3:20:50:69:b4:ab:0a:96:44:ea:dc:e9:7a:2f:11:3a:7e:cf:
+         2e:0d:60:e2:f1:78:4d:42:c2:11:84:67:4f:eb:1c:14:7b:fe:
+         81:7a:93:ed:5b:4a:a1:d2:99:51:f6:a6:db:e7:d5:09:40:d1:
+         f6:7c:48:71:ab:5d:b2:b2:c1:32:ae:b0:36:43:fe:1e:ab:cb:
+         93:ad:c6:45
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfLzgd
-hOYc7cRHK2MLQXPd/nTHGtLIf8GQrr9rgqEXk4ChkjlSZoGTkOYV19a8pAPr/FCy
-3PYp96kytiNs1NA+2VZunaCRECyKHpONODfvPn163hUHwmxiHHaBzqeevkRXG3d3
-7fov4cVTg2V0xhE88k2EiR07VJNeOETx1AOtA2n969oCqs9vBOoiCj+haLxWpFGq
-k4ryIkdCBJhIaEAu9qaNOIS6GlYMvFOFd7S64gOsEA8dUmSt9ZIgONz63YvGjZYw
-6nLiqv9dw/zcGkPG2khW9kzUjQDaKF8BI5ux67eStzVDXsAhliK2vcZfGwtYiESl
-7pD05tCUQSxEjK/pAgMBAAGjgekwgeYwHQYDVR0OBBYEFAUxX5VbPEMCdCfGLgZQ
-kv9cVK5zMB8GA1UdIwQYMBaAFHcnaxWoBoatDWfg1luCOvhrAKOnMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtdnnr
+VS9mUx6Mm1ikd8usozuhKMDiHbFATmGJQ6wyfYs4YScWyR1uZ8cGmA1k6Y9Cgmr0
+4REQnNJxbAheg9J2DEemhnTi9CYQhZojntRz6vDcgEOjmiMBt099Ji625UyGiYna
+uXdgqf83V6J2wIVTsCk606SDK/RwcS35IP8ElSGKVhjndH9rJFL7eR6aWsaBXKKX
+v5sK1Rhv8AcIVO5ArS8TnnU60nyKQKJI+RCE70c7Xv14ZxnRHZfVpbMI2/Q2qt/f
+FFwkETg7m+ouNcCuiytVBwF3qpiytNz3ToJV546rxb8+yTWlsgmTKWzB3LEX/fMb
+fRiX1jxoTk3GOnKpAgMBAAGjgekwgeYwHQYDVR0OBBYEFMCN3EfiioK8km2Pn/LH
+9hTeCcysMB8GA1UdIwQYMBaAFIreyyE82ukdiyfDlBGtFDhfn59mMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAALrNPHsP67OxX1sKgxJN
-1ih+/9llLCP40mjMJRQMbps3u3JmE1T/uS/0yJ53WzErk+aUz+m9Qxro9sPFYfr/
-p3IJuisIAuSlYiSxsTsKwLtyGa9zLZpmjvcPMJ9JD6qDh+1FnnU6UDLWxM8goDFz
-Fphp6dcWW29vCtiWgqPWqKSE1xpQIr0U12HZQ6lYz0boZOkcqdbTSUUeUxZxBacL
-rtfAQ4wkAgdvme1L9omoMfW6VuPbABB+DeBGlrInvmAp6JHpVUOx5nTpF0692zLs
-YX6w0RcnkCnZLlNqj953rvT/9JaE5o03Q2MXh2qMVb3q/SyygxA81/C9IUWtujZt
-Qw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAZ0+0LzeBXdVbUKeuZQaf
+spAb3Y5cnncF7W5Qv6+dCgbwWx7vzrQrZdOTRs/UP26xxJI1FePJPgFWbCUf1KsE
+FPOlaDOqWTI70ST+VC/fa1gzqy/axEdOCeoyVH5GUgMj14QNseGK7nnMaVV+33ry
+iiG5uvYOKUtbuxgRAWwixBfrK2rHr/aApcTz40fg6Z1H9Xdt0tqWk7wsJdLs62vi
+3rKav3tBoPkHOooAMBRAbk/0xMPL0yBQabSrCpZE6tzpei8ROn7PLg1g4vF4TULC
+EYRnT+scFHv+gXqT7VtKodKZUfam2+fVCUDR9nxIcatdsrLBMq6wNkP+HqvLk63G
+RQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:94:4c:ba:e4:24:50:f0:02:98:a7:42:66:d3:d6:
-                    53:4d:ad:3f:76:fa:4f:72:61:fd:79:cc:43:e2:d6:
-                    2f:d9:99:84:0b:da:34:6f:65:ca:78:2b:a9:22:98:
-                    04:ba:93:89:e9:8c:d0:71:62:cd:a4:3a:35:e2:8c:
-                    2d:8a:48:36:2b:d1:99:52:27:c7:44:34:30:2c:87:
-                    a7:47:e3:df:74:a3:6c:c6:3c:d2:ba:5c:3c:04:79:
-                    1f:11:36:58:7a:86:65:60:cc:a1:4c:ba:f9:72:7e:
-                    80:d3:1b:12:18:8a:44:b3:f3:fa:20:f8:8c:3d:63:
-                    e3:96:0a:6b:0a:32:a1:f1:75:7c:6b:76:5f:1b:ef:
-                    bd:64:c3:34:fd:2e:27:89:dd:ef:e5:74:08:08:a4:
-                    96:92:7b:f3:4b:f5:ee:eb:91:0b:bb:ca:53:e8:ed:
-                    48:a8:bb:7c:f8:9f:30:f7:15:05:32:7d:73:62:37:
-                    4f:f7:a1:d4:de:45:e2:f7:49:86:b9:c9:f8:84:cc:
-                    67:b2:f0:34:48:e6:54:e4:5d:1f:fb:03:fc:d8:15:
-                    a1:17:0e:53:0d:c8:c9:a6:99:bf:f8:93:df:af:35:
-                    e3:10:91:91:24:f3:eb:88:0b:d8:4f:16:36:a3:28:
-                    ad:21:bd:22:bf:46:59:0a:ea:f0:fb:fc:01:c3:ba:
-                    42:e9
+                    00:a8:ea:08:6f:d9:38:21:99:d3:63:51:e7:2e:2a:
+                    a4:35:da:22:83:26:f7:cf:41:e2:7e:9a:7d:a0:59:
+                    52:92:3b:46:4f:9d:da:0f:34:e6:a5:83:bb:20:9b:
+                    e2:8e:70:9b:ea:dd:99:14:de:15:9c:f8:4b:04:0a:
+                    53:90:09:82:77:ba:f5:04:e5:f3:8a:aa:b5:05:1d:
+                    50:0c:c9:3f:2b:0a:22:a1:4c:31:ab:99:7b:11:8f:
+                    a2:19:76:05:8a:de:8c:24:d2:52:73:6f:d9:1b:e9:
+                    0e:06:37:04:15:8a:cf:b0:74:1c:32:e5:5d:8b:56:
+                    3c:55:99:97:2c:67:5d:27:2f:21:4d:6c:da:76:93:
+                    69:3d:36:65:4e:50:f8:38:6a:09:6c:87:4c:95:9d:
+                    db:2d:6f:2c:2a:20:47:c7:0a:e0:df:24:fc:df:d3:
+                    49:e7:30:3c:ff:a1:10:2a:4c:5d:0a:e6:12:b2:9b:
+                    d7:1a:09:28:b2:71:41:16:75:9c:65:79:2a:78:c6:
+                    ed:7e:e5:c2:b0:6c:15:46:aa:c7:aa:e1:86:2a:7c:
+                    38:e0:ac:e6:e9:36:2a:17:93:87:3f:3f:c5:b0:7c:
+                    85:39:49:c1:9a:31:88:92:d3:2c:7b:2f:a1:64:b4:
+                    d2:78:11:30:61:91:27:bb:a7:fc:c4:dc:33:e8:4e:
+                    9d:97
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                77:27:6B:15:A8:06:86:AD:0D:67:E0:D6:5B:82:3A:F8:6B:00:A3:A7
+                8A:DE:CB:21:3C:DA:E9:1D:8B:27:C3:94:11:AD:14:38:5F:9F:9F:66
             X509v3 Authority Key Identifier: 
-                keyid:6C:17:23:18:CA:A6:A4:28:C6:08:4C:AA:9A:3F:18:FB:7B:67:B2:36
+                keyid:B5:4F:2B:B1:6C:A2:EE:C6:B5:49:B5:77:D1:AC:82:45:75:C9:9B:1C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         af:80:f1:f7:93:98:cd:84:13:e3:eb:ab:2d:ff:91:4c:72:5d:
-         d9:a9:b7:96:e8:bc:e9:f3:31:a0:46:7c:0d:49:a3:1f:5a:6a:
-         aa:82:9a:c2:1f:37:7a:9a:37:1a:96:fb:8e:fa:28:e1:eb:b8:
-         a3:d0:66:2d:9e:6e:ff:8e:c3:0a:17:23:ae:60:d5:9b:d2:fb:
-         23:2b:a9:b0:22:cb:e6:85:29:11:d3:b5:71:3e:30:9a:9c:60:
-         24:c5:a8:42:66:4f:5c:10:8b:fa:61:ad:d7:14:2b:51:0e:53:
-         24:1a:c7:5f:d9:12:97:6a:8c:da:d5:f9:35:41:4c:d4:0e:a8:
-         98:c6:e8:61:db:7b:95:d5:ca:26:ff:60:01:e2:c6:4e:f7:67:
-         ee:36:1f:2b:71:82:46:f5:11:44:ce:7b:ac:85:06:f1:09:35:
-         07:62:08:36:ad:b6:5b:c6:70:a0:bb:f0:5b:2e:47:09:a2:69:
-         79:a6:f1:77:fd:3c:b9:57:f4:c7:e6:f8:80:18:ba:d0:a0:c1:
-         b1:6f:b9:c8:3b:a2:c1:83:5c:e7:3a:05:19:36:c5:ae:54:dc:
-         df:1d:ad:18:e0:52:dd:71:ba:53:3e:2c:7d:eb:09:3a:cb:25:
-         10:b3:52:50:7f:42:2b:a8:2c:a7:cc:02:8e:17:99:af:7e:d2:
-         75:f4:15:f1
+         5d:26:64:34:00:76:cd:aa:49:2a:2a:35:27:da:c2:f9:84:69:
+         89:81:7e:e1:03:59:d2:9d:54:21:04:4b:b9:e4:32:70:43:fd:
+         9e:91:2d:37:4e:17:4f:50:0e:01:94:9e:ec:f7:82:0a:30:00:
+         45:20:7d:5a:46:d1:8e:4e:51:9a:78:b7:c3:6f:a4:dd:30:fb:
+         7d:4a:c4:d4:d1:1b:0c:97:06:d5:7e:75:fc:0e:d0:fb:0c:15:
+         14:9f:21:1f:d5:9f:01:5f:ac:30:37:db:52:05:9b:b3:e8:d7:
+         39:39:4e:2c:c7:19:6a:dd:36:83:ef:67:89:de:91:92:94:e2:
+         5a:75:e4:f3:8d:ed:66:68:4d:93:1d:c9:87:58:42:84:4c:80:
+         5b:6f:0a:99:b7:fa:88:b1:df:f5:d5:b7:59:65:80:27:56:db:
+         1c:76:0b:f9:5f:89:38:5c:79:a3:a9:81:aa:5a:ae:ec:26:d9:
+         00:ac:5a:49:86:8e:38:4e:9f:a4:ff:ad:7e:83:12:04:e0:1f:
+         6a:a5:f8:57:ad:f4:0f:0f:3d:ae:36:ce:0a:8a:e5:2b:1a:71:
+         d9:9d:4e:57:7e:74:fd:b8:d1:13:5e:ac:e8:2e:54:d6:99:b6:
+         22:af:d4:12:5f:8e:3b:26:9d:e7:ba:a8:a7:70:26:64:e9:83:
+         62:cf:68:1e
 -----BEGIN CERTIFICATE-----
 MIIDajCCAlKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlEy65CRQ
-8AKYp0Jm09ZTTa0/dvpPcmH9ecxD4tYv2ZmEC9o0b2XKeCupIpgEupOJ6YzQcWLN
-pDo14owtikg2K9GZUifHRDQwLIenR+PfdKNsxjzSulw8BHkfETZYeoZlYMyhTLr5
-cn6A0xsSGIpEs/P6IPiMPWPjlgprCjKh8XV8a3ZfG++9ZMM0/S4nid3v5XQICKSW
-knvzS/Xu65ELu8pT6O1IqLt8+J8w9xUFMn1zYjdP96HU3kXi90mGucn4hMxnsvA0
-SOZU5F0f+wP82BWhFw5TDcjJppm/+JPfrzXjEJGRJPPriAvYTxY2oyitIb0iv0ZZ
-Curw+/wBw7pC6QIDAQABo4HIMIHFMB0GA1UdDgQWBBR3J2sVqAaGrQ1n4NZbgjr4
-awCjpzAfBgNVHSMEGDAWgBRsFyMYyqakKMYITKqaPxj7e2eyNjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqOoIb9k4
+IZnTY1HnLiqkNdoigyb3z0Hifpp9oFlSkjtGT53aDzTmpYO7IJvijnCb6t2ZFN4V
+nPhLBApTkAmCd7r1BOXziqq1BR1QDMk/KwoioUwxq5l7EY+iGXYFit6MJNJSc2/Z
+G+kOBjcEFYrPsHQcMuVdi1Y8VZmXLGddJy8hTWzadpNpPTZlTlD4OGoJbIdMlZ3b
+LW8sKiBHxwrg3yT839NJ5zA8/6EQKkxdCuYSspvXGgkosnFBFnWcZXkqeMbtfuXC
+sGwVRqrHquGGKnw44Kzm6TYqF5OHPz/FsHyFOUnBmjGIktMsey+hZLTSeBEwYZEn
+u6f8xNwz6E6dlwIDAQABo4HIMIHFMB0GA1UdDgQWBBSK3sshPNrpHYsnw5QRrRQ4
+X5+fZjAfBgNVHSMEGDAWgBS1TyuxbKLuxrVJtXfRrIJFdcmbHDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAK+A
-8feTmM2EE+Prqy3/kUxyXdmpt5bovOnzMaBGfA1Jox9aaqqCmsIfN3qaNxqW+476
-KOHruKPQZi2ebv+OwwoXI65g1ZvS+yMrqbAiy+aFKRHTtXE+MJqcYCTFqEJmT1wQ
-i/phrdcUK1EOUyQax1/ZEpdqjNrV+TVBTNQOqJjG6GHbe5XVyib/YAHixk73Z+42
-Hytxgkb1EUTOe6yFBvEJNQdiCDattlvGcKC78FsuRwmiaXmm8Xf9PLlX9Mfm+IAY
-utCgwbFvucg7osGDXOc6BRk2xa5U3N8drRjgUt1xulM+LH3rCTrLJRCzUlB/Qiuo
-LKfMAo4Xma9+0nX0FfE=
+VR0PAQH/BAQDAgEGMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAF0m
+ZDQAds2qSSoqNSfawvmEaYmBfuEDWdKdVCEES7nkMnBD/Z6RLTdOF09QDgGUnuz3
+ggowAEUgfVpG0Y5OUZp4t8NvpN0w+31KxNTRGwyXBtV+dfwO0PsMFRSfIR/VnwFf
+rDA321IFm7Po1zk5TizHGWrdNoPvZ4nekZKU4lp15PON7WZoTZMdyYdYQoRMgFtv
+Cpm3+oix3/XVt1llgCdW2xx2C/lfiThceaOpgaparuwm2QCsWkmGjjhOn6T/rX6D
+EgTgH2ql+Fet9A8PPa42zgqK5SsacdmdTld+dP240RNerOguVNaZtiKv1BJfjjsm
+nee6qKdwJmTpg2LPaB4=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e2:4c:a9:08:30:3f:0e:6a:ec:ec:80:8e:07:cb:
-                    fa:9b:01:b9:8a:37:f0:b1:f2:c2:43:79:90:7e:70:
-                    76:ac:5c:41:60:55:66:fb:4f:e6:79:c8:18:01:7f:
-                    d5:bd:9a:d5:58:5a:00:bf:81:86:37:1e:68:1a:92:
-                    da:dd:e8:20:1a:47:43:78:bb:7e:5c:82:c6:59:1b:
-                    37:c9:99:b2:ac:bb:d2:c0:cf:58:5a:25:13:a6:6b:
-                    9a:79:be:dc:f6:6f:6c:80:5d:58:c2:b5:67:ae:09:
-                    1b:ba:2a:f3:2a:00:d2:43:b6:59:df:38:7c:ef:c1:
-                    be:1b:a1:e0:7d:9b:20:27:04:67:94:45:b3:2d:f6:
-                    77:91:3c:c4:94:5f:78:7a:79:2c:4b:21:23:8b:f4:
-                    d3:60:73:10:59:c7:a1:84:3f:5a:4e:82:43:90:68:
-                    77:2a:f6:b1:d2:d4:cc:cd:76:36:13:95:c5:a7:f4:
-                    46:d8:b7:ee:ef:59:07:2c:69:4d:9c:22:e4:2d:f1:
-                    a9:2c:50:35:50:c2:91:ea:37:d9:6c:b6:f2:ff:cd:
-                    7e:00:ae:51:e3:b4:10:5f:87:e3:92:fe:9e:62:a5:
-                    34:fe:15:c4:19:20:3a:68:fd:3c:be:ae:aa:a3:52:
-                    48:d3:05:95:99:f8:38:18:c5:44:d6:71:c4:bf:34:
-                    e5:c7
+                    00:a3:cb:ea:d8:bd:24:ab:0c:9a:cc:b2:0e:d2:37:
+                    89:9a:1c:87:6d:80:b9:74:3f:0f:f8:3a:c7:e2:8b:
+                    0f:26:3a:56:7e:a0:70:bd:7a:b8:83:c3:e2:44:b9:
+                    7a:98:74:41:75:e8:48:ee:42:8a:87:7f:fd:31:76:
+                    f6:d6:61:3c:50:0d:68:fe:36:41:de:1f:85:d1:c1:
+                    ab:2d:34:c5:13:ea:62:eb:e4:b6:0e:19:be:9f:d3:
+                    dd:ed:91:14:90:85:60:44:67:17:bc:cf:e4:cb:8c:
+                    eb:f2:0c:9f:90:c1:51:7c:cd:34:a3:af:51:c0:e0:
+                    0c:44:bb:2c:e1:4f:1f:99:1b:ac:5a:f3:b2:c9:80:
+                    53:52:82:6d:d6:4e:83:ee:1e:04:15:3c:d8:6f:b8:
+                    5a:72:16:5a:f3:6d:a1:ce:0c:89:5c:ac:7b:d1:87:
+                    f9:d1:69:63:20:ad:0d:fb:d5:d9:6c:8a:5a:1c:c5:
+                    70:71:33:e0:84:7b:68:9e:00:80:00:a3:0d:49:2e:
+                    e6:c8:5f:4a:d7:47:73:52:07:66:ee:36:da:26:f2:
+                    a2:ec:f1:ed:46:4a:d6:d8:48:22:88:3a:22:45:81:
+                    7c:e7:d6:0d:3a:43:76:55:50:0c:1d:f5:df:cc:86:
+                    4d:62:1f:13:07:2b:6c:2a:e4:d3:90:46:7e:95:14:
+                    e9:3b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                6C:17:23:18:CA:A6:A4:28:C6:08:4C:AA:9A:3F:18:FB:7B:67:B2:36
+                B5:4F:2B:B1:6C:A2:EE:C6:B5:49:B5:77:D1:AC:82:45:75:C9:9B:1C
             X509v3 Authority Key Identifier: 
-                keyid:6C:17:23:18:CA:A6:A4:28:C6:08:4C:AA:9A:3F:18:FB:7B:67:B2:36
+                keyid:B5:4F:2B:B1:6C:A2:EE:C6:B5:49:B5:77:D1:AC:82:45:75:C9:9B:1C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:00:6a:7a:21:40:79:ad:84:23:e8:62:29:b5:47:0a:7a:91:
-         08:3d:f3:af:0a:14:e9:93:08:7a:81:bf:44:6f:e9:59:5b:d6:
-         8f:e1:bd:cd:9f:46:94:2e:7e:79:df:53:9e:85:e3:86:e0:15:
-         65:e4:fd:b9:10:f7:19:6c:f1:ba:39:3b:2e:49:97:18:7d:95:
-         a9:e5:14:49:65:44:31:39:5b:75:c7:09:75:1f:b3:5a:5b:fe:
-         09:1a:4a:af:ec:6b:58:5a:7b:ef:44:58:37:ab:23:72:bd:97:
-         7b:02:63:65:cf:3d:f6:13:62:44:49:04:dc:85:fc:6f:31:80:
-         c7:e0:1e:5b:77:90:29:cb:06:67:4e:99:41:b1:66:d7:4b:a3:
-         fa:85:5c:bc:2e:c5:fa:a0:a1:8d:07:ba:52:31:cf:5e:2a:98:
-         f1:ba:dc:56:4b:b3:cc:11:b2:d1:2d:0a:eb:75:a8:fe:f6:02:
-         d8:9b:0f:5b:7e:11:50:b1:51:b9:31:11:c5:4b:fa:bf:34:4d:
-         46:e9:27:39:61:ca:09:41:b2:67:fc:54:8a:38:0b:50:7d:f0:
-         e4:7a:a4:30:08:12:86:b3:fc:d2:43:0c:b5:50:4b:45:ee:cf:
-         90:5b:3e:39:47:11:b6:6b:a6:24:fe:02:17:07:7c:06:15:23:
-         0f:d8:0e:7b
+         01:3c:59:aa:07:e9:87:6b:46:2a:63:7c:8f:89:cf:cf:29:64:
+         ce:27:f8:9f:a8:00:20:90:61:28:d8:a2:f9:f1:c4:20:f7:2e:
+         44:31:32:c8:e1:f8:ef:f0:ab:3e:09:a4:ea:f0:60:f2:13:d1:
+         03:9e:b2:8a:ac:b1:b9:30:cf:5e:77:d5:45:25:27:49:14:3a:
+         5e:c9:68:6c:4e:e6:61:8e:35:e9:fd:72:f8:8d:30:92:95:20:
+         ed:5c:05:65:fc:fc:ea:a3:f7:3d:0f:a0:77:16:73:af:62:2b:
+         69:e3:9f:62:df:f4:33:49:0d:48:1b:9d:6a:9d:18:ee:8a:93:
+         d7:a0:b4:5e:3a:96:0f:19:aa:1d:76:7a:8a:0d:c9:3b:78:d6:
+         c9:9c:34:0b:51:30:2b:85:01:94:f8:ef:88:76:e1:40:3d:dc:
+         e8:62:91:8a:09:a9:e9:ae:6a:a7:b9:95:d6:b3:db:ad:e6:49:
+         c1:75:8d:87:fb:cc:6f:ad:ac:de:f8:f0:e3:30:be:f3:a7:73:
+         7e:4b:7d:14:72:f7:03:d2:e1:4e:ea:70:c3:a7:86:21:2b:0d:
+         e5:ed:e0:d3:a9:51:8d:c1:bc:16:58:f8:06:cd:72:6a:86:74:
+         30:8b:e5:76:6e:20:46:37:4a:d8:cc:b7:89:2d:e4:0e:0b:90:
+         4b:38:0c:73
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOJMqQgwPw5q7OyAjgfL
-+psBuYo38LHywkN5kH5wdqxcQWBVZvtP5nnIGAF/1b2a1VhaAL+BhjceaBqS2t3o
-IBpHQ3i7flyCxlkbN8mZsqy70sDPWFolE6Zrmnm+3PZvbIBdWMK1Z64JG7oq8yoA
-0kO2Wd84fO/Bvhuh4H2bICcEZ5RFsy32d5E8xJRfeHp5LEshI4v002BzEFnHoYQ/
-Wk6CQ5Bodyr2sdLUzM12NhOVxaf0Rti37u9ZByxpTZwi5C3xqSxQNVDCkeo32Wy2
-8v/NfgCuUeO0EF+H45L+nmKlNP4VxBkgOmj9PL6uqqNSSNMFlZn4OBjFRNZxxL80
-5ccCAwEAAaOByzCByDAdBgNVHQ4EFgQUbBcjGMqmpCjGCEyqmj8Y+3tnsjYwHwYD
-VR0jBBgwFoAUbBcjGMqmpCjGCEyqmj8Y+3tnsjYwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKPL6ti9JKsMmsyyDtI3
+iZoch22AuXQ/D/g6x+KLDyY6Vn6gcL16uIPD4kS5eph0QXXoSO5Ciod//TF29tZh
+PFANaP42Qd4fhdHBqy00xRPqYuvktg4Zvp/T3e2RFJCFYERnF7zP5MuM6/IMn5DB
+UXzNNKOvUcDgDES7LOFPH5kbrFrzssmAU1KCbdZOg+4eBBU82G+4WnIWWvNtoc4M
+iVyse9GH+dFpYyCtDfvV2WyKWhzFcHEz4IR7aJ4AgACjDUku5shfStdHc1IHZu42
+2ibyouzx7UZK1thIIog6IkWBfOfWDTpDdlVQDB3138yGTWIfEwcrbCrk05BGfpUU
+6TsCAwEAAaOByzCByDAdBgNVHQ4EFgQUtU8rsWyi7sa1SbV30ayCRXXJmxwwHwYD
+VR0jBBgwFoAUtU8rsWyi7sa1SbV30ayCRXXJmxwwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDSAGp6IUB5
-rYQj6GIptUcKepEIPfOvChTpkwh6gb9Eb+lZW9aP4b3Nn0aULn5531OeheOG4BVl
-5P25EPcZbPG6OTsuSZcYfZWp5RRJZUQxOVt1xwl1H7NaW/4JGkqv7GtYWnvvRFg3
-qyNyvZd7AmNlzz32E2JESQTchfxvMYDH4B5bd5ApywZnTplBsWbXS6P6hVy8LsX6
-oKGNB7pSMc9eKpjxutxWS7PMEbLRLQrrdaj+9gLYmw9bfhFQsVG5MRHFS/q/NE1G
-6Sc5YcoJQbJn/FSKOAtQffDkeqQwCBKGs/zSQwy1UEtF7s+QWz45RxG2a6Yk/gIX
-B3wGFSMP2A57
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQABPFmqB+mH
+a0YqY3yPic/PKWTOJ/ifqAAgkGEo2KL58cQg9y5EMTLI4fjv8Ks+CaTq8GDyE9ED
+nrKKrLG5MM9ed9VFJSdJFDpeyWhsTuZhjjXp/XL4jTCSlSDtXAVl/Pzqo/c9D6B3
+FnOvYitp459i3/QzSQ1IG51qnRjuipPXoLReOpYPGaoddnqKDck7eNbJnDQLUTAr
+hQGU+O+IduFAPdzoYpGKCanprmqnuZXWs9ut5knBdY2H+8xvraze+PDjML7zp3N+
+S30UcvcD0uFO6nDDp4YhKw3l7eDTqVGNwbwWWPgGzXJqhnQwi+V2biBGN0rYzLeJ
+LeQOC5BLOAxz
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem b/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem
index 6872669..63e18ca1 100644
--- a/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem
+++ b/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ac:3c:48:cb:8e:9b:00:37:e3:06:36:23:5e:3c:
-                    24:0b:d2:57:0e:52:8f:53:d0:48:ca:38:67:91:a7:
-                    10:d3:35:2d:67:f4:ad:2c:9e:c1:ee:f5:6b:62:23:
-                    34:03:32:76:29:96:fd:db:cc:a4:9a:d8:b6:97:c4:
-                    a9:73:c1:a1:57:2f:cd:80:d1:d9:db:39:82:11:bb:
-                    95:3e:1b:b3:1e:ac:e7:c0:67:f3:1e:cb:4f:d4:a6:
-                    c7:01:32:c5:45:ca:53:ff:cf:46:e1:b3:4f:55:01:
-                    ef:76:44:92:55:55:d8:a4:db:5c:80:8f:48:51:86:
-                    6c:d9:b6:b7:5c:74:56:06:00:38:3f:d9:ee:c3:ae:
-                    78:a0:57:ff:fa:41:02:14:63:00:bb:1f:98:9a:f5:
-                    39:50:51:50:78:03:5d:13:a2:fd:a3:08:b0:ff:69:
-                    ee:60:c8:af:1c:1e:8a:13:4b:0e:b9:48:29:92:f2:
-                    95:0a:d9:85:2f:ff:17:ab:c7:6f:e0:32:d1:16:9e:
-                    66:ae:81:87:b8:7e:70:ac:73:8c:67:de:dd:1a:e0:
-                    0e:0e:bb:ab:bc:f5:ef:38:d9:37:49:71:d1:7c:e6:
-                    64:f7:00:10:e4:83:ed:1e:58:05:44:89:f2:a9:a2:
-                    1d:57:5c:b5:db:bc:55:39:35:d7:f3:a5:b8:28:d1:
-                    45:5d
+                    00:bf:5a:8f:db:be:ba:83:5c:5a:e0:4a:66:41:a8:
+                    39:80:40:e7:b5:92:a3:07:13:ec:65:a5:75:b2:2f:
+                    9a:aa:c7:1f:8f:64:8e:6c:e0:8e:4f:2b:af:95:c0:
+                    f3:86:17:46:1b:b4:1d:7a:f1:fe:32:f8:58:29:da:
+                    22:31:20:8b:0f:45:be:81:80:2b:a7:25:e6:d2:fc:
+                    46:fe:fe:83:b6:55:d3:32:9c:64:f5:a3:0e:ef:5a:
+                    2f:ad:83:fd:44:76:7d:33:42:ef:0a:cd:fd:b0:d3:
+                    2d:70:93:44:25:75:24:61:2e:d1:e2:e6:d4:17:9a:
+                    42:ff:a1:67:23:9d:4b:2a:a3:e9:ba:aa:c3:9e:54:
+                    12:09:8b:d8:4a:8d:22:8c:6f:b8:92:84:4b:fa:7b:
+                    07:e1:82:da:a4:1d:7f:3a:d3:7d:cd:76:e0:90:41:
+                    87:c9:56:39:14:30:b4:2c:1b:7d:dc:4b:48:03:cd:
+                    3c:88:9a:6d:08:97:8c:01:14:14:06:f7:2a:cd:76:
+                    2e:ba:74:af:76:b8:3c:dc:83:a4:9e:ab:ab:93:0e:
+                    61:2e:6c:2d:18:97:95:c5:29:e6:f4:c9:96:09:d4:
+                    12:ce:39:a9:1a:40:ad:c0:54:4c:fc:41:07:15:1e:
+                    cd:cd:0b:9c:e0:03:af:e6:b0:b6:7a:35:fa:7c:70:
+                    b3:cf
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9E:25:C3:B0:61:AE:69:26:DE:05:F4:15:3C:58:B0:7C:6D:91:5C:5B
+                A4:58:36:4B:8C:71:D3:FA:D3:04:1A:BC:36:D9:CC:78:1C:C1:E0:D6
             X509v3 Authority Key Identifier: 
-                keyid:E5:AE:8F:CC:87:F7:B5:85:86:1E:4B:A6:CF:FC:B9:CA:10:C8:79:90
+                keyid:89:51:1E:D6:EA:B6:84:32:05:F0:15:A9:39:24:C0:46:25:5F:FB:8A
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         c5:3c:97:21:6a:dc:f8:0c:23:76:c2:4e:33:63:f4:7e:d1:61:
-         bd:f8:cf:6d:b5:ef:d6:f1:96:a0:84:07:42:ab:e2:34:90:3a:
-         95:2a:db:f6:19:28:bd:19:22:65:20:b0:25:b0:f0:ca:d0:d3:
-         44:41:fe:03:f2:9f:0c:df:02:dc:64:c6:47:13:1e:26:dd:6a:
-         5d:52:8a:fe:d3:0a:9a:d1:8c:a5:93:ec:1a:d4:d5:ad:ba:cd:
-         6b:c2:99:6b:04:b7:06:98:a8:53:dc:d9:97:97:da:ac:29:bb:
-         09:4a:25:ca:08:83:eb:ed:1f:a7:ae:28:fc:51:09:a9:e4:95:
-         f2:66:97:f2:97:48:9e:01:44:40:5b:4a:91:a5:ed:f9:86:6b:
-         fb:e2:47:c8:47:aa:ad:8d:aa:79:30:fb:4f:f1:a7:7c:c3:23:
-         b3:23:4d:15:a3:04:67:ff:26:b1:50:c0:5a:13:f4:8a:61:da:
-         98:a2:35:0e:ec:4f:2b:e7:e0:dc:29:0a:07:20:e4:22:97:b1:
-         da:0d:73:6f:32:03:f1:cd:4b:a2:7b:9b:c3:62:a8:dd:55:02:
-         57:6b:2f:a4:d6:46:20:bc:bd:f7:52:e7:44:8e:3d:2c:73:05:
-         55:ac:35:8b:af:39:32:a1:07:da:fd:bb:8c:bb:35:e0:e6:bb:
-         0c:49:1a:e4
+         8d:4b:a8:5d:f6:9a:e0:3d:6d:e5:78:57:26:00:b6:90:4d:f6:
+         38:ae:30:a2:40:5e:1f:42:43:fd:2e:34:f3:03:c8:e1:e3:a5:
+         17:34:37:81:f6:8d:8f:af:7b:ff:4b:5c:dd:27:0e:58:69:ba:
+         46:a9:b1:31:8d:d1:b2:f7:1d:6b:ea:25:9e:00:ce:93:89:5a:
+         9f:66:e1:48:1e:56:97:4e:76:60:42:c8:c9:6d:f5:dd:d2:58:
+         12:d2:4a:71:85:2b:b8:df:6c:1f:ff:8e:e9:25:15:a5:d2:b4:
+         82:00:59:e5:1e:9e:bd:8e:30:6f:b7:b8:b4:08:c2:85:4f:77:
+         c8:66:8a:33:a4:bf:ed:13:3a:85:5f:90:1c:f4:e5:35:8f:5b:
+         57:14:e4:04:e1:4e:1c:79:74:a6:2f:c3:a7:6b:d4:29:fa:d0:
+         12:b9:e1:3c:94:8f:f0:49:b4:01:7b:df:87:a2:8d:e8:f1:72:
+         a7:95:b2:a0:de:41:85:87:3f:01:cf:1d:77:2f:ac:17:e1:35:
+         6e:4b:9e:64:a3:3e:30:e3:e3:9c:32:e9:de:4a:e3:b8:7d:12:
+         36:0a:e6:bf:36:38:85:2d:df:f2:57:e4:ad:c4:f9:7f:fa:62:
+         42:c2:b6:ad:3e:ae:9c:6d:aa:3d:d1:02:86:9a:4d:40:ef:9d:
+         1c:71:6f:04
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsPEjL
-jpsAN+MGNiNePCQL0lcOUo9T0EjKOGeRpxDTNS1n9K0snsHu9WtiIzQDMnYplv3b
-zKSa2LaXxKlzwaFXL82A0dnbOYIRu5U+G7MerOfAZ/Mey0/UpscBMsVFylP/z0bh
-s09VAe92RJJVVdik21yAj0hRhmzZtrdcdFYGADg/2e7DrnigV//6QQIUYwC7H5ia
-9TlQUVB4A10Tov2jCLD/ae5gyK8cHooTSw65SCmS8pUK2YUv/xerx2/gMtEWnmau
-gYe4fnCsc4xn3t0a4A4Ou6u89e842TdJcdF85mT3ABDkg+0eWAVEifKpoh1XXLXb
-vFU5Ndfzpbgo0UVdAgMBAAGjgekwgeYwHQYDVR0OBBYEFJ4lw7Bhrmkm3gX0FTxY
-sHxtkVxbMB8GA1UdIwQYMBaAFOWuj8yH97WFhh5Lps/8ucoQyHmQMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/Wo/b
+vrqDXFrgSmZBqDmAQOe1kqMHE+xlpXWyL5qqxx+PZI5s4I5PK6+VwPOGF0YbtB16
+8f4y+Fgp2iIxIIsPRb6BgCunJebS/Eb+/oO2VdMynGT1ow7vWi+tg/1Edn0zQu8K
+zf2w0y1wk0QldSRhLtHi5tQXmkL/oWcjnUsqo+m6qsOeVBIJi9hKjSKMb7iShEv6
+ewfhgtqkHX86033NduCQQYfJVjkUMLQsG33cS0gDzTyImm0Il4wBFBQG9yrNdi66
+dK92uDzcg6Seq6uTDmEubC0Yl5XFKeb0yZYJ1BLOOakaQK3AVEz8QQcVHs3NC5zg
+A6/msLZ6Nfp8cLPPAgMBAAGjgekwgeYwHQYDVR0OBBYEFKRYNkuMcdP60wQavDbZ
+zHgcweDWMB8GA1UdIwQYMBaAFIlRHtbqtoQyBfAVqTkkwEYlX/uKMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAxTyXIWrc+AwjdsJOM2P0
-ftFhvfjPbbXv1vGWoIQHQqviNJA6lSrb9hkovRkiZSCwJbDwytDTREH+A/KfDN8C
-3GTGRxMeJt1qXVKK/tMKmtGMpZPsGtTVrbrNa8KZawS3BpioU9zZl5farCm7CUol
-ygiD6+0fp64o/FEJqeSV8maX8pdIngFEQFtKkaXt+YZr++JHyEeqrY2qeTD7T/Gn
-fMMjsyNNFaMEZ/8msVDAWhP0imHamKI1DuxPK+fg3CkKByDkIpex2g1zbzID8c1L
-onubw2Ko3VUCV2svpNZGILy991LnRI49LHMFVaw1i685MqEH2v27jLs14Oa7DEka
-5A==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAjUuoXfaa4D1t5XhXJgC2
+kE32OK4wokBeH0JD/S408wPI4eOlFzQ3gfaNj697/0tc3ScOWGm6RqmxMY3Rsvcd
+a+olngDOk4lan2bhSB5Wl052YELIyW313dJYEtJKcYUruN9sH/+O6SUVpdK0ggBZ
+5R6evY4wb7e4tAjChU93yGaKM6S/7RM6hV+QHPTlNY9bVxTkBOFOHHl0pi/Dp2vU
+KfrQErnhPJSP8Em0AXvfh6KN6PFyp5WyoN5BhYc/Ac8ddy+sF+E1bkueZKM+MOPj
+nDLp3krjuH0SNgrmvzY4hS3f8lfkrcT5f/piQsK2rT6unG2qPdEChppNQO+dHHFv
+BA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c5:bf:ce:e4:8e:d2:b9:92:d9:78:eb:36:78:b0:
-                    d4:2b:a9:22:cd:83:57:58:a2:0f:5b:e5:c8:e4:f4:
-                    d6:41:2c:1f:5a:08:6b:12:7b:f6:8f:39:44:0f:f4:
-                    d2:3e:56:cd:63:87:13:b1:88:1a:da:f1:13:2f:4a:
-                    d0:76:78:61:6f:71:08:e0:0c:a2:9a:6a:6b:c7:8c:
-                    81:6f:e1:ea:22:09:83:fd:09:53:78:f0:1d:4e:f7:
-                    b3:17:17:7e:fc:dc:a5:21:83:7f:46:8c:81:af:07:
-                    68:91:14:54:43:bf:d2:85:fa:58:91:61:cc:87:bc:
-                    8d:b3:97:c1:a5:42:de:73:49:29:c9:0c:48:92:15:
-                    d9:0e:6b:3d:4a:4c:50:c6:8b:a5:69:6c:b2:2f:02:
-                    9e:0a:4f:27:1a:d0:1c:0e:b8:d9:fc:a7:62:92:69:
-                    0c:40:ec:49:3b:59:a5:38:fc:8e:cb:2f:91:9f:09:
-                    76:2c:b8:d4:25:7e:83:71:56:89:29:2c:a3:d8:bf:
-                    95:70:99:f5:cb:20:df:fa:fd:b8:89:e6:42:82:a9:
-                    01:d8:e0:42:f2:d2:c3:78:26:cc:fb:05:30:90:a0:
-                    83:bd:ce:b3:6d:bb:01:ae:84:aa:71:4f:d9:37:38:
-                    7e:07:35:6f:ed:88:c7:52:17:38:ac:c6:44:b5:fe:
-                    4a:b3
+                    00:df:57:52:0b:c1:38:ec:8a:61:d8:2f:9c:fd:66:
+                    0f:34:ab:e1:b3:fd:70:90:04:71:47:1a:3f:aa:44:
+                    57:c4:a9:c2:18:64:c1:3e:5d:aa:6c:b2:0f:48:53:
+                    d2:9e:08:2b:e6:ff:b1:57:3f:39:d4:7d:81:b7:69:
+                    0a:4d:5d:5c:2d:17:17:81:89:77:84:b8:1c:f5:31:
+                    a5:40:6c:6f:e9:e2:52:80:39:e9:71:95:b9:54:8b:
+                    5a:0d:18:05:fa:c5:6d:9d:27:c9:27:bd:7d:36:5f:
+                    ac:a0:42:a0:ce:66:06:6a:e0:57:9f:e2:c5:de:54:
+                    f0:e5:ec:89:f0:4f:6d:7b:70:2b:6e:c1:2b:ee:4c:
+                    37:91:43:40:e5:d6:ad:64:a4:a0:b8:29:37:8c:4d:
+                    01:2d:85:4f:06:8e:37:ba:5c:dc:96:f8:f5:37:62:
+                    5d:00:f5:85:ed:91:19:9d:cc:9a:ae:ce:7b:53:d4:
+                    5e:42:9a:5a:2c:fb:e1:7a:79:55:81:4e:b5:51:2d:
+                    b6:ad:10:f1:36:3e:fe:25:31:07:3c:7d:df:f6:3c:
+                    bc:e3:57:4d:e0:50:6d:d5:48:53:d1:4c:a4:c6:77:
+                    93:ac:be:e1:c9:3f:d3:f4:f8:3a:19:59:29:ff:46:
+                    5a:b6:3e:da:69:91:4d:c7:dc:27:ac:5f:ca:e4:be:
+                    99:6d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E5:AE:8F:CC:87:F7:B5:85:86:1E:4B:A6:CF:FC:B9:CA:10:C8:79:90
+                89:51:1E:D6:EA:B6:84:32:05:F0:15:A9:39:24:C0:46:25:5F:FB:8A
             X509v3 Authority Key Identifier: 
-                keyid:0F:59:3C:0D:B8:B1:5B:C5:96:9D:B4:E8:4F:CF:4B:A6:B3:AD:33:E7
+                keyid:91:4D:6E:E7:EC:8F:13:8D:84:C8:44:2E:23:E9:BA:B1:A6:6D:44:96
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -144,40 +144,40 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-         12:11:99:0b:59:f6:cd:61:bf:99:bc:25:83:b2:e7:4b:42:ec:
-         ee:1d:03:3b:cf:5d:76:95:19:2c:d1:41:d0:f6:5c:08:9d:6f:
-         66:50:07:ea:07:fa:88:01:96:05:39:8d:6a:e0:34:27:1e:a2:
-         80:c2:9b:91:ba:17:35:49:ef:8c:42:9d:59:ac:42:3f:52:fa:
-         ef:5f:51:aa:3a:dc:b6:ee:d6:8c:20:89:de:36:7d:a2:e2:ff:
-         eb:13:9d:dc:99:d1:62:33:c5:82:19:12:18:d4:94:5b:5f:c4:
-         f7:74:55:f0:be:fa:0e:4d:7a:01:7e:53:b3:2d:4d:09:b6:7b:
-         8e:0a:7c:3e:b9:39:a1:ee:b6:3d:3f:e8:4a:b0:1d:e4:ee:7b:
-         96:75:19:b5:71:6a:ae:e0:af:14:59:9f:fc:2b:13:dd:70:c9:
-         da:dd:a9:3c:14:3e:f1:69:3b:ce:42:b4:c5:3f:12:f8:37:eb:
-         bf:0c:9d:48:a4:6e:4c:9f:e7:3c:4f:a5:91:32:8b:7f:2e:5f:
-         e7:bf:bc:f4:a0:5f:43:f7:3a:1f:78:a3:0e:8e:c0:46:16:9e:
-         58:6a:0f:7e:e0:69:af:94:ec:bc:3a:7f:8b:44:ef:19:f8:14:
-         16:a4:1d:bd:49:c6:96:da:ba:11:a8:bc:36:11:c7:ad:ab:e0:
-         a5:e2:05:77
+         4b:c2:17:9e:2e:d2:af:2a:32:48:01:ca:5c:ec:24:2d:cc:81:
+         49:b9:86:3a:83:5e:23:9a:b6:8b:46:e8:43:04:20:9b:23:43:
+         b1:e2:a8:93:f0:1f:92:b6:5a:74:64:c1:df:29:20:40:39:fb:
+         d3:91:61:5b:40:e5:b0:95:6c:20:1a:b1:b9:ef:e6:1c:1c:dd:
+         61:78:86:12:7e:c2:59:d3:ed:3c:15:df:53:55:38:55:5d:b1:
+         7e:b0:52:9e:4f:dc:c2:60:66:8b:c5:1e:b6:9e:59:88:b5:cb:
+         07:94:d7:09:72:11:87:b3:16:d9:e7:10:c4:08:a0:48:51:e4:
+         b5:08:e2:30:d2:cd:7a:17:b0:be:af:ee:d1:fc:5c:a2:76:5e:
+         8e:f7:e1:c6:86:0a:8d:a9:41:86:8e:8d:08:44:69:a1:1b:c4:
+         94:59:41:dc:db:52:a6:41:36:63:7e:7e:53:26:a4:71:5a:c4:
+         41:ef:72:2a:1d:cd:1e:4a:df:7b:0a:5b:55:13:4e:80:34:34:
+         0b:44:7e:cb:40:ed:34:54:c9:53:1c:0a:9f:39:a5:b6:92:32:
+         83:b2:8e:55:4c:f7:2d:91:b0:99:dc:15:32:ea:59:3a:bd:d7:
+         15:f6:09:a7:57:77:a7:64:e6:a6:87:ac:4f:46:e3:f8:e5:6a:
+         0b:41:c0:82
 -----BEGIN CERTIFICATE-----
 MIIDXDCCAkSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxb/O5I7S
-uZLZeOs2eLDUK6kizYNXWKIPW+XI5PTWQSwfWghrEnv2jzlED/TSPlbNY4cTsYga
-2vETL0rQdnhhb3EI4Ayimmprx4yBb+HqIgmD/QlTePAdTvezFxd+/NylIYN/RoyB
-rwdokRRUQ7/ShfpYkWHMh7yNs5fBpULec0kpyQxIkhXZDms9SkxQxoulaWyyLwKe
-Ck8nGtAcDrjZ/KdikmkMQOxJO1mlOPyOyy+Rnwl2LLjUJX6DcVaJKSyj2L+VcJn1
-yyDf+v24ieZCgqkB2OBC8tLDeCbM+wUwkKCDvc6zbbsBroSqcU/ZNzh+BzVv7YjH
-Uhc4rMZEtf5KswIDAQABo4G6MIG3MB0GA1UdDgQWBBTlro/Mh/e1hYYeS6bP/LnK
-EMh5kDAfBgNVHSMEGDAWgBQPWTwNuLFbxZadtOhPz0ums60z5zA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA31dSC8E4
+7Iph2C+c/WYPNKvhs/1wkARxRxo/qkRXxKnCGGTBPl2qbLIPSFPSnggr5v+xVz85
+1H2Bt2kKTV1cLRcXgYl3hLgc9TGlQGxv6eJSgDnpcZW5VItaDRgF+sVtnSfJJ719
+Nl+soEKgzmYGauBXn+LF3lTw5eyJ8E9te3ArbsEr7kw3kUNA5datZKSguCk3jE0B
+LYVPBo43ulzclvj1N2JdAPWF7ZEZncyars57U9ReQppaLPvhenlVgU61US22rRDx
+Nj7+JTEHPH3f9jy841dN4FBt1UhT0UykxneTrL7hyT/T9Pg6GVkp/0Zatj7aaZFN
+x9wnrF/K5L6ZbQIDAQABo4G6MIG3MB0GA1UdDgQWBBSJUR7W6raEMgXwFak5JMBG
+JV/7ijAfBgNVHSMEGDAWgBSRTW7n7I8TjYTIRC4j6bqxpm1EljA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQASEZkLWfbNYb+ZvCWDsudL
-QuzuHQM7z112lRks0UHQ9lwInW9mUAfqB/qIAZYFOY1q4DQnHqKAwpuRuhc1Se+M
-Qp1ZrEI/UvrvX1GqOty27taMIIneNn2i4v/rE53cmdFiM8WCGRIY1JRbX8T3dFXw
-vvoOTXoBflOzLU0JtnuOCnw+uTmh7rY9P+hKsB3k7nuWdRm1cWqu4K8UWZ/8KxPd
-cMna3ak8FD7xaTvOQrTFPxL4N+u/DJ1IpG5Mn+c8T6WRMot/Ll/nv7z0oF9D9zof
-eKMOjsBGFp5Yag9+4GmvlOy8On+LRO8Z+BQWpB29ScaW2roRqLw2Ecetq+Cl4gV3
+VR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQBLwheeLtKvKjJIAcpc7CQt
+zIFJuYY6g14jmraLRuhDBCCbI0Ox4qiT8B+Stlp0ZMHfKSBAOfvTkWFbQOWwlWwg
+GrG57+YcHN1heIYSfsJZ0+08Fd9TVThVXbF+sFKeT9zCYGaLxR62nlmItcsHlNcJ
+chGHsxbZ5xDECKBIUeS1COIw0s16F7C+r+7R/Fyidl6O9+HGhgqNqUGGjo0IRGmh
+G8SUWUHc21KmQTZjfn5TJqRxWsRB73IqHc0eSt97CltVE06ANDQLRH7LQO00VMlT
+HAqfOaW2kjKDso5VTPctkbCZ3BUy6lk6vdcV9gmnV3enZOamh6xPRuP45WoLQcCC
 -----END CERTIFICATE-----
 
 Certificate:
@@ -194,30 +194,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c3:da:da:10:95:78:5c:73:c8:43:66:41:23:8e:
-                    3e:3f:a1:00:57:de:60:d9:2a:84:57:85:08:c6:60:
-                    79:65:2d:51:c9:93:c1:e7:fa:5b:1a:eb:6f:79:44:
-                    d5:71:f6:bd:f4:8c:86:0b:d9:e3:49:dd:a6:f3:5d:
-                    48:8a:25:4a:2a:20:80:c1:83:da:b8:c5:e0:20:de:
-                    40:67:bc:22:38:51:72:df:e3:b7:82:aa:47:ed:c9:
-                    74:a0:82:97:71:35:a8:2f:73:01:86:56:43:e8:88:
-                    42:f9:cc:9b:69:71:09:45:8c:39:82:14:db:2e:08:
-                    17:85:96:c5:69:46:73:55:9b:d8:12:4b:5f:32:70:
-                    cc:52:4e:7e:77:94:78:0e:f4:dd:40:ff:d7:3b:cc:
-                    f7:df:a9:a7:a1:a3:a3:4e:25:c8:e4:68:1c:e3:90:
-                    c2:c5:bb:66:3a:c1:8b:e3:1b:df:b9:8c:0c:9a:3a:
-                    6a:a9:8e:8d:b3:54:49:14:af:28:51:29:b2:5b:7b:
-                    68:34:4c:f3:bb:a5:5d:51:0b:99:6b:b1:fe:b3:16:
-                    d1:ef:2f:18:ee:8a:f8:05:9b:df:0d:92:3a:e0:62:
-                    7b:1d:bc:fb:60:45:ce:f9:e0:46:f6:16:39:08:a7:
-                    68:b5:da:e5:9f:7c:db:07:15:dc:47:e6:5d:a3:8c:
-                    06:7b
+                    00:a0:05:db:73:c2:62:ce:b7:44:2a:d4:fa:15:84:
+                    b6:22:26:47:86:56:7a:e1:d0:e9:d5:60:bb:f3:37:
+                    79:79:21:c1:68:a1:db:d3:22:14:7a:04:15:0e:6c:
+                    c3:1f:fe:0d:0d:b2:2e:6b:7a:19:63:f3:f8:e3:c9:
+                    e9:63:8e:5b:47:98:7e:68:02:2b:e3:9a:e0:9b:04:
+                    f5:04:a4:49:b9:f7:f4:e4:3d:86:34:72:62:e2:dd:
+                    80:71:de:ba:6a:01:eb:a2:fb:db:1f:7c:57:b6:89:
+                    2c:2d:5e:9e:3a:8d:4c:40:dc:96:9d:a4:4f:3a:e6:
+                    e7:a4:63:1c:12:29:76:dd:2f:82:72:4a:d7:81:d6:
+                    59:7a:88:8b:b0:7e:f4:b7:e9:5b:e1:86:8a:27:82:
+                    92:77:bc:b3:38:92:93:13:59:07:5a:79:23:a9:af:
+                    8c:3e:7f:c1:08:59:96:4c:4c:90:ca:0f:37:c6:52:
+                    c6:bd:f4:64:8b:a4:f9:6b:dc:f5:f2:a0:62:d5:29:
+                    79:9b:31:3a:6b:32:38:75:66:0a:55:9b:2d:b9:2b:
+                    5d:72:bc:ec:28:d0:3c:26:3e:c4:f2:f8:a8:14:11:
+                    dd:ca:3c:81:2f:20:55:4a:89:24:0e:77:d7:fa:36:
+                    a7:d8:b1:c3:c1:b2:c6:c1:db:83:f0:1a:37:f8:95:
+                    a2:dd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0F:59:3C:0D:B8:B1:5B:C5:96:9D:B4:E8:4F:CF:4B:A6:B3:AD:33:E7
+                91:4D:6E:E7:EC:8F:13:8D:84:C8:44:2E:23:E9:BA:B1:A6:6D:44:96
             X509v3 Authority Key Identifier: 
-                keyid:0F:59:3C:0D:B8:B1:5B:C5:96:9D:B4:E8:4F:CF:4B:A6:B3:AD:33:E7
+                keyid:91:4D:6E:E7:EC:8F:13:8D:84:C8:44:2E:23:E9:BA:B1:A6:6D:44:96
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -232,41 +232,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         3e:f9:8e:c2:1a:d7:ea:b1:71:03:6d:6d:a9:de:e9:45:1d:ab:
-         a3:26:4c:95:4b:15:ad:9d:be:94:aa:20:57:83:b2:32:96:06:
-         c1:37:9a:6a:18:41:ad:13:3b:52:23:a1:0a:1f:fc:8c:fa:3b:
-         88:43:d1:5e:1e:59:80:06:a5:0a:5e:95:66:3d:3d:cb:4a:b4:
-         38:77:a6:fa:04:29:e8:c1:b8:b5:f7:49:07:ae:53:dd:62:64:
-         3c:70:4c:64:b5:54:84:4d:04:3f:6d:86:80:9d:e2:2b:a4:88:
-         1c:38:74:fc:83:c3:60:c8:86:64:f5:d7:29:f7:e4:8e:02:a9:
-         47:a6:e1:46:0f:c4:b5:22:59:f1:a7:1b:ae:86:7c:70:32:d4:
-         8c:19:7f:a7:6d:82:0b:f3:42:37:02:b5:3d:f3:41:d5:7d:67:
-         97:80:78:9a:e2:06:54:18:bc:b0:7f:5d:77:15:bb:89:cb:4d:
-         29:0c:02:ab:b3:b7:40:44:3a:2c:4a:2e:54:43:7f:ff:b0:5f:
-         da:c5:5f:38:0e:ce:4e:18:ed:f3:f9:99:f0:7c:01:69:ca:0e:
-         15:85:1e:ff:b7:2d:04:6c:3b:5b:f9:7f:70:bc:0c:ac:16:b7:
-         d1:b4:f1:74:84:ad:73:e7:9f:c7:c9:ea:93:d9:f1:c6:a7:59:
-         bf:92:4e:ec
+         63:d1:10:02:d6:c9:15:54:98:5d:1e:fb:fe:43:46:f7:43:91:
+         b2:e2:68:75:1d:7c:0a:b5:85:5d:22:70:dc:89:3b:72:91:3d:
+         6b:d6:90:ac:a8:ec:c9:d9:03:03:93:90:7d:ed:f9:47:b9:c4:
+         93:61:eb:e0:99:eb:56:7e:ce:2b:9b:9f:3f:1d:22:b9:97:19:
+         47:c3:60:33:38:af:cc:7d:19:34:42:c8:fe:26:28:af:31:1d:
+         e8:36:85:c8:67:0f:f3:e0:8e:6c:2b:52:1b:32:05:e5:b5:d8:
+         8c:e9:d5:43:ab:12:6b:4d:da:cc:27:11:01:1f:f4:9a:50:96:
+         cb:f7:29:24:cc:d3:3f:a6:c9:01:d1:9c:e3:8c:f8:3f:ce:91:
+         d7:ed:68:67:40:03:29:93:ed:0c:c1:5d:83:31:e9:12:df:96:
+         a9:0e:44:9d:e5:7f:75:1b:15:58:71:ac:e5:32:ee:d6:5d:9f:
+         19:11:7b:d7:5d:0c:62:f3:ab:0c:e9:a3:6a:ee:f3:c1:d7:c7:
+         3a:87:9e:61:f3:20:3e:70:d4:8e:2a:1f:b0:1d:3d:f0:0c:93:
+         10:ff:91:c7:5e:1a:48:c5:11:b3:89:29:2a:c1:21:f4:d3:1e:
+         be:33:bc:a0:85:37:74:0b:87:f4:53:94:fc:71:35:b8:9b:f9:
+         8d:c4:f0:86
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMPa2hCVeFxzyENmQSOO
-Pj+hAFfeYNkqhFeFCMZgeWUtUcmTwef6Wxrrb3lE1XH2vfSMhgvZ40ndpvNdSIol
-SioggMGD2rjF4CDeQGe8IjhRct/jt4KqR+3JdKCCl3E1qC9zAYZWQ+iIQvnMm2lx
-CUWMOYIU2y4IF4WWxWlGc1Wb2BJLXzJwzFJOfneUeA703UD/1zvM99+pp6Gjo04l
-yORoHOOQwsW7ZjrBi+Mb37mMDJo6aqmOjbNUSRSvKFEpslt7aDRM87ulXVELmWux
-/rMW0e8vGO6K+AWb3w2SOuBiex28+2BFzvngRvYWOQinaLXa5Z982wcV3EfmXaOM
-BnsCAwEAAaOByzCByDAdBgNVHQ4EFgQUD1k8DbixW8WWnbToT89LprOtM+cwHwYD
-VR0jBBgwFoAUD1k8DbixW8WWnbToT89LprOtM+cwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKAF23PCYs63RCrU+hWE
+tiImR4ZWeuHQ6dVgu/M3eXkhwWih29MiFHoEFQ5swx/+DQ2yLmt6GWPz+OPJ6WOO
+W0eYfmgCK+Oa4JsE9QSkSbn39OQ9hjRyYuLdgHHeumoB66L72x98V7aJLC1enjqN
+TEDclp2kTzrm56RjHBIpdt0vgnJK14HWWXqIi7B+9LfpW+GGiieCkne8sziSkxNZ
+B1p5I6mvjD5/wQhZlkxMkMoPN8ZSxr30ZIuk+Wvc9fKgYtUpeZsxOmsyOHVmClWb
+LbkrXXK87CjQPCY+xPL4qBQR3co8gS8gVUqJJA531/o2p9ixw8GyxsHbg/AaN/iV
+ot0CAwEAAaOByzCByDAdBgNVHQ4EFgQUkU1u5+yPE42EyEQuI+m6saZtRJYwHwYD
+VR0jBBgwFoAUkU1u5+yPE42EyEQuI+m6saZtRJYwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA++Y7CGtfq
-sXEDbW2p3ulFHaujJkyVSxWtnb6UqiBXg7IylgbBN5pqGEGtEztSI6EKH/yM+juI
-Q9FeHlmABqUKXpVmPT3LSrQ4d6b6BCnowbi190kHrlPdYmQ8cExktVSETQQ/bYaA
-neIrpIgcOHT8g8NgyIZk9dcp9+SOAqlHpuFGD8S1IlnxpxuuhnxwMtSMGX+nbYIL
-80I3ArU980HVfWeXgHia4gZUGLywf113FbuJy00pDAKrs7dARDosSi5UQ3//sF/a
-xV84Ds5OGO3z+ZnwfAFpyg4VhR7/ty0EbDtb+X9wvAysFrfRtPF0hK1z55/HyeqT
-2fHGp1m/kk7s
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBj0RAC1skV
+VJhdHvv+Q0b3Q5Gy4mh1HXwKtYVdInDciTtykT1r1pCsqOzJ2QMDk5B97flHucST
+YevgmetWfs4rm58/HSK5lxlHw2AzOK/MfRk0Qsj+JiivMR3oNoXIZw/z4I5sK1Ib
+MgXltdiM6dVDqxJrTdrMJxEBH/SaUJbL9ykkzNM/pskB0ZzjjPg/zpHX7WhnQAMp
+k+0MwV2DMekS35apDkSd5X91GxVYcazlMu7WXZ8ZEXvXXQxi86sM6aNq7vPB18c6
+h55h8yA+cNSOKh+wHT3wDJMQ/5HHXhpIxRGziSkqwSH00x6+M7yghTd0C4f0U5T8
+cTW4m/mNxPCG
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -279,6 +279,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Does not have Basic Constraints
 
diff --git a/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem b/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem
index c43067f..cd5683e 100644
--- a/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem
+++ b/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a3:21:17:35:c0:77:f1:a3:51:77:11:45:3e:92:
-                    5f:97:65:eb:99:cc:26:e2:8c:f8:4a:d8:3d:71:17:
-                    a2:eb:6a:cf:2f:07:a8:fa:27:c1:f8:c5:50:22:42:
-                    a2:6f:92:4b:67:c3:0c:a7:ec:35:87:05:ac:eb:e3:
-                    27:cd:62:3d:c4:2e:80:f6:2a:af:31:05:c7:1b:0f:
-                    3b:71:6d:90:77:0d:b4:48:e7:26:2e:4a:44:af:bb:
-                    76:e0:62:ec:e6:61:cc:5b:61:ea:03:ce:4d:46:d0:
-                    96:e2:d5:d9:67:6f:0c:f2:06:e3:9a:14:04:68:82:
-                    88:d6:8b:c1:7f:fb:81:8c:e6:dc:88:20:f7:53:ef:
-                    d5:56:5b:5e:00:b3:5b:e8:ce:d0:d2:6a:ed:b8:4a:
-                    f2:4b:56:fb:63:75:d4:6b:a3:8a:d4:3f:e6:9e:29:
-                    1b:a7:23:61:ba:f0:d6:19:fb:8c:ad:40:2f:7c:14:
-                    36:0f:4b:f1:6e:f0:b8:6e:7d:cc:82:11:63:48:15:
-                    2f:34:00:99:cd:be:b4:1a:be:d8:73:38:00:ac:c1:
-                    09:41:a2:c4:ec:74:69:15:52:c4:45:2d:20:ff:b5:
-                    ce:d0:41:be:a2:b2:4d:ef:a7:3b:f1:df:9d:78:1a:
-                    9d:2c:6c:61:26:2e:f7:82:ab:50:76:6d:a3:d3:33:
-                    46:07
+                    00:c7:e4:5b:20:c1:2e:a1:89:32:d1:e5:80:0e:e3:
+                    12:77:b7:98:35:d7:6b:ec:9e:9c:50:92:b2:9a:28:
+                    b1:f6:e9:22:99:23:05:54:7d:67:de:8c:09:04:b7:
+                    6f:93:95:d6:c7:c5:48:23:6e:d2:56:32:19:bb:ac:
+                    b4:3d:3b:df:4b:40:85:48:25:2a:1b:22:c4:61:3b:
+                    08:5c:26:89:63:e7:19:27:c5:58:3f:9b:4d:b2:ff:
+                    b4:18:42:4d:7d:b5:a9:5a:4b:4b:46:1b:ce:bb:17:
+                    0e:29:10:78:50:10:bd:d2:16:b6:63:be:94:21:c6:
+                    e7:0b:d1:95:ea:d0:b5:ae:33:27:7e:02:0b:1b:4b:
+                    85:9c:d7:9a:4c:d1:82:b6:8f:4d:25:e4:f0:25:96:
+                    34:a7:f9:b5:e6:24:19:7c:56:54:de:b9:15:5e:39:
+                    ec:bb:12:ff:57:ef:87:37:46:fa:61:bc:a5:4a:32:
+                    6d:c3:35:b1:53:02:0b:cd:f1:6f:de:39:63:03:fe:
+                    a1:b6:7a:67:a9:f6:d0:df:d0:24:ad:39:f0:d8:58:
+                    e3:69:dd:6d:a5:ab:23:9f:be:ff:16:78:6a:0b:7e:
+                    ac:82:b6:5a:d7:e9:e4:b4:3c:fa:4f:64:29:74:5a:
+                    0d:fb:2e:d6:a0:c2:a8:86:3f:be:07:f7:1d:6e:ba:
+                    10:d1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                95:3C:F4:24:9F:9C:4A:CB:16:AA:A4:8A:AB:DF:D7:9D:6D:BA:AC:FA
+                82:4F:1E:35:E1:DD:95:CF:C7:D0:E7:CC:86:B7:EB:50:BF:33:62:07
             X509v3 Authority Key Identifier: 
-                keyid:29:73:E8:7F:69:DE:63:14:43:C6:6D:55:6C:C2:AE:84:FA:D5:FC:8C
+                keyid:E6:A1:BA:DF:A4:01:75:1C:DE:59:26:D2:66:E6:AE:E7:8D:3E:13:C2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         a7:dc:31:88:64:26:72:62:34:8d:3a:75:7a:71:d4:ae:7a:2c:
-         f4:2d:44:e9:e9:e8:c5:4d:79:b2:dc:12:ea:75:60:44:cb:6e:
-         df:22:47:d5:ae:f6:03:dc:c4:6b:cf:90:75:29:49:50:04:e0:
-         94:2a:b3:bf:d4:ae:e2:08:ad:52:22:65:91:33:09:79:cf:c9:
-         27:9b:52:dd:a8:0d:f5:21:b6:58:c4:5f:1b:79:72:69:7a:7b:
-         49:7d:64:67:d0:d6:1c:21:fe:e9:ae:39:1c:b4:3f:f2:f6:6d:
-         7e:30:15:76:a3:af:eb:43:c0:ed:f3:8a:bc:48:5c:47:fc:44:
-         09:da:7d:9a:20:f1:e2:1d:4d:40:34:0c:e1:68:16:9e:47:57:
-         1a:6a:19:e4:b2:6e:dd:7c:69:5f:b8:2b:bd:e7:cb:e4:9c:9c:
-         79:e1:a5:b3:82:a1:c9:5b:fd:73:d6:a8:1d:1d:d8:31:d6:37:
-         00:e9:7a:d2:a2:ee:c0:42:21:22:da:70:6e:a8:8c:fa:0c:24:
-         c9:70:4b:49:0a:c1:db:35:f2:71:d7:30:41:a7:6b:05:92:c6:
-         cd:8c:d4:de:c2:6b:aa:b8:70:d2:fa:cf:9a:01:af:34:80:95:
-         ad:ab:59:86:f2:56:6d:d8:43:95:24:e3:f7:7b:b9:83:89:ed:
-         e7:7a:2f:35
+         4b:dc:3c:86:b5:53:1c:c6:e6:77:4d:41:cf:e8:1f:37:dd:33:
+         8d:10:f9:1d:93:1d:41:96:86:79:7b:14:27:1b:70:80:10:96:
+         ea:38:e5:e2:a2:91:4a:c0:a9:8b:de:49:3b:f1:74:c0:bc:ae:
+         81:71:32:21:88:e5:2a:7d:41:d4:c0:e1:e7:0c:3a:d2:52:a5:
+         1e:ca:19:32:c0:88:c5:16:36:cc:b6:7c:cf:af:98:b3:2d:f8:
+         f8:40:08:16:52:00:ba:a2:3a:76:83:e8:cd:1d:95:d1:f1:67:
+         ec:06:e2:71:1d:01:ef:bb:4e:30:73:26:ad:3a:ac:25:4e:b9:
+         24:f9:9e:bb:72:b3:04:ba:ee:7e:16:bb:eb:42:66:04:14:48:
+         5e:5a:7d:0b:b3:5e:40:22:6c:65:e1:5b:61:1b:b6:dd:d0:e4:
+         5f:f8:b1:22:e1:d0:6c:d6:55:aa:a2:f5:9d:fa:62:f0:ab:4a:
+         c4:91:db:e4:fd:7d:df:a7:02:87:5e:17:76:2e:96:56:45:56:
+         cf:b2:2b:01:80:a4:81:9e:4e:a2:79:45:38:83:06:2e:61:ac:
+         22:bb:41:86:b2:9c:9b:b9:1f:62:23:27:cc:d4:bc:06:df:3e:
+         54:22:ed:69:02:e0:53:bc:ed:28:50:5d:82:fe:a6:8f:10:a2:
+         cd:38:17:80
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjIRc1
-wHfxo1F3EUU+kl+XZeuZzCbijPhK2D1xF6Lras8vB6j6J8H4xVAiQqJvkktnwwyn
-7DWHBazr4yfNYj3ELoD2Kq8xBccbDztxbZB3DbRI5yYuSkSvu3bgYuzmYcxbYeoD
-zk1G0Jbi1dlnbwzyBuOaFARogojWi8F/+4GM5tyIIPdT79VWW14As1voztDSau24
-SvJLVvtjddRro4rUP+aeKRunI2G68NYZ+4ytQC98FDYPS/Fu8LhufcyCEWNIFS80
-AJnNvrQavthzOACswQlBosTsdGkVUsRFLSD/tc7QQb6isk3vpzvx3514Gp0sbGEm
-LveCq1B2baPTM0YHAgMBAAGjgekwgeYwHQYDVR0OBBYEFJU89CSfnErLFqqkiqvf
-151tuqz6MB8GA1UdIwQYMBaAFClz6H9p3mMUQ8ZtVWzCroT61fyMMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDH5Fsg
+wS6hiTLR5YAO4xJ3t5g112vsnpxQkrKaKLH26SKZIwVUfWfejAkEt2+TldbHxUgj
+btJWMhm7rLQ9O99LQIVIJSobIsRhOwhcJolj5xknxVg/m02y/7QYQk19talaS0tG
+G867Fw4pEHhQEL3SFrZjvpQhxucL0ZXq0LWuMyd+AgsbS4Wc15pM0YK2j00l5PAl
+ljSn+bXmJBl8VlTeuRVeOey7Ev9X74c3RvphvKVKMm3DNbFTAgvN8W/eOWMD/qG2
+emep9tDf0CStOfDYWONp3W2lqyOfvv8WeGoLfqyCtlrX6eS0PPpPZCl0Wg37Ltag
+wqiGP74H9x1uuhDRAgMBAAGjgekwgeYwHQYDVR0OBBYEFIJPHjXh3ZXPx9DnzIa3
+61C/M2IHMB8GA1UdIwQYMBaAFOahut+kAXUc3lkm0mbmrueNPhPCMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAp9wxiGQmcmI0jTp1enHU
-rnos9C1E6enoxU15stwS6nVgRMtu3yJH1a72A9zEa8+QdSlJUATglCqzv9Su4git
-UiJlkTMJec/JJ5tS3agN9SG2WMRfG3lyaXp7SX1kZ9DWHCH+6a45HLQ/8vZtfjAV
-dqOv60PA7fOKvEhcR/xECdp9miDx4h1NQDQM4WgWnkdXGmoZ5LJu3XxpX7grvefL
-5JyceeGls4KhyVv9c9aoHR3YMdY3AOl60qLuwEIhItpwbqiM+gwkyXBLSQrB2zXy
-cdcwQadrBZLGzYzU3sJrqrhw0vrPmgGvNICVratZhvJWbdhDlSTj93u5g4nt53ov
-NQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAS9w8hrVTHMbmd01Bz+gf
+N90zjRD5HZMdQZaGeXsUJxtwgBCW6jjl4qKRSsCpi95JO/F0wLyugXEyIYjlKn1B
+1MDh5ww60lKlHsoZMsCIxRY2zLZ8z6+Ysy34+EAIFlIAuqI6doPozR2V0fFn7Abi
+cR0B77tOMHMmrTqsJU65JPmeu3KzBLrufha760JmBBRIXlp9C7NeQCJsZeFbYRu2
+3dDkX/ixIuHQbNZVqqL1nfpi8KtKxJHb5P1936cCh14Xdi6WVkVWz7IrAYCkgZ5O
+onlFOIMGLmGsIrtBhrKcm7kfYiMnzNS8Bt8+VCLtaQLgU7ztKFBdgv6mjxCizTgX
+gA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cf:bd:56:f0:dc:36:bc:a8:05:9b:fd:e3:c1:86:
-                    da:96:c5:0b:b0:7f:fd:e5:6d:f4:df:44:46:82:ed:
-                    45:60:4b:5d:c6:27:5a:d8:f1:3c:28:a5:eb:3f:a9:
-                    5f:bc:b2:a9:20:fe:09:fa:39:76:5f:2a:91:b2:ef:
-                    c9:47:70:c9:d0:ce:66:57:25:d0:72:12:c5:2a:ab:
-                    5c:bc:b3:9a:ba:c8:e9:cb:81:6a:16:f1:7d:a9:9f:
-                    e8:9a:0a:47:29:53:34:f7:99:70:14:c6:63:4c:aa:
-                    ba:96:7c:78:c4:11:d1:cc:3b:35:56:e8:7f:41:9c:
-                    41:69:d2:b0:dd:36:00:ed:dd:a2:bd:e2:56:29:c5:
-                    8d:4e:7b:71:fb:f5:a1:7b:37:df:d2:66:d4:fe:c8:
-                    24:6d:a3:c4:43:e9:d3:3e:e3:08:78:95:e9:86:e3:
-                    73:09:f9:04:fe:1a:25:19:5b:7c:a8:da:62:05:aa:
-                    56:1b:2a:d4:33:ff:4f:a2:fe:34:90:ec:e9:94:f5:
-                    0a:92:e9:b3:bf:c4:d3:78:80:0a:5e:4e:11:58:94:
-                    66:a8:52:b8:6e:49:64:cb:45:ee:7c:46:80:d7:3d:
-                    40:df:9e:69:54:ce:a5:7f:db:6b:73:42:c5:9c:6e:
-                    7c:b6:9f:ac:b9:8c:cd:7f:da:00:7b:3b:c2:dd:4d:
-                    44:c7
+                    00:9b:74:18:e4:63:39:09:24:c9:68:d2:cd:f3:7f:
+                    29:14:e9:46:45:e6:ca:47:3f:b5:21:38:a8:f4:ac:
+                    16:6c:51:16:b0:06:93:de:8a:b8:0e:28:02:52:bc:
+                    19:f7:b3:c7:47:a8:d2:20:9b:30:f6:b4:e9:cc:25:
+                    9e:30:f4:74:ed:73:1a:1c:4e:92:f8:8d:04:32:98:
+                    36:85:34:24:7a:c5:3c:e1:bc:0d:c0:a2:7f:ff:65:
+                    12:10:c0:19:6e:c1:cf:2f:04:90:b0:41:4c:42:42:
+                    ed:8a:7a:5f:4c:67:79:6c:e5:15:ce:96:02:bc:73:
+                    cd:4b:7a:e2:c6:54:ee:39:5b:74:39:df:b2:a9:8c:
+                    81:94:b4:ae:05:a0:d2:05:65:68:ee:54:ff:0c:ab:
+                    e2:d1:28:b4:4b:bc:5a:16:d1:84:24:5f:38:d3:7f:
+                    7b:3e:92:ef:8a:4e:ba:d2:2b:fb:f4:df:35:e5:55:
+                    82:d8:4a:5d:e6:49:4e:84:ee:bd:ea:a7:35:86:a8:
+                    dc:43:02:af:a7:ca:3e:2f:c6:bc:7b:aa:07:7a:69:
+                    cf:af:cb:63:89:9d:1d:6d:a8:b4:a1:64:29:bb:b7:
+                    7c:bb:d5:b0:72:89:f5:f9:26:8c:e1:e1:6f:a9:ef:
+                    d5:2c:66:ae:4e:c4:f5:31:ec:74:db:f9:a9:7f:86:
+                    37:e1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                29:73:E8:7F:69:DE:63:14:43:C6:6D:55:6C:C2:AE:84:FA:D5:FC:8C
+                E6:A1:BA:DF:A4:01:75:1C:DE:59:26:D2:66:E6:AE:E7:8D:3E:13:C2
             X509v3 Authority Key Identifier: 
-                keyid:77:B3:BD:49:4D:67:D0:7E:4F:67:C3:26:C7:1E:66:42:F9:6D:E4:08
+                keyid:57:30:6C:4F:34:D1:E0:27:4A:2F:E8:2A:EF:D3:75:01:24:6F:B5:FA
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         ad:b2:08:36:77:a1:da:aa:e4:31:7d:a8:61:03:be:0a:86:a2:
-         15:3b:08:bb:c8:86:eb:f8:52:c0:63:27:db:5c:25:16:98:05:
-         b1:84:dc:12:74:ce:25:a6:2e:be:32:2c:1f:0a:04:4e:9e:bb:
-         a1:b6:34:ef:20:2d:a3:fe:cc:b3:40:2e:75:9c:2d:c3:c0:e7:
-         8e:aa:9f:18:60:a9:61:18:4f:a5:d8:3d:c7:d3:09:62:6c:b8:
-         5a:99:3b:34:70:7b:7d:61:cc:f8:c9:71:97:2c:59:96:d2:1a:
-         c5:4e:ce:df:65:cf:18:05:bd:9f:bc:86:ba:16:55:79:58:d8:
-         f7:32:44:b6:59:32:9f:5d:ef:04:25:2a:2d:54:36:9e:62:0f:
-         c4:df:1c:10:64:02:ba:64:f2:ea:3d:cc:5c:ea:2e:4d:72:fa:
-         e9:72:0f:77:af:5d:1e:32:b9:64:7c:c5:b2:77:36:64:e5:ba:
-         d0:a0:8c:97:7d:b3:76:6c:c1:15:70:f8:0c:50:b8:3c:d4:6c:
-         4f:33:32:f2:c8:b8:35:cd:80:a2:3a:49:55:ba:2e:5b:c9:9a:
-         b6:77:fb:0f:01:2e:72:21:bc:88:f6:e3:71:8c:68:59:f3:1b:
-         d8:e1:d3:e3:6c:15:5d:8d:82:a3:db:84:44:58:3e:2f:a9:88:
-         56:2a:a6:4b
+         5f:8c:fb:75:af:a0:cb:79:8e:c5:c9:6d:90:11:3d:a7:aa:12:
+         ac:e9:22:15:b1:15:9a:8f:30:7b:5c:ad:f8:0a:df:38:69:4a:
+         56:38:1b:ee:c4:af:63:26:13:10:40:ef:3d:42:d0:77:25:b4:
+         54:59:05:72:d1:8d:61:d6:ad:7d:09:28:ba:a8:e1:99:aa:ae:
+         3b:78:03:d9:56:80:23:5d:81:81:0f:96:ce:07:35:3e:cf:88:
+         54:4d:7f:3c:5d:d0:03:93:3c:b7:76:9f:4d:51:37:4f:6b:8c:
+         18:e2:ba:e4:4c:18:a2:c2:80:c4:a8:4d:b7:81:d4:99:9d:28:
+         fe:ca:ab:a5:af:f1:0f:dd:13:84:47:be:fc:d2:88:47:d4:7c:
+         be:aa:62:49:65:f2:b8:b1:4e:ad:7a:f3:e1:52:50:6b:3c:8e:
+         07:df:d4:22:20:53:32:68:fa:0b:9c:8a:4a:e9:63:08:ee:eb:
+         65:10:05:1d:9d:c1:2b:a3:22:4b:90:37:59:c5:9f:90:ac:8f:
+         10:cb:76:3b:ca:1a:60:f5:a1:b1:26:24:05:92:2c:68:61:8e:
+         03:ca:54:e6:f6:40:b2:bf:db:a8:18:9f:62:ad:05:10:e1:05:
+         ce:be:2f:34:8c:1d:44:73:90:b3:4e:5b:7d:1a:2e:b6:2b:0f:
+         79:da:15:4b
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz71W8Nw2
-vKgFm/3jwYbalsULsH/95W3030RGgu1FYEtdxida2PE8KKXrP6lfvLKpIP4J+jl2
-XyqRsu/JR3DJ0M5mVyXQchLFKqtcvLOausjpy4FqFvF9qZ/omgpHKVM095lwFMZj
-TKq6lnx4xBHRzDs1Vuh/QZxBadKw3TYA7d2iveJWKcWNTntx+/Whezff0mbU/sgk
-baPEQ+nTPuMIeJXphuNzCfkE/holGVt8qNpiBapWGyrUM/9Pov40kOzplPUKkumz
-v8TTeIAKXk4RWJRmqFK4bklky0XufEaA1z1A355pVM6lf9trc0LFnG58tp+suYzN
-f9oAezvC3U1ExwIDAQABo4HLMIHIMB0GA1UdDgQWBBQpc+h/ad5jFEPGbVVswq6E
-+tX8jDAfBgNVHSMEGDAWgBR3s71JTWfQfk9nwybHHmZC+W3kCDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm3QY5GM5
+CSTJaNLN838pFOlGRebKRz+1ITio9KwWbFEWsAaT3oq4DigCUrwZ97PHR6jSIJsw
+9rTpzCWeMPR07XMaHE6S+I0EMpg2hTQkesU84bwNwKJ//2USEMAZbsHPLwSQsEFM
+QkLtinpfTGd5bOUVzpYCvHPNS3rixlTuOVt0Od+yqYyBlLSuBaDSBWVo7lT/DKvi
+0Si0S7xaFtGEJF840397PpLvik660iv79N815VWC2Epd5klOhO696qc1hqjcQwKv
+p8o+L8a8e6oHemnPr8tjiZ0dbai0oWQpu7d8u9Wwcon1+SaM4eFvqe/VLGauTsT1
+Mex02/mpf4Y34QIDAQABo4HLMIHIMB0GA1UdDgQWBBTmobrfpAF1HN5ZJtJm5q7n
+jT4TwjAfBgNVHSMEGDAWgBRXMGxPNNHgJ0ov6Crv03UBJG+1+jA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgWgMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AK2yCDZ3odqq5DF9qGEDvgqGohU7CLvIhuv4UsBjJ9tcJRaYBbGE3BJ0ziWmLr4y
-LB8KBE6eu6G2NO8gLaP+zLNALnWcLcPA546qnxhgqWEYT6XYPcfTCWJsuFqZOzRw
-e31hzPjJcZcsWZbSGsVOzt9lzxgFvZ+8hroWVXlY2PcyRLZZMp9d7wQlKi1UNp5i
-D8TfHBBkArpk8uo9zFzqLk1y+ulyD3evXR4yuWR8xbJ3NmTlutCgjJd9s3ZswRVw
-+AxQuDzUbE8zMvLIuDXNgKI6SVW6LlvJmrZ3+w8BLnIhvIj243GMaFnzG9jh0+Ns
-FV2NgqPbhERYPi+piFYqpks=
+AF+M+3WvoMt5jsXJbZARPaeqEqzpIhWxFZqPMHtcrfgK3zhpSlY4G+7Er2MmExBA
+7z1C0HcltFRZBXLRjWHWrX0JKLqo4Zmqrjt4A9lWgCNdgYEPls4HNT7PiFRNfzxd
+0AOTPLd2n01RN09rjBjiuuRMGKLCgMSoTbeB1JmdKP7Kq6Wv8Q/dE4RHvvzSiEfU
+fL6qYkll8rixTq168+FSUGs8jgff1CIgUzJo+gucikrpYwju62UQBR2dwSujIkuQ
+N1nFn5CsjxDLdjvKGmD1obEmJAWSLGhhjgPKVOb2QLK/26gYn2KtBRDhBc6+LzSM
+HURzkLNOW30aLrYrD3naFUs=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b3:13:19:f8:ad:c0:ff:5e:86:19:9a:3c:7f:0c:
-                    04:81:2c:bd:c4:ee:fe:6c:bb:b5:a2:ee:08:10:bd:
-                    bb:b6:d1:6c:0d:e7:49:6a:45:0f:0f:46:2b:b6:49:
-                    49:92:7d:c8:b8:81:c1:3f:70:80:39:8a:29:de:77:
-                    f0:a3:3e:ef:8f:8d:9c:74:ca:05:c6:5f:12:fc:d4:
-                    4f:47:64:5d:ea:4d:84:af:f0:d0:88:ff:58:98:ad:
-                    7f:6f:c0:22:bc:8e:a4:44:7b:2c:d3:3e:08:45:2a:
-                    13:20:90:1d:b6:0b:2c:4e:a4:40:c3:76:66:6f:eb:
-                    5c:49:fc:1d:81:8e:a7:cc:a3:91:bd:6f:fa:22:73:
-                    84:35:99:08:2c:3e:8e:0b:74:a6:16:79:b3:37:2f:
-                    66:5c:b1:4c:55:76:af:65:9c:cc:e6:af:b0:8c:c3:
-                    28:24:c9:a0:f2:b4:d0:74:d3:e0:72:af:0d:86:f0:
-                    21:4a:9e:4a:9f:95:7b:7a:73:4c:a9:b5:0a:ac:23:
-                    f7:63:64:88:fc:00:9b:69:23:33:1a:75:bd:6d:f6:
-                    f2:62:c7:68:19:d0:d1:55:2c:6d:f4:41:d8:3b:79:
-                    41:5f:44:97:b9:8f:5a:b4:0a:12:b9:94:0e:34:c7:
-                    a7:93:cf:dd:f1:3d:bb:0f:11:33:fc:c8:c4:76:2d:
-                    9e:cd
+                    00:b0:25:1d:c5:67:18:55:8a:dd:f2:19:86:be:a3:
+                    da:c1:03:6b:82:76:3f:09:83:35:0b:73:b7:53:40:
+                    64:94:90:8b:5b:e5:24:a6:bb:cf:46:ce:80:44:f1:
+                    85:17:86:d4:3b:9e:54:1f:7c:b4:ff:fd:c2:24:57:
+                    2e:a8:9d:97:57:92:ec:f7:bb:31:32:70:53:cc:7f:
+                    0f:b3:be:65:86:dc:f1:86:4b:c1:d9:df:1d:9b:d8:
+                    49:4c:16:54:de:f9:a2:8f:c3:b1:38:85:ea:6b:4c:
+                    04:8a:52:f6:3e:96:a4:86:9d:de:6d:be:ae:21:21:
+                    f6:82:03:3f:b0:23:70:f3:6f:31:a4:70:a1:4f:9f:
+                    23:c1:78:41:ff:f8:65:93:75:a5:f9:5a:74:1c:7f:
+                    74:1a:55:bf:8c:66:e5:30:44:fd:3d:f3:43:9a:c8:
+                    e0:43:96:41:ca:4b:9b:71:f5:ca:fe:91:d3:39:b6:
+                    03:c7:58:d9:7d:8f:7c:f6:1e:55:46:a6:03:dd:d6:
+                    38:b4:d2:f0:bd:b2:83:9b:ea:8b:6b:c8:5e:ff:7b:
+                    05:60:84:bf:ba:7b:6d:8f:88:4a:31:c7:11:c2:4c:
+                    08:e1:2e:26:19:f0:5d:08:c5:e2:61:f8:52:4a:0b:
+                    92:f5:a4:d0:7c:ad:91:59:f1:3b:d8:fa:62:0d:58:
+                    79:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                77:B3:BD:49:4D:67:D0:7E:4F:67:C3:26:C7:1E:66:42:F9:6D:E4:08
+                57:30:6C:4F:34:D1:E0:27:4A:2F:E8:2A:EF:D3:75:01:24:6F:B5:FA
             X509v3 Authority Key Identifier: 
-                keyid:77:B3:BD:49:4D:67:D0:7E:4F:67:C3:26:C7:1E:66:42:F9:6D:E4:08
+                keyid:57:30:6C:4F:34:D1:E0:27:4A:2F:E8:2A:EF:D3:75:01:24:6F:B5:FA
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         5d:bb:5a:36:f5:74:9c:51:8c:7c:b3:e0:71:91:0d:51:59:45:
-         92:b8:3c:f1:0a:42:ac:c3:c7:9f:4e:2a:61:09:7d:46:27:c7:
-         a6:23:09:39:39:18:9e:78:3f:94:cf:d6:44:5e:8e:9f:c4:4e:
-         fd:b4:ab:4f:56:ea:90:6d:4d:51:88:55:e2:56:c0:03:14:a2:
-         99:d2:1d:67:03:75:6d:5c:a0:c5:5c:78:a6:c5:8e:96:6e:7a:
-         4f:a1:b0:4e:29:62:92:bc:44:88:a4:72:8d:64:16:da:ff:c4:
-         e8:4c:d3:eb:a6:03:85:eb:a8:42:ee:ae:c0:87:f2:43:41:05:
-         43:e2:d5:ad:b6:59:dd:59:51:6c:2b:77:f3:51:a9:e0:9b:3e:
-         ba:04:64:d3:f3:ce:59:5a:ad:b1:56:da:91:80:89:d9:62:81:
-         99:9c:a4:49:24:7a:bc:91:4e:ab:86:e6:0b:76:0d:34:2d:75:
-         fa:7b:13:f5:b3:52:22:c1:57:7c:cd:79:0c:2b:ba:8b:87:83:
-         52:59:5b:69:55:9d:c4:0a:98:b0:b0:dd:88:86:8c:28:c3:b2:
-         bd:35:85:b1:f0:78:6a:99:ac:63:52:08:5b:69:97:55:c0:87:
-         81:be:bd:09:7f:eb:56:a9:84:9f:f6:9c:df:f2:19:41:60:f1:
-         06:d1:77:38
+         37:42:51:57:5a:64:63:1c:1c:47:88:7d:76:dc:d7:5a:81:75:
+         eb:36:20:4b:1c:99:82:1b:e6:48:f6:10:c2:1b:07:7e:12:f6:
+         c9:39:47:4e:9b:30:4e:78:4a:0f:69:d5:19:51:dc:64:df:c9:
+         e2:09:4e:15:55:25:5f:47:43:66:d4:4e:cc:f7:89:a2:60:dd:
+         42:a7:3e:69:b3:28:d8:a3:60:2a:4e:d1:3e:65:2d:fa:c8:13:
+         29:fc:0e:a8:ad:82:47:e0:fc:3b:54:1d:da:ac:fd:f3:db:39:
+         d9:bb:a9:96:33:43:96:0c:95:df:be:af:a2:64:44:08:ad:5f:
+         83:1b:be:a3:ad:41:a2:0f:0b:05:f5:49:4c:b5:b2:cb:a7:e4:
+         30:c7:44:5a:bd:3b:34:d8:ad:27:6b:f5:83:ed:78:53:2e:d7:
+         cc:b4:82:d7:52:2b:06:c4:62:96:53:23:e7:4a:8d:13:b5:95:
+         3f:34:25:23:e9:0a:04:74:83:f1:c3:c9:94:2e:b0:0a:a2:b6:
+         ce:dc:03:11:a2:52:7b:26:7f:5e:37:98:7b:7b:3f:99:a8:a5:
+         07:4b:55:90:7a:21:a9:32:92:1d:c6:f3:55:ca:4e:a2:83:14:
+         d8:1f:d2:1d:76:11:19:ae:10:81:72:35:bf:0b:fa:d1:66:a8:
+         f5:19:d9:6b
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALMTGfitwP9ehhmaPH8M
-BIEsvcTu/my7taLuCBC9u7bRbA3nSWpFDw9GK7ZJSZJ9yLiBwT9wgDmKKd538KM+
-74+NnHTKBcZfEvzUT0dkXepNhK/w0Ij/WJitf2/AIryOpER7LNM+CEUqEyCQHbYL
-LE6kQMN2Zm/rXEn8HYGOp8yjkb1v+iJzhDWZCCw+jgt0phZ5szcvZlyxTFV2r2Wc
-zOavsIzDKCTJoPK00HTT4HKvDYbwIUqeSp+Ve3pzTKm1Cqwj92NkiPwAm2kjMxp1
-vW328mLHaBnQ0VUsbfRB2Dt5QV9El7mPWrQKErmUDjTHp5PP3fE9uw8RM/zIxHYt
-ns0CAwEAAaOByzCByDAdBgNVHQ4EFgQUd7O9SU1n0H5PZ8Mmxx5mQvlt5AgwHwYD
-VR0jBBgwFoAUd7O9SU1n0H5PZ8Mmxx5mQvlt5AgwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALAlHcVnGFWK3fIZhr6j
+2sEDa4J2PwmDNQtzt1NAZJSQi1vlJKa7z0bOgETxhReG1DueVB98tP/9wiRXLqid
+l1eS7Pe7MTJwU8x/D7O+ZYbc8YZLwdnfHZvYSUwWVN75oo/DsTiF6mtMBIpS9j6W
+pIad3m2+riEh9oIDP7AjcPNvMaRwoU+fI8F4Qf/4ZZN1pfladBx/dBpVv4xm5TBE
+/T3zQ5rI4EOWQcpLm3H1yv6R0zm2A8dY2X2PfPYeVUamA93WOLTS8L2yg5vqi2vI
+Xv97BWCEv7p7bY+ISjHHEcJMCOEuJhnwXQjF4mH4UkoLkvWk0HytkVnxO9j6Yg1Y
+eQcCAwEAAaOByzCByDAdBgNVHQ4EFgQUVzBsTzTR4CdKL+gq79N1ASRvtfowHwYD
+VR0jBBgwFoAUVzBsTzTR4CdKL+gq79N1ASRvtfowNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBdu1o29XSc
-UYx8s+BxkQ1RWUWSuDzxCkKsw8efTiphCX1GJ8emIwk5ORieeD+Uz9ZEXo6fxE79
-tKtPVuqQbU1RiFXiVsADFKKZ0h1nA3VtXKDFXHimxY6WbnpPobBOKWKSvESIpHKN
-ZBba/8ToTNPrpgOF66hC7q7Ah/JDQQVD4tWttlndWVFsK3fzUangmz66BGTT885Z
-Wq2xVtqRgInZYoGZnKRJJHq8kU6rhuYLdg00LXX6exP1s1IiwVd8zXkMK7qLh4NS
-WVtpVZ3ECpiwsN2Ihowow7K9NYWx8HhqmaxjUghbaZdVwIeBvr0Jf+tWqYSf9pzf
-8hlBYPEG0Xc4
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA3QlFXWmRj
+HBxHiH123NdagXXrNiBLHJmCG+ZI9hDCGwd+EvbJOUdOmzBOeEoPadUZUdxk38ni
+CU4VVSVfR0Nm1E7M94miYN1Cpz5psyjYo2AqTtE+ZS36yBMp/A6orYJH4Pw7VB3a
+rP3z2znZu6mWM0OWDJXfvq+iZEQIrV+DG76jrUGiDwsF9UlMtbLLp+Qwx0RavTs0
+2K0na/WD7XhTLtfMtILXUisGxGKWUyPnSo0TtZU/NCUj6QoEdIPxw8mULrAKorbO
+3AMRolJ7Jn9eN5h7ez+ZqKUHS1WQeiGpMpIdxvNVyk6igxTYH9IddhEZrhCBcjW/
+C/rRZqj1Gdlr
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: keyCertSign bit is not set
 
diff --git a/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem b/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem
index 71e03f9..42fe109 100644
--- a/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem
+++ b/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:20:16:45:28:21:d2:a5:63:de:24:67:38:92:
-                    4c:f1:a4:c8:45:30:94:b8:aa:5f:7c:1a:3f:6c:28:
-                    2f:31:7e:a6:bb:af:45:46:68:a2:f2:5d:a4:94:4b:
-                    9b:c9:4c:e0:5d:be:ce:34:5e:08:df:a7:50:c0:30:
-                    94:98:0f:52:ec:ec:91:23:91:bc:24:60:65:9d:b7:
-                    74:38:7f:9d:d4:20:94:5c:1b:6f:71:82:e1:b5:98:
-                    95:3c:33:48:7e:6a:c6:e0:59:e6:a2:c5:0b:95:78:
-                    0e:7e:e3:a8:16:93:0a:43:df:ec:d7:03:c0:f1:60:
-                    13:45:9d:52:b5:37:66:03:79:78:8f:d6:53:87:7c:
-                    dd:50:8a:16:54:33:bb:62:f2:42:a0:fa:49:c3:c1:
-                    e2:c4:c8:d7:db:49:16:43:c8:69:0e:88:e2:f1:2d:
-                    c6:59:c6:5a:e3:d8:57:e9:a7:10:48:73:c8:c8:f7:
-                    a1:6d:57:25:b3:04:43:05:6a:90:1d:87:36:67:7f:
-                    3e:97:eb:5b:66:03:3a:10:56:32:1d:04:cc:43:90:
-                    82:9c:ed:d2:b4:4d:ba:d0:ac:23:26:f9:25:5e:63:
-                    6c:e1:83:07:2b:ec:38:9a:d1:82:bc:38:a0:64:58:
-                    19:c2:77:3c:e9:bd:20:d5:45:43:8d:ee:51:ba:98:
-                    95:65
+                    00:c4:84:2b:01:17:da:c2:19:ed:2c:f5:e5:d3:3a:
+                    7c:e0:ae:b2:b7:08:77:73:10:3b:64:ed:d3:80:8e:
+                    e6:30:bd:a7:36:de:8d:67:2e:f7:07:36:b3:3b:1e:
+                    90:2e:f0:ae:e6:13:90:58:ef:c3:8d:c2:f7:cd:42:
+                    5b:0d:45:0d:0e:67:c3:ee:e6:21:5b:e7:a7:f8:f2:
+                    d7:82:d6:0e:be:49:bb:24:eb:7e:dc:7f:03:c1:58:
+                    4a:0c:04:d4:d3:c2:f1:af:21:70:ad:d4:dd:82:ab:
+                    da:fe:95:bb:cf:86:da:36:3d:b7:7b:6d:04:72:f3:
+                    29:5c:f6:f5:c5:27:37:3c:68:99:3e:ec:91:dd:3f:
+                    8c:79:db:9f:cc:66:1c:ad:5b:20:8f:61:64:39:91:
+                    35:ef:ae:ac:4a:44:08:9c:62:5e:be:00:78:f4:90:
+                    7e:b8:5a:88:d6:b7:24:fb:3e:05:0c:38:54:e8:9e:
+                    3a:3c:5d:f6:8a:07:f1:d4:0f:db:fe:1f:07:4b:ed:
+                    b0:84:a2:d6:fb:a3:6c:5e:9c:54:27:c0:c2:2a:06:
+                    a2:d8:e1:fc:62:1e:55:c4:7c:24:fa:85:a9:c2:6b:
+                    0c:cd:b6:76:43:55:c0:46:74:37:9c:3a:d2:82:a3:
+                    d4:aa:3b:64:cc:8a:39:9f:37:0c:eb:fa:44:5e:49:
+                    c2:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7E:D1:A4:40:CE:81:CA:14:BD:C9:25:39:E5:F7:21:B6:24:90:61:1D
+                2E:E9:9C:97:E6:50:AF:13:B9:C3:CB:CE:21:70:CF:E6:C9:1D:E2:F6
             X509v3 Authority Key Identifier: 
-                keyid:60:72:15:4D:8C:1A:E1:CD:8F:EF:00:AA:9B:37:4C:00:57:29:66:15
+                keyid:AF:9F:E8:B3:08:2D:62:FF:99:69:5A:52:FA:0E:FE:09:99:1B:03:BF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         6f:98:46:c6:44:e8:ba:f3:06:49:81:74:87:9e:d5:a1:0c:54:
-         66:56:88:7d:89:5e:cd:2f:1a:06:af:d8:c7:ed:9e:ad:8c:7a:
-         b0:3d:eb:93:3a:59:49:89:ba:ec:27:15:0e:08:d0:cd:ff:40:
-         57:3f:c2:77:c1:08:cb:5d:4f:40:ec:20:b3:96:9b:43:fa:96:
-         00:42:cd:dc:db:27:3e:98:fd:8a:45:80:ef:5c:86:20:12:a5:
-         83:b3:74:66:09:57:1c:4d:7e:0e:00:c4:57:dc:86:c0:2b:db:
-         fb:3a:77:1c:5f:7d:8f:ae:47:16:96:85:48:a7:95:4c:bc:b1:
-         18:09:34:c4:78:76:57:46:db:1e:b7:12:16:78:54:ec:2d:eb:
-         44:00:54:48:1d:6b:b0:d1:98:a8:58:ab:3d:f2:f2:5b:06:44:
-         d1:d5:d6:f5:d1:f2:c4:46:93:9a:9b:29:a8:9f:91:3d:e5:16:
-         d6:d6:ba:55:76:1c:2d:90:76:2f:92:a1:e4:52:a4:f3:f3:2a:
-         3c:b3:11:78:f6:9a:ce:17:c3:8f:da:57:fc:a2:02:06:59:9f:
-         18:10:ba:45:b4:0d:3d:64:aa:6c:ae:5b:a6:c8:f3:8b:d0:b0:
-         b6:1b:4a:cc:6c:fe:f9:d6:e4:15:da:28:1b:22:b3:ce:b4:6f:
-         bf:39:9b:34
+         50:bc:7d:72:3e:28:61:ab:86:50:31:4c:64:31:79:92:21:d0:
+         e2:54:75:4f:6b:81:c1:f2:86:c7:a2:9f:9f:40:b8:56:72:8d:
+         04:45:16:57:37:b0:34:28:10:4d:04:71:3d:bd:1c:c2:00:6b:
+         38:74:69:2b:17:dd:dc:2e:29:98:e3:93:d6:21:2a:e5:0f:1a:
+         55:94:78:38:37:b3:4a:f6:37:a1:68:3b:19:f3:56:81:6f:67:
+         1a:08:ea:84:b7:37:78:64:84:5e:b3:2b:17:bd:5c:14:7d:bb:
+         1a:00:2e:0e:00:99:fb:87:c3:8f:7a:fc:64:60:c8:83:f6:a7:
+         d0:fc:7a:85:4c:dd:c0:ff:19:65:92:73:fa:e4:f2:99:7c:65:
+         b4:0d:a8:d5:e1:2a:5d:e6:7c:2f:9a:72:c2:cb:e0:af:75:59:
+         36:c7:ff:dc:40:d3:65:9b:6a:68:e8:ec:47:0c:a5:02:3c:de:
+         c3:f4:44:c7:62:54:62:8a:24:b4:db:19:37:2f:98:28:ed:fb:
+         92:4a:4b:16:85:ee:dd:b7:49:05:bc:84:7f:8e:c5:4f:e6:87:
+         04:a2:1e:12:f7:b8:e0:d0:ca:ae:ea:34:3f:99:e2:42:60:15:
+         f2:34:b8:d4:6f:7e:fa:f5:ba:76:98:49:3b:16:ca:36:51:65:
+         02:d5:cc:8e
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/IBZF
-KCHSpWPeJGc4kkzxpMhFMJS4ql98Gj9sKC8xfqa7r0VGaKLyXaSUS5vJTOBdvs40
-Xgjfp1DAMJSYD1Ls7JEjkbwkYGWdt3Q4f53UIJRcG29xguG1mJU8M0h+asbgWeai
-xQuVeA5+46gWkwpD3+zXA8DxYBNFnVK1N2YDeXiP1lOHfN1QihZUM7ti8kKg+knD
-weLEyNfbSRZDyGkOiOLxLcZZxlrj2FfppxBIc8jI96FtVyWzBEMFapAdhzZnfz6X
-61tmAzoQVjIdBMxDkIKc7dK0TbrQrCMm+SVeY2zhgwcr7Dia0YK8OKBkWBnCdzzp
-vSDVRUON7lG6mJVlAgMBAAGjgekwgeYwHQYDVR0OBBYEFH7RpEDOgcoUvcklOeX3
-IbYkkGEdMB8GA1UdIwQYMBaAFGByFU2MGuHNj+8Aqps3TABXKWYVMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEhCsB
+F9rCGe0s9eXTOnzgrrK3CHdzEDtk7dOAjuYwvac23o1nLvcHNrM7HpAu8K7mE5BY
+78ONwvfNQlsNRQ0OZ8Pu5iFb56f48teC1g6+Sbsk637cfwPBWEoMBNTTwvGvIXCt
+1N2Cq9r+lbvPhto2Pbd7bQRy8ylc9vXFJzc8aJk+7JHdP4x525/MZhytWyCPYWQ5
+kTXvrqxKRAicYl6+AHj0kH64WojWtyT7PgUMOFTonjo8XfaKB/HUD9v+HwdL7bCE
+otb7o2xenFQnwMIqBqLY4fxiHlXEfCT6hanCawzNtnZDVcBGdDecOtKCo9SqO2TM
+ijmfNwzr+kReScIHAgMBAAGjgekwgeYwHQYDVR0OBBYEFC7pnJfmUK8TucPLziFw
+z+bJHeL2MB8GA1UdIwQYMBaAFK+f6LMILWL/mWlaUvoO/gmZGwO/MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAb5hGxkTouvMGSYF0h57V
-oQxUZlaIfYlezS8aBq/Yx+2erYx6sD3rkzpZSYm67CcVDgjQzf9AVz/Cd8EIy11P
-QOwgs5abQ/qWAELN3NsnPpj9ikWA71yGIBKlg7N0ZglXHE1+DgDEV9yGwCvb+zp3
-HF99j65HFpaFSKeVTLyxGAk0xHh2V0bbHrcSFnhU7C3rRABUSB1rsNGYqFirPfLy
-WwZE0dXW9dHyxEaTmpspqJ+RPeUW1ta6VXYcLZB2L5Kh5FKk8/MqPLMRePaazhfD
-j9pX/KICBlmfGBC6RbQNPWSqbK5bpsjzi9CwthtKzGz++dbkFdooGyKzzrRvvzmb
-NA==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAULx9cj4oYauGUDFMZDF5
+kiHQ4lR1T2uBwfKGx6Kfn0C4VnKNBEUWVzewNCgQTQRxPb0cwgBrOHRpKxfd3C4p
+mOOT1iEq5Q8aVZR4ODezSvY3oWg7GfNWgW9nGgjqhLc3eGSEXrMrF71cFH27GgAu
+DgCZ+4fDj3r8ZGDIg/an0Px6hUzdwP8ZZZJz+uTymXxltA2o1eEqXeZ8L5pywsvg
+r3VZNsf/3EDTZZtqaOjsRwylAjzew/REx2JUYooktNsZNy+YKO37kkpLFoXu3bdJ
+BbyEf47FT+aHBKIeEve44NDKruo0P5niQmAV8jS41G9++vW6dphJOxbKNlFlAtXM
+jg==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c7:04:ea:a3:74:51:66:9f:f2:6b:5d:9a:3d:96:
-                    bd:5c:b3:9e:9c:df:64:42:c7:85:1e:56:7a:3e:d5:
-                    3d:c9:f3:17:46:a3:a0:98:f6:80:df:f4:54:ca:e2:
-                    d5:e9:15:b8:3a:19:4e:1e:26:67:00:80:96:d5:bc:
-                    1e:af:a4:f3:23:de:15:72:89:1f:50:3f:8c:e1:62:
-                    6d:e1:0d:42:9f:67:76:aa:f5:20:b4:4d:58:fd:3d:
-                    63:57:bc:9c:23:fa:db:31:0c:09:37:0d:7c:f4:d1:
-                    06:c4:7f:b1:22:d1:df:05:43:a4:12:94:e2:02:ee:
-                    b7:ae:cd:48:04:00:39:4f:dc:40:f7:62:a7:d9:3e:
-                    81:9c:5d:98:6f:8d:0f:da:b6:0e:ad:1d:5b:ff:b6:
-                    50:90:ab:55:c7:2a:db:d8:67:6c:0f:87:68:8a:2a:
-                    79:24:a7:64:d8:c1:72:15:ff:6e:ca:31:f1:92:42:
-                    2e:78:a5:ce:2b:07:8a:4b:a0:80:88:14:76:d6:e1:
-                    ad:b2:75:9d:79:9b:d6:c2:cc:ac:74:67:d2:5b:90:
-                    6f:c4:8f:50:4c:ce:50:89:a4:69:ab:ca:d4:d1:a4:
-                    47:ae:0d:46:f3:5f:28:91:66:27:02:f0:7a:da:aa:
-                    80:be:c2:e7:83:89:06:49:de:9d:60:03:a3:fc:11:
-                    e2:2b
+                    00:df:eb:bf:48:cc:eb:45:fc:5e:33:cc:c3:37:cb:
+                    9c:fb:81:43:05:8a:65:a6:a9:25:13:16:ff:2b:46:
+                    0b:21:83:c4:ed:3e:f6:33:94:20:87:01:a9:8d:8a:
+                    e9:c6:e6:a1:a3:40:2a:c4:8e:21:7a:e8:4b:c6:e8:
+                    21:fc:0b:8f:2f:7b:a9:a4:1c:54:1f:fb:a5:a4:9d:
+                    30:60:ff:44:e6:c1:bd:5e:71:d8:30:07:e0:35:a0:
+                    30:c2:bb:7d:14:87:0c:82:84:77:7f:00:fa:9a:ec:
+                    14:f6:54:91:98:5e:c2:b3:9c:23:f5:de:30:ae:24:
+                    03:c1:25:bb:d3:f7:98:c8:c8:7a:f8:72:5d:28:82:
+                    d8:b4:73:6a:9a:ce:ed:31:ed:b4:a0:ed:4f:f5:94:
+                    60:f9:fb:c7:11:05:88:a1:cb:dd:f4:0f:6f:8a:bc:
+                    ed:e5:f3:80:c3:48:b0:73:2f:6f:a7:42:26:00:31:
+                    6d:8e:4b:63:f8:fa:36:03:7f:d2:17:e6:55:b3:0e:
+                    a8:a1:4a:e2:b4:9c:4a:db:e7:71:6d:9b:21:3a:7f:
+                    9f:31:94:b5:5f:d5:c2:c7:8f:9b:bc:fb:e9:19:3b:
+                    85:ce:7b:00:2a:72:9b:59:0c:9b:a2:da:03:ba:91:
+                    1a:5d:9f:59:a2:55:09:51:42:80:8f:5c:4e:1b:4b:
+                    b6:09
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                60:72:15:4D:8C:1A:E1:CD:8F:EF:00:AA:9B:37:4C:00:57:29:66:15
+                AF:9F:E8:B3:08:2D:62:FF:99:69:5A:52:FA:0E:FE:09:99:1B:03:BF
             X509v3 Authority Key Identifier: 
-                keyid:60:B4:95:7F:EA:F1:29:B2:E9:9D:64:83:A9:C8:A3:49:6F:3E:18:53
+                keyid:71:AC:06:E4:64:D6:87:ED:C4:25:9C:B4:C1:47:55:53:A4:1D:C3:91
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
-         0b:ea:a8:1e:f0:70:66:9b:e0:48:9a:fa:62:3b:80:b0:9f:41:
-         e3:60:35:9c:b4:6e:0c:32:17:9d:38:72:b3:de:69:45:69:b1:
-         4b:87:2a:e1:68:59:d6:b9:03:c4:88:7e:e0:77:26:3d:c5:ad:
-         55:3f:13:bc:13:42:0f:9c:be:f7:70:3e:19:79:96:3b:b8:12:
-         d6:8a:a2:04:d2:17:ee:bd:78:db:cc:9f:54:87:26:89:61:c9:
-         f1:3e:8f:2f:19:55:49:05:c0:35:b2:ea:c4:ec:9a:11:d6:88:
-         f2:4b:ad:68:0a:32:75:42:42:a0:6a:51:cb:0f:63:32:20:4a:
-         59:89:e5:f9:61:ee:63:80:e0:71:03:d1:58:ea:d6:31:24:11:
-         ef:03:44:02:76:86:67:99:a5:71:18:a8:4e:be:fe:78:63:20:
-         67:b1:5a:1d:52:2a:48:fb:8a:ee:99:af:8f:57:37:43:67:1c:
-         54:00:d0:50:8c:ce:18:e0:ef:7b:cc:e1:13:d1:cc:3f:ea:3c:
-         ce:cf:07:fc:6e:4a:09:b1:1c:54:70:a4:21:47:5d:70:7d:b4:
-         04:3e:30:50:1d:86:2a:a6:67:3f:bd:b0:cb:57:e0:26:81:45:
-         c0:9a:86:8c:e6:ab:d0:87:9a:05:ee:2c:c5:eb:c6:c7:c0:94:
-         68:4a:48:20
+         92:14:97:70:e2:7e:a2:bb:28:e7:32:2b:8f:6d:73:2c:21:c9:
+         84:5a:52:94:2c:9c:f5:f9:e2:27:39:c2:81:7b:75:c6:ac:d3:
+         ca:92:62:55:8f:f5:ab:a8:c0:bc:b6:50:3f:fc:a2:4b:1c:ef:
+         64:6a:a2:b8:6c:c7:45:88:dd:45:3a:62:1c:85:9a:c3:a9:90:
+         cd:ec:25:a9:3d:e2:ce:65:19:43:ca:e5:e6:fe:e4:23:26:c2:
+         99:15:04:23:6e:52:57:9a:ac:1c:7b:cf:61:d9:ed:a9:d8:8c:
+         5c:db:ee:89:31:91:04:8c:b6:9c:7c:ed:7b:21:2e:d4:51:59:
+         84:f1:40:64:0c:57:df:7b:07:29:81:5f:96:f7:40:d7:05:2a:
+         e1:8d:4f:2c:76:29:4a:33:63:8b:c4:ae:3d:1d:9c:37:7e:e2:
+         4c:4e:f1:17:d0:cc:2d:89:60:9f:a7:8f:e0:51:95:8d:7f:94:
+         9f:05:f9:a9:a6:f0:b8:56:ad:75:23:ca:27:8f:93:5c:c8:3a:
+         44:20:a3:ed:52:90:7c:ae:23:d8:fc:d7:cf:bb:50:18:55:5e:
+         56:83:cc:5f:91:95:62:c5:2f:b6:4e:55:41:dc:4b:34:cd:54:
+         5c:01:fa:2e:ab:e8:7f:57:fe:c0:70:c0:00:d4:26:6e:47:6e:
+         69:6d:7b:8a
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxwTqo3RR
-Zp/ya12aPZa9XLOenN9kQseFHlZ6PtU9yfMXRqOgmPaA3/RUyuLV6RW4OhlOHiZn
-AICW1bwer6TzI94VcokfUD+M4WJt4Q1Cn2d2qvUgtE1Y/T1jV7ycI/rbMQwJNw18
-9NEGxH+xItHfBUOkEpTiAu63rs1IBAA5T9xA92Kn2T6BnF2Yb40P2rYOrR1b/7ZQ
-kKtVxyrb2GdsD4doiip5JKdk2MFyFf9uyjHxkkIueKXOKweKS6CAiBR21uGtsnWd
-eZvWwsysdGfSW5BvxI9QTM5QiaRpq8rU0aRHrg1G818okWYnAvB62qqAvsLng4kG
-Sd6dYAOj/BHiKwIDAQABo4HLMIHIMB0GA1UdDgQWBBRgchVNjBrhzY/vAKqbN0wA
-VylmFTAfBgNVHSMEGDAWgBRgtJV/6vEpsumdZIOpyKNJbz4YUzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+u/SMzr
+RfxeM8zDN8uc+4FDBYplpqklExb/K0YLIYPE7T72M5QghwGpjYrpxuaho0AqxI4h
+euhLxugh/AuPL3uppBxUH/ulpJ0wYP9E5sG9XnHYMAfgNaAwwrt9FIcMgoR3fwD6
+muwU9lSRmF7Cs5wj9d4wriQDwSW70/eYyMh6+HJdKILYtHNqms7tMe20oO1P9ZRg
++fvHEQWIocvd9A9virzt5fOAw0iwcy9vp0ImADFtjktj+Po2A3/SF+ZVsw6ooUri
+tJxK2+dxbZshOn+fMZS1X9XCx4+bvPvpGTuFznsAKnKbWQybotoDupEaXZ9ZolUJ
+UUKAj1xOG0u2CQIDAQABo4HLMIHIMB0GA1UdDgQWBBSvn+izCC1i/5lpWlL6Dv4J
+mRsDvzAfBgNVHSMEGDAWgBRxrAbkZNaH7cQlnLTBR1VTpB3DkTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEB
-AAvqqB7wcGab4Eia+mI7gLCfQeNgNZy0bgwyF504crPeaUVpsUuHKuFoWda5A8SI
-fuB3Jj3FrVU/E7wTQg+cvvdwPhl5lju4EtaKogTSF+69eNvMn1SHJolhyfE+jy8Z
-VUkFwDWy6sTsmhHWiPJLrWgKMnVCQqBqUcsPYzIgSlmJ5flh7mOA4HED0Vjq1jEk
-Ee8DRAJ2hmeZpXEYqE6+/nhjIGexWh1SKkj7iu6Zr49XN0NnHFQA0FCMzhjg73vM
-4RPRzD/qPM7PB/xuSgmxHFRwpCFHXXB9tAQ+MFAdhiqmZz+9sMtX4CaBRcCahozm
-q9CHmgXuLMXrxsfAlGhKSCA=
+AJIUl3DifqK7KOcyK49tcywhyYRaUpQsnPX54ic5woF7dcas08qSYlWP9auowLy2
+UD/8oksc72Rqorhsx0WI3UU6YhyFmsOpkM3sJak94s5lGUPK5eb+5CMmwpkVBCNu
+UlearBx7z2HZ7anYjFzb7okxkQSMtpx87XshLtRRWYTxQGQMV997BymBX5b3QNcF
+KuGNTyx2KUozY4vErj0dnDd+4kxO8RfQzC2JYJ+nj+BRlY1/lJ8F+amm8LhWrXUj
+yiePk1zIOkQgo+1SkHyuI9j818+7UBhVXlaDzF+RlWLFL7ZOVUHcSzTNVFwB+i6r
+6H9X/sBwwADUJm5Hbmlte4o=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d3:ee:d0:8d:92:7d:ce:5f:4e:f2:0c:55:4d:bd:
-                    2f:b3:ff:6a:ab:2c:28:5e:c6:bd:49:ae:80:f0:e6:
-                    2c:30:e8:0a:e7:2b:3f:d7:1e:a8:6d:f1:c4:46:0e:
-                    f5:1d:3c:e1:05:5d:a9:91:69:57:43:22:33:bc:c1:
-                    18:6e:b1:48:1f:13:64:18:03:c1:63:14:97:21:5a:
-                    65:49:52:6a:57:9d:ad:7b:f6:06:6e:f0:af:a0:6d:
-                    2c:6d:53:9a:ad:82:56:2a:95:e1:a7:5a:a3:b4:77:
-                    c7:d7:97:39:73:c8:de:a8:19:09:ba:69:69:01:25:
-                    e6:68:e3:d0:5a:84:5d:3e:f0:8a:3b:c6:31:26:34:
-                    38:ed:8d:40:80:0f:5f:84:d7:e5:4f:24:ca:ff:c1:
-                    48:f5:74:3a:b3:1e:9f:b5:ef:bb:24:cb:91:f3:81:
-                    47:bd:80:eb:ef:dd:45:39:fd:d2:c3:be:3e:ba:e6:
-                    5b:09:e0:88:98:27:91:e5:9a:5b:88:d6:5e:17:7f:
-                    08:e2:2d:f4:3c:3f:08:54:7b:10:53:f4:7d:ef:67:
-                    04:6f:d6:74:08:d1:b9:03:2d:89:5d:ca:cf:de:3d:
-                    d0:e5:e2:e5:2a:7f:21:29:23:7e:b2:75:d9:ea:5c:
-                    73:45:7e:33:83:b6:62:5e:01:3b:dd:11:99:c7:c5:
-                    7b:65
+                    00:c8:77:60:23:34:2d:df:bf:ff:8f:8e:5f:df:c2:
+                    a9:b9:21:69:87:91:1d:ef:8c:e6:be:0b:46:ab:27:
+                    34:15:a1:a8:68:2f:73:76:da:8d:bc:d3:dd:43:0b:
+                    b4:aa:c3:e4:b2:6b:d3:c6:a8:d8:84:4d:41:a3:d1:
+                    d1:8c:7f:dc:3b:79:16:c5:f3:06:67:4f:aa:96:51:
+                    fd:02:f3:b8:16:57:f7:30:37:f4:78:78:5c:42:06:
+                    65:ba:d4:fa:e3:2c:db:fc:43:d8:64:e7:ca:c0:78:
+                    12:6c:6c:4e:47:bc:db:d4:e4:95:da:ab:74:c2:46:
+                    f6:94:ab:63:b2:89:6a:6b:05:25:c1:8a:a6:8a:ba:
+                    bd:a1:a6:2c:dc:0d:44:72:89:a6:2f:03:3c:c1:d9:
+                    de:21:1d:51:7c:46:e9:90:3e:cc:e3:82:35:69:73:
+                    24:c0:78:73:0d:7c:52:21:82:38:fa:89:dc:e8:fb:
+                    55:7d:52:9b:56:41:1a:24:7c:78:e5:aa:5a:41:67:
+                    26:83:4f:ce:44:14:a2:1f:f1:5d:c8:79:57:72:97:
+                    93:f8:d7:79:fe:11:64:6f:4e:e1:ea:fd:62:17:60:
+                    26:1e:1a:2b:63:50:6e:ab:b0:84:26:76:8d:7f:2e:
+                    b1:06:1d:72:cd:39:5c:e4:a8:77:ef:12:64:83:3c:
+                    00:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                60:B4:95:7F:EA:F1:29:B2:E9:9D:64:83:A9:C8:A3:49:6F:3E:18:53
+                71:AC:06:E4:64:D6:87:ED:C4:25:9C:B4:C1:47:55:53:A4:1D:C3:91
             X509v3 Authority Key Identifier: 
-                keyid:60:B4:95:7F:EA:F1:29:B2:E9:9D:64:83:A9:C8:A3:49:6F:3E:18:53
+                keyid:71:AC:06:E4:64:D6:87:ED:C4:25:9C:B4:C1:47:55:53:A4:1D:C3:91
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         49:67:dc:58:22:e3:ee:0a:e8:1a:3d:38:1a:13:dd:d7:e0:45:
-         67:69:b1:44:49:e2:96:15:86:94:8b:d4:fb:8a:94:d5:22:39:
-         20:48:97:d2:09:a7:16:4b:40:f3:3c:37:3e:e8:81:28:08:cf:
-         4a:2c:3e:79:d0:0d:90:4d:63:a5:63:ce:24:75:03:41:7f:79:
-         17:3f:4d:df:60:98:a5:a3:c1:39:14:4b:7e:b7:0d:8a:9f:d6:
-         a4:0b:0c:34:c9:fe:3b:c0:89:9e:5e:27:3d:d8:3d:d5:28:46:
-         e4:b9:f5:28:39:b4:cf:1a:ea:fd:d3:14:bd:8b:87:78:35:80:
-         a1:bb:4e:59:cc:2a:f7:f7:40:bc:b7:75:cc:35:f5:3d:95:bb:
-         32:7a:0c:9d:67:c7:ff:b0:da:e6:05:e6:12:d5:1e:19:3c:69:
-         5d:d8:08:5e:bc:fe:df:ab:36:a4:70:3f:2c:6c:1c:8e:e3:f1:
-         0b:b3:22:e4:5b:fd:86:23:7a:bd:9b:b9:56:08:e3:a2:6d:2b:
-         e3:cb:42:93:6f:c8:5f:57:bd:66:41:51:8a:5d:4b:7e:0f:36:
-         82:61:8e:e0:4e:2c:9a:7a:45:e3:21:1c:b8:86:cf:a0:35:1b:
-         bf:55:36:86:05:1c:df:b0:e2:85:3b:a4:c7:7c:69:f9:56:b3:
-         20:28:e4:c2
+         ab:13:60:41:86:ba:d3:84:bf:7d:5b:e0:a6:56:24:c2:e2:ac:
+         4c:91:4c:cd:c5:81:c3:46:45:99:74:fb:c4:05:17:d0:68:e3:
+         32:fa:b1:ff:d8:21:67:a7:15:91:7f:a1:68:45:08:78:1a:5b:
+         d0:c2:47:72:93:98:1b:a1:b9:6a:ad:b9:a3:b0:1e:55:8f:b5:
+         03:2e:3f:04:01:fc:d0:c9:8a:c6:28:08:26:37:06:e5:a2:19:
+         90:37:2f:b8:e8:b5:56:16:27:32:a1:64:0c:23:29:86:e0:36:
+         4d:bc:ee:dd:e0:63:21:3a:89:07:31:63:20:06:33:1e:7a:1c:
+         99:25:e2:92:18:80:4a:0f:2c:cb:33:7a:54:20:9d:2a:d4:5f:
+         2c:23:0a:5c:6b:e3:50:a8:cd:c9:d4:07:7d:c0:22:e5:12:a0:
+         0e:b4:72:c5:93:76:64:b9:b9:37:9f:26:f8:99:0d:ad:c2:98:
+         89:a5:e1:d5:07:cf:43:01:3b:df:2d:ea:e4:fd:e7:f6:4e:bb:
+         d2:7c:30:2a:7b:4d:69:57:9b:61:3c:c7:94:d0:a9:de:0d:aa:
+         50:de:9f:13:42:2f:f5:f6:3a:c1:5e:86:2b:a0:e1:a0:fd:43:
+         8f:60:ed:ee:62:8c:23:e5:43:90:2e:fe:40:61:87:ea:9d:a0:
+         2d:e0:59:77
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANPu0I2Sfc5fTvIMVU29
-L7P/aqssKF7GvUmugPDmLDDoCucrP9ceqG3xxEYO9R084QVdqZFpV0MiM7zBGG6x
-SB8TZBgDwWMUlyFaZUlSaledrXv2Bm7wr6BtLG1Tmq2CViqV4adao7R3x9eXOXPI
-3qgZCbppaQEl5mjj0FqEXT7wijvGMSY0OO2NQIAPX4TX5U8kyv/BSPV0OrMen7Xv
-uyTLkfOBR72A6+/dRTn90sO+PrrmWwngiJgnkeWaW4jWXhd/COIt9Dw/CFR7EFP0
-fe9nBG/WdAjRuQMtiV3Kz9490OXi5Sp/ISkjfrJ12epcc0V+M4O2Yl4BO90RmcfF
-e2UCAwEAAaOByzCByDAdBgNVHQ4EFgQUYLSVf+rxKbLpnWSDqcijSW8+GFMwHwYD
-VR0jBBgwFoAUYLSVf+rxKbLpnWSDqcijSW8+GFMwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMh3YCM0Ld+//4+OX9/C
+qbkhaYeRHe+M5r4LRqsnNBWhqGgvc3bajbzT3UMLtKrD5LJr08ao2IRNQaPR0Yx/
+3Dt5FsXzBmdPqpZR/QLzuBZX9zA39Hh4XEIGZbrU+uMs2/xD2GTnysB4EmxsTke8
+29TkldqrdMJG9pSrY7KJamsFJcGKpoq6vaGmLNwNRHKJpi8DPMHZ3iEdUXxG6ZA+
+zOOCNWlzJMB4cw18UiGCOPqJ3Oj7VX1Sm1ZBGiR8eOWqWkFnJoNPzkQUoh/xXch5
+V3KXk/jXef4RZG9O4er9YhdgJh4aK2NQbquwhCZ2jX8usQYdcs05XOSod+8SZIM8
+AOkCAwEAAaOByzCByDAdBgNVHQ4EFgQUcawG5GTWh+3EJZy0wUdVU6Qdw5EwHwYD
+VR0jBBgwFoAUcawG5GTWh+3EJZy0wUdVU6Qdw5EwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBJZ9xYIuPu
-CugaPTgaE93X4EVnabFESeKWFYaUi9T7ipTVIjkgSJfSCacWS0DzPDc+6IEoCM9K
-LD550A2QTWOlY84kdQNBf3kXP03fYJilo8E5FEt+tw2Kn9akCww0yf47wImeXic9
-2D3VKEbkufUoObTPGur90xS9i4d4NYChu05ZzCr390C8t3XMNfU9lbsyegydZ8f/
-sNrmBeYS1R4ZPGld2AhevP7fqzakcD8sbByO4/ELsyLkW/2GI3q9m7lWCOOibSvj
-y0KTb8hfV71mQVGKXUt+DzaCYY7gTiyaekXjIRy4hs+gNRu/VTaGBRzfsOKFO6TH
-fGn5VrMgKOTC
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCrE2BBhrrT
+hL99W+CmViTC4qxMkUzNxYHDRkWZdPvEBRfQaOMy+rH/2CFnpxWRf6FoRQh4GlvQ
+wkdyk5gboblqrbmjsB5Vj7UDLj8EAfzQyYrGKAgmNwblohmQNy+46LVWFicyoWQM
+IymG4DZNvO7d4GMhOokHMWMgBjMeehyZJeKSGIBKDyzLM3pUIJ0q1F8sIwpca+NQ
+qM3J1Ad9wCLlEqAOtHLFk3Zkubk3nyb4mQ2twpiJpeHVB89DATvfLerk/ef2TrvS
+fDAqe01pV5thPMeU0KneDapQ3p8TQi/19jrBXoYroOGg/UOPYO3uYowj5UOQLv5A
+YYfqnaAt4Fl3
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Unacceptable signature algorithm
 ERROR: VerifySignedData failed
diff --git a/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem b/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem
index fb2dd146..4fec3974 100644
--- a/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem
+++ b/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c7:8a:82:ba:91:ca:1e:03:94:8f:9d:68:98:8b:
-                    95:3b:c1:e3:d1:5b:82:45:bf:72:24:cb:6f:de:91:
-                    2e:e3:49:ba:31:7b:57:db:90:36:32:e6:b4:41:8f:
-                    38:89:c6:6b:82:60:dc:98:e7:4b:06:55:41:db:9c:
-                    a8:e0:97:15:5a:3c:06:ac:37:89:f5:9b:65:b6:93:
-                    a7:2e:45:f3:b3:15:59:a7:6d:64:d5:cb:93:da:46:
-                    b1:97:8a:79:f6:48:4b:4c:18:d6:38:cf:55:5b:6b:
-                    78:c2:f5:f0:37:54:67:8d:90:43:81:ec:15:1e:e7:
-                    75:55:57:7e:6a:74:71:73:6d:b4:d5:37:b5:28:40:
-                    2e:6f:a6:64:b8:77:fd:2c:6c:25:2c:27:cf:db:fa:
-                    b4:c9:39:c2:d1:1e:e2:a1:73:bb:ec:81:dc:c3:ec:
-                    d0:a0:08:1e:81:53:88:51:d2:83:d2:ba:33:3f:79:
-                    1e:2a:6f:80:7b:21:d8:bb:80:93:68:ea:f4:a9:d5:
-                    88:b8:ac:0b:ff:90:bd:cc:8a:6b:e7:e5:27:47:d9:
-                    a0:68:5d:38:3c:b0:a3:4a:ae:5a:d9:a6:f8:51:61:
-                    28:fb:21:5c:01:aa:72:76:60:f6:e0:88:a1:44:b5:
-                    fa:85:27:45:67:0f:c6:b1:11:00:81:23:3c:aa:a1:
-                    58:65
+                    00:ca:ea:47:99:a6:75:27:44:09:a0:41:3f:98:17:
+                    a1:8e:92:08:76:19:9a:6e:2b:f9:4b:1c:80:d3:f7:
+                    db:1f:50:39:95:fb:de:4d:31:e6:d8:32:42:5c:ea:
+                    28:1a:f0:a2:ef:b0:22:5e:be:14:fb:ea:ec:74:3c:
+                    98:46:67:6b:ff:78:01:37:15:7c:f1:dd:4e:f8:29:
+                    6f:9a:60:08:f6:e1:59:46:87:23:5a:3c:3c:93:55:
+                    86:92:68:f6:0f:1f:da:82:c1:38:c8:e5:55:2b:f7:
+                    44:06:4c:ff:04:bc:3b:8c:ac:5f:d8:54:7d:e3:aa:
+                    87:84:0b:64:df:16:38:fb:92:3a:03:0d:40:be:c0:
+                    f4:04:da:25:87:a2:46:be:56:19:21:1a:d2:6c:82:
+                    c8:22:e7:fb:8f:47:29:95:34:e8:6f:3a:f3:fd:8f:
+                    9f:5f:41:0d:40:0b:5c:52:9e:e1:21:eb:e9:dc:a9:
+                    96:42:f5:b2:76:40:b3:a2:f4:e3:c1:99:e6:50:57:
+                    52:ee:f9:7f:80:38:26:85:7c:69:34:f1:b7:af:88:
+                    ee:ef:37:58:81:5c:27:4c:f9:5e:60:01:11:44:48:
+                    38:6c:d7:5e:d3:e2:9c:2e:3f:f0:4c:29:54:82:f3:
+                    22:4d:8a:f2:d9:e0:d8:29:99:93:a5:af:ff:f3:88:
+                    49:93
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                94:30:C8:2B:C4:EC:EB:81:5B:D2:2B:62:ED:34:29:BB:3C:40:FD:4B
+                24:0E:D5:1E:5E:24:19:82:7B:4D:68:8C:DC:D9:B1:06:14:2A:E9:D4
             X509v3 Authority Key Identifier: 
-                keyid:C8:5D:13:08:EB:15:BB:7B:35:8E:74:DF:D3:C3:55:51:78:E1:4A:D3
+                keyid:B8:39:FE:EF:FE:00:23:8B:C4:1B:5F:9E:7E:E8:DB:35:A5:7A:76:EE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         ca:46:c4:08:c9:4e:1b:3f:96:fd:d7:9c:89:d6:ea:7f:76:53:
-         ac:03:55:eb:9a:d5:86:f8:66:cd:39:54:f0:7b:d1:74:62:83:
-         c7:58:46:b1:ad:da:b7:fd:03:94:3b:b8:a5:4a:01:45:53:2c:
-         c6:ae:55:52:08:78:de:66:49:a0:40:eb:7d:43:03:00:46:03:
-         1d:6d:c5:83:57:f6:92:a5:c6:04:76:f1:de:bf:ec:90:8b:3b:
-         99:70:80:41:10:93:07:2c:eb:cd:5b:b5:e6:12:76:41:db:81:
-         ab:f5:6a:a5:e4:67:45:39:fa:14:bf:0d:e7:e4:a9:f3:9a:57:
-         4c:20:4e:68:fd:1a:35:00:66:b7:c6:fd:2f:14:db:7b:28:3a:
-         59:31:5a:9d:96:d1:2e:27:d1:7a:c3:eb:b4:28:f1:e2:9a:d1:
-         1d:be:6b:9d:81:4e:4c:7f:5d:fe:5f:20:8f:bb:f0:85:ee:bb:
-         2d:66:40:bb:ec:40:c1:51:4f:f9:1d:24:4e:64:ad:64:1c:e5:
-         68:3f:cb:b2:6c:c5:82:c9:e7:5d:7d:73:8d:ec:d9:b7:af:06:
-         71:53:92:dd:aa:23:28:38:f0:06:d6:64:cb:f5:ac:f2:4c:e2:
-         5a:55:c3:a6:d7:7e:32:21:19:54:c4:aa:cd:21:60:fd:b7:45:
-         81:a1:53:ae
+         8e:7f:b5:2e:04:f9:3e:c9:a4:25:9d:7a:d7:20:49:61:8a:3b:
+         f8:3f:6f:02:0b:66:e6:b9:16:3d:93:c6:72:04:17:ef:63:4f:
+         f4:8e:a9:fd:8b:da:9b:4b:48:1e:c6:a0:89:1e:6c:e1:b6:4b:
+         f9:27:5d:94:c7:c3:54:aa:a6:85:78:d3:f7:38:ad:d9:a3:ef:
+         c2:39:46:47:04:d0:86:5f:dc:2d:03:8d:f1:3d:94:a2:82:6a:
+         0f:33:29:b0:02:0f:99:3d:c9:ac:aa:67:cc:ae:b3:91:98:f3:
+         fe:36:7c:88:47:28:23:7a:d1:95:db:8e:03:7a:7c:48:e4:4f:
+         55:55:76:d0:c9:f5:fd:ea:1b:7f:ac:6e:b3:25:be:53:10:65:
+         63:09:16:3b:a0:c1:f0:4f:42:1c:7a:03:34:96:63:40:05:33:
+         2a:05:06:78:52:2a:6c:e6:87:87:c6:2a:a5:1d:4c:fd:4d:37:
+         ed:43:80:fd:34:04:98:ec:01:17:7a:71:9b:a1:37:af:fd:53:
+         42:9f:5c:80:98:96:f5:78:d7:80:20:ca:f1:67:4c:d7:ed:a5:
+         ed:1b:96:df:d6:19:6e:5c:fc:bb:07:b1:93:0e:5c:a5:a4:a8:
+         be:1a:0a:d8:20:c2:b0:a4:a5:b4:14:30:e0:b1:9d:97:89:00:
+         cd:ca:cd:6b
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHioK6
-kcoeA5SPnWiYi5U7wePRW4JFv3Iky2/ekS7jSboxe1fbkDYy5rRBjziJxmuCYNyY
-50sGVUHbnKjglxVaPAasN4n1m2W2k6cuRfOzFVmnbWTVy5PaRrGXinn2SEtMGNY4
-z1Vba3jC9fA3VGeNkEOB7BUe53VVV35qdHFzbbTVN7UoQC5vpmS4d/0sbCUsJ8/b
-+rTJOcLRHuKhc7vsgdzD7NCgCB6BU4hR0oPSujM/eR4qb4B7Idi7gJNo6vSp1Yi4
-rAv/kL3Mimvn5SdH2aBoXTg8sKNKrlrZpvhRYSj7IVwBqnJ2YPbgiKFEtfqFJ0Vn
-D8axEQCBIzyqoVhlAgMBAAGjgekwgeYwHQYDVR0OBBYEFJQwyCvE7OuBW9IrYu00
-Kbs8QP1LMB8GA1UdIwQYMBaAFMhdEwjrFbt7NY5039PDVVF44UrTMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDK6keZ
+pnUnRAmgQT+YF6GOkgh2GZpuK/lLHIDT99sfUDmV+95NMebYMkJc6iga8KLvsCJe
+vhT76ux0PJhGZ2v/eAE3FXzx3U74KW+aYAj24VlGhyNaPDyTVYaSaPYPH9qCwTjI
+5VUr90QGTP8EvDuMrF/YVH3jqoeEC2TfFjj7kjoDDUC+wPQE2iWHoka+VhkhGtJs
+gsgi5/uPRymVNOhvOvP9j59fQQ1AC1xSnuEh6+ncqZZC9bJ2QLOi9OPBmeZQV1Lu
++X+AOCaFfGk08beviO7vN1iBXCdM+V5gARFESDhs117T4pwuP/BMKVSC8yJNivLZ
+4NgpmZOlr//ziEmTAgMBAAGjgekwgeYwHQYDVR0OBBYEFCQO1R5eJBmCe01ojNzZ
+sQYUKunUMB8GA1UdIwQYMBaAFLg5/u/+ACOLxBtfnn7o2zWlenbuMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAykbECMlOGz+W/decidbq
-f3ZTrANV65rVhvhmzTlU8HvRdGKDx1hGsa3at/0DlDu4pUoBRVMsxq5VUgh43mZJ
-oEDrfUMDAEYDHW3Fg1f2kqXGBHbx3r/skIs7mXCAQRCTByzrzVu15hJ2QduBq/Vq
-peRnRTn6FL8N5+Sp85pXTCBOaP0aNQBmt8b9LxTbeyg6WTFanZbRLifResPrtCjx
-4prRHb5rnYFOTH9d/l8gj7vwhe67LWZAu+xAwVFP+R0kTmStZBzlaD/LsmzFgsnn
-XX1zjezZt68GcVOS3aojKDjwBtZky/Ws8kziWlXDptd+MiEZVMSqzSFg/bdFgaFT
-rg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAjn+1LgT5PsmkJZ161yBJ
+YYo7+D9vAgtm5rkWPZPGcgQX72NP9I6p/Yvam0tIHsagiR5s4bZL+SddlMfDVKqm
+hXjT9zit2aPvwjlGRwTQhl/cLQON8T2UooJqDzMpsAIPmT3JrKpnzK6zkZjz/jZ8
+iEcoI3rRlduOA3p8SORPVVV20Mn1/eobf6xusyW+UxBlYwkWO6DB8E9CHHoDNJZj
+QAUzKgUGeFIqbOaHh8YqpR1M/U037UOA/TQEmOwBF3pxm6E3r/1TQp9cgJiW9XjX
+gCDK8WdM1+2l7RuW39YZblz8uwexkw5cpaSovhoK2CDCsKSltBQw4LGdl4kAzcrN
+aw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:da:1c:0d:74:40:2d:01:10:9c:e0:0c:aa:01:c7:
-                    ed:a4:03:b5:a0:b0:1d:c0:70:70:9a:76:6d:5d:4d:
-                    16:ed:39:87:76:43:e1:c1:3f:b9:f8:20:63:40:02:
-                    d4:0f:f4:f5:4a:97:eb:46:ad:8c:29:cb:45:a7:33:
-                    16:b0:10:b3:bc:f6:9e:fb:e6:61:d5:7d:43:ce:27:
-                    43:ae:4f:b1:d1:47:6b:13:e5:20:66:09:b9:10:83:
-                    a3:d4:40:6d:cc:fb:cb:28:1e:6e:bc:75:46:7b:9d:
-                    f9:b4:5f:c9:43:24:d6:d7:c1:a8:6b:d6:52:1e:6d:
-                    9d:89:d6:41:eb:9f:db:32:e3:05:21:b1:b7:77:78:
-                    e1:d4:f9:95:c5:84:63:91:88:ce:31:66:2c:51:89:
-                    f3:a4:a3:0d:11:b2:a2:45:fd:59:1b:09:a9:bc:48:
-                    38:0d:25:c7:dd:c9:6a:15:5f:c5:5f:60:5e:c0:28:
-                    5d:19:ff:51:17:86:ea:b5:56:f6:1e:cc:ee:80:93:
-                    f2:82:7b:2f:fa:96:1f:4b:15:b0:34:23:81:bb:b9:
-                    a4:83:1a:2f:e0:6d:ee:48:96:4d:f1:7b:09:3e:1f:
-                    43:c6:76:8f:56:fd:1e:5f:21:6f:6f:49:b0:94:fa:
-                    c9:be:76:61:f6:f8:51:72:40:99:d5:f2:f6:09:f7:
-                    d9:8b
+                    00:de:2c:50:a5:d0:e9:9c:e2:1c:45:e9:e8:75:5a:
+                    b9:40:38:3d:8c:c7:48:82:7f:1e:84:6a:0d:2b:f9:
+                    1a:69:fd:e1:14:2e:5b:09:98:a5:c9:58:5e:b2:2f:
+                    98:3e:d7:a2:e4:d6:44:20:32:6f:e5:d9:20:86:47:
+                    86:e5:f5:00:66:39:73:ec:0d:e8:8e:7d:4e:e5:01:
+                    00:35:1b:e6:ed:ff:49:3d:4b:b1:11:9d:cf:b7:b9:
+                    f2:f6:7c:5f:13:a5:48:58:8a:c2:0a:62:9d:20:6b:
+                    2f:77:13:a6:a3:18:86:0e:16:79:72:e6:e7:14:70:
+                    1b:3c:5f:7d:18:73:a8:38:fd:88:86:74:ba:d5:c8:
+                    8b:80:41:c4:59:6c:b5:51:3b:c0:83:be:b7:b4:05:
+                    17:9a:58:6d:11:61:9e:97:89:56:47:8a:97:13:21:
+                    4e:46:14:4f:db:5c:b7:12:bc:33:94:2a:a5:24:d5:
+                    43:05:db:1c:11:e2:e2:7d:21:25:b8:21:a9:4d:59:
+                    48:77:e1:1e:73:3a:9e:7e:ea:16:25:1b:bb:63:01:
+                    b3:2f:6b:99:59:2b:d6:e7:c9:13:d1:4a:87:75:79:
+                    d5:a5:1a:fa:7a:e2:53:b6:55:58:ce:e2:e4:a7:1f:
+                    78:a4:cb:08:a2:7a:99:e6:30:83:97:68:6c:a8:b3:
+                    37:05
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C8:5D:13:08:EB:15:BB:7B:35:8E:74:DF:D3:C3:55:51:78:E1:4A:D3
+                B8:39:FE:EF:FE:00:23:8B:C4:1B:5F:9E:7E:E8:DB:35:A5:7A:76:EE
             X509v3 Authority Key Identifier: 
-                keyid:3F:B3:AA:13:E1:86:96:B3:E3:8D:20:EC:BE:70:71:D0:1B:F8:67:9A
+                keyid:5C:80:E1:FD:9C:2A:D7:E2:15:15:1E:22:A0:FC:39:84:B8:A2:0B:42
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -149,41 +149,41 @@
             1.2.3.4: critical
                 ....
     Signature Algorithm: sha256WithRSAEncryption
-         dc:d2:aa:62:74:fa:cf:eb:4f:b3:cd:aa:a9:52:b0:fe:7a:0d:
-         96:e4:07:8f:b6:d4:6d:ad:33:a6:4e:ad:2f:a5:ff:83:a0:75:
-         d1:ed:fc:c0:80:a6:73:73:49:6d:0d:3f:84:b5:d4:cf:07:74:
-         3e:aa:bf:38:59:e4:fa:b6:d2:45:07:b3:a6:0b:b0:43:47:03:
-         7e:45:c1:7b:f1:84:10:c3:0b:d7:2f:c9:be:ff:96:da:1b:4b:
-         cb:fa:05:ca:22:d2:e4:f0:f7:32:91:4f:95:05:6c:5d:be:6c:
-         64:7b:cb:6d:a1:a9:d0:9c:5b:1d:3a:bd:4a:50:69:e2:06:fa:
-         89:2b:3b:2e:12:f6:3f:d7:79:f1:36:ec:e3:6c:12:67:b2:a3:
-         b0:89:16:8c:2c:02:04:0d:89:e1:ca:69:d0:86:7e:fd:14:9d:
-         c8:ef:06:42:fc:46:b9:88:25:e2:b5:b7:8a:6b:ab:d6:1f:ec:
-         d1:12:b3:28:cd:9e:9f:56:8d:7c:49:6c:06:96:93:66:25:43:
-         b0:76:b0:9a:59:f8:9c:35:29:8c:db:a7:74:d7:ac:e7:99:ea:
-         11:34:0b:6f:cf:bb:5e:28:2a:ab:9a:13:83:44:d7:01:3c:61:
-         c8:10:dd:0d:ef:66:3d:be:ee:72:70:d3:27:a2:b0:f7:f1:bc:
-         50:e1:ac:3e
+         11:21:3f:43:4f:cc:37:a7:71:ca:a6:d1:ce:4f:78:b4:f5:af:
+         4e:31:b7:d7:81:3b:67:19:35:eb:b1:49:d8:39:2d:e7:6f:45:
+         db:91:a2:da:ed:cd:46:4b:62:3e:f2:26:7a:ee:69:8b:81:ab:
+         f0:11:08:72:89:eb:28:57:bd:83:b2:71:05:28:f1:5d:22:5b:
+         13:e4:3f:94:c8:28:0f:50:66:77:f9:f2:a6:08:22:38:e7:b9:
+         49:19:ee:62:58:32:32:79:06:b1:d9:4c:65:ac:df:70:b0:d4:
+         34:31:a4:8d:43:35:1e:3e:42:77:0c:e1:1c:b5:08:e7:22:39:
+         98:b3:88:42:05:f6:6d:03:bc:8b:3c:f0:84:9b:17:e5:84:1a:
+         8d:1f:9a:63:94:e0:12:7a:25:34:e4:3d:7d:76:58:ca:f4:a3:
+         e6:11:33:21:06:8c:7e:91:83:e4:ce:17:0a:59:37:9d:c9:85:
+         fd:0b:06:62:aa:db:a1:a7:01:df:77:a4:7b:0b:b7:d5:1c:b9:
+         57:ad:ab:ce:fa:74:52:09:3b:2d:f2:d2:12:bf:e1:3b:7b:e7:
+         c3:4b:db:eb:23:77:d0:59:93:cc:de:81:5c:48:da:c2:ea:ed:
+         63:92:bc:af:26:80:3f:3e:69:3e:23:53:35:ff:87:43:7f:2b:
+         f0:5e:23:b8
 -----BEGIN CERTIFICATE-----
 MIIDfTCCAmWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2hwNdEAt
-ARCc4AyqAcftpAO1oLAdwHBwmnZtXU0W7TmHdkPhwT+5+CBjQALUD/T1SpfrRq2M
-KctFpzMWsBCzvPae++Zh1X1DzidDrk+x0UdrE+UgZgm5EIOj1EBtzPvLKB5uvHVG
-e535tF/JQyTW18Goa9ZSHm2didZB65/bMuMFIbG3d3jh1PmVxYRjkYjOMWYsUYnz
-pKMNEbKiRf1ZGwmpvEg4DSXH3clqFV/FX2BewChdGf9RF4bqtVb2HszugJPygnsv
-+pYfSxWwNCOBu7mkgxov4G3uSJZN8XsJPh9DxnaPVv0eXyFvb0mwlPrJvnZh9vhR
-ckCZ1fL2CffZiwIDAQABo4HbMIHYMB0GA1UdDgQWBBTIXRMI6xW7ezWOdN/Tw1VR
-eOFK0zAfBgNVHSMEGDAWgBQ/s6oT4YaWs+ONIOy+cHHQG/hnmjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3ixQpdDp
+nOIcRenodVq5QDg9jMdIgn8ehGoNK/kaaf3hFC5bCZilyVhesi+YPtei5NZEIDJv
+5dkghkeG5fUAZjlz7A3ojn1O5QEANRvm7f9JPUuxEZ3Pt7ny9nxfE6VIWIrCCmKd
+IGsvdxOmoxiGDhZ5cubnFHAbPF99GHOoOP2IhnS61ciLgEHEWWy1UTvAg763tAUX
+mlhtEWGel4lWR4qXEyFORhRP21y3ErwzlCqlJNVDBdscEeLifSEluCGpTVlId+Ee
+czqefuoWJRu7YwGzL2uZWSvW58kT0UqHdXnVpRr6euJTtlVYzuLkpx94pMsIonqZ
+5jCDl2hsqLM3BQIDAQABo4HbMIHYMB0GA1UdDgQWBBS4Of7v/gAji8QbX55+6Ns1
+pXp27jAfBgNVHSMEGDAWgBRcgOH9nCrX4hUVHiKg/DmEuKILQjA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDgYDKgMEAQH/BAQBAgMEMA0G
-CSqGSIb3DQEBCwUAA4IBAQDc0qpidPrP60+zzaqpUrD+eg2W5AePttRtrTOmTq0v
-pf+DoHXR7fzAgKZzc0ltDT+EtdTPB3Q+qr84WeT6ttJFB7OmC7BDRwN+RcF78YQQ
-wwvXL8m+/5baG0vL+gXKItLk8PcykU+VBWxdvmxke8ttoanQnFsdOr1KUGniBvqJ
-KzsuEvY/13nxNuzjbBJnsqOwiRaMLAIEDYnhymnQhn79FJ3I7wZC/Ea5iCXitbeK
-a6vWH+zRErMozZ6fVo18SWwGlpNmJUOwdrCaWficNSmM26d016znmeoRNAtvz7te
-KCqrmhODRNcBPGHIEN0N72Y9vu5ycNMnorD38bxQ4aw+
+CSqGSIb3DQEBCwUAA4IBAQARIT9DT8w3p3HKptHOT3i09a9OMbfXgTtnGTXrsUnY
+OS3nb0XbkaLa7c1GS2I+8iZ67mmLgavwEQhyiesoV72DsnEFKPFdIlsT5D+UyCgP
+UGZ3+fKmCCI457lJGe5iWDIyeQax2UxlrN9wsNQ0MaSNQzUePkJ3DOEctQjnIjmY
+s4hCBfZtA7yLPPCEmxflhBqNH5pjlOASeiU05D19dljK9KPmETMhBox+kYPkzhcK
+WTedyYX9CwZiqtuhpwHfd6R7C7fVHLlXravO+nRSCTst8tISv+E7e+fDS9vrI3fQ
+WZPM3oFcSNrC6u1jkryvJoA/Pmk+I1M1/4dDfyvwXiO4
 -----END CERTIFICATE-----
 
 Certificate:
@@ -200,30 +200,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e7:de:8d:6f:81:af:35:2d:99:eb:62:b4:41:d8:
-                    dd:55:5f:5a:12:02:46:8f:41:14:fe:f5:b0:32:ab:
-                    fa:96:2a:e2:ba:e6:3a:1d:89:80:8f:20:6a:40:4a:
-                    5f:97:d3:5d:7f:e8:eb:26:f1:f9:1b:a2:a7:cd:54:
-                    c0:d9:64:77:dc:ba:90:a4:b7:86:3f:8c:72:c2:ad:
-                    96:6c:f0:c0:30:d8:e0:71:f5:ff:f3:8c:18:34:3a:
-                    07:b2:79:32:92:91:d4:51:95:c4:bb:62:78:2e:30:
-                    f8:b5:f1:91:26:9a:28:07:27:cc:57:d5:a2:1c:e9:
-                    20:ac:fa:3d:db:3b:70:81:17:3d:4b:54:a8:fe:2f:
-                    18:f7:7f:de:cb:4f:ec:70:c8:fa:a9:ed:64:41:36:
-                    c2:74:a7:dd:e6:27:2b:af:79:ce:76:86:57:3a:2c:
-                    d9:52:b8:bf:87:de:f1:5e:80:81:70:10:78:e7:89:
-                    0a:d1:14:74:f4:f0:93:cf:89:68:66:8f:d4:2a:8a:
-                    c8:ff:96:fb:f6:cc:ee:dd:a6:62:f0:73:43:a6:29:
-                    7a:51:7e:63:e1:8f:d9:83:10:23:ed:1b:d4:26:2d:
-                    40:62:c5:ed:c5:af:4f:d9:9b:87:5b:3a:7e:2c:43:
-                    59:e3:f4:91:2f:ab:d0:04:a3:5e:da:ac:b0:c1:e2:
-                    15:99
+                    00:e1:06:5e:f4:68:1b:03:b0:84:e4:7d:b2:55:05:
+                    ea:8b:e3:9b:fc:bd:7d:c4:6c:33:39:59:11:1e:46:
+                    95:aa:07:6b:81:59:d4:0d:8c:d7:0e:c2:1e:4d:0b:
+                    86:32:ab:7c:c3:d9:8e:a9:31:87:4e:9b:2a:02:49:
+                    66:40:75:c2:44:c2:74:dc:12:86:ad:3a:8f:62:f9:
+                    6f:87:6b:33:98:ab:72:d8:26:c1:fb:51:64:85:63:
+                    fd:b1:79:d7:a1:e8:da:1c:57:21:ce:9b:ba:0b:c2:
+                    d4:e3:7b:b6:58:89:97:12:5d:4c:a4:81:34:42:e7:
+                    3b:85:0c:13:98:0b:63:44:99:95:e8:8e:bc:1a:33:
+                    b8:c0:d0:5f:b1:f3:0a:a6:3c:c2:a0:00:c1:9b:16:
+                    1c:84:55:6b:f2:fc:fe:74:40:8d:43:6f:61:29:05:
+                    e3:01:41:06:37:cc:65:9b:be:f5:88:2c:c8:31:5a:
+                    0a:5b:55:13:4d:1b:3f:03:85:c1:f4:7d:45:0c:50:
+                    d5:4a:65:34:ea:06:fa:44:20:01:e4:16:64:4d:13:
+                    35:6c:6d:18:5b:36:0a:de:3c:03:a9:f2:9e:fd:51:
+                    6f:f9:dc:dc:9d:f7:25:ff:a8:b6:1a:80:2b:df:9f:
+                    e3:22:ae:5c:4b:6b:d1:e0:fe:6c:87:18:93:92:d6:
+                    42:13
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                3F:B3:AA:13:E1:86:96:B3:E3:8D:20:EC:BE:70:71:D0:1B:F8:67:9A
+                5C:80:E1:FD:9C:2A:D7:E2:15:15:1E:22:A0:FC:39:84:B8:A2:0B:42
             X509v3 Authority Key Identifier: 
-                keyid:3F:B3:AA:13:E1:86:96:B3:E3:8D:20:EC:BE:70:71:D0:1B:F8:67:9A
+                keyid:5C:80:E1:FD:9C:2A:D7:E2:15:15:1E:22:A0:FC:39:84:B8:A2:0B:42
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -238,41 +238,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         84:9a:7d:63:f9:44:d8:2c:4e:b0:24:86:af:0c:ba:0e:29:33:
-         67:68:7d:a2:1d:46:99:b0:fb:9d:65:69:da:f8:46:67:d9:c4:
-         30:72:eb:57:79:4a:e8:2d:7b:57:d4:c2:18:13:19:d1:36:8c:
-         45:9f:49:1e:a6:83:c5:41:41:fd:29:ac:a0:12:c7:0f:6e:a6:
-         45:70:64:c3:9d:b0:22:2e:ed:c0:8d:6c:68:c0:94:d9:ba:e0:
-         2f:5a:1c:29:ed:d0:d6:ec:0e:bb:41:ce:1e:e3:93:c4:85:80:
-         aa:a1:67:31:76:80:24:a4:70:ec:f3:6e:a3:63:8c:71:fd:38:
-         65:1f:56:e9:75:74:15:3c:69:f3:e3:d3:9d:9a:9c:7d:f6:00:
-         71:98:61:68:13:7c:23:79:e1:84:68:a6:3d:ce:19:1c:0a:62:
-         48:d9:f9:4c:92:ff:b7:5b:e8:1d:e4:66:00:50:4d:38:c8:3a:
-         e3:e1:8e:ae:aa:32:30:65:78:25:b3:d0:eb:4f:de:ab:9d:51:
-         40:7e:6f:d4:15:87:cf:41:7d:be:3d:32:45:a2:f1:a8:7c:11:
-         97:90:a4:ea:d8:aa:c2:b7:08:34:a3:62:23:4b:a5:e3:9e:4d:
-         90:7f:d7:4c:dc:4f:c8:ac:b2:b6:de:42:fd:05:98:f6:33:90:
-         54:c3:6a:3f
+         da:f3:43:e6:bf:67:83:9c:dc:b5:9e:20:9e:4a:93:97:3b:cc:
+         e2:27:20:20:53:e3:6c:60:40:35:5f:13:3e:5b:8e:a8:a2:62:
+         90:5a:25:ab:fe:27:02:93:4f:c3:9e:31:82:f2:56:c1:4d:8c:
+         6a:14:ca:63:4c:51:2c:6d:4d:fa:62:64:45:5b:64:5d:19:d3:
+         cc:17:d1:a8:f1:22:d7:62:c0:00:b4:39:fd:fc:81:24:dd:fe:
+         cf:35:8e:74:47:76:7c:9c:0d:56:bc:7b:10:1f:09:07:f6:98:
+         25:1b:ce:f0:bf:ce:1a:81:d1:1e:bc:c9:11:67:8c:eb:1a:9b:
+         6a:13:5b:f5:a5:55:36:2e:cd:1f:d8:4b:0f:23:45:2f:27:fd:
+         06:5e:20:c8:ff:16:65:90:3f:b7:f0:13:1b:af:f4:fc:ac:65:
+         8a:97:21:23:6b:94:de:74:d5:35:6f:f7:0e:98:e1:c7:df:1b:
+         e5:20:89:39:3c:f5:cc:a5:af:1a:bf:ba:af:01:bb:6f:86:5b:
+         8e:47:2e:91:91:b3:7c:06:17:18:1a:dd:21:a4:14:07:8c:d8:
+         17:42:ec:ae:21:46:ce:56:37:f5:7d:ba:75:4b:f9:1c:59:53:
+         d7:2d:d0:be:2a:b8:ed:75:0a:02:a6:ed:b3:24:14:73:7b:9a:
+         ad:2e:f9:cd
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOfejW+BrzUtmetitEHY
-3VVfWhICRo9BFP71sDKr+pYq4rrmOh2JgI8gakBKX5fTXX/o6ybx+Ruip81UwNlk
-d9y6kKS3hj+McsKtlmzwwDDY4HH1//OMGDQ6B7J5MpKR1FGVxLtieC4w+LXxkSaa
-KAcnzFfVohzpIKz6Pds7cIEXPUtUqP4vGPd/3stP7HDI+qntZEE2wnSn3eYnK695
-znaGVzos2VK4v4fe8V6AgXAQeOeJCtEUdPTwk8+JaGaP1CqKyP+W+/bM7t2mYvBz
-Q6YpelF+Y+GP2YMQI+0b1CYtQGLF7cWvT9mbh1s6fixDWeP0kS+r0ASjXtqssMHi
-FZkCAwEAAaOByzCByDAdBgNVHQ4EFgQUP7OqE+GGlrPjjSDsvnBx0Bv4Z5owHwYD
-VR0jBBgwFoAUP7OqE+GGlrPjjSDsvnBx0Bv4Z5owNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOEGXvRoGwOwhOR9slUF
+6ovjm/y9fcRsMzlZER5GlaoHa4FZ1A2M1w7CHk0LhjKrfMPZjqkxh06bKgJJZkB1
+wkTCdNwShq06j2L5b4drM5irctgmwftRZIVj/bF516Ho2hxXIc6bugvC1ON7tliJ
+lxJdTKSBNELnO4UME5gLY0SZleiOvBozuMDQX7HzCqY8wqAAwZsWHIRVa/L8/nRA
+jUNvYSkF4wFBBjfMZZu+9YgsyDFaCltVE00bPwOFwfR9RQxQ1UplNOoG+kQgAeQW
+ZE0TNWxtGFs2Ct48A6nynv1Rb/nc3J33Jf+othqAK9+f4yKuXEtr0eD+bIcYk5LW
+QhMCAwEAAaOByzCByDAdBgNVHQ4EFgQUXIDh/Zwq1+IVFR4ioPw5hLiiC0IwHwYD
+VR0jBBgwFoAUXIDh/Zwq1+IVFR4ioPw5hLiiC0IwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCEmn1j+UTY
-LE6wJIavDLoOKTNnaH2iHUaZsPudZWna+EZn2cQwcutXeUroLXtX1MIYExnRNoxF
-n0kepoPFQUH9KaygEscPbqZFcGTDnbAiLu3AjWxowJTZuuAvWhwp7dDW7A67Qc4e
-45PEhYCqoWcxdoAkpHDs826jY4xx/ThlH1bpdXQVPGnz49Odmpx99gBxmGFoE3wj
-eeGEaKY9zhkcCmJI2flMkv+3W+gd5GYAUE04yDrj4Y6uqjIwZXgls9DrT96rnVFA
-fm/UFYfPQX2+PTJFovGofBGXkKTq2KrCtwg0o2IjS6Xjnk2Qf9dM3E/IrLK23kL9
-BZj2M5BUw2o/
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDa80Pmv2eD
+nNy1niCeSpOXO8ziJyAgU+NsYEA1XxM+W46oomKQWiWr/icCk0/DnjGC8lbBTYxq
+FMpjTFEsbU36YmRFW2RdGdPMF9Go8SLXYsAAtDn9/IEk3f7PNY50R3Z8nA1WvHsQ
+HwkH9pglG87wv84agdEevMkRZ4zrGptqE1v1pVU2Ls0f2EsPI0UvJ/0GXiDI/xZl
+kD+38BMbr/T8rGWKlyEja5TedNU1b/cOmOHH3xvlIIk5PPXMpa8av7qvAbtvhluO
+Ry6RkbN8BhcYGt0hpBQHjNgXQuyuIUbOVjf1fbp1S/kcWVPXLdC+KrjtdQoCpu2z
+JBRze5qtLvnN
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -285,6 +285,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Unconsumed critical extension
   oid: 2A0304
diff --git a/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem b/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem
index 7c4e664..a3ca96c8 100644
--- a/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem
+++ b/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b6:04:af:e9:58:68:65:f6:6e:cd:e3:fe:93:35:
-                    d3:c0:06:53:75:df:15:59:23:d3:fd:42:8c:36:a1:
-                    df:6b:35:3f:7d:63:57:e4:17:d9:2a:63:77:7f:d6:
-                    f5:b0:85:00:70:ab:f9:5e:f3:00:4d:0f:5e:28:b8:
-                    56:7b:15:f1:4e:eb:32:e0:bf:e4:83:2b:49:ff:ac:
-                    3e:09:38:40:75:73:11:ee:0c:8c:d9:e6:c6:d2:44:
-                    ce:99:74:78:8b:90:19:b5:32:75:45:ba:e0:76:55:
-                    5f:c9:44:27:e2:91:8e:9a:21:aa:3d:be:e7:cf:1e:
-                    af:08:4b:b0:cc:03:b8:c6:2b:92:ae:d6:1e:61:fa:
-                    18:4e:b5:98:cc:0b:55:16:77:4c:9c:26:99:0f:3b:
-                    91:22:87:19:36:b9:4f:72:c9:40:bb:d0:2b:8e:d7:
-                    c3:1b:eb:2e:e4:82:a8:0e:7d:45:a1:c7:6a:e9:db:
-                    d2:f7:30:9b:ad:4f:a7:04:17:2b:78:85:15:1a:8f:
-                    f1:77:6c:51:c0:a8:fc:53:70:f0:32:8c:86:09:8b:
-                    00:9c:3f:32:ff:cc:86:4f:4c:32:6a:f9:53:5d:36:
-                    f9:55:34:8c:e4:0e:56:af:bf:f6:92:25:8a:4e:d5:
-                    66:53:66:7b:b0:16:08:04:d2:56:de:c6:b0:75:2c:
-                    b5:d5
+                    00:bb:61:26:8a:b1:15:f2:75:3f:ed:47:c0:92:9c:
+                    f2:65:a2:16:a8:21:d9:bb:40:3a:1c:a0:ce:3b:94:
+                    44:6b:c2:5f:4b:f5:ae:84:f6:25:ee:6b:f6:3b:38:
+                    e7:0d:f9:e8:3f:d0:48:27:ba:53:31:7d:41:a6:89:
+                    36:d4:42:27:44:8f:88:af:5b:67:92:47:1b:d3:b3:
+                    a0:16:e5:a9:b4:1c:aa:19:cf:ae:8b:30:e5:e2:05:
+                    d2:c6:e4:72:09:f3:da:56:7e:0e:64:17:ba:dc:65:
+                    6d:4d:17:ae:35:9e:fa:54:5e:be:a7:09:63:53:3b:
+                    ea:71:f9:35:e0:b2:c8:0b:3b:62:e9:1e:b4:6d:2a:
+                    fa:9e:5c:7e:9d:f5:cf:1b:96:15:4b:1e:ca:d5:73:
+                    82:07:a9:fb:dc:e5:38:79:60:ed:ca:3c:4b:9a:ce:
+                    78:78:c8:76:c0:e0:6b:f4:7a:2d:ac:12:12:75:2d:
+                    e4:1c:99:01:ae:34:b5:f7:8f:7d:2e:29:fa:b5:dd:
+                    79:8f:9e:e4:1d:9f:74:93:0e:94:e8:f1:9e:59:ae:
+                    f4:3b:a4:ca:0a:c1:1f:34:03:e5:0d:2b:cc:3e:2c:
+                    dd:4c:dc:1d:7b:2d:a6:58:1a:bb:f8:86:23:92:0f:
+                    df:b7:b1:78:bb:42:d9:f6:4b:54:86:4d:f6:06:10:
+                    1e:1d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A7:25:2F:78:CA:01:CA:68:1D:8F:FF:93:D6:FA:FA:A3:9C:BB:C8:0E
+                37:FF:20:10:71:A8:C4:95:89:AA:12:00:64:1D:63:E5:28:DE:C0:2D
             X509v3 Authority Key Identifier: 
-                keyid:D5:16:02:7F:4F:D3:7F:21:1A:9D:CC:55:09:30:CF:EF:6C:08:1F:53
+                keyid:74:00:B4:D2:D2:F7:13:7B:35:AB:B1:20:0C:CA:4B:4A:9B:D0:32:53
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         6a:e8:e9:eb:26:54:d4:51:72:d0:4d:a3:7c:e4:5e:8d:bd:c7:
-         5e:0a:ab:46:a0:88:20:15:68:56:3f:43:0d:13:60:30:eb:65:
-         86:45:5b:0d:8b:c4:b0:7f:2f:18:fe:27:a7:6e:4b:10:99:05:
-         25:f8:4b:9a:80:a3:36:f6:35:5e:0a:dc:0a:81:3c:fc:be:32:
-         71:fc:ed:8c:d9:77:ce:25:3c:74:af:b7:ad:50:ee:dc:fe:35:
-         91:15:cc:79:91:f0:48:74:68:8b:a0:e2:70:95:df:1d:b3:e5:
-         c5:48:bc:9c:c3:4c:95:50:94:8d:3c:42:9a:13:e3:03:b3:df:
-         43:32:bf:0f:cd:50:d9:2c:52:1c:30:9e:5f:30:02:69:66:bc:
-         e5:92:63:43:ca:62:e8:d2:ae:dd:2a:e1:ac:ce:00:f0:d7:54:
-         81:6b:b8:1f:b1:0e:e7:57:2b:71:17:50:4b:fb:e4:f0:37:2a:
-         da:37:e2:80:4a:87:9b:d6:d5:6d:6b:b4:af:4b:43:c9:08:9d:
-         57:f1:98:3c:2a:b6:58:7d:a8:83:d3:f0:b1:df:c5:bd:8b:0c:
-         a8:48:91:0c:c8:eb:29:f8:54:70:b0:49:b7:f4:e3:80:cc:2e:
-         37:23:23:f4:49:21:8d:22:12:8c:3e:24:a2:11:66:15:cd:68:
-         96:19:3b:5f
+         2a:2e:53:ae:ee:f2:12:91:7f:38:6b:a2:c2:d7:fb:24:7d:61:
+         dc:fb:c2:13:86:4a:db:8f:4d:47:48:6a:e4:a0:f1:1b:3c:a0:
+         93:7f:85:c1:96:3f:d2:4f:62:db:90:00:d2:4d:05:0c:45:58:
+         96:d4:ef:25:7e:54:c0:33:d9:3d:28:e4:0b:17:98:de:c1:79:
+         38:54:a7:4b:6b:e1:7c:1c:05:d6:03:72:67:df:d7:f1:48:a7:
+         18:24:2e:86:90:fb:91:db:75:74:4e:f1:77:a9:da:d6:65:a2:
+         5b:6d:ba:ef:e4:6c:b3:81:cf:b5:1b:bf:ee:fa:1c:4a:72:be:
+         ae:5d:7f:02:84:cd:18:7a:ca:c6:6c:5c:34:af:5e:91:d7:9d:
+         f9:39:54:0c:5a:44:82:44:c4:0a:f7:21:3b:21:ba:b2:87:38:
+         fa:a9:0f:9c:33:f9:d3:0e:30:cf:a0:2d:4b:77:70:8a:03:4f:
+         b4:7e:af:8e:cd:57:fe:5c:56:42:01:ec:39:9f:52:af:6b:be:
+         1a:22:1e:70:4b:55:1d:c6:3a:97:ca:ec:66:d4:f7:3b:4f:cd:
+         6b:89:71:3d:09:a8:59:86:52:c5:07:9c:ac:8e:de:10:64:5f:
+         f0:8b:0a:e9:6f:7c:8a:ff:9f:20:53:5a:a8:af:6c:5c:12:b2:
+         96:d2:2a:11
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2BK/p
-WGhl9m7N4/6TNdPABlN13xVZI9P9Qow2od9rNT99Y1fkF9kqY3d/1vWwhQBwq/le
-8wBND14ouFZ7FfFO6zLgv+SDK0n/rD4JOEB1cxHuDIzZ5sbSRM6ZdHiLkBm1MnVF
-uuB2VV/JRCfikY6aIao9vufPHq8IS7DMA7jGK5Ku1h5h+hhOtZjMC1UWd0ycJpkP
-O5Eihxk2uU9yyUC70CuO18Mb6y7kgqgOfUWhx2rp29L3MJutT6cEFyt4hRUaj/F3
-bFHAqPxTcPAyjIYJiwCcPzL/zIZPTDJq+VNdNvlVNIzkDlavv/aSJYpO1WZTZnuw
-FggE0lbexrB1LLXVAgMBAAGjgekwgeYwHQYDVR0OBBYEFKclL3jKAcpoHY//k9b6
-+qOcu8gOMB8GA1UdIwQYMBaAFNUWAn9P038hGp3MVQkwz+9sCB9TMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7YSaK
+sRXydT/tR8CSnPJlohaoIdm7QDocoM47lERrwl9L9a6E9iXua/Y7OOcN+eg/0Egn
+ulMxfUGmiTbUQidEj4ivW2eSRxvTs6AW5am0HKoZz66LMOXiBdLG5HIJ89pWfg5k
+F7rcZW1NF641nvpUXr6nCWNTO+px+TXgssgLO2LpHrRtKvqeXH6d9c8blhVLHsrV
+c4IHqfvc5Th5YO3KPEuaznh4yHbA4Gv0ei2sEhJ1LeQcmQGuNLX3j30uKfq13XmP
+nuQdn3STDpTo8Z5ZrvQ7pMoKwR80A+UNK8w+LN1M3B17LaZYGrv4hiOSD9+3sXi7
+Qtn2S1SGTfYGEB4dAgMBAAGjgekwgeYwHQYDVR0OBBYEFDf/IBBxqMSViaoSAGQd
+Y+Uo3sAtMB8GA1UdIwQYMBaAFHQAtNLS9xN7NauxIAzKS0qb0DJTMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAaujp6yZU1FFy0E2jfORe
-jb3HXgqrRqCIIBVoVj9DDRNgMOtlhkVbDYvEsH8vGP4np25LEJkFJfhLmoCjNvY1
-XgrcCoE8/L4ycfztjNl3ziU8dK+3rVDu3P41kRXMeZHwSHRoi6DicJXfHbPlxUi8
-nMNMlVCUjTxCmhPjA7PfQzK/D81Q2SxSHDCeXzACaWa85ZJjQ8pi6NKu3SrhrM4A
-8NdUgWu4H7EO51crcRdQS/vk8Dcq2jfigEqHm9bVbWu0r0tDyQidV/GYPCq2WH2o
-g9Pwsd/FvYsMqEiRDMjrKfhUcLBJt/TjgMwuNyMj9EkhjSISjD4kohFmFc1olhk7
-Xw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAKi5Tru7yEpF/OGuiwtf7
+JH1h3PvCE4ZK249NR0hq5KDxGzygk3+FwZY/0k9i25AA0k0FDEVYltTvJX5UwDPZ
+PSjkCxeY3sF5OFSnS2vhfBwF1gNyZ9/X8UinGCQuhpD7kdt1dE7xd6na1mWiW226
+7+Rss4HPtRu/7vocSnK+rl1/AoTNGHrKxmxcNK9ekded+TlUDFpEgkTECvchOyG6
+soc4+qkPnDP50w4wz6AtS3dwigNPtH6vjs1X/lxWQgHsOZ9Sr2u+GiIecEtVHcY6
+l8rsZtT3O0/Na4lxPQmoWYZSxQecrI7eEGRf8IsK6W98iv+fIFNaqK9sXBKyltIq
+EQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:94:b0:d4:b6:63:20:79:6f:d7:5f:3e:0a:32:b1:
-                    79:0a:be:db:d4:86:23:8d:f8:17:0d:3e:b8:49:ed:
-                    d3:6a:39:db:e4:16:6b:f6:c9:03:d6:0f:60:a0:ae:
-                    6c:86:18:2d:50:06:70:48:5f:9b:14:17:4d:2b:d5:
-                    e4:e9:8c:19:0b:78:19:0e:d9:82:39:8f:92:f8:bc:
-                    7f:cc:7a:6e:06:7c:75:e3:7e:7e:24:71:7e:19:ba:
-                    64:2f:7b:60:e5:ab:c0:1a:9a:44:9d:a4:db:eb:d5:
-                    5b:69:31:ab:9f:86:9c:ec:90:2f:c2:29:ea:19:15:
-                    fb:85:50:89:71:67:28:70:46:f7:e4:1e:6d:e6:81:
-                    49:15:7e:e9:2e:9f:14:d6:f9:02:c9:91:8f:d1:a9:
-                    65:8a:cc:29:57:7b:e5:a8:08:db:19:a6:27:2f:89:
-                    4b:e1:ca:3e:1e:c4:f6:65:4f:b0:26:c4:29:13:44:
-                    3f:6c:49:ba:b7:99:2c:70:0c:54:7b:c2:9a:06:ce:
-                    95:51:62:16:a3:0c:9e:2c:34:d0:04:65:32:41:d7:
-                    db:6e:38:e9:12:8c:91:a5:0d:fe:b2:c6:b7:74:f4:
-                    23:65:d9:ae:88:af:0f:12:6a:28:f0:7b:db:2b:e4:
-                    6d:1b:74:de:93:e9:f6:72:f1:1c:28:8f:8a:32:37:
-                    a2:65
+                    00:cf:54:af:ff:58:f8:e6:17:3d:4d:7b:af:97:15:
+                    62:77:a7:e2:8c:91:9f:bf:6e:96:70:51:21:77:42:
+                    bc:bc:67:f5:62:4b:98:60:ec:16:14:27:bf:33:87:
+                    b5:a7:db:18:ff:99:c4:9d:95:d1:fb:06:31:11:15:
+                    2b:da:67:bb:7f:2f:11:92:35:62:8b:bf:dc:86:f2:
+                    4c:e5:73:2d:cd:dc:81:61:17:17:af:9e:2c:2c:23:
+                    53:09:84:79:4f:55:9c:66:91:e4:e3:aa:23:c8:2e:
+                    2f:46:36:ed:6d:53:f5:84:6c:41:ce:b6:62:81:9c:
+                    26:8f:4d:c6:29:0c:df:28:e9:f6:6e:a4:17:c7:b4:
+                    06:fa:d8:08:da:94:aa:a3:97:38:6b:2d:e7:7f:3f:
+                    65:e8:29:ae:2c:5c:6e:aa:70:bc:f2:2e:92:e3:57:
+                    6f:b9:43:57:4e:65:bc:61:df:cc:7e:36:a6:27:cb:
+                    9e:16:16:39:66:64:90:13:2c:07:3f:98:fe:20:93:
+                    2a:71:62:bd:bf:d0:07:c3:a4:4c:6d:2d:70:8f:e7:
+                    1b:52:09:b4:f8:eb:e7:be:d0:32:cc:d5:5c:03:35:
+                    c7:61:e3:96:e5:1e:1c:82:19:40:20:8a:45:57:73:
+                    6b:c6:87:90:ad:86:bd:01:59:b6:53:73:75:f9:55:
+                    6f:1b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D5:16:02:7F:4F:D3:7F:21:1A:9D:CC:55:09:30:CF:EF:6C:08:1F:53
+                74:00:B4:D2:D2:F7:13:7B:35:AB:B1:20:0C:CA:4B:4A:9B:D0:32:53
             X509v3 Authority Key Identifier: 
-                keyid:99:38:AC:DE:DD:17:19:E4:9D:92:02:FD:01:4D:40:C5:2C:4E:B7:4A
+                keyid:54:58:C2:3C:EC:BD:73:15:7D:69:67:AC:B5:E0:23:CE:A5:1A:F1:95
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -149,41 +149,41 @@
             1.2.3.4: 
                 ....
     Signature Algorithm: sha256WithRSAEncryption
-         0b:1e:08:36:25:d9:1b:97:a3:07:63:ca:17:a1:df:42:14:a5:
-         6d:75:63:a8:ba:b5:94:b1:59:0b:5c:18:a7:e2:8f:a7:8b:40:
-         f0:0f:cf:4d:8d:87:a0:77:44:b3:0a:b6:b2:a2:aa:25:0e:a5:
-         cf:4b:6b:77:6e:e1:e2:06:19:0d:97:d9:a9:95:72:26:24:07:
-         e5:cd:8c:c8:e1:c5:1f:6c:8e:42:dd:93:da:4c:6e:07:e5:6e:
-         b2:e0:e6:c2:04:1d:1f:e0:4f:f0:5d:00:63:2c:ea:35:e3:dc:
-         c3:14:6d:8f:86:23:ab:a8:d1:29:81:98:1e:b7:fb:34:4c:65:
-         18:27:fa:f5:5e:54:e6:3e:1e:b9:24:4c:86:cd:94:81:8d:60:
-         49:d7:a7:a7:de:a5:4d:30:32:88:0a:95:a9:36:01:51:20:1e:
-         2f:e2:1f:b8:fb:fb:14:77:9a:37:c3:96:21:e5:8b:96:a9:a0:
-         97:24:b8:1c:f5:dd:a2:1b:bb:04:c4:f3:b0:22:56:38:cc:20:
-         e1:5b:51:90:7c:14:5c:5e:ce:df:b1:a9:57:a2:3b:d6:0f:56:
-         3b:96:94:7e:c5:c7:a8:6e:eb:77:fe:50:1e:21:c8:0b:c2:3f:
-         6f:48:d0:dd:d4:f5:29:39:3f:e1:a7:bd:c8:ba:35:d3:28:72:
-         92:d4:e6:33
+         68:eb:42:c8:db:99:8c:4c:b5:c1:23:7b:f6:a4:e9:44:09:30:
+         4d:82:fd:38:e7:83:7c:54:ba:98:e6:28:78:ac:7a:75:d1:13:
+         fc:ad:35:5d:4e:a9:ad:03:f1:3c:d9:8a:45:6d:a1:5d:7a:79:
+         39:1a:e8:5f:61:db:b1:9d:0e:32:13:69:4a:20:d5:86:ed:51:
+         12:3c:b1:ec:a8:38:d1:71:72:34:c3:fa:44:7c:ee:a5:43:1b:
+         e5:b0:4f:96:20:6b:47:96:70:e8:99:7d:a7:d3:e7:0c:49:23:
+         4d:7f:98:15:2f:57:ab:df:7e:d6:e8:2f:1c:b1:75:e7:8e:e9:
+         5c:91:d8:54:53:33:1a:a7:69:b2:cc:ef:a2:93:18:92:3a:9b:
+         61:85:ea:b1:15:39:c8:df:ef:02:b5:17:85:87:72:26:34:df:
+         c6:d8:a3:14:9a:c9:86:49:b7:e7:62:81:74:4e:00:86:9a:c5:
+         5e:a9:43:81:0c:fd:64:04:b0:ba:98:53:32:32:50:46:e8:52:
+         f0:58:2d:c8:60:ae:6e:59:db:15:59:07:b5:38:85:e3:c6:86:
+         d3:69:65:46:84:7f:4f:3e:8f:f8:f4:34:f4:11:d9:2d:6d:5b:
+         74:44:c4:8d:f3:af:c1:0a:f8:d2:e4:2b:d4:f6:57:28:43:8e:
+         73:cd:b6:4c
 -----BEGIN CERTIFICATE-----
 MIIDejCCAmKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlLDUtmMg
-eW/XXz4KMrF5Cr7b1IYjjfgXDT64Se3Tajnb5BZr9skD1g9goK5shhgtUAZwSF+b
-FBdNK9Xk6YwZC3gZDtmCOY+S+Lx/zHpuBnx1435+JHF+GbpkL3tg5avAGppEnaTb
-69VbaTGrn4ac7JAvwinqGRX7hVCJcWcocEb35B5t5oFJFX7pLp8U1vkCyZGP0all
-iswpV3vlqAjbGaYnL4lL4co+HsT2ZU+wJsQpE0Q/bEm6t5kscAxUe8KaBs6VUWIW
-owyeLDTQBGUyQdfbbjjpEoyRpQ3+ssa3dPQjZdmuiK8PEmoo8HvbK+RtG3Tek+n2
-cvEcKI+KMjeiZQIDAQABo4HYMIHVMB0GA1UdDgQWBBTVFgJ/T9N/IRqdzFUJMM/v
-bAgfUzAfBgNVHSMEGDAWgBSZOKze3RcZ5J2SAv0BTUDFLE63SjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1Sv/1j4
+5hc9TXuvlxVid6fijJGfv26WcFEhd0K8vGf1YkuYYOwWFCe/M4e1p9sY/5nEnZXR
++wYxERUr2me7fy8RkjVii7/chvJM5XMtzdyBYRcXr54sLCNTCYR5T1WcZpHk46oj
+yC4vRjbtbVP1hGxBzrZigZwmj03GKQzfKOn2bqQXx7QG+tgI2pSqo5c4ay3nfz9l
+6CmuLFxuqnC88i6S41dvuUNXTmW8Yd/MfjamJ8ueFhY5ZmSQEywHP5j+IJMqcWK9
+v9AHw6RMbS1wj+cbUgm0+OvnvtAyzNVcAzXHYeOW5R4cghlAIIpFV3NrxoeQrYa9
+AVm2U3N1+VVvGwIDAQABo4HYMIHVMB0GA1UdDgQWBBR0ALTS0vcTezWrsSAMyktK
+m9AyUzAfBgNVHSMEGDAWgBRUWMI87L1zFX1pZ6y14CPOpRrxlTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wCwYDKgMEBAQBAgMEMA0GCSqG
-SIb3DQEBCwUAA4IBAQALHgg2Jdkbl6MHY8oXod9CFKVtdWOourWUsVkLXBin4o+n
-i0DwD89NjYegd0SzCrayoqolDqXPS2t3buHiBhkNl9mplXImJAflzYzI4cUfbI5C
-3ZPaTG4H5W6y4ObCBB0f4E/wXQBjLOo149zDFG2PhiOrqNEpgZget/s0TGUYJ/r1
-XlTmPh65JEyGzZSBjWBJ16en3qVNMDKICpWpNgFRIB4v4h+4+/sUd5o3w5Yh5YuW
-qaCXJLgc9d2iG7sExPOwIlY4zCDhW1GQfBRcXs7fsalXojvWD1Y7lpR+xceobut3
-/lAeIcgLwj9vSNDd1PUpOT/hp73IujXTKHKS1OYz
+SIb3DQEBCwUAA4IBAQBo60LI25mMTLXBI3v2pOlECTBNgv0454N8VLqY5ih4rHp1
+0RP8rTVdTqmtA/E82YpFbaFdenk5GuhfYduxnQ4yE2lKINWG7VESPLHsqDjRcXI0
+w/pEfO6lQxvlsE+WIGtHlnDomX2n0+cMSSNNf5gVL1er337W6C8csXXnjulckdhU
+UzMap2myzO+ikxiSOpthheqxFTnI3+8CtReFh3ImNN/G2KMUmsmGSbfnYoF0TgCG
+msVeqUOBDP1kBLC6mFMyMlBG6FLwWC3IYK5uWdsVWQe1OIXjxobTaWVGhH9PPo/4
+9DT0EdktbVt0RMSN86/BCvjS5CvU9lcoQ45zzbZM
 -----END CERTIFICATE-----
 
 Certificate:
@@ -200,30 +200,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a3:83:87:29:55:0b:8e:0a:7e:d7:d3:74:4f:6c:
-                    58:a6:8c:5c:09:8d:13:65:8b:94:04:8e:52:13:93:
-                    9e:8c:75:2b:37:f7:9f:ca:64:92:f2:42:e9:8d:d6:
-                    36:19:ab:14:e4:f3:76:16:65:68:3d:3b:51:eb:e5:
-                    d0:33:af:8e:26:5b:f2:5c:4e:3d:7e:11:46:b6:2a:
-                    6d:fd:3a:54:57:91:8b:6c:e1:fb:8b:08:b8:80:d3:
-                    0d:2d:d0:b8:2e:1e:f0:b3:33:c5:15:0b:b0:ad:de:
-                    27:68:a4:3d:3b:6c:8d:4c:a6:d0:5c:7e:58:52:01:
-                    8f:fe:fb:86:5e:ce:ea:fc:33:77:28:c5:4c:ee:d0:
-                    0b:cb:a7:97:7f:05:70:53:a3:61:06:fa:b3:9d:7e:
-                    d5:dd:3f:ef:58:04:f8:3c:91:fc:8d:fa:ca:cd:97:
-                    a4:3b:44:ac:dd:64:a7:32:08:87:0f:73:36:d7:14:
-                    e0:1d:b8:29:11:97:cb:9d:79:1f:bc:c8:cc:28:ae:
-                    8e:9a:2f:39:62:1f:28:aa:b9:c7:81:7c:34:96:44:
-                    39:e6:00:4b:5b:0e:4b:7a:fd:ca:bf:5d:67:50:91:
-                    3a:59:89:1b:3a:12:7c:7e:b9:58:54:e5:4f:97:00:
-                    35:c8:a7:b9:fd:3f:5e:08:5e:ac:0c:ba:61:e8:42:
-                    34:33
+                    00:e3:8f:54:4c:fa:f9:2a:e4:69:c6:ca:90:31:93:
+                    5f:6f:66:05:43:e5:86:4f:dd:78:dd:aa:85:74:58:
+                    a5:d1:60:06:32:cc:35:3f:56:6b:fe:a8:82:45:7c:
+                    bb:b9:cf:b2:f2:de:a9:61:82:25:49:bd:98:b3:71:
+                    8d:35:fa:86:94:15:48:f8:48:bd:02:bd:42:ee:a4:
+                    88:e1:f1:cc:25:4a:da:b2:d3:5b:77:d8:09:b6:c0:
+                    c9:a1:32:96:6c:55:5e:8a:db:be:52:b2:25:cd:e3:
+                    4d:4d:61:6e:3e:43:40:52:9a:37:7f:b0:7b:22:f4:
+                    b5:79:7f:13:5b:dc:c3:2e:aa:1b:00:21:80:27:3f:
+                    d4:ea:57:2c:46:b5:cd:be:4a:e5:2a:5d:b7:85:10:
+                    20:c2:11:81:c4:e7:99:5a:4e:83:53:e6:88:ff:bd:
+                    69:32:9e:d6:5c:43:f5:79:52:fc:c9:3f:d3:17:cc:
+                    76:bb:42:93:2f:3a:df:21:89:a2:0a:1a:22:f9:d3:
+                    01:f7:c4:99:91:07:c3:46:17:03:7a:3c:a8:36:32:
+                    05:62:23:66:0d:95:22:87:46:23:a7:bb:21:10:dc:
+                    54:bb:29:bb:7a:44:28:8c:fb:38:8f:41:3a:d0:0c:
+                    60:fe:26:ae:e0:70:71:32:e7:ac:5b:29:25:0c:a7:
+                    83:9b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                99:38:AC:DE:DD:17:19:E4:9D:92:02:FD:01:4D:40:C5:2C:4E:B7:4A
+                54:58:C2:3C:EC:BD:73:15:7D:69:67:AC:B5:E0:23:CE:A5:1A:F1:95
             X509v3 Authority Key Identifier: 
-                keyid:99:38:AC:DE:DD:17:19:E4:9D:92:02:FD:01:4D:40:C5:2C:4E:B7:4A
+                keyid:54:58:C2:3C:EC:BD:73:15:7D:69:67:AC:B5:E0:23:CE:A5:1A:F1:95
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -238,41 +238,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         47:a7:24:e7:1f:29:34:d7:8e:3a:e1:af:aa:d3:3b:32:f4:d6:
-         7d:ec:ab:7c:34:59:0b:b1:33:80:6a:d4:36:4a:78:d3:3a:d6:
-         97:0d:8b:81:54:09:91:b5:30:79:78:e7:52:11:ba:e8:57:af:
-         f3:f8:f0:ff:17:9a:e3:d0:a0:89:81:50:e8:67:47:9b:b5:68:
-         ed:99:10:1b:d6:31:58:24:dd:74:3c:8b:76:77:46:a3:b9:ca:
-         b6:4b:3d:ca:b9:5b:ac:e7:92:8c:d3:f2:4a:ba:4b:2f:c6:11:
-         cf:38:15:59:5a:fa:2d:d2:72:31:8f:54:a4:7e:44:a7:26:9d:
-         1b:38:e0:ac:75:72:9c:71:4c:78:54:80:8f:74:b7:11:b0:5c:
-         c7:69:a5:03:1e:cd:5e:c5:cd:60:0e:80:32:19:02:e0:8c:b4:
-         76:e7:00:a1:e5:bc:29:31:61:a6:55:f0:72:92:78:69:6f:26:
-         08:96:71:b9:42:a9:eb:cc:54:8e:d6:55:1a:26:2c:a0:b5:a6:
-         df:52:86:a1:df:26:da:26:86:d5:17:5b:c9:9b:90:c0:6c:ab:
-         23:1a:82:2d:ff:b6:83:ae:3c:c1:c3:85:5e:49:aa:d6:ef:fd:
-         f4:4a:22:7c:90:b8:46:2e:15:63:93:0c:c5:2d:9e:f6:32:03:
-         53:10:30:36
+         d9:5c:a3:8f:f8:a8:3b:83:04:3d:4c:5e:33:16:78:2a:a5:a6:
+         c9:b1:9f:3a:ac:cb:36:70:a4:3f:69:7d:2a:91:d0:dd:00:45:
+         f4:a3:d0:25:fb:dd:a8:82:98:54:d5:14:2d:c3:62:1d:c6:47:
+         ce:d1:c2:5d:1f:b3:07:d5:90:b3:98:e5:5f:32:cf:84:08:e1:
+         92:8b:6a:5e:3a:3c:e8:05:8c:c2:11:c7:eb:0a:65:be:16:d0:
+         f7:33:a1:5f:0b:ac:ac:cf:f7:cd:dd:07:9c:d3:ec:d7:90:2d:
+         94:f6:04:bd:be:9a:13:de:9e:98:d1:d8:7d:6d:13:2d:55:e0:
+         a8:00:80:16:df:b1:87:2d:12:32:d1:9f:ac:96:69:4c:9c:ba:
+         ec:58:1f:2b:af:fc:50:63:e8:1a:ae:56:ab:cc:a9:8b:03:95:
+         1f:38:13:09:4c:4d:d9:4b:22:05:88:fc:6d:ab:e4:eb:bd:ff:
+         5f:ed:44:22:ca:ea:d8:aa:a8:e4:1c:78:9f:be:bb:84:05:6e:
+         9d:22:3c:25:ab:f8:32:cd:69:93:b9:de:c6:d9:39:0c:0f:9a:
+         de:ee:c7:3c:d7:9f:6d:ee:ef:e9:69:4c:1e:de:92:e3:e8:59:
+         86:19:00:98:7e:b1:c2:5b:e2:a9:bc:a0:60:82:7d:ca:17:11:
+         ac:f3:3b:24
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKODhylVC44KftfTdE9s
-WKaMXAmNE2WLlASOUhOTnox1Kzf3n8pkkvJC6Y3WNhmrFOTzdhZlaD07Uevl0DOv
-jiZb8lxOPX4RRrYqbf06VFeRi2zh+4sIuIDTDS3QuC4e8LMzxRULsK3eJ2ikPTts
-jUym0Fx+WFIBj/77hl7O6vwzdyjFTO7QC8unl38FcFOjYQb6s51+1d0/71gE+DyR
-/I36ys2XpDtErN1kpzIIhw9zNtcU4B24KRGXy515H7zIzCiujpovOWIfKKq5x4F8
-NJZEOeYAS1sOS3r9yr9dZ1CROlmJGzoSfH65WFTlT5cANcinuf0/XgherAy6YehC
-NDMCAwEAAaOByzCByDAdBgNVHQ4EFgQUmTis3t0XGeSdkgL9AU1AxSxOt0owHwYD
-VR0jBBgwFoAUmTis3t0XGeSdkgL9AU1AxSxOt0owNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOOPVEz6+SrkacbKkDGT
+X29mBUPlhk/deN2qhXRYpdFgBjLMNT9Wa/6ogkV8u7nPsvLeqWGCJUm9mLNxjTX6
+hpQVSPhIvQK9Qu6kiOHxzCVK2rLTW3fYCbbAyaEylmxVXorbvlKyJc3jTU1hbj5D
+QFKaN3+weyL0tXl/E1vcwy6qGwAhgCc/1OpXLEa1zb5K5Spdt4UQIMIRgcTnmVpO
+g1PmiP+9aTKe1lxD9XlS/Mk/0xfMdrtCky863yGJogoaIvnTAffEmZEHw0YXA3o8
+qDYyBWIjZg2VIodGI6e7IRDcVLspu3pEKIz7OI9BOtAMYP4mruBwcTLnrFspJQyn
+g5sCAwEAAaOByzCByDAdBgNVHQ4EFgQUVFjCPOy9cxV9aWesteAjzqUa8ZUwHwYD
+VR0jBBgwFoAUVFjCPOy9cxV9aWesteAjzqUa8ZUwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBHpyTnHyk0
-14464a+q0zsy9NZ97Kt8NFkLsTOAatQ2SnjTOtaXDYuBVAmRtTB5eOdSEbroV6/z
-+PD/F5rj0KCJgVDoZ0ebtWjtmRAb1jFYJN10PIt2d0ajucq2Sz3KuVus55KM0/JK
-uksvxhHPOBVZWvot0nIxj1SkfkSnJp0bOOCsdXKccUx4VICPdLcRsFzHaaUDHs1e
-xc1gDoAyGQLgjLR25wCh5bwpMWGmVfByknhpbyYIlnG5QqnrzFSO1lUaJiygtabf
-Uoah3ybaJobVF1vJm5DAbKsjGoIt/7aDrjzBw4VeSarW7/30SiJ8kLhGLhVjkwzF
-LZ72MgNTEDA2
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDZXKOP+Kg7
+gwQ9TF4zFngqpabJsZ86rMs2cKQ/aX0qkdDdAEX0o9Al+92ogphU1RQtw2IdxkfO
+0cJdH7MH1ZCzmOVfMs+ECOGSi2peOjzoBYzCEcfrCmW+FtD3M6FfC6ysz/fN3Qec
+0+zXkC2U9gS9vpoT3p6Y0dh9bRMtVeCoAIAW37GHLRIy0Z+slmlMnLrsWB8rr/xQ
+Y+garlarzKmLA5UfOBMJTE3ZSyIFiPxtq+Trvf9f7UQiyurYqqjkHHifvruEBW6d
+Ijwlq/gyzWmTud7G2TkMD5re7sc8159t7u/paUwe3pLj6FmGGQCYfrHCW+KpvKBg
+gn3KFxGs8zsk
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -284,3 +284,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem b/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem
index 6ecd8bb..2e3e137 100644
--- a/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem
+++ b/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem
@@ -281,4 +281,7 @@
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
 
-
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem b/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem
index 1611b2f1..d423277 100644
--- a/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem
+++ b/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem
@@ -461,4 +461,7 @@
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
 
-
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem b/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem
index 7446d9f4..eecd9b6 100644
--- a/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem
+++ b/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem
@@ -48,30 +48,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:14:31:90:c4:c6:d0:b9:10:9e:e4:7a:e2:bc:
-                    16:ab:d2:5e:d7:3d:00:11:bf:25:0b:32:17:57:c4:
-                    fb:f6:60:0d:5a:7c:43:08:88:e6:35:f7:39:0f:dc:
-                    d7:ef:22:18:52:5b:de:27:35:10:93:ab:c0:ae:98:
-                    1b:e1:c7:40:a8:be:84:2a:e6:69:7c:c4:68:1e:c4:
-                    0d:29:97:55:12:fb:30:86:a3:8f:03:0c:d4:4b:22:
-                    76:ac:a8:db:fd:20:4c:46:ea:21:9b:59:4f:ea:9c:
-                    20:6f:ff:e1:7c:7d:64:5c:4b:91:4d:ac:56:1d:19:
-                    12:6c:af:f2:99:40:21:9d:06:b9:a2:90:2c:7b:bc:
-                    af:fe:c0:40:a1:06:89:62:f3:f3:fd:a0:07:61:aa:
-                    c2:f9:e1:0e:13:96:92:ac:53:ba:ed:a5:36:c9:b9:
-                    04:e7:13:67:bc:0e:63:dc:22:29:53:e2:e3:59:ab:
-                    5c:25:cd:d9:fb:46:4e:91:70:dd:41:4b:35:87:a4:
-                    fd:2c:66:be:75:7e:03:e9:12:61:66:cb:19:88:a1:
-                    61:b7:13:b4:ab:51:a6:d5:58:9c:db:8c:a2:1a:da:
-                    c3:6f:cb:b6:b1:65:d8:a3:a3:d1:87:d8:b9:bb:b8:
-                    c1:83:f1:83:38:2a:fd:a3:f6:a6:59:f2:27:f1:e3:
-                    50:29
+                    00:c4:05:bc:50:38:65:d6:ab:9b:ee:36:82:c0:43:
+                    3b:8d:75:18:05:05:2d:64:d7:f2:67:41:db:8b:2a:
+                    1a:31:8d:25:b5:54:f3:80:f8:47:13:0e:b3:04:93:
+                    a8:f2:d2:12:12:0d:1f:fa:fc:01:56:60:61:77:7b:
+                    99:56:da:27:06:70:cc:39:22:01:a5:bd:fe:2a:aa:
+                    70:52:90:cd:c6:2f:f9:81:1f:5d:6f:bb:b5:0e:3f:
+                    7c:03:cf:b4:47:83:06:db:f7:29:a0:da:a9:2b:72:
+                    85:74:40:a8:28:f6:09:cf:54:71:ac:48:0b:8f:1f:
+                    5a:e2:ca:4e:6c:c2:ee:21:b8:24:1e:b0:4c:fa:27:
+                    84:fa:87:bb:eb:48:c5:84:98:51:cc:f1:ae:93:7b:
+                    92:1e:10:d9:0e:4e:1c:20:29:ef:9d:ec:a1:74:2b:
+                    c4:3c:9e:42:45:ad:33:c3:6d:fa:41:55:0b:27:d1:
+                    fc:6a:e3:07:ee:b7:c1:75:9f:63:34:33:97:5c:d0:
+                    49:37:20:1e:fb:0e:ae:bc:2f:cb:48:c8:0d:cf:bf:
+                    a3:3c:5d:63:2d:1f:d5:65:04:25:ba:84:a6:9b:14:
+                    7e:7f:df:1e:b1:6f:0a:91:b4:d6:8a:a0:fd:75:8b:
+                    85:cf:bd:af:27:fa:12:dc:cf:19:05:78:6f:75:50:
+                    88:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:D0:19:F4:6B:86:BC:17:3B:FB:74:95:0F:53:BD:BD:4E:CA:10:D6
+                46:A2:E0:16:9E:F7:65:A3:9D:F8:F6:34:A0:DC:33:8A:7A:AE:2E:89
             X509v3 Authority Key Identifier: 
-                keyid:D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                keyid:0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -86,42 +86,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         0e:b6:ad:85:34:3d:cf:9c:2f:8c:e7:90:80:33:f6:12:99:40:
-         6d:89:7b:5c:08:c9:a9:fc:40:24:1e:14:ac:6c:6a:11:aa:3e:
-         ea:c1:19:32:75:67:26:fe:c0:f9:55:e9:b6:04:74:c9:e3:22:
-         59:3a:06:5a:5f:25:6d:1d:df:48:62:a4:ee:d0:87:df:20:9d:
-         9c:95:aa:4e:77:05:28:e6:66:ac:ae:23:e4:74:df:5a:b4:21:
-         e7:3d:0f:95:61:84:11:7e:d8:72:66:dd:85:c7:41:fe:44:12:
-         da:4c:c7:1b:ab:7d:4b:3d:c4:38:2d:b9:54:8a:26:1e:76:1b:
-         f6:0b:8a:e9:fa:9f:0a:e6:cc:6d:c5:55:f1:a5:29:20:42:05:
-         d4:5a:4f:27:ab:b6:e4:c4:ea:4d:8b:97:53:67:03:75:32:1f:
-         9d:1e:b8:72:e1:c4:5a:09:15:d7:ce:a3:59:ed:cc:4d:0f:ea:
-         c0:1d:57:1a:43:d7:7a:63:86:b0:b8:5c:4f:34:29:a4:be:90:
-         c4:6b:39:20:c9:25:96:7d:a1:cc:ee:f7:57:04:69:d7:21:66:
-         1d:cc:4e:6c:10:1a:6e:87:11:f3:e3:ae:9e:5b:64:04:ee:ac:
-         c6:0a:24:80:e4:0a:0e:89:49:9d:0f:1d:74:b2:f6:db:7e:25:
-         a1:d0:6e:7e
+         6c:41:15:1d:16:82:4b:09:00:30:69:b4:64:34:6b:a9:f3:97:
+         1e:6d:4c:6d:d8:77:91:21:ae:4f:50:b0:eb:f9:24:39:0d:0e:
+         da:4b:dd:6a:2f:80:61:65:e1:4e:27:50:9e:1e:91:05:23:26:
+         e7:b6:49:52:f1:4b:19:25:2e:f0:c7:6e:53:f3:13:33:63:97:
+         6e:91:97:0d:9d:60:08:9b:dd:9f:40:28:ed:14:57:43:d8:bf:
+         f6:16:65:d8:b3:b7:42:61:aa:87:75:e1:c1:93:17:ae:a2:6d:
+         f6:ac:48:04:ce:88:ee:61:81:52:a3:45:e7:c3:19:bb:15:e6:
+         a9:7e:e3:21:2d:44:67:34:58:63:02:f3:3f:16:63:51:fa:d8:
+         8b:21:9e:8d:7a:55:98:4f:a5:cc:be:1b:75:31:37:17:79:e5:
+         dc:1a:4b:5f:fa:88:61:64:8c:e6:a4:4d:33:b5:14:e2:0a:51:
+         6e:d3:70:25:6f:3c:56:c3:d2:fd:c3:0a:47:f9:17:34:60:f3:
+         2b:5a:76:49:fb:2c:0a:e1:94:65:74:75:b5:58:a5:90:99:2d:
+         da:7e:7a:9e:a7:67:17:d2:a6:8d:a6:b3:c6:46:1c:ad:9b:73:
+         ce:a7:b3:f0:f2:44:38:1e:7e:30:ab:aa:ac:64:e2:06:b4:6b:
+         39:a6:7c:52
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQFDGQ
-xMbQuRCe5HrivBar0l7XPQARvyULMhdXxPv2YA1afEMIiOY19zkP3NfvIhhSW94n
-NRCTq8CumBvhx0CovoQq5ml8xGgexA0pl1US+zCGo48DDNRLInasqNv9IExG6iGb
-WU/qnCBv/+F8fWRcS5FNrFYdGRJsr/KZQCGdBrmikCx7vK/+wEChBoli8/P9oAdh
-qsL54Q4TlpKsU7rtpTbJuQTnE2e8DmPcIilT4uNZq1wlzdn7Rk6RcN1BSzWHpP0s
-Zr51fgPpEmFmyxmIoWG3E7SrUabVWJzbjKIa2sNvy7axZdijo9GH2Lm7uMGD8YM4
-Kv2j9qZZ8ifx41ApAgMBAAGjgekwgeYwHQYDVR0OBBYEFAHQGfRrhrwXO/t0lQ9T
-vb1OyhDWMB8GA1UdIwQYMBaAFNOXxve55RdpbXg5dzoKrTItQKwHMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEBbxQ
+OGXWq5vuNoLAQzuNdRgFBS1k1/JnQduLKhoxjSW1VPOA+EcTDrMEk6jy0hISDR/6
+/AFWYGF3e5lW2icGcMw5IgGlvf4qqnBSkM3GL/mBH11vu7UOP3wDz7RHgwbb9ymg
+2qkrcoV0QKgo9gnPVHGsSAuPH1riyk5swu4huCQesEz6J4T6h7vrSMWEmFHM8a6T
+e5IeENkOThwgKe+d7KF0K8Q8nkJFrTPDbfpBVQsn0fxq4wfut8F1n2M0M5dc0Ek3
+IB77Dq68L8tIyA3Pv6M8XWMtH9VlBCW6hKabFH5/3x6xbwqRtNaKoP11i4XPva8n
++hLczxkFeG91UIhnAgMBAAGjgekwgeYwHQYDVR0OBBYEFEai4Bae92Wjnfj2NKDc
+M4p6ri6JMB8GA1UdIwQYMBaAFAyOXh6mlqUAz/eeFJS63F4G1jftMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEADrathTQ9z5wvjOeQgDP2
-EplAbYl7XAjJqfxAJB4UrGxqEao+6sEZMnVnJv7A+VXptgR0yeMiWToGWl8lbR3f
-SGKk7tCH3yCdnJWqTncFKOZmrK4j5HTfWrQh5z0PlWGEEX7YcmbdhcdB/kQS2kzH
-G6t9Sz3EOC25VIomHnYb9guK6fqfCubMbcVV8aUpIEIF1FpPJ6u25MTqTYuXU2cD
-dTIfnR64cuHEWgkV186jWe3MTQ/qwB1XGkPXemOGsLhcTzQppL6QxGs5IMklln2h
-zO73VwRp1yFmHcxObBAabocR8+OunltkBO6sxgokgOQKDolJnQ8ddLL2234lodBu
-fg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbEEVHRaCSwkAMGm0ZDRr
+qfOXHm1Mbdh3kSGuT1Cw6/kkOQ0O2kvdai+AYWXhTidQnh6RBSMm57ZJUvFLGSUu
+8MduU/MTM2OXbpGXDZ1gCJvdn0Ao7RRXQ9i/9hZl2LO3QmGqh3XhwZMXrqJt9qxI
+BM6I7mGBUqNF58MZuxXmqX7jIS1EZzRYYwLzPxZjUfrYiyGejXpVmE+lzL4bdTE3
+F3nl3BpLX/qIYWSM5qRNM7UU4gpRbtNwJW88VsPS/cMKR/kXNGDzK1p2SfssCuGU
+ZXR1tVilkJkt2n56nqdnF9KmjaazxkYcrZtzzqez8PJEOB5+MKuqrGTiBrRrOaZ8
+Ug==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -138,30 +138,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:ca:00:55:10:61:e4:0e:a3:f8:57:b8:7b:19:
-                    34:5a:77:b8:06:39:88:07:0c:ec:d0:3b:4a:53:02:
-                    3c:d1:d3:da:48:ae:8a:1a:1c:3d:30:bb:b3:36:80:
-                    a1:6f:cd:32:fd:54:26:b9:77:d7:1e:11:30:6c:eb:
-                    d7:11:9a:d9:af:54:7e:0e:37:c3:8d:f3:0a:5d:ec:
-                    82:d6:6e:f3:46:f4:2a:82:24:e4:28:38:c2:fa:6a:
-                    a6:f7:38:cd:94:50:20:bd:ee:50:9e:3a:a3:40:1a:
-                    49:77:eb:b2:05:8c:01:46:e6:ef:8f:55:91:0a:7a:
-                    44:10:62:b8:9f:3e:81:31:ae:08:95:29:37:47:53:
-                    ec:f3:c7:9c:f0:be:64:70:b3:81:f0:04:f4:a4:aa:
-                    41:ad:16:8f:13:31:af:9b:eb:55:dc:93:6d:56:cf:
-                    d6:f0:0a:fb:11:9e:32:59:d4:07:28:e1:fe:60:73:
-                    bf:43:bf:ff:c9:dc:f2:ca:3a:e1:0c:bd:90:0b:c2:
-                    ab:91:d5:2e:72:5d:5e:f0:f8:45:7b:3d:37:89:d1:
-                    16:bd:9b:4f:c9:c4:34:c7:c4:23:a4:04:4b:13:db:
-                    1a:b5:82:d0:f6:cd:99:fe:f3:0d:98:81:65:5e:2f:
-                    9e:a4:c1:5b:2b:67:b5:07:2a:24:a6:e7:06:5f:49:
-                    d6:d5
+                    00:a6:d5:5d:39:25:98:e5:a1:89:9e:75:b4:1a:98:
+                    af:76:f0:08:ba:4d:5e:41:cd:92:91:25:ac:99:c4:
+                    f6:43:5b:b5:d8:43:97:7c:98:9f:0b:a5:c4:9e:88:
+                    7f:67:14:f3:48:4f:d4:90:0f:ca:05:31:83:28:8b:
+                    0d:9b:e8:51:b9:eb:dd:d7:fc:04:2c:8c:39:b9:a5:
+                    1f:68:70:23:74:40:11:f9:97:c7:6a:05:65:4a:8e:
+                    26:72:cf:e1:e7:da:d2:40:d5:d9:75:5d:85:c2:4d:
+                    3e:96:01:6e:65:52:bf:70:9c:68:84:69:2c:3d:42:
+                    28:64:c8:3f:c9:d5:b5:3f:80:98:e1:83:8a:f5:fc:
+                    79:f9:6b:08:7a:72:3a:2e:e4:48:9d:02:bd:96:4e:
+                    45:74:7a:58:43:bd:7c:0c:64:96:b9:8a:4d:9f:b3:
+                    94:b7:ac:7e:50:65:b3:d0:df:dd:d9:ac:98:26:7c:
+                    89:fe:b1:a9:a8:52:f4:94:b7:83:8b:25:53:88:61:
+                    25:f1:dd:9f:06:6d:cc:3c:79:c8:6e:a2:67:c8:b6:
+                    23:20:8b:43:fc:00:f7:58:9b:78:cb:0b:a6:b9:06:
+                    6f:9d:78:45:b1:b9:d1:d0:6b:d8:38:b9:78:4a:c5:
+                    18:86:96:07:76:08:27:9c:a6:97:e9:5c:ae:b2:f3:
+                    e7:55
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -176,41 +176,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:35:f4:84:23:56:e3:2f:d1:54:fa:eb:85:02:e1:b7:aa:94:
-         a9:73:95:1d:29:9a:35:64:ac:4a:28:a3:87:24:e1:cd:3e:9f:
-         53:14:92:ce:86:d6:ae:d5:3f:1d:97:59:ae:c4:1c:ae:78:29:
-         d7:45:a5:14:58:b6:ac:28:3e:20:e6:27:56:22:b2:bf:80:24:
-         8d:bd:ef:17:67:8f:59:74:8b:7e:41:f1:fc:4d:a8:7b:d4:cf:
-         0c:ec:41:c6:7a:2b:fc:c3:c2:92:dc:49:f6:7a:3d:bd:b0:41:
-         0c:d3:0c:dd:58:1a:42:62:80:10:ad:95:ec:a0:8a:cb:b4:b8:
-         8e:5d:45:c7:d2:82:4b:eb:cb:1a:0e:f5:40:46:0d:dd:35:a3:
-         9b:d1:3e:55:95:b1:ab:96:63:31:ac:01:b4:ef:20:bc:0d:86:
-         88:b2:e5:94:64:6b:f1:1a:73:3e:09:b0:4c:57:87:3a:65:5a:
-         84:17:af:1c:cd:a5:4e:72:8e:19:8b:50:0a:97:4b:df:69:2c:
-         4c:21:d4:d1:7e:81:74:94:60:5b:b0:5e:56:53:14:b4:52:3d:
-         c9:45:a5:47:10:74:15:86:a0:52:ba:ff:b5:32:01:ef:dd:0e:
-         17:d6:73:35:aa:1e:ca:9a:8b:2e:28:cf:fa:1b:79:be:a7:87:
-         4b:b4:0a:26
+         5f:b7:f2:f0:06:94:30:f6:09:86:d6:b2:dc:c6:d2:35:4d:07:
+         bf:b3:45:f8:0a:44:fe:fd:80:90:a0:93:73:19:19:2c:9e:21:
+         90:76:64:0c:fc:f6:26:ef:8d:e6:13:30:10:fe:7f:9f:98:9e:
+         9c:9f:a1:d2:9b:ab:99:90:df:d3:96:e3:78:ae:e5:6a:a7:2e:
+         81:b7:89:f2:a0:85:be:57:7f:7f:a0:30:e1:ce:02:e3:1c:31:
+         1f:d5:9f:e2:db:6c:9b:ab:90:ba:0c:0c:a3:92:6b:3d:f3:88:
+         4f:75:5f:42:c1:66:fe:16:93:29:3c:1f:23:f5:19:63:2d:62:
+         4a:6e:05:02:82:6e:6a:38:c0:8b:27:45:80:d3:a2:34:47:ce:
+         83:ed:00:7f:31:de:4e:8c:01:1f:63:d7:61:bc:ac:f9:45:dc:
+         12:09:fc:4c:75:d3:46:b8:2f:95:c7:ff:21:64:37:e4:79:7e:
+         2d:de:26:ef:d3:9f:2f:8f:0c:78:2f:e0:ac:10:e9:04:52:69:
+         a4:78:b5:08:1a:a2:75:38:26:62:c0:74:e6:38:d1:50:44:5b:
+         a2:40:8c:68:8e:6a:1f:fa:48:51:2b:db:d2:6b:98:1e:3f:b3:
+         67:c6:0b:a4:a9:54:54:f1:37:40:1c:53:a3:57:a1:fa:0f:da:
+         b3:aa:4d:79
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8oAVRBh
-5A6j+Fe4exk0Wne4BjmIBwzs0DtKUwI80dPaSK6KGhw9MLuzNoChb80y/VQmuXfX
-HhEwbOvXEZrZr1R+DjfDjfMKXeyC1m7zRvQqgiTkKDjC+mqm9zjNlFAgve5Qnjqj
-QBpJd+uyBYwBRubvj1WRCnpEEGK4nz6BMa4IlSk3R1Ps88ec8L5kcLOB8AT0pKpB
-rRaPEzGvm+tV3JNtVs/W8Ar7EZ4yWdQHKOH+YHO/Q7//ydzyyjrhDL2QC8KrkdUu
-cl1e8PhFez03idEWvZtPycQ0x8QjpARLE9satYLQ9s2Z/vMNmIFlXi+epMFbK2e1
-ByokpucGX0nW1QIDAQABo4HLMIHIMB0GA1UdDgQWBBTTl8b3ueUXaW14OXc6Cq0y
-LUCsBzAfBgNVHSMEGDAWgBRkkJPNrMc3Nk1rFNZn0FQ6WUU6/DA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptVdOSWY
+5aGJnnW0GpivdvAIuk1eQc2SkSWsmcT2Q1u12EOXfJifC6XEnoh/ZxTzSE/UkA/K
+BTGDKIsNm+hRuevd1/wELIw5uaUfaHAjdEAR+ZfHagVlSo4mcs/h59rSQNXZdV2F
+wk0+lgFuZVK/cJxohGksPUIoZMg/ydW1P4CY4YOK9fx5+WsIenI6LuRInQK9lk5F
+dHpYQ718DGSWuYpNn7OUt6x+UGWz0N/d2ayYJnyJ/rGpqFL0lLeDiyVTiGEl8d2f
+Bm3MPHnIbqJnyLYjIItD/AD3WJt4ywumuQZvnXhFsbnR0GvYOLl4SsUYhpYHdggn
+nKaX6VyusvPnVQIDAQABo4HLMIHIMB0GA1UdDgQWBBQMjl4eppalAM/3nhSUutxe
+BtY37TAfBgNVHSMEGDAWgBRhSTUxrjbSGP5gZ4c6/5DV7V69wDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ANI19IQjVuMv0VT664UC4beqlKlzlR0pmjVkrEooo4ck4c0+n1MUks6G1q7VPx2X
-Wa7EHK54KddFpRRYtqwoPiDmJ1Yisr+AJI297xdnj1l0i35B8fxNqHvUzwzsQcZ6
-K/zDwpLcSfZ6Pb2wQQzTDN1YGkJigBCtleygisu0uI5dRcfSgkvryxoO9UBGDd01
-o5vRPlWVsauWYzGsAbTvILwNhoiy5ZRka/Eacz4JsExXhzplWoQXrxzNpU5yjhmL
-UAqXS99pLEwh1NF+gXSUYFuwXlZTFLRSPclFpUcQdBWGoFK6/7UyAe/dDhfWczWq
-Hsqaiy4oz/obeb6nh0u0CiY=
+AF+38vAGlDD2CYbWstzG0jVNB7+zRfgKRP79gJCgk3MZGSyeIZB2ZAz89ibvjeYT
+MBD+f5+YnpyfodKbq5mQ39OW43iu5WqnLoG3ifKghb5Xf3+gMOHOAuMcMR/Vn+Lb
+bJurkLoMDKOSaz3ziE91X0LBZv4Wkyk8HyP1GWMtYkpuBQKCbmo4wIsnRYDTojRH
+zoPtAH8x3k6MAR9j12G8rPlF3BIJ/Ex100a4L5XH/yFkN+R5fi3eJu/Tny+PDHgv
+4KwQ6QRSaaR4tQgaonU4JmLAdOY40VBEW6JAjGiOah/6SFEr29JrmB4/s2fGC6Sp
+VFTxN0AcU6NXofoP2rOqTXk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -227,30 +227,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ea:cc:2d:c4:88:54:07:90:da:62:ef:77:23:b2:
-                    83:c9:54:06:25:70:65:43:f2:29:a3:f3:22:f2:09:
-                    92:31:25:77:79:63:4a:7f:d8:e5:1f:16:1a:25:bc:
-                    d4:4b:9a:b3:a0:61:7e:c3:a5:90:32:97:5a:5b:59:
-                    cf:97:d6:ac:2c:86:a7:70:ed:2d:e0:bf:e8:44:6f:
-                    41:29:55:b0:40:a8:10:d6:4d:67:2b:01:1f:7a:33:
-                    2b:ce:8f:c8:fb:54:99:e2:11:2d:75:7d:ff:f5:fb:
-                    53:e5:6b:7e:ca:b8:fc:1f:bc:8f:32:29:6d:d2:6b:
-                    a1:9b:d9:7f:b2:f6:e9:18:72:fe:45:a2:23:dc:bf:
-                    5d:1e:43:5d:2b:80:2a:71:b4:cb:67:30:cc:aa:54:
-                    76:fc:4b:a3:2b:ab:99:31:66:bf:5c:09:44:e6:c9:
-                    27:42:3a:58:b5:fd:db:06:0f:11:04:0d:2d:36:4a:
-                    02:d5:50:4d:4d:7c:ed:a4:51:49:e3:fe:44:54:30:
-                    84:b6:1f:54:28:1f:9e:41:b2:20:23:75:e5:d4:e4:
-                    bf:79:a6:ab:84:aa:dc:56:38:cf:2c:d3:8e:13:48:
-                    43:5a:eb:eb:3b:a0:36:d5:89:0c:68:e2:fb:8f:3a:
-                    82:ad:01:4b:f8:bb:b0:2e:3d:b7:6e:91:a3:70:9a:
-                    d0:41
+                    00:bd:06:64:9c:f5:b5:d8:7e:e0:68:ea:1b:31:ba:
+                    6f:f5:00:3e:52:b3:d6:b1:1a:2c:13:37:ec:31:55:
+                    ec:0e:e1:c0:52:ba:cf:2a:0a:05:e5:a2:55:c4:0b:
+                    9c:00:c7:cc:63:83:4b:d0:4c:8c:f0:74:ac:73:d5:
+                    a0:59:39:d4:f2:a5:07:6f:39:ed:6c:6f:36:cc:18:
+                    76:59:49:06:87:94:a5:a2:bd:92:65:95:f4:55:3e:
+                    45:e0:dc:52:2f:ca:a8:01:bb:7a:ba:00:f1:ba:2d:
+                    5f:4d:c2:d2:56:b0:d6:23:eb:99:7a:f5:67:ae:d3:
+                    07:75:07:4d:70:5f:75:c7:c3:fd:b5:f9:26:23:7c:
+                    08:8a:1b:58:09:59:9a:64:91:f5:c6:51:54:c8:27:
+                    e6:53:9b:73:34:11:1e:42:6b:9c:85:e7:6e:c1:1c:
+                    88:0e:cf:ca:2f:e0:fc:aa:d4:fc:24:e1:e6:4a:f4:
+                    ad:02:56:08:79:aa:0d:a6:99:03:63:a7:e0:68:51:
+                    6a:cb:d4:de:35:e3:7e:d0:1a:e1:eb:d9:ba:21:91:
+                    b9:77:66:2d:4c:55:2f:73:c8:e7:49:a0:f1:bd:22:
+                    0f:0f:ac:31:4a:76:c4:e3:2f:dc:fc:09:00:b8:a1:
+                    dd:dd:d8:36:86:66:ec:63:ae:2e:4e:27:bc:0b:46:
+                    be:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -265,41 +265,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         77:d8:b1:3b:e5:c4:ce:c7:37:c6:fa:d7:a7:a1:cf:66:0e:19:
-         49:ea:06:f2:ec:8d:92:7d:e2:de:43:32:22:55:b4:84:f5:30:
-         bb:44:91:c1:81:2a:aa:ae:e1:3c:86:17:20:28:15:a1:d0:dc:
-         ce:7c:62:67:4e:d5:a8:e0:e3:44:91:af:96:24:58:0d:eb:26:
-         1f:42:37:82:de:d6:84:40:36:c7:78:7d:6c:f7:fa:54:a0:70:
-         d0:b9:41:a8:f2:3b:19:f1:cc:36:97:69:78:66:3c:ad:03:1e:
-         70:e7:81:23:11:d6:98:d7:ba:e5:98:d8:12:c7:4b:1d:5b:b1:
-         cd:91:5c:49:f0:d3:99:dd:9e:ab:db:7b:32:f6:8c:be:fe:0b:
-         2b:1e:96:8d:6e:7e:4a:69:71:f3:b6:f7:44:5f:a1:2f:62:67:
-         f0:55:b0:a2:d1:db:7f:58:3b:10:05:4f:e1:00:9d:45:4f:5d:
-         1e:b8:a8:83:bd:33:bd:14:07:34:23:5e:99:bb:16:3e:ee:de:
-         84:96:53:bf:29:e7:a5:52:a9:b6:6a:76:db:a6:ee:45:34:3f:
-         f7:48:d8:8a:12:46:c6:6c:ba:31:85:e8:45:07:85:23:37:85:
-         ff:15:de:0b:a8:97:40:60:11:9d:20:a8:fc:53:38:66:ea:9e:
-         d4:1b:9f:34
+         34:f8:20:57:dc:54:76:40:33:a6:fc:a3:e6:3c:e1:e0:53:7e:
+         47:58:59:c1:b4:3e:2c:81:46:98:bd:f7:84:98:2e:cc:b0:62:
+         48:11:aa:b9:db:9f:6e:56:b2:cc:f2:f0:8e:c9:82:c4:69:34:
+         72:3f:4b:34:0d:26:dd:77:8e:2a:04:c9:54:7d:97:a5:b8:e9:
+         98:94:c8:e0:d7:86:b9:8d:6f:bd:c0:74:67:e7:10:11:22:f0:
+         b3:1c:83:f2:66:a4:cf:c6:9e:8e:66:66:dd:b8:c3:14:b9:ab:
+         f3:1e:b3:e6:4b:f4:04:4a:c5:e3:4c:54:a5:2c:56:8f:9d:7f:
+         f1:9d:6b:d9:2f:36:63:f1:8e:55:91:de:10:67:1d:8c:1b:6a:
+         ed:31:72:46:f6:de:41:71:53:df:96:5f:44:b2:58:3b:c0:19:
+         30:ef:9f:ce:e2:a1:6b:a5:ba:cb:10:f0:10:d1:a3:a7:39:a4:
+         db:46:dc:33:1b:8a:b8:d2:a6:ad:fe:cc:00:cd:da:94:be:d9:
+         f0:8d:3e:e0:61:91:e4:1b:fc:6c:bd:86:1c:73:e7:c2:eb:68:
+         35:f2:5e:62:fc:77:37:20:63:0c:a2:bb:37:82:64:19:0f:70:
+         d0:ce:d3:17:7d:02:e9:3a:56:95:56:7a:aa:41:ab:79:2b:a0:
+         ca:28:42:69
 -----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrMLcSIVAeQ2mLvdyOy
-g8lUBiVwZUPyKaPzIvIJkjEld3ljSn/Y5R8WGiW81Euas6BhfsOlkDKXWltZz5fW
-rCyGp3DtLeC/6ERvQSlVsECoENZNZysBH3ozK86PyPtUmeIRLXV9//X7U+Vrfsq4
-/B+8jzIpbdJroZvZf7L26Rhy/kWiI9y/XR5DXSuAKnG0y2cwzKpUdvxLoyurmTFm
-v1wJRObJJ0I6WLX92wYPEQQNLTZKAtVQTU187aRRSeP+RFQwhLYfVCgfnkGyICN1
-5dTkv3mmq4Sq3FY4zyzTjhNIQ1rr6zugNtWJDGji+486gq0BS/i7sC49t26Ro3Ca
-0EECAwEAAaOByzCByDAdBgNVHQ4EFgQUZJCTzazHNzZNaxTWZ9BUOllFOvwwHwYD
-VR0jBBgwFoAUZJCTzazHNzZNaxTWZ9BUOllFOvwwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0GZJz1tdh+4GjqGzG6
+b/UAPlKz1rEaLBM37DFV7A7hwFK6zyoKBeWiVcQLnADHzGODS9BMjPB0rHPVoFk5
+1PKlB2857WxvNswYdllJBoeUpaK9kmWV9FU+ReDcUi/KqAG7eroA8botX03C0law
+1iPrmXr1Z67TB3UHTXBfdcfD/bX5JiN8CIobWAlZmmSR9cZRVMgn5lObczQRHkJr
+nIXnbsEciA7Pyi/g/KrU/CTh5kr0rQJWCHmqDaaZA2On4GhRasvU3jXjftAa4evZ
+uiGRuXdmLUxVL3PI50mg8b0iDw+sMUp2xOMv3PwJALih3d3YNoZm7GOuLk4nvAtG
+vukCAwEAAaOByzCByDAdBgNVHQ4EFgQUYUk1Ma420hj+YGeHOv+Q1e1evcAwHwYD
+VR0jBBgwFoAUYUk1Ma420hj+YGeHOv+Q1e1evcAwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB32LE75cTO
-xzfG+tenoc9mDhlJ6gby7I2SfeLeQzIiVbSE9TC7RJHBgSqqruE8hhcgKBWh0NzO
-fGJnTtWo4ONEka+WJFgN6yYfQjeC3taEQDbHeH1s9/pUoHDQuUGo8jsZ8cw2l2l4
-ZjytAx5w54EjEdaY17rlmNgSx0sdW7HNkVxJ8NOZ3Z6r23sy9oy+/gsrHpaNbn5K
-aXHztvdEX6EvYmfwVbCi0dt/WDsQBU/hAJ1FT10euKiDvTO9FAc0I16ZuxY+7t6E
-llO/KeelUqm2anbbpu5FND/3SNiKEkbGbLoxhehFB4UjN4X/Fd4LqJdAYBGdIKj8
-Uzhm6p7UG580
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA0+CBX3FR2
+QDOm/KPmPOHgU35HWFnBtD4sgUaYvfeEmC7MsGJIEaq5259uVrLM8vCOyYLEaTRy
+P0s0DSbdd44qBMlUfZeluOmYlMjg14a5jW+9wHRn5xARIvCzHIPyZqTPxp6OZmbd
+uMMUuavzHrPmS/QESsXjTFSlLFaPnX/xnWvZLzZj8Y5Vkd4QZx2MG2rtMXJG9t5B
+cVPfll9Eslg7wBkw75/O4qFrpbrLEPAQ0aOnOaTbRtwzG4q40qat/swAzdqUvtnw
+jT7gYZHkG/xsvYYcc+fC62g18l5i/Hc3IGMMors3gmQZD3DQztMXfQLpOlaVVnqq
+Qat5K6DKKEJp
 -----END CERTIFICATE-----
 
 Certificate:
@@ -316,30 +316,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ea:cc:2d:c4:88:54:07:90:da:62:ef:77:23:b2:
-                    83:c9:54:06:25:70:65:43:f2:29:a3:f3:22:f2:09:
-                    92:31:25:77:79:63:4a:7f:d8:e5:1f:16:1a:25:bc:
-                    d4:4b:9a:b3:a0:61:7e:c3:a5:90:32:97:5a:5b:59:
-                    cf:97:d6:ac:2c:86:a7:70:ed:2d:e0:bf:e8:44:6f:
-                    41:29:55:b0:40:a8:10:d6:4d:67:2b:01:1f:7a:33:
-                    2b:ce:8f:c8:fb:54:99:e2:11:2d:75:7d:ff:f5:fb:
-                    53:e5:6b:7e:ca:b8:fc:1f:bc:8f:32:29:6d:d2:6b:
-                    a1:9b:d9:7f:b2:f6:e9:18:72:fe:45:a2:23:dc:bf:
-                    5d:1e:43:5d:2b:80:2a:71:b4:cb:67:30:cc:aa:54:
-                    76:fc:4b:a3:2b:ab:99:31:66:bf:5c:09:44:e6:c9:
-                    27:42:3a:58:b5:fd:db:06:0f:11:04:0d:2d:36:4a:
-                    02:d5:50:4d:4d:7c:ed:a4:51:49:e3:fe:44:54:30:
-                    84:b6:1f:54:28:1f:9e:41:b2:20:23:75:e5:d4:e4:
-                    bf:79:a6:ab:84:aa:dc:56:38:cf:2c:d3:8e:13:48:
-                    43:5a:eb:eb:3b:a0:36:d5:89:0c:68:e2:fb:8f:3a:
-                    82:ad:01:4b:f8:bb:b0:2e:3d:b7:6e:91:a3:70:9a:
-                    d0:41
+                    00:bd:06:64:9c:f5:b5:d8:7e:e0:68:ea:1b:31:ba:
+                    6f:f5:00:3e:52:b3:d6:b1:1a:2c:13:37:ec:31:55:
+                    ec:0e:e1:c0:52:ba:cf:2a:0a:05:e5:a2:55:c4:0b:
+                    9c:00:c7:cc:63:83:4b:d0:4c:8c:f0:74:ac:73:d5:
+                    a0:59:39:d4:f2:a5:07:6f:39:ed:6c:6f:36:cc:18:
+                    76:59:49:06:87:94:a5:a2:bd:92:65:95:f4:55:3e:
+                    45:e0:dc:52:2f:ca:a8:01:bb:7a:ba:00:f1:ba:2d:
+                    5f:4d:c2:d2:56:b0:d6:23:eb:99:7a:f5:67:ae:d3:
+                    07:75:07:4d:70:5f:75:c7:c3:fd:b5:f9:26:23:7c:
+                    08:8a:1b:58:09:59:9a:64:91:f5:c6:51:54:c8:27:
+                    e6:53:9b:73:34:11:1e:42:6b:9c:85:e7:6e:c1:1c:
+                    88:0e:cf:ca:2f:e0:fc:aa:d4:fc:24:e1:e6:4a:f4:
+                    ad:02:56:08:79:aa:0d:a6:99:03:63:a7:e0:68:51:
+                    6a:cb:d4:de:35:e3:7e:d0:1a:e1:eb:d9:ba:21:91:
+                    b9:77:66:2d:4c:55:2f:73:c8:e7:49:a0:f1:bd:22:
+                    0f:0f:ac:31:4a:76:c4:e3:2f:dc:fc:09:00:b8:a1:
+                    dd:dd:d8:36:86:66:ec:63:ae:2e:4e:27:bc:0b:46:
+                    be:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -354,41 +354,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         08:18:04:78:4e:5e:99:54:0e:de:99:06:87:4d:3f:7b:98:bc:
-         ac:92:ec:e2:60:54:35:c8:65:68:09:3d:8d:d9:23:ed:c3:f3:
-         7b:fd:8a:60:fb:8b:dc:66:96:3f:69:81:5b:7c:cd:1d:cd:44:
-         8d:3a:93:e4:18:94:c4:a8:56:6a:fd:ea:07:ce:b1:a0:05:b2:
-         cd:fd:bf:05:e6:52:2b:26:36:9d:e2:f2:25:f2:c8:27:5b:52:
-         13:c6:3e:55:5b:72:58:34:a1:1c:5b:17:15:69:b1:82:78:a8:
-         6b:80:81:cc:73:40:5b:c0:ad:de:a8:ec:53:4f:72:f0:1b:a6:
-         d4:ea:e6:c0:35:96:df:ef:38:15:c5:0e:e9:92:22:c4:97:0d:
-         d5:37:6f:7e:af:1f:6e:53:45:1e:3e:21:8c:25:d3:4c:aa:0d:
-         5b:08:e1:5f:aa:dc:49:1c:84:b3:30:21:ea:b6:9c:95:d4:16:
-         1c:9a:0b:17:47:a1:8c:7d:04:a0:e5:df:7d:e7:69:b7:81:2d:
-         31:09:9b:ae:da:b2:1d:13:36:ad:f1:19:7e:92:6a:1b:70:01:
-         8b:ee:88:5e:54:56:d6:dd:6e:78:b1:53:06:89:3b:e3:7e:45:
-         2c:b5:9c:c9:92:5a:0d:c2:85:d0:e1:89:20:94:c7:ef:3c:01:
-         ab:25:5c:4b
+         3e:21:b0:9f:e1:0c:4c:62:3f:0a:d8:0b:97:bc:98:de:4d:18:
+         b6:88:51:bd:db:59:dc:63:ed:13:fa:52:76:59:13:b3:aa:c6:
+         42:3a:7e:e9:3c:cd:12:68:c0:54:55:32:8a:13:17:a4:f6:64:
+         b1:22:f7:01:29:80:a6:94:c6:06:4c:e8:97:81:16:9c:ce:cf:
+         ed:fc:a3:2a:19:70:8f:10:0e:32:15:dc:25:fb:45:41:87:96:
+         1a:ef:7f:be:65:24:a7:0d:cf:77:f0:ce:b1:27:21:9d:c4:a1:
+         24:ae:f0:9e:54:f2:f3:04:ac:fe:43:f1:c0:b5:f1:48:3c:57:
+         39:fb:7e:b6:c9:b8:29:57:f5:82:2e:4f:43:60:ff:d7:3a:54:
+         64:15:a4:11:c3:5f:ea:21:84:6b:ef:e6:2d:29:8c:e5:ab:d2:
+         aa:9f:d4:b3:c2:ea:5f:76:e7:c8:9b:a4:76:4c:99:2b:05:96:
+         60:e2:1e:f9:44:d7:c5:3a:80:e0:a4:7c:f8:ca:f8:5a:c6:63:
+         2b:9c:71:5a:7d:a4:03:69:b4:e3:dd:be:1b:e4:01:b3:53:b4:
+         46:5c:c2:8b:85:62:3e:f5:87:bd:5f:73:36:a0:c4:e6:a8:bc:
+         58:c4:bf:84:67:e3:00:f6:98:64:30:66:ba:8b:92:b5:b2:7f:
+         5d:e9:75:a7
 -----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBBTANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrMLcSIVAeQ2mLvdyOy
-g8lUBiVwZUPyKaPzIvIJkjEld3ljSn/Y5R8WGiW81Euas6BhfsOlkDKXWltZz5fW
-rCyGp3DtLeC/6ERvQSlVsECoENZNZysBH3ozK86PyPtUmeIRLXV9//X7U+Vrfsq4
-/B+8jzIpbdJroZvZf7L26Rhy/kWiI9y/XR5DXSuAKnG0y2cwzKpUdvxLoyurmTFm
-v1wJRObJJ0I6WLX92wYPEQQNLTZKAtVQTU187aRRSeP+RFQwhLYfVCgfnkGyICN1
-5dTkv3mmq4Sq3FY4zyzTjhNIQ1rr6zugNtWJDGji+486gq0BS/i7sC49t26Ro3Ca
-0EECAwEAAaOByzCByDAdBgNVHQ4EFgQUZJCTzazHNzZNaxTWZ9BUOllFOvwwHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0GZJz1tdh+4GjqGzG6
+b/UAPlKz1rEaLBM37DFV7A7hwFK6zyoKBeWiVcQLnADHzGODS9BMjPB0rHPVoFk5
+1PKlB2857WxvNswYdllJBoeUpaK9kmWV9FU+ReDcUi/KqAG7eroA8botX03C0law
+1iPrmXr1Z67TB3UHTXBfdcfD/bX5JiN8CIobWAlZmmSR9cZRVMgn5lObczQRHkJr
+nIXnbsEciA7Pyi/g/KrU/CTh5kr0rQJWCHmqDaaZA2On4GhRasvU3jXjftAa4evZ
+uiGRuXdmLUxVL3PI50mg8b0iDw+sMUp2xOMv3PwJALih3d3YNoZm7GOuLk4nvAtG
+vukCAwEAAaOByzCByDAdBgNVHQ4EFgQUYUk1Ma420hj+YGeHOv+Q1e1evcAwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAIGAR4Tl6Z
-VA7emQaHTT97mLyskuziYFQ1yGVoCT2N2SPtw/N7/Ypg+4vcZpY/aYFbfM0dzUSN
-OpPkGJTEqFZq/eoHzrGgBbLN/b8F5lIrJjad4vIl8sgnW1ITxj5VW3JYNKEcWxcV
-abGCeKhrgIHMc0BbwK3eqOxTT3LwG6bU6ubANZbf7zgVxQ7pkiLElw3VN29+rx9u
-U0UePiGMJdNMqg1bCOFfqtxJHISzMCHqtpyV1BYcmgsXR6GMfQSg5d9952m3gS0x
-CZuu2rIdEzat8Rl+kmobcAGL7oheVFbW3W54sVMGiTvjfkUstZzJkloNwoXQ4Ykg
-lMfvPAGrJVxL
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA+IbCf4QxM
+Yj8K2AuXvJjeTRi2iFG921ncY+0T+lJ2WROzqsZCOn7pPM0SaMBUVTKKExek9mSx
+IvcBKYCmlMYGTOiXgRaczs/t/KMqGXCPEA4yFdwl+0VBh5Ya73++ZSSnDc938M6x
+JyGdxKEkrvCeVPLzBKz+Q/HAtfFIPFc5+362ybgpV/WCLk9DYP/XOlRkFaQRw1/q
+IYRr7+YtKYzlq9Kqn9SzwupfdufIm6R2TJkrBZZg4h75RNfFOoDgpHz4yvhaxmMr
+nHFafaQDabTj3b4b5AGzU7RGXMKLhWI+9Ye9X3M2oMTmqLxYxL+EZ+MA9phkMGa6
+i5K1sn9d6XWn
 -----END CERTIFICATE-----
 
 Certificate:
@@ -405,30 +405,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a7:67:cf:1d:f5:54:e9:96:54:bc:65:8c:b7:9e:
-                    72:39:05:68:3d:44:e5:93:d8:4b:61:b1:a4:b4:b4:
-                    4c:c6:a0:92:b6:4d:06:3a:5b:b2:0a:8a:27:cb:b1:
-                    e7:c3:35:47:ef:ac:2d:a7:d0:9c:b2:50:6a:58:3d:
-                    12:a4:85:dc:77:a9:08:e5:f4:1f:c0:ef:00:51:cd:
-                    68:62:d5:e5:cc:01:be:be:42:8b:35:fb:00:9c:30:
-                    84:0c:d7:35:7d:88:d1:1b:43:78:19:79:aa:06:b3:
-                    ac:5c:69:a0:23:f0:69:dc:89:59:97:05:df:01:ae:
-                    5b:8f:01:a0:78:4f:05:4e:36:ac:00:b4:8d:e8:79:
-                    05:07:f2:76:a4:63:3f:95:21:06:57:61:a9:f0:43:
-                    04:d1:92:d3:9d:bb:b3:8f:5b:ef:ab:81:a0:23:11:
-                    38:b5:02:b2:95:1d:ac:da:b8:36:60:d7:d7:01:6d:
-                    e8:ed:32:21:b4:84:97:33:7c:67:88:0e:44:c7:12:
-                    87:85:6a:49:80:82:cb:1e:16:2b:2f:6d:98:82:a0:
-                    a0:30:cc:55:df:93:65:e0:9a:08:24:8a:47:cc:69:
-                    53:3c:b7:62:fa:df:11:64:d0:3f:52:43:80:f8:cf:
-                    7b:6f:d0:65:20:fb:22:d0:43:ca:fc:fc:0f:bd:1c:
-                    42:b9
+                    00:e9:9e:ac:cf:f1:ea:0e:19:26:bc:7a:38:a4:5f:
+                    0d:33:c4:69:32:3e:0d:ca:46:55:b5:e4:cc:63:0d:
+                    b1:c7:50:99:9e:39:72:a5:05:37:22:3a:04:e0:ff:
+                    9b:3e:1f:d6:b6:b5:f1:a9:38:58:a0:a2:a6:b7:7b:
+                    48:6f:dc:8f:f4:32:7d:ca:a5:4f:bd:fa:26:9c:8b:
+                    c1:01:ed:7f:ed:d5:f1:ef:b1:42:df:36:bd:06:8a:
+                    b0:2f:49:74:65:5f:f4:01:c6:b8:3d:bf:25:fd:cb:
+                    49:ce:e2:c6:a5:3e:7e:18:92:27:5f:60:82:b3:78:
+                    77:39:bb:ea:05:b1:e0:c2:74:b6:7f:f4:42:7b:ae:
+                    24:1b:e5:f9:ef:24:48:13:af:05:75:6c:4f:da:e3:
+                    59:c4:ad:2f:46:6c:8c:dc:5a:2e:75:57:31:b7:1e:
+                    8c:57:43:c7:68:4b:b9:e7:73:41:6f:45:09:79:e0:
+                    cc:69:98:80:c2:9d:e0:7a:e1:e0:57:d2:6f:0f:af:
+                    27:70:01:0f:2a:c1:f2:83:64:09:c7:3b:ad:80:12:
+                    19:6a:b0:b1:3c:39:e3:fa:8a:a8:23:3f:f0:1f:6c:
+                    8c:63:e8:9a:7c:8a:a6:fd:9b:a6:ca:46:7c:de:39:
+                    5d:ba:0b:5e:17:5c:e1:0b:8f:5c:fa:79:66:96:d9:
+                    d2:41
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -443,41 +443,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         7f:ec:13:f0:46:53:d5:75:08:a5:37:44:9c:47:19:9e:05:ef:
-         d6:30:68:1e:0b:c8:3c:84:93:51:36:25:48:60:56:d4:79:1f:
-         b6:2c:91:e3:6f:61:f9:e7:7d:c8:b6:7b:70:7f:27:6d:2c:38:
-         ec:73:e4:8c:86:f4:48:8e:1b:09:0d:9f:f8:5a:1f:95:ed:f1:
-         03:ea:99:64:d6:2d:46:4e:b8:0b:67:10:98:8e:19:2e:31:e1:
-         e3:d6:fe:7c:97:e9:a3:7a:18:25:9c:d4:4f:ce:a9:11:1d:f0:
-         53:32:8a:e8:8e:8d:80:fb:f1:c1:c1:6a:c1:cf:d2:36:a2:b1:
-         f9:32:9e:05:fd:73:1a:b9:37:e5:55:b2:1e:78:84:a5:04:45:
-         4a:d5:24:ad:20:39:fe:ab:ce:38:dd:c0:1e:2f:dd:ce:b4:5c:
-         49:1d:ab:7a:e1:bd:e9:a6:d2:02:64:8a:a9:97:36:89:42:c2:
-         82:14:ec:aa:dd:77:be:b1:d6:d2:4f:8b:a4:fe:5b:06:28:1c:
-         2f:4e:83:15:1f:10:a9:c6:ce:8e:a6:ca:bb:2c:01:6a:ae:99:
-         59:44:05:fc:a5:7e:fe:73:5f:df:b5:0b:48:b5:43:b6:10:9f:
-         42:2e:8b:65:f6:47:25:27:66:ef:a6:a0:ca:d3:cc:9c:ac:2d:
-         22:5b:87:5c
+         d3:ff:ab:16:f3:f5:25:e8:4f:77:fb:d2:98:0f:62:60:29:66:
+         71:d3:f9:e9:7d:06:03:1f:1e:59:0f:dc:12:39:13:47:a7:ab:
+         85:a2:38:8e:bf:f4:20:e9:de:b7:61:39:cc:b3:dc:97:1d:7d:
+         2d:5f:22:14:48:aa:13:6f:1f:a2:d4:c4:cb:1e:88:d5:b0:1d:
+         38:7a:8d:4c:c8:14:59:58:ba:64:83:1c:80:94:0a:9a:04:e1:
+         f8:b6:3f:fb:cb:3f:d5:d8:52:ea:83:d9:07:d3:6f:d0:81:ff:
+         05:d0:7b:3c:ab:8c:72:86:95:9d:21:d6:9d:41:3d:47:57:8b:
+         ae:fb:b2:91:0a:2a:9d:57:85:73:e5:f5:6d:cb:22:18:03:aa:
+         b0:89:e4:ac:e7:5f:32:46:1e:52:3d:e2:fc:75:04:77:43:a7:
+         db:85:c4:19:3a:ba:a9:a3:98:1b:c4:b5:b5:6a:ee:5a:b1:d8:
+         12:da:46:5f:3e:82:90:74:8a:19:e7:84:1a:f2:10:98:67:2d:
+         75:7e:eb:85:9a:ad:af:e3:e5:ee:5a:f8:61:19:1f:e6:df:e9:
+         8d:a8:50:90:7e:87:25:d4:b5:5b:2f:d5:98:b7:40:1f:41:1a:
+         62:48:b7:ac:c0:c0:85:7d:8c:20:8b:54:53:d2:b6:ad:a1:6d:
+         fa:7d:d6:a8
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdnzx31VOmWVLxljLee
-cjkFaD1E5ZPYS2GxpLS0TMagkrZNBjpbsgqKJ8ux58M1R++sLafQnLJQalg9EqSF
-3HepCOX0H8DvAFHNaGLV5cwBvr5CizX7AJwwhAzXNX2I0RtDeBl5qgazrFxpoCPw
-adyJWZcF3wGuW48BoHhPBU42rAC0jeh5BQfydqRjP5UhBldhqfBDBNGS0527s49b
-76uBoCMROLUCspUdrNq4NmDX1wFt6O0yIbSElzN8Z4gORMcSh4VqSYCCyx4WKy9t
-mIKgoDDMVd+TZeCaCCSKR8xpUzy3YvrfEWTQP1JDgPjPe2/QZSD7ItBDyvz8D70c
-QrkCAwEAAaOByzCByDAdBgNVHQ4EFgQUXaEDPY8T+QivHoNsvN5vo7XCGuowHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOmerM/x6g4ZJrx6OKRf
+DTPEaTI+DcpGVbXkzGMNscdQmZ45cqUFNyI6BOD/mz4f1ra18ak4WKCiprd7SG/c
+j/QyfcqlT736JpyLwQHtf+3V8e+xQt82vQaKsC9JdGVf9AHGuD2/Jf3LSc7ixqU+
+fhiSJ19ggrN4dzm76gWx4MJ0tn/0QnuuJBvl+e8kSBOvBXVsT9rjWcStL0ZsjNxa
+LnVXMbcejFdDx2hLuedzQW9FCXngzGmYgMKd4Hrh4FfSbw+vJ3ABDyrB8oNkCcc7
+rYASGWqwsTw54/qKqCM/8B9sjGPomnyKpv2bpspGfN45XboLXhdc4QuPXPp5ZpbZ
+0kECAwEAAaOByzCByDAdBgNVHQ4EFgQUvzG5FbjkAW6xJKza10twwNEWj/wwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB/7BPwRlPV
-dQilN0ScRxmeBe/WMGgeC8g8hJNRNiVIYFbUeR+2LJHjb2H5533ItntwfydtLDjs
-c+SMhvRIjhsJDZ/4Wh+V7fED6plk1i1GTrgLZxCYjhkuMeHj1v58l+mjehglnNRP
-zqkRHfBTMorojo2A+/HBwWrBz9I2orH5Mp4F/XMauTflVbIeeISlBEVK1SStIDn+
-q8443cAeL93OtFxJHat64b3pptICZIqplzaJQsKCFOyq3Xe+sdbST4uk/lsGKBwv
-ToMVHxCpxs6Opsq7LAFqrplZRAX8pX7+c1/ftQtItUO2EJ9CLotl9kclJ2bvpqDK
-08ycrC0iW4dc
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDT/6sW8/Ul
+6E93+9KYD2JgKWZx0/npfQYDHx5ZD9wSORNHp6uFojiOv/Qg6d63YTnMs9yXHX0t
+XyIUSKoTbx+i1MTLHojVsB04eo1MyBRZWLpkgxyAlAqaBOH4tj/7yz/V2FLqg9kH
+02/Qgf8F0Hs8q4xyhpWdIdadQT1HV4uu+7KRCiqdV4Vz5fVtyyIYA6qwieSs518y
+Rh5SPeL8dQR3Q6fbhcQZOrqpo5gbxLW1au5asdgS2kZfPoKQdIoZ54Qa8hCYZy11
+fuuFmq2v4+XuWvhhGR/m3+mNqFCQfocl1LVbL9WYt0AfQRpiSLeswMCFfYwgi1RT
+0ratoW36fdao
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -489,3 +489,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem b/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem
index 7afc4c8c4..fc7d9a5 100644
--- a/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem
+++ b/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem
@@ -48,30 +48,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:14:31:90:c4:c6:d0:b9:10:9e:e4:7a:e2:bc:
-                    16:ab:d2:5e:d7:3d:00:11:bf:25:0b:32:17:57:c4:
-                    fb:f6:60:0d:5a:7c:43:08:88:e6:35:f7:39:0f:dc:
-                    d7:ef:22:18:52:5b:de:27:35:10:93:ab:c0:ae:98:
-                    1b:e1:c7:40:a8:be:84:2a:e6:69:7c:c4:68:1e:c4:
-                    0d:29:97:55:12:fb:30:86:a3:8f:03:0c:d4:4b:22:
-                    76:ac:a8:db:fd:20:4c:46:ea:21:9b:59:4f:ea:9c:
-                    20:6f:ff:e1:7c:7d:64:5c:4b:91:4d:ac:56:1d:19:
-                    12:6c:af:f2:99:40:21:9d:06:b9:a2:90:2c:7b:bc:
-                    af:fe:c0:40:a1:06:89:62:f3:f3:fd:a0:07:61:aa:
-                    c2:f9:e1:0e:13:96:92:ac:53:ba:ed:a5:36:c9:b9:
-                    04:e7:13:67:bc:0e:63:dc:22:29:53:e2:e3:59:ab:
-                    5c:25:cd:d9:fb:46:4e:91:70:dd:41:4b:35:87:a4:
-                    fd:2c:66:be:75:7e:03:e9:12:61:66:cb:19:88:a1:
-                    61:b7:13:b4:ab:51:a6:d5:58:9c:db:8c:a2:1a:da:
-                    c3:6f:cb:b6:b1:65:d8:a3:a3:d1:87:d8:b9:bb:b8:
-                    c1:83:f1:83:38:2a:fd:a3:f6:a6:59:f2:27:f1:e3:
-                    50:29
+                    00:c4:05:bc:50:38:65:d6:ab:9b:ee:36:82:c0:43:
+                    3b:8d:75:18:05:05:2d:64:d7:f2:67:41:db:8b:2a:
+                    1a:31:8d:25:b5:54:f3:80:f8:47:13:0e:b3:04:93:
+                    a8:f2:d2:12:12:0d:1f:fa:fc:01:56:60:61:77:7b:
+                    99:56:da:27:06:70:cc:39:22:01:a5:bd:fe:2a:aa:
+                    70:52:90:cd:c6:2f:f9:81:1f:5d:6f:bb:b5:0e:3f:
+                    7c:03:cf:b4:47:83:06:db:f7:29:a0:da:a9:2b:72:
+                    85:74:40:a8:28:f6:09:cf:54:71:ac:48:0b:8f:1f:
+                    5a:e2:ca:4e:6c:c2:ee:21:b8:24:1e:b0:4c:fa:27:
+                    84:fa:87:bb:eb:48:c5:84:98:51:cc:f1:ae:93:7b:
+                    92:1e:10:d9:0e:4e:1c:20:29:ef:9d:ec:a1:74:2b:
+                    c4:3c:9e:42:45:ad:33:c3:6d:fa:41:55:0b:27:d1:
+                    fc:6a:e3:07:ee:b7:c1:75:9f:63:34:33:97:5c:d0:
+                    49:37:20:1e:fb:0e:ae:bc:2f:cb:48:c8:0d:cf:bf:
+                    a3:3c:5d:63:2d:1f:d5:65:04:25:ba:84:a6:9b:14:
+                    7e:7f:df:1e:b1:6f:0a:91:b4:d6:8a:a0:fd:75:8b:
+                    85:cf:bd:af:27:fa:12:dc:cf:19:05:78:6f:75:50:
+                    88:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:D0:19:F4:6B:86:BC:17:3B:FB:74:95:0F:53:BD:BD:4E:CA:10:D6
+                46:A2:E0:16:9E:F7:65:A3:9D:F8:F6:34:A0:DC:33:8A:7A:AE:2E:89
             X509v3 Authority Key Identifier: 
-                keyid:D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                keyid:0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -86,42 +86,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         0e:b6:ad:85:34:3d:cf:9c:2f:8c:e7:90:80:33:f6:12:99:40:
-         6d:89:7b:5c:08:c9:a9:fc:40:24:1e:14:ac:6c:6a:11:aa:3e:
-         ea:c1:19:32:75:67:26:fe:c0:f9:55:e9:b6:04:74:c9:e3:22:
-         59:3a:06:5a:5f:25:6d:1d:df:48:62:a4:ee:d0:87:df:20:9d:
-         9c:95:aa:4e:77:05:28:e6:66:ac:ae:23:e4:74:df:5a:b4:21:
-         e7:3d:0f:95:61:84:11:7e:d8:72:66:dd:85:c7:41:fe:44:12:
-         da:4c:c7:1b:ab:7d:4b:3d:c4:38:2d:b9:54:8a:26:1e:76:1b:
-         f6:0b:8a:e9:fa:9f:0a:e6:cc:6d:c5:55:f1:a5:29:20:42:05:
-         d4:5a:4f:27:ab:b6:e4:c4:ea:4d:8b:97:53:67:03:75:32:1f:
-         9d:1e:b8:72:e1:c4:5a:09:15:d7:ce:a3:59:ed:cc:4d:0f:ea:
-         c0:1d:57:1a:43:d7:7a:63:86:b0:b8:5c:4f:34:29:a4:be:90:
-         c4:6b:39:20:c9:25:96:7d:a1:cc:ee:f7:57:04:69:d7:21:66:
-         1d:cc:4e:6c:10:1a:6e:87:11:f3:e3:ae:9e:5b:64:04:ee:ac:
-         c6:0a:24:80:e4:0a:0e:89:49:9d:0f:1d:74:b2:f6:db:7e:25:
-         a1:d0:6e:7e
+         6c:41:15:1d:16:82:4b:09:00:30:69:b4:64:34:6b:a9:f3:97:
+         1e:6d:4c:6d:d8:77:91:21:ae:4f:50:b0:eb:f9:24:39:0d:0e:
+         da:4b:dd:6a:2f:80:61:65:e1:4e:27:50:9e:1e:91:05:23:26:
+         e7:b6:49:52:f1:4b:19:25:2e:f0:c7:6e:53:f3:13:33:63:97:
+         6e:91:97:0d:9d:60:08:9b:dd:9f:40:28:ed:14:57:43:d8:bf:
+         f6:16:65:d8:b3:b7:42:61:aa:87:75:e1:c1:93:17:ae:a2:6d:
+         f6:ac:48:04:ce:88:ee:61:81:52:a3:45:e7:c3:19:bb:15:e6:
+         a9:7e:e3:21:2d:44:67:34:58:63:02:f3:3f:16:63:51:fa:d8:
+         8b:21:9e:8d:7a:55:98:4f:a5:cc:be:1b:75:31:37:17:79:e5:
+         dc:1a:4b:5f:fa:88:61:64:8c:e6:a4:4d:33:b5:14:e2:0a:51:
+         6e:d3:70:25:6f:3c:56:c3:d2:fd:c3:0a:47:f9:17:34:60:f3:
+         2b:5a:76:49:fb:2c:0a:e1:94:65:74:75:b5:58:a5:90:99:2d:
+         da:7e:7a:9e:a7:67:17:d2:a6:8d:a6:b3:c6:46:1c:ad:9b:73:
+         ce:a7:b3:f0:f2:44:38:1e:7e:30:ab:aa:ac:64:e2:06:b4:6b:
+         39:a6:7c:52
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQFDGQ
-xMbQuRCe5HrivBar0l7XPQARvyULMhdXxPv2YA1afEMIiOY19zkP3NfvIhhSW94n
-NRCTq8CumBvhx0CovoQq5ml8xGgexA0pl1US+zCGo48DDNRLInasqNv9IExG6iGb
-WU/qnCBv/+F8fWRcS5FNrFYdGRJsr/KZQCGdBrmikCx7vK/+wEChBoli8/P9oAdh
-qsL54Q4TlpKsU7rtpTbJuQTnE2e8DmPcIilT4uNZq1wlzdn7Rk6RcN1BSzWHpP0s
-Zr51fgPpEmFmyxmIoWG3E7SrUabVWJzbjKIa2sNvy7axZdijo9GH2Lm7uMGD8YM4
-Kv2j9qZZ8ifx41ApAgMBAAGjgekwgeYwHQYDVR0OBBYEFAHQGfRrhrwXO/t0lQ9T
-vb1OyhDWMB8GA1UdIwQYMBaAFNOXxve55RdpbXg5dzoKrTItQKwHMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEBbxQ
+OGXWq5vuNoLAQzuNdRgFBS1k1/JnQduLKhoxjSW1VPOA+EcTDrMEk6jy0hISDR/6
+/AFWYGF3e5lW2icGcMw5IgGlvf4qqnBSkM3GL/mBH11vu7UOP3wDz7RHgwbb9ymg
+2qkrcoV0QKgo9gnPVHGsSAuPH1riyk5swu4huCQesEz6J4T6h7vrSMWEmFHM8a6T
+e5IeENkOThwgKe+d7KF0K8Q8nkJFrTPDbfpBVQsn0fxq4wfut8F1n2M0M5dc0Ek3
+IB77Dq68L8tIyA3Pv6M8XWMtH9VlBCW6hKabFH5/3x6xbwqRtNaKoP11i4XPva8n
++hLczxkFeG91UIhnAgMBAAGjgekwgeYwHQYDVR0OBBYEFEai4Bae92Wjnfj2NKDc
+M4p6ri6JMB8GA1UdIwQYMBaAFAyOXh6mlqUAz/eeFJS63F4G1jftMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEADrathTQ9z5wvjOeQgDP2
-EplAbYl7XAjJqfxAJB4UrGxqEao+6sEZMnVnJv7A+VXptgR0yeMiWToGWl8lbR3f
-SGKk7tCH3yCdnJWqTncFKOZmrK4j5HTfWrQh5z0PlWGEEX7YcmbdhcdB/kQS2kzH
-G6t9Sz3EOC25VIomHnYb9guK6fqfCubMbcVV8aUpIEIF1FpPJ6u25MTqTYuXU2cD
-dTIfnR64cuHEWgkV186jWe3MTQ/qwB1XGkPXemOGsLhcTzQppL6QxGs5IMklln2h
-zO73VwRp1yFmHcxObBAabocR8+OunltkBO6sxgokgOQKDolJnQ8ddLL2234lodBu
-fg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbEEVHRaCSwkAMGm0ZDRr
+qfOXHm1Mbdh3kSGuT1Cw6/kkOQ0O2kvdai+AYWXhTidQnh6RBSMm57ZJUvFLGSUu
+8MduU/MTM2OXbpGXDZ1gCJvdn0Ao7RRXQ9i/9hZl2LO3QmGqh3XhwZMXrqJt9qxI
+BM6I7mGBUqNF58MZuxXmqX7jIS1EZzRYYwLzPxZjUfrYiyGejXpVmE+lzL4bdTE3
+F3nl3BpLX/qIYWSM5qRNM7UU4gpRbtNwJW88VsPS/cMKR/kXNGDzK1p2SfssCuGU
+ZXR1tVilkJkt2n56nqdnF9KmjaazxkYcrZtzzqez8PJEOB5+MKuqrGTiBrRrOaZ8
+Ug==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -138,30 +138,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:ca:00:55:10:61:e4:0e:a3:f8:57:b8:7b:19:
-                    34:5a:77:b8:06:39:88:07:0c:ec:d0:3b:4a:53:02:
-                    3c:d1:d3:da:48:ae:8a:1a:1c:3d:30:bb:b3:36:80:
-                    a1:6f:cd:32:fd:54:26:b9:77:d7:1e:11:30:6c:eb:
-                    d7:11:9a:d9:af:54:7e:0e:37:c3:8d:f3:0a:5d:ec:
-                    82:d6:6e:f3:46:f4:2a:82:24:e4:28:38:c2:fa:6a:
-                    a6:f7:38:cd:94:50:20:bd:ee:50:9e:3a:a3:40:1a:
-                    49:77:eb:b2:05:8c:01:46:e6:ef:8f:55:91:0a:7a:
-                    44:10:62:b8:9f:3e:81:31:ae:08:95:29:37:47:53:
-                    ec:f3:c7:9c:f0:be:64:70:b3:81:f0:04:f4:a4:aa:
-                    41:ad:16:8f:13:31:af:9b:eb:55:dc:93:6d:56:cf:
-                    d6:f0:0a:fb:11:9e:32:59:d4:07:28:e1:fe:60:73:
-                    bf:43:bf:ff:c9:dc:f2:ca:3a:e1:0c:bd:90:0b:c2:
-                    ab:91:d5:2e:72:5d:5e:f0:f8:45:7b:3d:37:89:d1:
-                    16:bd:9b:4f:c9:c4:34:c7:c4:23:a4:04:4b:13:db:
-                    1a:b5:82:d0:f6:cd:99:fe:f3:0d:98:81:65:5e:2f:
-                    9e:a4:c1:5b:2b:67:b5:07:2a:24:a6:e7:06:5f:49:
-                    d6:d5
+                    00:a6:d5:5d:39:25:98:e5:a1:89:9e:75:b4:1a:98:
+                    af:76:f0:08:ba:4d:5e:41:cd:92:91:25:ac:99:c4:
+                    f6:43:5b:b5:d8:43:97:7c:98:9f:0b:a5:c4:9e:88:
+                    7f:67:14:f3:48:4f:d4:90:0f:ca:05:31:83:28:8b:
+                    0d:9b:e8:51:b9:eb:dd:d7:fc:04:2c:8c:39:b9:a5:
+                    1f:68:70:23:74:40:11:f9:97:c7:6a:05:65:4a:8e:
+                    26:72:cf:e1:e7:da:d2:40:d5:d9:75:5d:85:c2:4d:
+                    3e:96:01:6e:65:52:bf:70:9c:68:84:69:2c:3d:42:
+                    28:64:c8:3f:c9:d5:b5:3f:80:98:e1:83:8a:f5:fc:
+                    79:f9:6b:08:7a:72:3a:2e:e4:48:9d:02:bd:96:4e:
+                    45:74:7a:58:43:bd:7c:0c:64:96:b9:8a:4d:9f:b3:
+                    94:b7:ac:7e:50:65:b3:d0:df:dd:d9:ac:98:26:7c:
+                    89:fe:b1:a9:a8:52:f4:94:b7:83:8b:25:53:88:61:
+                    25:f1:dd:9f:06:6d:cc:3c:79:c8:6e:a2:67:c8:b6:
+                    23:20:8b:43:fc:00:f7:58:9b:78:cb:0b:a6:b9:06:
+                    6f:9d:78:45:b1:b9:d1:d0:6b:d8:38:b9:78:4a:c5:
+                    18:86:96:07:76:08:27:9c:a6:97:e9:5c:ae:b2:f3:
+                    e7:55
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -176,41 +176,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:35:f4:84:23:56:e3:2f:d1:54:fa:eb:85:02:e1:b7:aa:94:
-         a9:73:95:1d:29:9a:35:64:ac:4a:28:a3:87:24:e1:cd:3e:9f:
-         53:14:92:ce:86:d6:ae:d5:3f:1d:97:59:ae:c4:1c:ae:78:29:
-         d7:45:a5:14:58:b6:ac:28:3e:20:e6:27:56:22:b2:bf:80:24:
-         8d:bd:ef:17:67:8f:59:74:8b:7e:41:f1:fc:4d:a8:7b:d4:cf:
-         0c:ec:41:c6:7a:2b:fc:c3:c2:92:dc:49:f6:7a:3d:bd:b0:41:
-         0c:d3:0c:dd:58:1a:42:62:80:10:ad:95:ec:a0:8a:cb:b4:b8:
-         8e:5d:45:c7:d2:82:4b:eb:cb:1a:0e:f5:40:46:0d:dd:35:a3:
-         9b:d1:3e:55:95:b1:ab:96:63:31:ac:01:b4:ef:20:bc:0d:86:
-         88:b2:e5:94:64:6b:f1:1a:73:3e:09:b0:4c:57:87:3a:65:5a:
-         84:17:af:1c:cd:a5:4e:72:8e:19:8b:50:0a:97:4b:df:69:2c:
-         4c:21:d4:d1:7e:81:74:94:60:5b:b0:5e:56:53:14:b4:52:3d:
-         c9:45:a5:47:10:74:15:86:a0:52:ba:ff:b5:32:01:ef:dd:0e:
-         17:d6:73:35:aa:1e:ca:9a:8b:2e:28:cf:fa:1b:79:be:a7:87:
-         4b:b4:0a:26
+         5f:b7:f2:f0:06:94:30:f6:09:86:d6:b2:dc:c6:d2:35:4d:07:
+         bf:b3:45:f8:0a:44:fe:fd:80:90:a0:93:73:19:19:2c:9e:21:
+         90:76:64:0c:fc:f6:26:ef:8d:e6:13:30:10:fe:7f:9f:98:9e:
+         9c:9f:a1:d2:9b:ab:99:90:df:d3:96:e3:78:ae:e5:6a:a7:2e:
+         81:b7:89:f2:a0:85:be:57:7f:7f:a0:30:e1:ce:02:e3:1c:31:
+         1f:d5:9f:e2:db:6c:9b:ab:90:ba:0c:0c:a3:92:6b:3d:f3:88:
+         4f:75:5f:42:c1:66:fe:16:93:29:3c:1f:23:f5:19:63:2d:62:
+         4a:6e:05:02:82:6e:6a:38:c0:8b:27:45:80:d3:a2:34:47:ce:
+         83:ed:00:7f:31:de:4e:8c:01:1f:63:d7:61:bc:ac:f9:45:dc:
+         12:09:fc:4c:75:d3:46:b8:2f:95:c7:ff:21:64:37:e4:79:7e:
+         2d:de:26:ef:d3:9f:2f:8f:0c:78:2f:e0:ac:10:e9:04:52:69:
+         a4:78:b5:08:1a:a2:75:38:26:62:c0:74:e6:38:d1:50:44:5b:
+         a2:40:8c:68:8e:6a:1f:fa:48:51:2b:db:d2:6b:98:1e:3f:b3:
+         67:c6:0b:a4:a9:54:54:f1:37:40:1c:53:a3:57:a1:fa:0f:da:
+         b3:aa:4d:79
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8oAVRBh
-5A6j+Fe4exk0Wne4BjmIBwzs0DtKUwI80dPaSK6KGhw9MLuzNoChb80y/VQmuXfX
-HhEwbOvXEZrZr1R+DjfDjfMKXeyC1m7zRvQqgiTkKDjC+mqm9zjNlFAgve5Qnjqj
-QBpJd+uyBYwBRubvj1WRCnpEEGK4nz6BMa4IlSk3R1Ps88ec8L5kcLOB8AT0pKpB
-rRaPEzGvm+tV3JNtVs/W8Ar7EZ4yWdQHKOH+YHO/Q7//ydzyyjrhDL2QC8KrkdUu
-cl1e8PhFez03idEWvZtPycQ0x8QjpARLE9satYLQ9s2Z/vMNmIFlXi+epMFbK2e1
-ByokpucGX0nW1QIDAQABo4HLMIHIMB0GA1UdDgQWBBTTl8b3ueUXaW14OXc6Cq0y
-LUCsBzAfBgNVHSMEGDAWgBRkkJPNrMc3Nk1rFNZn0FQ6WUU6/DA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptVdOSWY
+5aGJnnW0GpivdvAIuk1eQc2SkSWsmcT2Q1u12EOXfJifC6XEnoh/ZxTzSE/UkA/K
+BTGDKIsNm+hRuevd1/wELIw5uaUfaHAjdEAR+ZfHagVlSo4mcs/h59rSQNXZdV2F
+wk0+lgFuZVK/cJxohGksPUIoZMg/ydW1P4CY4YOK9fx5+WsIenI6LuRInQK9lk5F
+dHpYQ718DGSWuYpNn7OUt6x+UGWz0N/d2ayYJnyJ/rGpqFL0lLeDiyVTiGEl8d2f
+Bm3MPHnIbqJnyLYjIItD/AD3WJt4ywumuQZvnXhFsbnR0GvYOLl4SsUYhpYHdggn
+nKaX6VyusvPnVQIDAQABo4HLMIHIMB0GA1UdDgQWBBQMjl4eppalAM/3nhSUutxe
+BtY37TAfBgNVHSMEGDAWgBRhSTUxrjbSGP5gZ4c6/5DV7V69wDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ANI19IQjVuMv0VT664UC4beqlKlzlR0pmjVkrEooo4ck4c0+n1MUks6G1q7VPx2X
-Wa7EHK54KddFpRRYtqwoPiDmJ1Yisr+AJI297xdnj1l0i35B8fxNqHvUzwzsQcZ6
-K/zDwpLcSfZ6Pb2wQQzTDN1YGkJigBCtleygisu0uI5dRcfSgkvryxoO9UBGDd01
-o5vRPlWVsauWYzGsAbTvILwNhoiy5ZRka/Eacz4JsExXhzplWoQXrxzNpU5yjhmL
-UAqXS99pLEwh1NF+gXSUYFuwXlZTFLRSPclFpUcQdBWGoFK6/7UyAe/dDhfWczWq
-Hsqaiy4oz/obeb6nh0u0CiY=
+AF+38vAGlDD2CYbWstzG0jVNB7+zRfgKRP79gJCgk3MZGSyeIZB2ZAz89ibvjeYT
+MBD+f5+YnpyfodKbq5mQ39OW43iu5WqnLoG3ifKghb5Xf3+gMOHOAuMcMR/Vn+Lb
+bJurkLoMDKOSaz3ziE91X0LBZv4Wkyk8HyP1GWMtYkpuBQKCbmo4wIsnRYDTojRH
+zoPtAH8x3k6MAR9j12G8rPlF3BIJ/Ex100a4L5XH/yFkN+R5fi3eJu/Tny+PDHgv
+4KwQ6QRSaaR4tQgaonU4JmLAdOY40VBEW6JAjGiOah/6SFEr29JrmB4/s2fGC6Sp
+VFTxN0AcU6NXofoP2rOqTXk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -227,30 +227,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ea:cc:2d:c4:88:54:07:90:da:62:ef:77:23:b2:
-                    83:c9:54:06:25:70:65:43:f2:29:a3:f3:22:f2:09:
-                    92:31:25:77:79:63:4a:7f:d8:e5:1f:16:1a:25:bc:
-                    d4:4b:9a:b3:a0:61:7e:c3:a5:90:32:97:5a:5b:59:
-                    cf:97:d6:ac:2c:86:a7:70:ed:2d:e0:bf:e8:44:6f:
-                    41:29:55:b0:40:a8:10:d6:4d:67:2b:01:1f:7a:33:
-                    2b:ce:8f:c8:fb:54:99:e2:11:2d:75:7d:ff:f5:fb:
-                    53:e5:6b:7e:ca:b8:fc:1f:bc:8f:32:29:6d:d2:6b:
-                    a1:9b:d9:7f:b2:f6:e9:18:72:fe:45:a2:23:dc:bf:
-                    5d:1e:43:5d:2b:80:2a:71:b4:cb:67:30:cc:aa:54:
-                    76:fc:4b:a3:2b:ab:99:31:66:bf:5c:09:44:e6:c9:
-                    27:42:3a:58:b5:fd:db:06:0f:11:04:0d:2d:36:4a:
-                    02:d5:50:4d:4d:7c:ed:a4:51:49:e3:fe:44:54:30:
-                    84:b6:1f:54:28:1f:9e:41:b2:20:23:75:e5:d4:e4:
-                    bf:79:a6:ab:84:aa:dc:56:38:cf:2c:d3:8e:13:48:
-                    43:5a:eb:eb:3b:a0:36:d5:89:0c:68:e2:fb:8f:3a:
-                    82:ad:01:4b:f8:bb:b0:2e:3d:b7:6e:91:a3:70:9a:
-                    d0:41
+                    00:bd:06:64:9c:f5:b5:d8:7e:e0:68:ea:1b:31:ba:
+                    6f:f5:00:3e:52:b3:d6:b1:1a:2c:13:37:ec:31:55:
+                    ec:0e:e1:c0:52:ba:cf:2a:0a:05:e5:a2:55:c4:0b:
+                    9c:00:c7:cc:63:83:4b:d0:4c:8c:f0:74:ac:73:d5:
+                    a0:59:39:d4:f2:a5:07:6f:39:ed:6c:6f:36:cc:18:
+                    76:59:49:06:87:94:a5:a2:bd:92:65:95:f4:55:3e:
+                    45:e0:dc:52:2f:ca:a8:01:bb:7a:ba:00:f1:ba:2d:
+                    5f:4d:c2:d2:56:b0:d6:23:eb:99:7a:f5:67:ae:d3:
+                    07:75:07:4d:70:5f:75:c7:c3:fd:b5:f9:26:23:7c:
+                    08:8a:1b:58:09:59:9a:64:91:f5:c6:51:54:c8:27:
+                    e6:53:9b:73:34:11:1e:42:6b:9c:85:e7:6e:c1:1c:
+                    88:0e:cf:ca:2f:e0:fc:aa:d4:fc:24:e1:e6:4a:f4:
+                    ad:02:56:08:79:aa:0d:a6:99:03:63:a7:e0:68:51:
+                    6a:cb:d4:de:35:e3:7e:d0:1a:e1:eb:d9:ba:21:91:
+                    b9:77:66:2d:4c:55:2f:73:c8:e7:49:a0:f1:bd:22:
+                    0f:0f:ac:31:4a:76:c4:e3:2f:dc:fc:09:00:b8:a1:
+                    dd:dd:d8:36:86:66:ec:63:ae:2e:4e:27:bc:0b:46:
+                    be:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -265,41 +265,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         77:d8:b1:3b:e5:c4:ce:c7:37:c6:fa:d7:a7:a1:cf:66:0e:19:
-         49:ea:06:f2:ec:8d:92:7d:e2:de:43:32:22:55:b4:84:f5:30:
-         bb:44:91:c1:81:2a:aa:ae:e1:3c:86:17:20:28:15:a1:d0:dc:
-         ce:7c:62:67:4e:d5:a8:e0:e3:44:91:af:96:24:58:0d:eb:26:
-         1f:42:37:82:de:d6:84:40:36:c7:78:7d:6c:f7:fa:54:a0:70:
-         d0:b9:41:a8:f2:3b:19:f1:cc:36:97:69:78:66:3c:ad:03:1e:
-         70:e7:81:23:11:d6:98:d7:ba:e5:98:d8:12:c7:4b:1d:5b:b1:
-         cd:91:5c:49:f0:d3:99:dd:9e:ab:db:7b:32:f6:8c:be:fe:0b:
-         2b:1e:96:8d:6e:7e:4a:69:71:f3:b6:f7:44:5f:a1:2f:62:67:
-         f0:55:b0:a2:d1:db:7f:58:3b:10:05:4f:e1:00:9d:45:4f:5d:
-         1e:b8:a8:83:bd:33:bd:14:07:34:23:5e:99:bb:16:3e:ee:de:
-         84:96:53:bf:29:e7:a5:52:a9:b6:6a:76:db:a6:ee:45:34:3f:
-         f7:48:d8:8a:12:46:c6:6c:ba:31:85:e8:45:07:85:23:37:85:
-         ff:15:de:0b:a8:97:40:60:11:9d:20:a8:fc:53:38:66:ea:9e:
-         d4:1b:9f:34
+         34:f8:20:57:dc:54:76:40:33:a6:fc:a3:e6:3c:e1:e0:53:7e:
+         47:58:59:c1:b4:3e:2c:81:46:98:bd:f7:84:98:2e:cc:b0:62:
+         48:11:aa:b9:db:9f:6e:56:b2:cc:f2:f0:8e:c9:82:c4:69:34:
+         72:3f:4b:34:0d:26:dd:77:8e:2a:04:c9:54:7d:97:a5:b8:e9:
+         98:94:c8:e0:d7:86:b9:8d:6f:bd:c0:74:67:e7:10:11:22:f0:
+         b3:1c:83:f2:66:a4:cf:c6:9e:8e:66:66:dd:b8:c3:14:b9:ab:
+         f3:1e:b3:e6:4b:f4:04:4a:c5:e3:4c:54:a5:2c:56:8f:9d:7f:
+         f1:9d:6b:d9:2f:36:63:f1:8e:55:91:de:10:67:1d:8c:1b:6a:
+         ed:31:72:46:f6:de:41:71:53:df:96:5f:44:b2:58:3b:c0:19:
+         30:ef:9f:ce:e2:a1:6b:a5:ba:cb:10:f0:10:d1:a3:a7:39:a4:
+         db:46:dc:33:1b:8a:b8:d2:a6:ad:fe:cc:00:cd:da:94:be:d9:
+         f0:8d:3e:e0:61:91:e4:1b:fc:6c:bd:86:1c:73:e7:c2:eb:68:
+         35:f2:5e:62:fc:77:37:20:63:0c:a2:bb:37:82:64:19:0f:70:
+         d0:ce:d3:17:7d:02:e9:3a:56:95:56:7a:aa:41:ab:79:2b:a0:
+         ca:28:42:69
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrMLcSIVAeQ2mLvdyOy
-g8lUBiVwZUPyKaPzIvIJkjEld3ljSn/Y5R8WGiW81Euas6BhfsOlkDKXWltZz5fW
-rCyGp3DtLeC/6ERvQSlVsECoENZNZysBH3ozK86PyPtUmeIRLXV9//X7U+Vrfsq4
-/B+8jzIpbdJroZvZf7L26Rhy/kWiI9y/XR5DXSuAKnG0y2cwzKpUdvxLoyurmTFm
-v1wJRObJJ0I6WLX92wYPEQQNLTZKAtVQTU187aRRSeP+RFQwhLYfVCgfnkGyICN1
-5dTkv3mmq4Sq3FY4zyzTjhNIQ1rr6zugNtWJDGji+486gq0BS/i7sC49t26Ro3Ca
-0EECAwEAAaOByzCByDAdBgNVHQ4EFgQUZJCTzazHNzZNaxTWZ9BUOllFOvwwHwYD
-VR0jBBgwFoAUZJCTzazHNzZNaxTWZ9BUOllFOvwwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0GZJz1tdh+4GjqGzG6
+b/UAPlKz1rEaLBM37DFV7A7hwFK6zyoKBeWiVcQLnADHzGODS9BMjPB0rHPVoFk5
+1PKlB2857WxvNswYdllJBoeUpaK9kmWV9FU+ReDcUi/KqAG7eroA8botX03C0law
+1iPrmXr1Z67TB3UHTXBfdcfD/bX5JiN8CIobWAlZmmSR9cZRVMgn5lObczQRHkJr
+nIXnbsEciA7Pyi/g/KrU/CTh5kr0rQJWCHmqDaaZA2On4GhRasvU3jXjftAa4evZ
+uiGRuXdmLUxVL3PI50mg8b0iDw+sMUp2xOMv3PwJALih3d3YNoZm7GOuLk4nvAtG
+vukCAwEAAaOByzCByDAdBgNVHQ4EFgQUYUk1Ma420hj+YGeHOv+Q1e1evcAwHwYD
+VR0jBBgwFoAUYUk1Ma420hj+YGeHOv+Q1e1evcAwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB32LE75cTO
-xzfG+tenoc9mDhlJ6gby7I2SfeLeQzIiVbSE9TC7RJHBgSqqruE8hhcgKBWh0NzO
-fGJnTtWo4ONEka+WJFgN6yYfQjeC3taEQDbHeH1s9/pUoHDQuUGo8jsZ8cw2l2l4
-ZjytAx5w54EjEdaY17rlmNgSx0sdW7HNkVxJ8NOZ3Z6r23sy9oy+/gsrHpaNbn5K
-aXHztvdEX6EvYmfwVbCi0dt/WDsQBU/hAJ1FT10euKiDvTO9FAc0I16ZuxY+7t6E
-llO/KeelUqm2anbbpu5FND/3SNiKEkbGbLoxhehFB4UjN4X/Fd4LqJdAYBGdIKj8
-Uzhm6p7UG580
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA0+CBX3FR2
+QDOm/KPmPOHgU35HWFnBtD4sgUaYvfeEmC7MsGJIEaq5259uVrLM8vCOyYLEaTRy
+P0s0DSbdd44qBMlUfZeluOmYlMjg14a5jW+9wHRn5xARIvCzHIPyZqTPxp6OZmbd
+uMMUuavzHrPmS/QESsXjTFSlLFaPnX/xnWvZLzZj8Y5Vkd4QZx2MG2rtMXJG9t5B
+cVPfll9Eslg7wBkw75/O4qFrpbrLEPAQ0aOnOaTbRtwzG4q40qat/swAzdqUvtnw
+jT7gYZHkG/xsvYYcc+fC62g18l5i/Hc3IGMMors3gmQZD3DQztMXfQLpOlaVVnqq
+Qat5K6DKKEJp
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -311,3 +311,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem b/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem
index b9f91820..f0e8c5b 100644
--- a/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem
+++ b/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem
@@ -48,30 +48,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:14:31:90:c4:c6:d0:b9:10:9e:e4:7a:e2:bc:
-                    16:ab:d2:5e:d7:3d:00:11:bf:25:0b:32:17:57:c4:
-                    fb:f6:60:0d:5a:7c:43:08:88:e6:35:f7:39:0f:dc:
-                    d7:ef:22:18:52:5b:de:27:35:10:93:ab:c0:ae:98:
-                    1b:e1:c7:40:a8:be:84:2a:e6:69:7c:c4:68:1e:c4:
-                    0d:29:97:55:12:fb:30:86:a3:8f:03:0c:d4:4b:22:
-                    76:ac:a8:db:fd:20:4c:46:ea:21:9b:59:4f:ea:9c:
-                    20:6f:ff:e1:7c:7d:64:5c:4b:91:4d:ac:56:1d:19:
-                    12:6c:af:f2:99:40:21:9d:06:b9:a2:90:2c:7b:bc:
-                    af:fe:c0:40:a1:06:89:62:f3:f3:fd:a0:07:61:aa:
-                    c2:f9:e1:0e:13:96:92:ac:53:ba:ed:a5:36:c9:b9:
-                    04:e7:13:67:bc:0e:63:dc:22:29:53:e2:e3:59:ab:
-                    5c:25:cd:d9:fb:46:4e:91:70:dd:41:4b:35:87:a4:
-                    fd:2c:66:be:75:7e:03:e9:12:61:66:cb:19:88:a1:
-                    61:b7:13:b4:ab:51:a6:d5:58:9c:db:8c:a2:1a:da:
-                    c3:6f:cb:b6:b1:65:d8:a3:a3:d1:87:d8:b9:bb:b8:
-                    c1:83:f1:83:38:2a:fd:a3:f6:a6:59:f2:27:f1:e3:
-                    50:29
+                    00:c4:05:bc:50:38:65:d6:ab:9b:ee:36:82:c0:43:
+                    3b:8d:75:18:05:05:2d:64:d7:f2:67:41:db:8b:2a:
+                    1a:31:8d:25:b5:54:f3:80:f8:47:13:0e:b3:04:93:
+                    a8:f2:d2:12:12:0d:1f:fa:fc:01:56:60:61:77:7b:
+                    99:56:da:27:06:70:cc:39:22:01:a5:bd:fe:2a:aa:
+                    70:52:90:cd:c6:2f:f9:81:1f:5d:6f:bb:b5:0e:3f:
+                    7c:03:cf:b4:47:83:06:db:f7:29:a0:da:a9:2b:72:
+                    85:74:40:a8:28:f6:09:cf:54:71:ac:48:0b:8f:1f:
+                    5a:e2:ca:4e:6c:c2:ee:21:b8:24:1e:b0:4c:fa:27:
+                    84:fa:87:bb:eb:48:c5:84:98:51:cc:f1:ae:93:7b:
+                    92:1e:10:d9:0e:4e:1c:20:29:ef:9d:ec:a1:74:2b:
+                    c4:3c:9e:42:45:ad:33:c3:6d:fa:41:55:0b:27:d1:
+                    fc:6a:e3:07:ee:b7:c1:75:9f:63:34:33:97:5c:d0:
+                    49:37:20:1e:fb:0e:ae:bc:2f:cb:48:c8:0d:cf:bf:
+                    a3:3c:5d:63:2d:1f:d5:65:04:25:ba:84:a6:9b:14:
+                    7e:7f:df:1e:b1:6f:0a:91:b4:d6:8a:a0:fd:75:8b:
+                    85:cf:bd:af:27:fa:12:dc:cf:19:05:78:6f:75:50:
+                    88:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:D0:19:F4:6B:86:BC:17:3B:FB:74:95:0F:53:BD:BD:4E:CA:10:D6
+                46:A2:E0:16:9E:F7:65:A3:9D:F8:F6:34:A0:DC:33:8A:7A:AE:2E:89
             X509v3 Authority Key Identifier: 
-                keyid:D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                keyid:0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -86,42 +86,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         0e:b6:ad:85:34:3d:cf:9c:2f:8c:e7:90:80:33:f6:12:99:40:
-         6d:89:7b:5c:08:c9:a9:fc:40:24:1e:14:ac:6c:6a:11:aa:3e:
-         ea:c1:19:32:75:67:26:fe:c0:f9:55:e9:b6:04:74:c9:e3:22:
-         59:3a:06:5a:5f:25:6d:1d:df:48:62:a4:ee:d0:87:df:20:9d:
-         9c:95:aa:4e:77:05:28:e6:66:ac:ae:23:e4:74:df:5a:b4:21:
-         e7:3d:0f:95:61:84:11:7e:d8:72:66:dd:85:c7:41:fe:44:12:
-         da:4c:c7:1b:ab:7d:4b:3d:c4:38:2d:b9:54:8a:26:1e:76:1b:
-         f6:0b:8a:e9:fa:9f:0a:e6:cc:6d:c5:55:f1:a5:29:20:42:05:
-         d4:5a:4f:27:ab:b6:e4:c4:ea:4d:8b:97:53:67:03:75:32:1f:
-         9d:1e:b8:72:e1:c4:5a:09:15:d7:ce:a3:59:ed:cc:4d:0f:ea:
-         c0:1d:57:1a:43:d7:7a:63:86:b0:b8:5c:4f:34:29:a4:be:90:
-         c4:6b:39:20:c9:25:96:7d:a1:cc:ee:f7:57:04:69:d7:21:66:
-         1d:cc:4e:6c:10:1a:6e:87:11:f3:e3:ae:9e:5b:64:04:ee:ac:
-         c6:0a:24:80:e4:0a:0e:89:49:9d:0f:1d:74:b2:f6:db:7e:25:
-         a1:d0:6e:7e
+         6c:41:15:1d:16:82:4b:09:00:30:69:b4:64:34:6b:a9:f3:97:
+         1e:6d:4c:6d:d8:77:91:21:ae:4f:50:b0:eb:f9:24:39:0d:0e:
+         da:4b:dd:6a:2f:80:61:65:e1:4e:27:50:9e:1e:91:05:23:26:
+         e7:b6:49:52:f1:4b:19:25:2e:f0:c7:6e:53:f3:13:33:63:97:
+         6e:91:97:0d:9d:60:08:9b:dd:9f:40:28:ed:14:57:43:d8:bf:
+         f6:16:65:d8:b3:b7:42:61:aa:87:75:e1:c1:93:17:ae:a2:6d:
+         f6:ac:48:04:ce:88:ee:61:81:52:a3:45:e7:c3:19:bb:15:e6:
+         a9:7e:e3:21:2d:44:67:34:58:63:02:f3:3f:16:63:51:fa:d8:
+         8b:21:9e:8d:7a:55:98:4f:a5:cc:be:1b:75:31:37:17:79:e5:
+         dc:1a:4b:5f:fa:88:61:64:8c:e6:a4:4d:33:b5:14:e2:0a:51:
+         6e:d3:70:25:6f:3c:56:c3:d2:fd:c3:0a:47:f9:17:34:60:f3:
+         2b:5a:76:49:fb:2c:0a:e1:94:65:74:75:b5:58:a5:90:99:2d:
+         da:7e:7a:9e:a7:67:17:d2:a6:8d:a6:b3:c6:46:1c:ad:9b:73:
+         ce:a7:b3:f0:f2:44:38:1e:7e:30:ab:aa:ac:64:e2:06:b4:6b:
+         39:a6:7c:52
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQFDGQ
-xMbQuRCe5HrivBar0l7XPQARvyULMhdXxPv2YA1afEMIiOY19zkP3NfvIhhSW94n
-NRCTq8CumBvhx0CovoQq5ml8xGgexA0pl1US+zCGo48DDNRLInasqNv9IExG6iGb
-WU/qnCBv/+F8fWRcS5FNrFYdGRJsr/KZQCGdBrmikCx7vK/+wEChBoli8/P9oAdh
-qsL54Q4TlpKsU7rtpTbJuQTnE2e8DmPcIilT4uNZq1wlzdn7Rk6RcN1BSzWHpP0s
-Zr51fgPpEmFmyxmIoWG3E7SrUabVWJzbjKIa2sNvy7axZdijo9GH2Lm7uMGD8YM4
-Kv2j9qZZ8ifx41ApAgMBAAGjgekwgeYwHQYDVR0OBBYEFAHQGfRrhrwXO/t0lQ9T
-vb1OyhDWMB8GA1UdIwQYMBaAFNOXxve55RdpbXg5dzoKrTItQKwHMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEBbxQ
+OGXWq5vuNoLAQzuNdRgFBS1k1/JnQduLKhoxjSW1VPOA+EcTDrMEk6jy0hISDR/6
+/AFWYGF3e5lW2icGcMw5IgGlvf4qqnBSkM3GL/mBH11vu7UOP3wDz7RHgwbb9ymg
+2qkrcoV0QKgo9gnPVHGsSAuPH1riyk5swu4huCQesEz6J4T6h7vrSMWEmFHM8a6T
+e5IeENkOThwgKe+d7KF0K8Q8nkJFrTPDbfpBVQsn0fxq4wfut8F1n2M0M5dc0Ek3
+IB77Dq68L8tIyA3Pv6M8XWMtH9VlBCW6hKabFH5/3x6xbwqRtNaKoP11i4XPva8n
++hLczxkFeG91UIhnAgMBAAGjgekwgeYwHQYDVR0OBBYEFEai4Bae92Wjnfj2NKDc
+M4p6ri6JMB8GA1UdIwQYMBaAFAyOXh6mlqUAz/eeFJS63F4G1jftMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEADrathTQ9z5wvjOeQgDP2
-EplAbYl7XAjJqfxAJB4UrGxqEao+6sEZMnVnJv7A+VXptgR0yeMiWToGWl8lbR3f
-SGKk7tCH3yCdnJWqTncFKOZmrK4j5HTfWrQh5z0PlWGEEX7YcmbdhcdB/kQS2kzH
-G6t9Sz3EOC25VIomHnYb9guK6fqfCubMbcVV8aUpIEIF1FpPJ6u25MTqTYuXU2cD
-dTIfnR64cuHEWgkV186jWe3MTQ/qwB1XGkPXemOGsLhcTzQppL6QxGs5IMklln2h
-zO73VwRp1yFmHcxObBAabocR8+OunltkBO6sxgokgOQKDolJnQ8ddLL2234lodBu
-fg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbEEVHRaCSwkAMGm0ZDRr
+qfOXHm1Mbdh3kSGuT1Cw6/kkOQ0O2kvdai+AYWXhTidQnh6RBSMm57ZJUvFLGSUu
+8MduU/MTM2OXbpGXDZ1gCJvdn0Ao7RRXQ9i/9hZl2LO3QmGqh3XhwZMXrqJt9qxI
+BM6I7mGBUqNF58MZuxXmqX7jIS1EZzRYYwLzPxZjUfrYiyGejXpVmE+lzL4bdTE3
+F3nl3BpLX/qIYWSM5qRNM7UU4gpRbtNwJW88VsPS/cMKR/kXNGDzK1p2SfssCuGU
+ZXR1tVilkJkt2n56nqdnF9KmjaazxkYcrZtzzqez8PJEOB5+MKuqrGTiBrRrOaZ8
+Ug==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -138,30 +138,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:ca:00:55:10:61:e4:0e:a3:f8:57:b8:7b:19:
-                    34:5a:77:b8:06:39:88:07:0c:ec:d0:3b:4a:53:02:
-                    3c:d1:d3:da:48:ae:8a:1a:1c:3d:30:bb:b3:36:80:
-                    a1:6f:cd:32:fd:54:26:b9:77:d7:1e:11:30:6c:eb:
-                    d7:11:9a:d9:af:54:7e:0e:37:c3:8d:f3:0a:5d:ec:
-                    82:d6:6e:f3:46:f4:2a:82:24:e4:28:38:c2:fa:6a:
-                    a6:f7:38:cd:94:50:20:bd:ee:50:9e:3a:a3:40:1a:
-                    49:77:eb:b2:05:8c:01:46:e6:ef:8f:55:91:0a:7a:
-                    44:10:62:b8:9f:3e:81:31:ae:08:95:29:37:47:53:
-                    ec:f3:c7:9c:f0:be:64:70:b3:81:f0:04:f4:a4:aa:
-                    41:ad:16:8f:13:31:af:9b:eb:55:dc:93:6d:56:cf:
-                    d6:f0:0a:fb:11:9e:32:59:d4:07:28:e1:fe:60:73:
-                    bf:43:bf:ff:c9:dc:f2:ca:3a:e1:0c:bd:90:0b:c2:
-                    ab:91:d5:2e:72:5d:5e:f0:f8:45:7b:3d:37:89:d1:
-                    16:bd:9b:4f:c9:c4:34:c7:c4:23:a4:04:4b:13:db:
-                    1a:b5:82:d0:f6:cd:99:fe:f3:0d:98:81:65:5e:2f:
-                    9e:a4:c1:5b:2b:67:b5:07:2a:24:a6:e7:06:5f:49:
-                    d6:d5
+                    00:a6:d5:5d:39:25:98:e5:a1:89:9e:75:b4:1a:98:
+                    af:76:f0:08:ba:4d:5e:41:cd:92:91:25:ac:99:c4:
+                    f6:43:5b:b5:d8:43:97:7c:98:9f:0b:a5:c4:9e:88:
+                    7f:67:14:f3:48:4f:d4:90:0f:ca:05:31:83:28:8b:
+                    0d:9b:e8:51:b9:eb:dd:d7:fc:04:2c:8c:39:b9:a5:
+                    1f:68:70:23:74:40:11:f9:97:c7:6a:05:65:4a:8e:
+                    26:72:cf:e1:e7:da:d2:40:d5:d9:75:5d:85:c2:4d:
+                    3e:96:01:6e:65:52:bf:70:9c:68:84:69:2c:3d:42:
+                    28:64:c8:3f:c9:d5:b5:3f:80:98:e1:83:8a:f5:fc:
+                    79:f9:6b:08:7a:72:3a:2e:e4:48:9d:02:bd:96:4e:
+                    45:74:7a:58:43:bd:7c:0c:64:96:b9:8a:4d:9f:b3:
+                    94:b7:ac:7e:50:65:b3:d0:df:dd:d9:ac:98:26:7c:
+                    89:fe:b1:a9:a8:52:f4:94:b7:83:8b:25:53:88:61:
+                    25:f1:dd:9f:06:6d:cc:3c:79:c8:6e:a2:67:c8:b6:
+                    23:20:8b:43:fc:00:f7:58:9b:78:cb:0b:a6:b9:06:
+                    6f:9d:78:45:b1:b9:d1:d0:6b:d8:38:b9:78:4a:c5:
+                    18:86:96:07:76:08:27:9c:a6:97:e9:5c:ae:b2:f3:
+                    e7:55
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -176,41 +176,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         9f:f2:71:1d:88:6c:57:db:19:12:ed:da:7c:5e:ef:81:90:30:
-         2f:f8:9a:df:de:90:bc:9d:6b:26:64:10:87:b8:45:78:8d:8d:
-         37:fe:c8:86:75:d0:a2:c5:88:78:b6:8d:30:f7:8c:63:5e:3f:
-         8d:7d:54:81:68:80:34:dd:cf:37:73:24:91:ef:42:7a:5c:ed:
-         94:9a:b9:6f:a6:13:1d:04:9d:0a:e6:53:eb:6c:2d:7b:24:06:
-         b3:d4:3a:79:94:17:68:9e:c2:36:91:b7:30:f2:cf:c3:6c:22:
-         2d:73:2c:e6:ca:d0:97:db:a1:f6:7e:2e:e2:5b:27:d5:86:a9:
-         ec:92:3b:f9:5d:ae:bd:f9:a7:d6:a9:dd:f9:93:49:2d:f1:99:
-         a6:98:10:43:0e:2f:98:97:e0:17:36:86:57:75:22:63:65:39:
-         eb:69:e9:cc:4d:9c:9b:35:63:5b:1b:04:fb:7a:b4:91:30:a2:
-         5c:4e:c0:a8:7c:94:ce:4c:d8:eb:f2:fe:34:be:e6:76:bc:fe:
-         8c:9e:d3:3b:6d:ae:62:92:8b:0f:41:9c:d7:65:0d:7b:1b:c5:
-         e9:5f:11:a2:f1:18:22:5e:0d:e7:9b:b7:b7:c5:34:77:ef:32:
-         b5:94:ef:dd:a6:6e:a7:07:43:c9:7f:b8:04:2a:88:53:44:93:
-         a2:db:05:93
+         9d:2d:bc:6c:2b:e6:50:3e:c8:99:d1:18:ea:8d:f2:6b:34:7e:
+         21:bb:9d:c5:a5:f6:ee:e9:64:af:46:68:2d:d0:a3:58:55:b2:
+         92:e7:8f:20:00:59:08:d4:71:43:40:09:d2:e1:30:36:c2:26:
+         9f:5a:69:95:5b:c4:d5:4d:46:fa:a9:2e:ad:12:0b:46:03:09:
+         5d:e3:8f:64:76:c4:a0:85:b5:9b:3e:7f:e8:5c:6f:97:e0:62:
+         45:b4:69:7c:24:f4:be:b7:14:e7:42:a7:9c:d7:fc:f9:39:2a:
+         76:25:3d:f5:f8:81:9a:0e:e2:ff:da:2f:3c:4f:c7:8f:2f:ba:
+         de:0a:11:25:8f:ce:01:37:95:2b:23:53:d1:cb:fc:6a:a7:61:
+         b1:a7:0e:8c:42:74:c6:78:b5:9a:2e:a4:af:94:f0:93:41:e9:
+         8e:7e:fa:52:a3:25:b2:ef:c7:7b:61:e9:9b:fd:87:6d:95:cd:
+         c3:36:2a:58:90:3b:8a:eb:82:2d:79:77:36:af:9f:b1:84:fa:
+         93:00:0e:37:54:ce:bc:c9:ef:7e:16:c0:1f:62:05:70:2e:b5:
+         91:d4:3f:1e:cd:a1:91:d5:16:50:a8:ed:63:61:16:83:e5:b3:
+         b1:94:32:7e:11:50:90:63:49:dc:a8:f2:4f:68:42:bf:3f:c1:
+         45:1a:08:42
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8oAVRBh
-5A6j+Fe4exk0Wne4BjmIBwzs0DtKUwI80dPaSK6KGhw9MLuzNoChb80y/VQmuXfX
-HhEwbOvXEZrZr1R+DjfDjfMKXeyC1m7zRvQqgiTkKDjC+mqm9zjNlFAgve5Qnjqj
-QBpJd+uyBYwBRubvj1WRCnpEEGK4nz6BMa4IlSk3R1Ps88ec8L5kcLOB8AT0pKpB
-rRaPEzGvm+tV3JNtVs/W8Ar7EZ4yWdQHKOH+YHO/Q7//ydzyyjrhDL2QC8KrkdUu
-cl1e8PhFez03idEWvZtPycQ0x8QjpARLE9satYLQ9s2Z/vMNmIFlXi+epMFbK2e1
-ByokpucGX0nW1QIDAQABo4HLMIHIMB0GA1UdDgQWBBTTl8b3ueUXaW14OXc6Cq0y
-LUCsBzAfBgNVHSMEGDAWgBRdoQM9jxP5CK8eg2y83m+jtcIa6jA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptVdOSWY
+5aGJnnW0GpivdvAIuk1eQc2SkSWsmcT2Q1u12EOXfJifC6XEnoh/ZxTzSE/UkA/K
+BTGDKIsNm+hRuevd1/wELIw5uaUfaHAjdEAR+ZfHagVlSo4mcs/h59rSQNXZdV2F
+wk0+lgFuZVK/cJxohGksPUIoZMg/ydW1P4CY4YOK9fx5+WsIenI6LuRInQK9lk5F
+dHpYQ718DGSWuYpNn7OUt6x+UGWz0N/d2ayYJnyJ/rGpqFL0lLeDiyVTiGEl8d2f
+Bm3MPHnIbqJnyLYjIItD/AD3WJt4ywumuQZvnXhFsbnR0GvYOLl4SsUYhpYHdggn
+nKaX6VyusvPnVQIDAQABo4HLMIHIMB0GA1UdDgQWBBQMjl4eppalAM/3nhSUutxe
+BtY37TAfBgNVHSMEGDAWgBS/MbkVuOQBbrEkrNrXS3DA0RaP/DA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AJ/ycR2IbFfbGRLt2nxe74GQMC/4mt/ekLydayZkEIe4RXiNjTf+yIZ10KLFiHi2
-jTD3jGNeP419VIFogDTdzzdzJJHvQnpc7ZSauW+mEx0EnQrmU+tsLXskBrPUOnmU
-F2iewjaRtzDyz8NsIi1zLObK0JfbofZ+LuJbJ9WGqeySO/ldrr35p9ap3fmTSS3x
-maaYEEMOL5iX4Bc2hld1ImNlOetp6cxNnJs1Y1sbBPt6tJEwolxOwKh8lM5M2Ovy
-/jS+5na8/oye0zttrmKSiw9BnNdlDXsbxelfEaLxGCJeDeebt7fFNHfvMrWU792m
-bqcHQ8l/uAQqiFNEk6LbBZM=
+AJ0tvGwr5lA+yJnRGOqN8ms0fiG7ncWl9u7pZK9GaC3Qo1hVspLnjyAAWQjUcUNA
+CdLhMDbCJp9aaZVbxNVNRvqpLq0SC0YDCV3jj2R2xKCFtZs+f+hcb5fgYkW0aXwk
+9L63FOdCp5zX/Pk5KnYlPfX4gZoO4v/aLzxPx48vut4KESWPzgE3lSsjU9HL/Gqn
+YbGnDoxCdMZ4tZoupK+U8JNB6Y5++lKjJbLvx3th6Zv9h22VzcM2KliQO4rrgi15
+dzavn7GE+pMADjdUzrzJ734WwB9iBXAutZHUPx7NoZHVFlCo7WNhFoPls7GUMn4R
+UJBjSdyo8k9oQr8/wUUaCEI=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -227,30 +227,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a7:67:cf:1d:f5:54:e9:96:54:bc:65:8c:b7:9e:
-                    72:39:05:68:3d:44:e5:93:d8:4b:61:b1:a4:b4:b4:
-                    4c:c6:a0:92:b6:4d:06:3a:5b:b2:0a:8a:27:cb:b1:
-                    e7:c3:35:47:ef:ac:2d:a7:d0:9c:b2:50:6a:58:3d:
-                    12:a4:85:dc:77:a9:08:e5:f4:1f:c0:ef:00:51:cd:
-                    68:62:d5:e5:cc:01:be:be:42:8b:35:fb:00:9c:30:
-                    84:0c:d7:35:7d:88:d1:1b:43:78:19:79:aa:06:b3:
-                    ac:5c:69:a0:23:f0:69:dc:89:59:97:05:df:01:ae:
-                    5b:8f:01:a0:78:4f:05:4e:36:ac:00:b4:8d:e8:79:
-                    05:07:f2:76:a4:63:3f:95:21:06:57:61:a9:f0:43:
-                    04:d1:92:d3:9d:bb:b3:8f:5b:ef:ab:81:a0:23:11:
-                    38:b5:02:b2:95:1d:ac:da:b8:36:60:d7:d7:01:6d:
-                    e8:ed:32:21:b4:84:97:33:7c:67:88:0e:44:c7:12:
-                    87:85:6a:49:80:82:cb:1e:16:2b:2f:6d:98:82:a0:
-                    a0:30:cc:55:df:93:65:e0:9a:08:24:8a:47:cc:69:
-                    53:3c:b7:62:fa:df:11:64:d0:3f:52:43:80:f8:cf:
-                    7b:6f:d0:65:20:fb:22:d0:43:ca:fc:fc:0f:bd:1c:
-                    42:b9
+                    00:e9:9e:ac:cf:f1:ea:0e:19:26:bc:7a:38:a4:5f:
+                    0d:33:c4:69:32:3e:0d:ca:46:55:b5:e4:cc:63:0d:
+                    b1:c7:50:99:9e:39:72:a5:05:37:22:3a:04:e0:ff:
+                    9b:3e:1f:d6:b6:b5:f1:a9:38:58:a0:a2:a6:b7:7b:
+                    48:6f:dc:8f:f4:32:7d:ca:a5:4f:bd:fa:26:9c:8b:
+                    c1:01:ed:7f:ed:d5:f1:ef:b1:42:df:36:bd:06:8a:
+                    b0:2f:49:74:65:5f:f4:01:c6:b8:3d:bf:25:fd:cb:
+                    49:ce:e2:c6:a5:3e:7e:18:92:27:5f:60:82:b3:78:
+                    77:39:bb:ea:05:b1:e0:c2:74:b6:7f:f4:42:7b:ae:
+                    24:1b:e5:f9:ef:24:48:13:af:05:75:6c:4f:da:e3:
+                    59:c4:ad:2f:46:6c:8c:dc:5a:2e:75:57:31:b7:1e:
+                    8c:57:43:c7:68:4b:b9:e7:73:41:6f:45:09:79:e0:
+                    cc:69:98:80:c2:9d:e0:7a:e1:e0:57:d2:6f:0f:af:
+                    27:70:01:0f:2a:c1:f2:83:64:09:c7:3b:ad:80:12:
+                    19:6a:b0:b1:3c:39:e3:fa:8a:a8:23:3f:f0:1f:6c:
+                    8c:63:e8:9a:7c:8a:a6:fd:9b:a6:ca:46:7c:de:39:
+                    5d:ba:0b:5e:17:5c:e1:0b:8f:5c:fa:79:66:96:d9:
+                    d2:41
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -265,41 +265,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         7f:ec:13:f0:46:53:d5:75:08:a5:37:44:9c:47:19:9e:05:ef:
-         d6:30:68:1e:0b:c8:3c:84:93:51:36:25:48:60:56:d4:79:1f:
-         b6:2c:91:e3:6f:61:f9:e7:7d:c8:b6:7b:70:7f:27:6d:2c:38:
-         ec:73:e4:8c:86:f4:48:8e:1b:09:0d:9f:f8:5a:1f:95:ed:f1:
-         03:ea:99:64:d6:2d:46:4e:b8:0b:67:10:98:8e:19:2e:31:e1:
-         e3:d6:fe:7c:97:e9:a3:7a:18:25:9c:d4:4f:ce:a9:11:1d:f0:
-         53:32:8a:e8:8e:8d:80:fb:f1:c1:c1:6a:c1:cf:d2:36:a2:b1:
-         f9:32:9e:05:fd:73:1a:b9:37:e5:55:b2:1e:78:84:a5:04:45:
-         4a:d5:24:ad:20:39:fe:ab:ce:38:dd:c0:1e:2f:dd:ce:b4:5c:
-         49:1d:ab:7a:e1:bd:e9:a6:d2:02:64:8a:a9:97:36:89:42:c2:
-         82:14:ec:aa:dd:77:be:b1:d6:d2:4f:8b:a4:fe:5b:06:28:1c:
-         2f:4e:83:15:1f:10:a9:c6:ce:8e:a6:ca:bb:2c:01:6a:ae:99:
-         59:44:05:fc:a5:7e:fe:73:5f:df:b5:0b:48:b5:43:b6:10:9f:
-         42:2e:8b:65:f6:47:25:27:66:ef:a6:a0:ca:d3:cc:9c:ac:2d:
-         22:5b:87:5c
+         d3:ff:ab:16:f3:f5:25:e8:4f:77:fb:d2:98:0f:62:60:29:66:
+         71:d3:f9:e9:7d:06:03:1f:1e:59:0f:dc:12:39:13:47:a7:ab:
+         85:a2:38:8e:bf:f4:20:e9:de:b7:61:39:cc:b3:dc:97:1d:7d:
+         2d:5f:22:14:48:aa:13:6f:1f:a2:d4:c4:cb:1e:88:d5:b0:1d:
+         38:7a:8d:4c:c8:14:59:58:ba:64:83:1c:80:94:0a:9a:04:e1:
+         f8:b6:3f:fb:cb:3f:d5:d8:52:ea:83:d9:07:d3:6f:d0:81:ff:
+         05:d0:7b:3c:ab:8c:72:86:95:9d:21:d6:9d:41:3d:47:57:8b:
+         ae:fb:b2:91:0a:2a:9d:57:85:73:e5:f5:6d:cb:22:18:03:aa:
+         b0:89:e4:ac:e7:5f:32:46:1e:52:3d:e2:fc:75:04:77:43:a7:
+         db:85:c4:19:3a:ba:a9:a3:98:1b:c4:b5:b5:6a:ee:5a:b1:d8:
+         12:da:46:5f:3e:82:90:74:8a:19:e7:84:1a:f2:10:98:67:2d:
+         75:7e:eb:85:9a:ad:af:e3:e5:ee:5a:f8:61:19:1f:e6:df:e9:
+         8d:a8:50:90:7e:87:25:d4:b5:5b:2f:d5:98:b7:40:1f:41:1a:
+         62:48:b7:ac:c0:c0:85:7d:8c:20:8b:54:53:d2:b6:ad:a1:6d:
+         fa:7d:d6:a8
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdnzx31VOmWVLxljLee
-cjkFaD1E5ZPYS2GxpLS0TMagkrZNBjpbsgqKJ8ux58M1R++sLafQnLJQalg9EqSF
-3HepCOX0H8DvAFHNaGLV5cwBvr5CizX7AJwwhAzXNX2I0RtDeBl5qgazrFxpoCPw
-adyJWZcF3wGuW48BoHhPBU42rAC0jeh5BQfydqRjP5UhBldhqfBDBNGS0527s49b
-76uBoCMROLUCspUdrNq4NmDX1wFt6O0yIbSElzN8Z4gORMcSh4VqSYCCyx4WKy9t
-mIKgoDDMVd+TZeCaCCSKR8xpUzy3YvrfEWTQP1JDgPjPe2/QZSD7ItBDyvz8D70c
-QrkCAwEAAaOByzCByDAdBgNVHQ4EFgQUXaEDPY8T+QivHoNsvN5vo7XCGuowHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOmerM/x6g4ZJrx6OKRf
+DTPEaTI+DcpGVbXkzGMNscdQmZ45cqUFNyI6BOD/mz4f1ra18ak4WKCiprd7SG/c
+j/QyfcqlT736JpyLwQHtf+3V8e+xQt82vQaKsC9JdGVf9AHGuD2/Jf3LSc7ixqU+
+fhiSJ19ggrN4dzm76gWx4MJ0tn/0QnuuJBvl+e8kSBOvBXVsT9rjWcStL0ZsjNxa
+LnVXMbcejFdDx2hLuedzQW9FCXngzGmYgMKd4Hrh4FfSbw+vJ3ABDyrB8oNkCcc7
+rYASGWqwsTw54/qKqCM/8B9sjGPomnyKpv2bpspGfN45XboLXhdc4QuPXPp5ZpbZ
+0kECAwEAAaOByzCByDAdBgNVHQ4EFgQUvzG5FbjkAW6xJKza10twwNEWj/wwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB/7BPwRlPV
-dQilN0ScRxmeBe/WMGgeC8g8hJNRNiVIYFbUeR+2LJHjb2H5533ItntwfydtLDjs
-c+SMhvRIjhsJDZ/4Wh+V7fED6plk1i1GTrgLZxCYjhkuMeHj1v58l+mjehglnNRP
-zqkRHfBTMorojo2A+/HBwWrBz9I2orH5Mp4F/XMauTflVbIeeISlBEVK1SStIDn+
-q8443cAeL93OtFxJHat64b3pptICZIqplzaJQsKCFOyq3Xe+sdbST4uk/lsGKBwv
-ToMVHxCpxs6Opsq7LAFqrplZRAX8pX7+c1/ftQtItUO2EJ9CLotl9kclJ2bvpqDK
-08ycrC0iW4dc
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDT/6sW8/Ul
+6E93+9KYD2JgKWZx0/npfQYDHx5ZD9wSORNHp6uFojiOv/Qg6d63YTnMs9yXHX0t
+XyIUSKoTbx+i1MTLHojVsB04eo1MyBRZWLpkgxyAlAqaBOH4tj/7yz/V2FLqg9kH
+02/Qgf8F0Hs8q4xyhpWdIdadQT1HV4uu+7KRCiqdV4Vz5fVtyyIYA6qwieSs518y
+Rh5SPeL8dQR3Q6fbhcQZOrqpo5gbxLW1au5asdgS2kZfPoKQdIoZ54Qa8hCYZy11
+fuuFmq2v4+XuWvhhGR/m3+mNqFCQfocl1LVbL9WYt0AfQRpiSLeswMCFfYwgi1RT
+0ratoW36fdao
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -311,3 +311,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem b/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem
index 2ae242e..e5d0c8c8 100644
--- a/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem
+++ b/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem
@@ -48,30 +48,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:14:31:90:c4:c6:d0:b9:10:9e:e4:7a:e2:bc:
-                    16:ab:d2:5e:d7:3d:00:11:bf:25:0b:32:17:57:c4:
-                    fb:f6:60:0d:5a:7c:43:08:88:e6:35:f7:39:0f:dc:
-                    d7:ef:22:18:52:5b:de:27:35:10:93:ab:c0:ae:98:
-                    1b:e1:c7:40:a8:be:84:2a:e6:69:7c:c4:68:1e:c4:
-                    0d:29:97:55:12:fb:30:86:a3:8f:03:0c:d4:4b:22:
-                    76:ac:a8:db:fd:20:4c:46:ea:21:9b:59:4f:ea:9c:
-                    20:6f:ff:e1:7c:7d:64:5c:4b:91:4d:ac:56:1d:19:
-                    12:6c:af:f2:99:40:21:9d:06:b9:a2:90:2c:7b:bc:
-                    af:fe:c0:40:a1:06:89:62:f3:f3:fd:a0:07:61:aa:
-                    c2:f9:e1:0e:13:96:92:ac:53:ba:ed:a5:36:c9:b9:
-                    04:e7:13:67:bc:0e:63:dc:22:29:53:e2:e3:59:ab:
-                    5c:25:cd:d9:fb:46:4e:91:70:dd:41:4b:35:87:a4:
-                    fd:2c:66:be:75:7e:03:e9:12:61:66:cb:19:88:a1:
-                    61:b7:13:b4:ab:51:a6:d5:58:9c:db:8c:a2:1a:da:
-                    c3:6f:cb:b6:b1:65:d8:a3:a3:d1:87:d8:b9:bb:b8:
-                    c1:83:f1:83:38:2a:fd:a3:f6:a6:59:f2:27:f1:e3:
-                    50:29
+                    00:c4:05:bc:50:38:65:d6:ab:9b:ee:36:82:c0:43:
+                    3b:8d:75:18:05:05:2d:64:d7:f2:67:41:db:8b:2a:
+                    1a:31:8d:25:b5:54:f3:80:f8:47:13:0e:b3:04:93:
+                    a8:f2:d2:12:12:0d:1f:fa:fc:01:56:60:61:77:7b:
+                    99:56:da:27:06:70:cc:39:22:01:a5:bd:fe:2a:aa:
+                    70:52:90:cd:c6:2f:f9:81:1f:5d:6f:bb:b5:0e:3f:
+                    7c:03:cf:b4:47:83:06:db:f7:29:a0:da:a9:2b:72:
+                    85:74:40:a8:28:f6:09:cf:54:71:ac:48:0b:8f:1f:
+                    5a:e2:ca:4e:6c:c2:ee:21:b8:24:1e:b0:4c:fa:27:
+                    84:fa:87:bb:eb:48:c5:84:98:51:cc:f1:ae:93:7b:
+                    92:1e:10:d9:0e:4e:1c:20:29:ef:9d:ec:a1:74:2b:
+                    c4:3c:9e:42:45:ad:33:c3:6d:fa:41:55:0b:27:d1:
+                    fc:6a:e3:07:ee:b7:c1:75:9f:63:34:33:97:5c:d0:
+                    49:37:20:1e:fb:0e:ae:bc:2f:cb:48:c8:0d:cf:bf:
+                    a3:3c:5d:63:2d:1f:d5:65:04:25:ba:84:a6:9b:14:
+                    7e:7f:df:1e:b1:6f:0a:91:b4:d6:8a:a0:fd:75:8b:
+                    85:cf:bd:af:27:fa:12:dc:cf:19:05:78:6f:75:50:
+                    88:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:D0:19:F4:6B:86:BC:17:3B:FB:74:95:0F:53:BD:BD:4E:CA:10:D6
+                46:A2:E0:16:9E:F7:65:A3:9D:F8:F6:34:A0:DC:33:8A:7A:AE:2E:89
             X509v3 Authority Key Identifier: 
-                keyid:D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                keyid:0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -86,42 +86,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         0e:b6:ad:85:34:3d:cf:9c:2f:8c:e7:90:80:33:f6:12:99:40:
-         6d:89:7b:5c:08:c9:a9:fc:40:24:1e:14:ac:6c:6a:11:aa:3e:
-         ea:c1:19:32:75:67:26:fe:c0:f9:55:e9:b6:04:74:c9:e3:22:
-         59:3a:06:5a:5f:25:6d:1d:df:48:62:a4:ee:d0:87:df:20:9d:
-         9c:95:aa:4e:77:05:28:e6:66:ac:ae:23:e4:74:df:5a:b4:21:
-         e7:3d:0f:95:61:84:11:7e:d8:72:66:dd:85:c7:41:fe:44:12:
-         da:4c:c7:1b:ab:7d:4b:3d:c4:38:2d:b9:54:8a:26:1e:76:1b:
-         f6:0b:8a:e9:fa:9f:0a:e6:cc:6d:c5:55:f1:a5:29:20:42:05:
-         d4:5a:4f:27:ab:b6:e4:c4:ea:4d:8b:97:53:67:03:75:32:1f:
-         9d:1e:b8:72:e1:c4:5a:09:15:d7:ce:a3:59:ed:cc:4d:0f:ea:
-         c0:1d:57:1a:43:d7:7a:63:86:b0:b8:5c:4f:34:29:a4:be:90:
-         c4:6b:39:20:c9:25:96:7d:a1:cc:ee:f7:57:04:69:d7:21:66:
-         1d:cc:4e:6c:10:1a:6e:87:11:f3:e3:ae:9e:5b:64:04:ee:ac:
-         c6:0a:24:80:e4:0a:0e:89:49:9d:0f:1d:74:b2:f6:db:7e:25:
-         a1:d0:6e:7e
+         6c:41:15:1d:16:82:4b:09:00:30:69:b4:64:34:6b:a9:f3:97:
+         1e:6d:4c:6d:d8:77:91:21:ae:4f:50:b0:eb:f9:24:39:0d:0e:
+         da:4b:dd:6a:2f:80:61:65:e1:4e:27:50:9e:1e:91:05:23:26:
+         e7:b6:49:52:f1:4b:19:25:2e:f0:c7:6e:53:f3:13:33:63:97:
+         6e:91:97:0d:9d:60:08:9b:dd:9f:40:28:ed:14:57:43:d8:bf:
+         f6:16:65:d8:b3:b7:42:61:aa:87:75:e1:c1:93:17:ae:a2:6d:
+         f6:ac:48:04:ce:88:ee:61:81:52:a3:45:e7:c3:19:bb:15:e6:
+         a9:7e:e3:21:2d:44:67:34:58:63:02:f3:3f:16:63:51:fa:d8:
+         8b:21:9e:8d:7a:55:98:4f:a5:cc:be:1b:75:31:37:17:79:e5:
+         dc:1a:4b:5f:fa:88:61:64:8c:e6:a4:4d:33:b5:14:e2:0a:51:
+         6e:d3:70:25:6f:3c:56:c3:d2:fd:c3:0a:47:f9:17:34:60:f3:
+         2b:5a:76:49:fb:2c:0a:e1:94:65:74:75:b5:58:a5:90:99:2d:
+         da:7e:7a:9e:a7:67:17:d2:a6:8d:a6:b3:c6:46:1c:ad:9b:73:
+         ce:a7:b3:f0:f2:44:38:1e:7e:30:ab:aa:ac:64:e2:06:b4:6b:
+         39:a6:7c:52
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQFDGQ
-xMbQuRCe5HrivBar0l7XPQARvyULMhdXxPv2YA1afEMIiOY19zkP3NfvIhhSW94n
-NRCTq8CumBvhx0CovoQq5ml8xGgexA0pl1US+zCGo48DDNRLInasqNv9IExG6iGb
-WU/qnCBv/+F8fWRcS5FNrFYdGRJsr/KZQCGdBrmikCx7vK/+wEChBoli8/P9oAdh
-qsL54Q4TlpKsU7rtpTbJuQTnE2e8DmPcIilT4uNZq1wlzdn7Rk6RcN1BSzWHpP0s
-Zr51fgPpEmFmyxmIoWG3E7SrUabVWJzbjKIa2sNvy7axZdijo9GH2Lm7uMGD8YM4
-Kv2j9qZZ8ifx41ApAgMBAAGjgekwgeYwHQYDVR0OBBYEFAHQGfRrhrwXO/t0lQ9T
-vb1OyhDWMB8GA1UdIwQYMBaAFNOXxve55RdpbXg5dzoKrTItQKwHMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEBbxQ
+OGXWq5vuNoLAQzuNdRgFBS1k1/JnQduLKhoxjSW1VPOA+EcTDrMEk6jy0hISDR/6
+/AFWYGF3e5lW2icGcMw5IgGlvf4qqnBSkM3GL/mBH11vu7UOP3wDz7RHgwbb9ymg
+2qkrcoV0QKgo9gnPVHGsSAuPH1riyk5swu4huCQesEz6J4T6h7vrSMWEmFHM8a6T
+e5IeENkOThwgKe+d7KF0K8Q8nkJFrTPDbfpBVQsn0fxq4wfut8F1n2M0M5dc0Ek3
+IB77Dq68L8tIyA3Pv6M8XWMtH9VlBCW6hKabFH5/3x6xbwqRtNaKoP11i4XPva8n
++hLczxkFeG91UIhnAgMBAAGjgekwgeYwHQYDVR0OBBYEFEai4Bae92Wjnfj2NKDc
+M4p6ri6JMB8GA1UdIwQYMBaAFAyOXh6mlqUAz/eeFJS63F4G1jftMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEADrathTQ9z5wvjOeQgDP2
-EplAbYl7XAjJqfxAJB4UrGxqEao+6sEZMnVnJv7A+VXptgR0yeMiWToGWl8lbR3f
-SGKk7tCH3yCdnJWqTncFKOZmrK4j5HTfWrQh5z0PlWGEEX7YcmbdhcdB/kQS2kzH
-G6t9Sz3EOC25VIomHnYb9guK6fqfCubMbcVV8aUpIEIF1FpPJ6u25MTqTYuXU2cD
-dTIfnR64cuHEWgkV186jWe3MTQ/qwB1XGkPXemOGsLhcTzQppL6QxGs5IMklln2h
-zO73VwRp1yFmHcxObBAabocR8+OunltkBO6sxgokgOQKDolJnQ8ddLL2234lodBu
-fg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbEEVHRaCSwkAMGm0ZDRr
+qfOXHm1Mbdh3kSGuT1Cw6/kkOQ0O2kvdai+AYWXhTidQnh6RBSMm57ZJUvFLGSUu
+8MduU/MTM2OXbpGXDZ1gCJvdn0Ao7RRXQ9i/9hZl2LO3QmGqh3XhwZMXrqJt9qxI
+BM6I7mGBUqNF58MZuxXmqX7jIS1EZzRYYwLzPxZjUfrYiyGejXpVmE+lzL4bdTE3
+F3nl3BpLX/qIYWSM5qRNM7UU4gpRbtNwJW88VsPS/cMKR/kXNGDzK1p2SfssCuGU
+ZXR1tVilkJkt2n56nqdnF9KmjaazxkYcrZtzzqez8PJEOB5+MKuqrGTiBrRrOaZ8
+Ug==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -138,30 +138,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:ca:00:55:10:61:e4:0e:a3:f8:57:b8:7b:19:
-                    34:5a:77:b8:06:39:88:07:0c:ec:d0:3b:4a:53:02:
-                    3c:d1:d3:da:48:ae:8a:1a:1c:3d:30:bb:b3:36:80:
-                    a1:6f:cd:32:fd:54:26:b9:77:d7:1e:11:30:6c:eb:
-                    d7:11:9a:d9:af:54:7e:0e:37:c3:8d:f3:0a:5d:ec:
-                    82:d6:6e:f3:46:f4:2a:82:24:e4:28:38:c2:fa:6a:
-                    a6:f7:38:cd:94:50:20:bd:ee:50:9e:3a:a3:40:1a:
-                    49:77:eb:b2:05:8c:01:46:e6:ef:8f:55:91:0a:7a:
-                    44:10:62:b8:9f:3e:81:31:ae:08:95:29:37:47:53:
-                    ec:f3:c7:9c:f0:be:64:70:b3:81:f0:04:f4:a4:aa:
-                    41:ad:16:8f:13:31:af:9b:eb:55:dc:93:6d:56:cf:
-                    d6:f0:0a:fb:11:9e:32:59:d4:07:28:e1:fe:60:73:
-                    bf:43:bf:ff:c9:dc:f2:ca:3a:e1:0c:bd:90:0b:c2:
-                    ab:91:d5:2e:72:5d:5e:f0:f8:45:7b:3d:37:89:d1:
-                    16:bd:9b:4f:c9:c4:34:c7:c4:23:a4:04:4b:13:db:
-                    1a:b5:82:d0:f6:cd:99:fe:f3:0d:98:81:65:5e:2f:
-                    9e:a4:c1:5b:2b:67:b5:07:2a:24:a6:e7:06:5f:49:
-                    d6:d5
+                    00:a6:d5:5d:39:25:98:e5:a1:89:9e:75:b4:1a:98:
+                    af:76:f0:08:ba:4d:5e:41:cd:92:91:25:ac:99:c4:
+                    f6:43:5b:b5:d8:43:97:7c:98:9f:0b:a5:c4:9e:88:
+                    7f:67:14:f3:48:4f:d4:90:0f:ca:05:31:83:28:8b:
+                    0d:9b:e8:51:b9:eb:dd:d7:fc:04:2c:8c:39:b9:a5:
+                    1f:68:70:23:74:40:11:f9:97:c7:6a:05:65:4a:8e:
+                    26:72:cf:e1:e7:da:d2:40:d5:d9:75:5d:85:c2:4d:
+                    3e:96:01:6e:65:52:bf:70:9c:68:84:69:2c:3d:42:
+                    28:64:c8:3f:c9:d5:b5:3f:80:98:e1:83:8a:f5:fc:
+                    79:f9:6b:08:7a:72:3a:2e:e4:48:9d:02:bd:96:4e:
+                    45:74:7a:58:43:bd:7c:0c:64:96:b9:8a:4d:9f:b3:
+                    94:b7:ac:7e:50:65:b3:d0:df:dd:d9:ac:98:26:7c:
+                    89:fe:b1:a9:a8:52:f4:94:b7:83:8b:25:53:88:61:
+                    25:f1:dd:9f:06:6d:cc:3c:79:c8:6e:a2:67:c8:b6:
+                    23:20:8b:43:fc:00:f7:58:9b:78:cb:0b:a6:b9:06:
+                    6f:9d:78:45:b1:b9:d1:d0:6b:d8:38:b9:78:4a:c5:
+                    18:86:96:07:76:08:27:9c:a6:97:e9:5c:ae:b2:f3:
+                    e7:55
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -176,41 +176,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:35:f4:84:23:56:e3:2f:d1:54:fa:eb:85:02:e1:b7:aa:94:
-         a9:73:95:1d:29:9a:35:64:ac:4a:28:a3:87:24:e1:cd:3e:9f:
-         53:14:92:ce:86:d6:ae:d5:3f:1d:97:59:ae:c4:1c:ae:78:29:
-         d7:45:a5:14:58:b6:ac:28:3e:20:e6:27:56:22:b2:bf:80:24:
-         8d:bd:ef:17:67:8f:59:74:8b:7e:41:f1:fc:4d:a8:7b:d4:cf:
-         0c:ec:41:c6:7a:2b:fc:c3:c2:92:dc:49:f6:7a:3d:bd:b0:41:
-         0c:d3:0c:dd:58:1a:42:62:80:10:ad:95:ec:a0:8a:cb:b4:b8:
-         8e:5d:45:c7:d2:82:4b:eb:cb:1a:0e:f5:40:46:0d:dd:35:a3:
-         9b:d1:3e:55:95:b1:ab:96:63:31:ac:01:b4:ef:20:bc:0d:86:
-         88:b2:e5:94:64:6b:f1:1a:73:3e:09:b0:4c:57:87:3a:65:5a:
-         84:17:af:1c:cd:a5:4e:72:8e:19:8b:50:0a:97:4b:df:69:2c:
-         4c:21:d4:d1:7e:81:74:94:60:5b:b0:5e:56:53:14:b4:52:3d:
-         c9:45:a5:47:10:74:15:86:a0:52:ba:ff:b5:32:01:ef:dd:0e:
-         17:d6:73:35:aa:1e:ca:9a:8b:2e:28:cf:fa:1b:79:be:a7:87:
-         4b:b4:0a:26
+         5f:b7:f2:f0:06:94:30:f6:09:86:d6:b2:dc:c6:d2:35:4d:07:
+         bf:b3:45:f8:0a:44:fe:fd:80:90:a0:93:73:19:19:2c:9e:21:
+         90:76:64:0c:fc:f6:26:ef:8d:e6:13:30:10:fe:7f:9f:98:9e:
+         9c:9f:a1:d2:9b:ab:99:90:df:d3:96:e3:78:ae:e5:6a:a7:2e:
+         81:b7:89:f2:a0:85:be:57:7f:7f:a0:30:e1:ce:02:e3:1c:31:
+         1f:d5:9f:e2:db:6c:9b:ab:90:ba:0c:0c:a3:92:6b:3d:f3:88:
+         4f:75:5f:42:c1:66:fe:16:93:29:3c:1f:23:f5:19:63:2d:62:
+         4a:6e:05:02:82:6e:6a:38:c0:8b:27:45:80:d3:a2:34:47:ce:
+         83:ed:00:7f:31:de:4e:8c:01:1f:63:d7:61:bc:ac:f9:45:dc:
+         12:09:fc:4c:75:d3:46:b8:2f:95:c7:ff:21:64:37:e4:79:7e:
+         2d:de:26:ef:d3:9f:2f:8f:0c:78:2f:e0:ac:10:e9:04:52:69:
+         a4:78:b5:08:1a:a2:75:38:26:62:c0:74:e6:38:d1:50:44:5b:
+         a2:40:8c:68:8e:6a:1f:fa:48:51:2b:db:d2:6b:98:1e:3f:b3:
+         67:c6:0b:a4:a9:54:54:f1:37:40:1c:53:a3:57:a1:fa:0f:da:
+         b3:aa:4d:79
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8oAVRBh
-5A6j+Fe4exk0Wne4BjmIBwzs0DtKUwI80dPaSK6KGhw9MLuzNoChb80y/VQmuXfX
-HhEwbOvXEZrZr1R+DjfDjfMKXeyC1m7zRvQqgiTkKDjC+mqm9zjNlFAgve5Qnjqj
-QBpJd+uyBYwBRubvj1WRCnpEEGK4nz6BMa4IlSk3R1Ps88ec8L5kcLOB8AT0pKpB
-rRaPEzGvm+tV3JNtVs/W8Ar7EZ4yWdQHKOH+YHO/Q7//ydzyyjrhDL2QC8KrkdUu
-cl1e8PhFez03idEWvZtPycQ0x8QjpARLE9satYLQ9s2Z/vMNmIFlXi+epMFbK2e1
-ByokpucGX0nW1QIDAQABo4HLMIHIMB0GA1UdDgQWBBTTl8b3ueUXaW14OXc6Cq0y
-LUCsBzAfBgNVHSMEGDAWgBRkkJPNrMc3Nk1rFNZn0FQ6WUU6/DA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptVdOSWY
+5aGJnnW0GpivdvAIuk1eQc2SkSWsmcT2Q1u12EOXfJifC6XEnoh/ZxTzSE/UkA/K
+BTGDKIsNm+hRuevd1/wELIw5uaUfaHAjdEAR+ZfHagVlSo4mcs/h59rSQNXZdV2F
+wk0+lgFuZVK/cJxohGksPUIoZMg/ydW1P4CY4YOK9fx5+WsIenI6LuRInQK9lk5F
+dHpYQ718DGSWuYpNn7OUt6x+UGWz0N/d2ayYJnyJ/rGpqFL0lLeDiyVTiGEl8d2f
+Bm3MPHnIbqJnyLYjIItD/AD3WJt4ywumuQZvnXhFsbnR0GvYOLl4SsUYhpYHdggn
+nKaX6VyusvPnVQIDAQABo4HLMIHIMB0GA1UdDgQWBBQMjl4eppalAM/3nhSUutxe
+BtY37TAfBgNVHSMEGDAWgBRhSTUxrjbSGP5gZ4c6/5DV7V69wDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ANI19IQjVuMv0VT664UC4beqlKlzlR0pmjVkrEooo4ck4c0+n1MUks6G1q7VPx2X
-Wa7EHK54KddFpRRYtqwoPiDmJ1Yisr+AJI297xdnj1l0i35B8fxNqHvUzwzsQcZ6
-K/zDwpLcSfZ6Pb2wQQzTDN1YGkJigBCtleygisu0uI5dRcfSgkvryxoO9UBGDd01
-o5vRPlWVsauWYzGsAbTvILwNhoiy5ZRka/Eacz4JsExXhzplWoQXrxzNpU5yjhmL
-UAqXS99pLEwh1NF+gXSUYFuwXlZTFLRSPclFpUcQdBWGoFK6/7UyAe/dDhfWczWq
-Hsqaiy4oz/obeb6nh0u0CiY=
+AF+38vAGlDD2CYbWstzG0jVNB7+zRfgKRP79gJCgk3MZGSyeIZB2ZAz89ibvjeYT
+MBD+f5+YnpyfodKbq5mQ39OW43iu5WqnLoG3ifKghb5Xf3+gMOHOAuMcMR/Vn+Lb
+bJurkLoMDKOSaz3ziE91X0LBZv4Wkyk8HyP1GWMtYkpuBQKCbmo4wIsnRYDTojRH
+zoPtAH8x3k6MAR9j12G8rPlF3BIJ/Ex100a4L5XH/yFkN+R5fi3eJu/Tny+PDHgv
+4KwQ6QRSaaR4tQgaonU4JmLAdOY40VBEW6JAjGiOah/6SFEr29JrmB4/s2fGC6Sp
+VFTxN0AcU6NXofoP2rOqTXk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -227,30 +227,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ea:cc:2d:c4:88:54:07:90:da:62:ef:77:23:b2:
-                    83:c9:54:06:25:70:65:43:f2:29:a3:f3:22:f2:09:
-                    92:31:25:77:79:63:4a:7f:d8:e5:1f:16:1a:25:bc:
-                    d4:4b:9a:b3:a0:61:7e:c3:a5:90:32:97:5a:5b:59:
-                    cf:97:d6:ac:2c:86:a7:70:ed:2d:e0:bf:e8:44:6f:
-                    41:29:55:b0:40:a8:10:d6:4d:67:2b:01:1f:7a:33:
-                    2b:ce:8f:c8:fb:54:99:e2:11:2d:75:7d:ff:f5:fb:
-                    53:e5:6b:7e:ca:b8:fc:1f:bc:8f:32:29:6d:d2:6b:
-                    a1:9b:d9:7f:b2:f6:e9:18:72:fe:45:a2:23:dc:bf:
-                    5d:1e:43:5d:2b:80:2a:71:b4:cb:67:30:cc:aa:54:
-                    76:fc:4b:a3:2b:ab:99:31:66:bf:5c:09:44:e6:c9:
-                    27:42:3a:58:b5:fd:db:06:0f:11:04:0d:2d:36:4a:
-                    02:d5:50:4d:4d:7c:ed:a4:51:49:e3:fe:44:54:30:
-                    84:b6:1f:54:28:1f:9e:41:b2:20:23:75:e5:d4:e4:
-                    bf:79:a6:ab:84:aa:dc:56:38:cf:2c:d3:8e:13:48:
-                    43:5a:eb:eb:3b:a0:36:d5:89:0c:68:e2:fb:8f:3a:
-                    82:ad:01:4b:f8:bb:b0:2e:3d:b7:6e:91:a3:70:9a:
-                    d0:41
+                    00:bd:06:64:9c:f5:b5:d8:7e:e0:68:ea:1b:31:ba:
+                    6f:f5:00:3e:52:b3:d6:b1:1a:2c:13:37:ec:31:55:
+                    ec:0e:e1:c0:52:ba:cf:2a:0a:05:e5:a2:55:c4:0b:
+                    9c:00:c7:cc:63:83:4b:d0:4c:8c:f0:74:ac:73:d5:
+                    a0:59:39:d4:f2:a5:07:6f:39:ed:6c:6f:36:cc:18:
+                    76:59:49:06:87:94:a5:a2:bd:92:65:95:f4:55:3e:
+                    45:e0:dc:52:2f:ca:a8:01:bb:7a:ba:00:f1:ba:2d:
+                    5f:4d:c2:d2:56:b0:d6:23:eb:99:7a:f5:67:ae:d3:
+                    07:75:07:4d:70:5f:75:c7:c3:fd:b5:f9:26:23:7c:
+                    08:8a:1b:58:09:59:9a:64:91:f5:c6:51:54:c8:27:
+                    e6:53:9b:73:34:11:1e:42:6b:9c:85:e7:6e:c1:1c:
+                    88:0e:cf:ca:2f:e0:fc:aa:d4:fc:24:e1:e6:4a:f4:
+                    ad:02:56:08:79:aa:0d:a6:99:03:63:a7:e0:68:51:
+                    6a:cb:d4:de:35:e3:7e:d0:1a:e1:eb:d9:ba:21:91:
+                    b9:77:66:2d:4c:55:2f:73:c8:e7:49:a0:f1:bd:22:
+                    0f:0f:ac:31:4a:76:c4:e3:2f:dc:fc:09:00:b8:a1:
+                    dd:dd:d8:36:86:66:ec:63:ae:2e:4e:27:bc:0b:46:
+                    be:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -265,41 +265,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         08:18:04:78:4e:5e:99:54:0e:de:99:06:87:4d:3f:7b:98:bc:
-         ac:92:ec:e2:60:54:35:c8:65:68:09:3d:8d:d9:23:ed:c3:f3:
-         7b:fd:8a:60:fb:8b:dc:66:96:3f:69:81:5b:7c:cd:1d:cd:44:
-         8d:3a:93:e4:18:94:c4:a8:56:6a:fd:ea:07:ce:b1:a0:05:b2:
-         cd:fd:bf:05:e6:52:2b:26:36:9d:e2:f2:25:f2:c8:27:5b:52:
-         13:c6:3e:55:5b:72:58:34:a1:1c:5b:17:15:69:b1:82:78:a8:
-         6b:80:81:cc:73:40:5b:c0:ad:de:a8:ec:53:4f:72:f0:1b:a6:
-         d4:ea:e6:c0:35:96:df:ef:38:15:c5:0e:e9:92:22:c4:97:0d:
-         d5:37:6f:7e:af:1f:6e:53:45:1e:3e:21:8c:25:d3:4c:aa:0d:
-         5b:08:e1:5f:aa:dc:49:1c:84:b3:30:21:ea:b6:9c:95:d4:16:
-         1c:9a:0b:17:47:a1:8c:7d:04:a0:e5:df:7d:e7:69:b7:81:2d:
-         31:09:9b:ae:da:b2:1d:13:36:ad:f1:19:7e:92:6a:1b:70:01:
-         8b:ee:88:5e:54:56:d6:dd:6e:78:b1:53:06:89:3b:e3:7e:45:
-         2c:b5:9c:c9:92:5a:0d:c2:85:d0:e1:89:20:94:c7:ef:3c:01:
-         ab:25:5c:4b
+         3e:21:b0:9f:e1:0c:4c:62:3f:0a:d8:0b:97:bc:98:de:4d:18:
+         b6:88:51:bd:db:59:dc:63:ed:13:fa:52:76:59:13:b3:aa:c6:
+         42:3a:7e:e9:3c:cd:12:68:c0:54:55:32:8a:13:17:a4:f6:64:
+         b1:22:f7:01:29:80:a6:94:c6:06:4c:e8:97:81:16:9c:ce:cf:
+         ed:fc:a3:2a:19:70:8f:10:0e:32:15:dc:25:fb:45:41:87:96:
+         1a:ef:7f:be:65:24:a7:0d:cf:77:f0:ce:b1:27:21:9d:c4:a1:
+         24:ae:f0:9e:54:f2:f3:04:ac:fe:43:f1:c0:b5:f1:48:3c:57:
+         39:fb:7e:b6:c9:b8:29:57:f5:82:2e:4f:43:60:ff:d7:3a:54:
+         64:15:a4:11:c3:5f:ea:21:84:6b:ef:e6:2d:29:8c:e5:ab:d2:
+         aa:9f:d4:b3:c2:ea:5f:76:e7:c8:9b:a4:76:4c:99:2b:05:96:
+         60:e2:1e:f9:44:d7:c5:3a:80:e0:a4:7c:f8:ca:f8:5a:c6:63:
+         2b:9c:71:5a:7d:a4:03:69:b4:e3:dd:be:1b:e4:01:b3:53:b4:
+         46:5c:c2:8b:85:62:3e:f5:87:bd:5f:73:36:a0:c4:e6:a8:bc:
+         58:c4:bf:84:67:e3:00:f6:98:64:30:66:ba:8b:92:b5:b2:7f:
+         5d:e9:75:a7
 -----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBBTANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrMLcSIVAeQ2mLvdyOy
-g8lUBiVwZUPyKaPzIvIJkjEld3ljSn/Y5R8WGiW81Euas6BhfsOlkDKXWltZz5fW
-rCyGp3DtLeC/6ERvQSlVsECoENZNZysBH3ozK86PyPtUmeIRLXV9//X7U+Vrfsq4
-/B+8jzIpbdJroZvZf7L26Rhy/kWiI9y/XR5DXSuAKnG0y2cwzKpUdvxLoyurmTFm
-v1wJRObJJ0I6WLX92wYPEQQNLTZKAtVQTU187aRRSeP+RFQwhLYfVCgfnkGyICN1
-5dTkv3mmq4Sq3FY4zyzTjhNIQ1rr6zugNtWJDGji+486gq0BS/i7sC49t26Ro3Ca
-0EECAwEAAaOByzCByDAdBgNVHQ4EFgQUZJCTzazHNzZNaxTWZ9BUOllFOvwwHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0GZJz1tdh+4GjqGzG6
+b/UAPlKz1rEaLBM37DFV7A7hwFK6zyoKBeWiVcQLnADHzGODS9BMjPB0rHPVoFk5
+1PKlB2857WxvNswYdllJBoeUpaK9kmWV9FU+ReDcUi/KqAG7eroA8botX03C0law
+1iPrmXr1Z67TB3UHTXBfdcfD/bX5JiN8CIobWAlZmmSR9cZRVMgn5lObczQRHkJr
+nIXnbsEciA7Pyi/g/KrU/CTh5kr0rQJWCHmqDaaZA2On4GhRasvU3jXjftAa4evZ
+uiGRuXdmLUxVL3PI50mg8b0iDw+sMUp2xOMv3PwJALih3d3YNoZm7GOuLk4nvAtG
+vukCAwEAAaOByzCByDAdBgNVHQ4EFgQUYUk1Ma420hj+YGeHOv+Q1e1evcAwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAIGAR4Tl6Z
-VA7emQaHTT97mLyskuziYFQ1yGVoCT2N2SPtw/N7/Ypg+4vcZpY/aYFbfM0dzUSN
-OpPkGJTEqFZq/eoHzrGgBbLN/b8F5lIrJjad4vIl8sgnW1ITxj5VW3JYNKEcWxcV
-abGCeKhrgIHMc0BbwK3eqOxTT3LwG6bU6ubANZbf7zgVxQ7pkiLElw3VN29+rx9u
-U0UePiGMJdNMqg1bCOFfqtxJHISzMCHqtpyV1BYcmgsXR6GMfQSg5d9952m3gS0x
-CZuu2rIdEzat8Rl+kmobcAGL7oheVFbW3W54sVMGiTvjfkUstZzJkloNwoXQ4Ykg
-lMfvPAGrJVxL
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA+IbCf4QxM
+Yj8K2AuXvJjeTRi2iFG921ncY+0T+lJ2WROzqsZCOn7pPM0SaMBUVTKKExek9mSx
+IvcBKYCmlMYGTOiXgRaczs/t/KMqGXCPEA4yFdwl+0VBh5Ya73++ZSSnDc938M6x
+JyGdxKEkrvCeVPLzBKz+Q/HAtfFIPFc5+362ybgpV/WCLk9DYP/XOlRkFaQRw1/q
+IYRr7+YtKYzlq9Kqn9SzwupfdufIm6R2TJkrBZZg4h75RNfFOoDgpHz4yvhaxmMr
+nHFafaQDabTj3b4b5AGzU7RGXMKLhWI+9Ye9X3M2oMTmqLxYxL+EZ+MA9phkMGa6
+i5K1sn9d6XWn
 -----END CERTIFICATE-----
 
 Certificate:
@@ -316,30 +316,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a7:67:cf:1d:f5:54:e9:96:54:bc:65:8c:b7:9e:
-                    72:39:05:68:3d:44:e5:93:d8:4b:61:b1:a4:b4:b4:
-                    4c:c6:a0:92:b6:4d:06:3a:5b:b2:0a:8a:27:cb:b1:
-                    e7:c3:35:47:ef:ac:2d:a7:d0:9c:b2:50:6a:58:3d:
-                    12:a4:85:dc:77:a9:08:e5:f4:1f:c0:ef:00:51:cd:
-                    68:62:d5:e5:cc:01:be:be:42:8b:35:fb:00:9c:30:
-                    84:0c:d7:35:7d:88:d1:1b:43:78:19:79:aa:06:b3:
-                    ac:5c:69:a0:23:f0:69:dc:89:59:97:05:df:01:ae:
-                    5b:8f:01:a0:78:4f:05:4e:36:ac:00:b4:8d:e8:79:
-                    05:07:f2:76:a4:63:3f:95:21:06:57:61:a9:f0:43:
-                    04:d1:92:d3:9d:bb:b3:8f:5b:ef:ab:81:a0:23:11:
-                    38:b5:02:b2:95:1d:ac:da:b8:36:60:d7:d7:01:6d:
-                    e8:ed:32:21:b4:84:97:33:7c:67:88:0e:44:c7:12:
-                    87:85:6a:49:80:82:cb:1e:16:2b:2f:6d:98:82:a0:
-                    a0:30:cc:55:df:93:65:e0:9a:08:24:8a:47:cc:69:
-                    53:3c:b7:62:fa:df:11:64:d0:3f:52:43:80:f8:cf:
-                    7b:6f:d0:65:20:fb:22:d0:43:ca:fc:fc:0f:bd:1c:
-                    42:b9
+                    00:e9:9e:ac:cf:f1:ea:0e:19:26:bc:7a:38:a4:5f:
+                    0d:33:c4:69:32:3e:0d:ca:46:55:b5:e4:cc:63:0d:
+                    b1:c7:50:99:9e:39:72:a5:05:37:22:3a:04:e0:ff:
+                    9b:3e:1f:d6:b6:b5:f1:a9:38:58:a0:a2:a6:b7:7b:
+                    48:6f:dc:8f:f4:32:7d:ca:a5:4f:bd:fa:26:9c:8b:
+                    c1:01:ed:7f:ed:d5:f1:ef:b1:42:df:36:bd:06:8a:
+                    b0:2f:49:74:65:5f:f4:01:c6:b8:3d:bf:25:fd:cb:
+                    49:ce:e2:c6:a5:3e:7e:18:92:27:5f:60:82:b3:78:
+                    77:39:bb:ea:05:b1:e0:c2:74:b6:7f:f4:42:7b:ae:
+                    24:1b:e5:f9:ef:24:48:13:af:05:75:6c:4f:da:e3:
+                    59:c4:ad:2f:46:6c:8c:dc:5a:2e:75:57:31:b7:1e:
+                    8c:57:43:c7:68:4b:b9:e7:73:41:6f:45:09:79:e0:
+                    cc:69:98:80:c2:9d:e0:7a:e1:e0:57:d2:6f:0f:af:
+                    27:70:01:0f:2a:c1:f2:83:64:09:c7:3b:ad:80:12:
+                    19:6a:b0:b1:3c:39:e3:fa:8a:a8:23:3f:f0:1f:6c:
+                    8c:63:e8:9a:7c:8a:a6:fd:9b:a6:ca:46:7c:de:39:
+                    5d:ba:0b:5e:17:5c:e1:0b:8f:5c:fa:79:66:96:d9:
+                    d2:41
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -354,41 +354,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         7f:ec:13:f0:46:53:d5:75:08:a5:37:44:9c:47:19:9e:05:ef:
-         d6:30:68:1e:0b:c8:3c:84:93:51:36:25:48:60:56:d4:79:1f:
-         b6:2c:91:e3:6f:61:f9:e7:7d:c8:b6:7b:70:7f:27:6d:2c:38:
-         ec:73:e4:8c:86:f4:48:8e:1b:09:0d:9f:f8:5a:1f:95:ed:f1:
-         03:ea:99:64:d6:2d:46:4e:b8:0b:67:10:98:8e:19:2e:31:e1:
-         e3:d6:fe:7c:97:e9:a3:7a:18:25:9c:d4:4f:ce:a9:11:1d:f0:
-         53:32:8a:e8:8e:8d:80:fb:f1:c1:c1:6a:c1:cf:d2:36:a2:b1:
-         f9:32:9e:05:fd:73:1a:b9:37:e5:55:b2:1e:78:84:a5:04:45:
-         4a:d5:24:ad:20:39:fe:ab:ce:38:dd:c0:1e:2f:dd:ce:b4:5c:
-         49:1d:ab:7a:e1:bd:e9:a6:d2:02:64:8a:a9:97:36:89:42:c2:
-         82:14:ec:aa:dd:77:be:b1:d6:d2:4f:8b:a4:fe:5b:06:28:1c:
-         2f:4e:83:15:1f:10:a9:c6:ce:8e:a6:ca:bb:2c:01:6a:ae:99:
-         59:44:05:fc:a5:7e:fe:73:5f:df:b5:0b:48:b5:43:b6:10:9f:
-         42:2e:8b:65:f6:47:25:27:66:ef:a6:a0:ca:d3:cc:9c:ac:2d:
-         22:5b:87:5c
+         d3:ff:ab:16:f3:f5:25:e8:4f:77:fb:d2:98:0f:62:60:29:66:
+         71:d3:f9:e9:7d:06:03:1f:1e:59:0f:dc:12:39:13:47:a7:ab:
+         85:a2:38:8e:bf:f4:20:e9:de:b7:61:39:cc:b3:dc:97:1d:7d:
+         2d:5f:22:14:48:aa:13:6f:1f:a2:d4:c4:cb:1e:88:d5:b0:1d:
+         38:7a:8d:4c:c8:14:59:58:ba:64:83:1c:80:94:0a:9a:04:e1:
+         f8:b6:3f:fb:cb:3f:d5:d8:52:ea:83:d9:07:d3:6f:d0:81:ff:
+         05:d0:7b:3c:ab:8c:72:86:95:9d:21:d6:9d:41:3d:47:57:8b:
+         ae:fb:b2:91:0a:2a:9d:57:85:73:e5:f5:6d:cb:22:18:03:aa:
+         b0:89:e4:ac:e7:5f:32:46:1e:52:3d:e2:fc:75:04:77:43:a7:
+         db:85:c4:19:3a:ba:a9:a3:98:1b:c4:b5:b5:6a:ee:5a:b1:d8:
+         12:da:46:5f:3e:82:90:74:8a:19:e7:84:1a:f2:10:98:67:2d:
+         75:7e:eb:85:9a:ad:af:e3:e5:ee:5a:f8:61:19:1f:e6:df:e9:
+         8d:a8:50:90:7e:87:25:d4:b5:5b:2f:d5:98:b7:40:1f:41:1a:
+         62:48:b7:ac:c0:c0:85:7d:8c:20:8b:54:53:d2:b6:ad:a1:6d:
+         fa:7d:d6:a8
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdnzx31VOmWVLxljLee
-cjkFaD1E5ZPYS2GxpLS0TMagkrZNBjpbsgqKJ8ux58M1R++sLafQnLJQalg9EqSF
-3HepCOX0H8DvAFHNaGLV5cwBvr5CizX7AJwwhAzXNX2I0RtDeBl5qgazrFxpoCPw
-adyJWZcF3wGuW48BoHhPBU42rAC0jeh5BQfydqRjP5UhBldhqfBDBNGS0527s49b
-76uBoCMROLUCspUdrNq4NmDX1wFt6O0yIbSElzN8Z4gORMcSh4VqSYCCyx4WKy9t
-mIKgoDDMVd+TZeCaCCSKR8xpUzy3YvrfEWTQP1JDgPjPe2/QZSD7ItBDyvz8D70c
-QrkCAwEAAaOByzCByDAdBgNVHQ4EFgQUXaEDPY8T+QivHoNsvN5vo7XCGuowHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOmerM/x6g4ZJrx6OKRf
+DTPEaTI+DcpGVbXkzGMNscdQmZ45cqUFNyI6BOD/mz4f1ra18ak4WKCiprd7SG/c
+j/QyfcqlT736JpyLwQHtf+3V8e+xQt82vQaKsC9JdGVf9AHGuD2/Jf3LSc7ixqU+
+fhiSJ19ggrN4dzm76gWx4MJ0tn/0QnuuJBvl+e8kSBOvBXVsT9rjWcStL0ZsjNxa
+LnVXMbcejFdDx2hLuedzQW9FCXngzGmYgMKd4Hrh4FfSbw+vJ3ABDyrB8oNkCcc7
+rYASGWqwsTw54/qKqCM/8B9sjGPomnyKpv2bpspGfN45XboLXhdc4QuPXPp5ZpbZ
+0kECAwEAAaOByzCByDAdBgNVHQ4EFgQUvzG5FbjkAW6xJKza10twwNEWj/wwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB/7BPwRlPV
-dQilN0ScRxmeBe/WMGgeC8g8hJNRNiVIYFbUeR+2LJHjb2H5533ItntwfydtLDjs
-c+SMhvRIjhsJDZ/4Wh+V7fED6plk1i1GTrgLZxCYjhkuMeHj1v58l+mjehglnNRP
-zqkRHfBTMorojo2A+/HBwWrBz9I2orH5Mp4F/XMauTflVbIeeISlBEVK1SStIDn+
-q8443cAeL93OtFxJHat64b3pptICZIqplzaJQsKCFOyq3Xe+sdbST4uk/lsGKBwv
-ToMVHxCpxs6Opsq7LAFqrplZRAX8pX7+c1/ftQtItUO2EJ9CLotl9kclJ2bvpqDK
-08ycrC0iW4dc
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDT/6sW8/Ul
+6E93+9KYD2JgKWZx0/npfQYDHx5ZD9wSORNHp6uFojiOv/Qg6d63YTnMs9yXHX0t
+XyIUSKoTbx+i1MTLHojVsB04eo1MyBRZWLpkgxyAlAqaBOH4tj/7yz/V2FLqg9kH
+02/Qgf8F0Hs8q4xyhpWdIdadQT1HV4uu+7KRCiqdV4Vz5fVtyyIYA6qwieSs518y
+Rh5SPeL8dQR3Q6fbhcQZOrqpo5gbxLW1au5asdgS2kZfPoKQdIoZ54Qa8hCYZy11
+fuuFmq2v4+XuWvhhGR/m3+mNqFCQfocl1LVbL9WYt0AfQRpiSLeswMCFfYwgi1RT
+0ratoW36fdao
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -400,3 +400,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem b/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem
index bc2fec4..4271d15 100644
--- a/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem
+++ b/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a5:fd:12:f2:87:40:5c:07:a7:7c:a8:7a:2c:2c:
-                    9e:de:bc:e5:8e:c6:55:90:ce:5d:a9:e6:c8:7d:5a:
-                    9f:b1:f7:32:b4:90:9c:80:12:a2:43:fa:71:95:54:
-                    76:45:b3:28:cc:93:05:f1:f4:e9:5d:1d:4e:5d:1a:
-                    a1:ad:a5:4b:4f:50:7a:c2:cd:63:2c:de:5d:54:74:
-                    09:8b:d2:5b:1f:0e:49:b4:ce:cc:24:f4:9d:f7:ca:
-                    65:6e:58:02:c0:8d:06:35:81:01:b1:2d:37:07:1e:
-                    9b:07:fa:a3:12:6b:32:bb:98:f1:41:03:2f:17:b5:
-                    5a:d3:bd:b0:2a:0c:be:2f:34:29:ba:87:44:a5:d9:
-                    b7:1c:c0:ff:c5:dd:bf:21:78:38:71:ce:7a:54:d1:
-                    97:d9:aa:86:84:eb:2c:17:bf:61:1b:4b:10:54:a2:
-                    a1:a6:ec:01:04:f8:f3:c8:6c:2f:30:15:e0:da:94:
-                    49:98:01:de:e6:c4:04:57:bb:f5:6d:09:53:e1:ff:
-                    76:94:cc:ba:2c:74:70:b7:f9:d4:10:35:8a:b0:8c:
-                    4c:5b:5f:5c:db:e3:a5:b6:c9:d5:b4:13:7c:17:77:
-                    fd:ac:0d:65:fb:0a:a4:d4:0e:a5:2e:8f:ef:0d:5c:
-                    c1:9b:00:c1:dd:0d:4f:c3:7e:3b:3b:a7:4a:d2:99:
-                    f0:e3
+                    00:d0:1d:d2:c0:02:fe:ab:1e:5f:11:a8:41:9e:1a:
+                    70:00:73:89:d1:39:d7:64:fe:52:f4:ed:7a:1d:e5:
+                    7a:5f:d5:0c:23:91:19:0e:c3:2d:33:b7:10:a1:ab:
+                    7b:69:4f:80:d4:1d:23:3c:aa:eb:9b:85:a7:92:3a:
+                    fd:e4:7e:43:0d:66:b0:f1:ae:86:21:10:f1:15:02:
+                    db:57:fc:8d:f4:f4:84:ce:7a:ac:93:7e:9a:2b:96:
+                    c2:b6:4f:4b:6b:d3:b6:a6:b3:af:7c:8e:91:e4:95:
+                    fe:33:35:e0:25:01:5b:2d:be:23:a6:db:21:69:24:
+                    2e:5c:2d:c1:88:93:c3:c2:95:03:aa:18:f3:d8:0f:
+                    b0:3c:7d:86:fc:c0:e4:58:17:78:61:6f:17:52:f1:
+                    a7:5f:33:31:9d:f1:75:6d:2c:0d:fd:c0:55:1d:c7:
+                    d3:f4:c6:dc:9c:2a:5f:20:dd:81:6c:a6:73:53:25:
+                    2f:f1:55:a9:ae:74:e7:15:bb:5f:75:f1:b1:d1:69:
+                    76:36:01:b0:bb:b1:b2:84:ad:60:49:8d:6c:9e:d5:
+                    3c:69:ae:da:0a:a6:1e:51:02:11:21:8e:eb:d8:8c:
+                    2e:e2:49:4b:67:06:98:2d:47:9d:01:49:87:3a:35:
+                    36:22:cd:91:87:16:78:50:71:b3:86:41:9e:28:27:
+                    b7:91
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                8E:F7:4C:4C:A6:3A:4A:DA:FB:BE:DE:D3:24:D2:56:B5:3D:55:43:18
+                AF:0E:FD:05:79:FF:C7:96:E2:6B:65:4D:31:83:3A:53:42:4E:AC:25
             X509v3 Authority Key Identifier: 
-                keyid:25:1D:DB:44:41:CD:DE:76:AA:96:3B:9B:5B:17:24:39:86:B7:DD:E0
+                keyid:C7:39:7C:24:26:48:4A:25:80:EC:86:32:6E:24:B7:AF:2D:3C:8C:64
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         6e:29:ba:73:d2:ce:13:e8:a8:61:cc:1c:c9:63:c3:e5:62:72:
-         3d:bd:19:d9:10:ce:04:5c:b4:1a:0c:52:c6:57:4d:d0:a7:2d:
-         a7:11:90:78:72:8c:1c:56:4f:e4:be:4e:de:6e:f3:e1:eb:7e:
-         9c:05:86:e4:f2:22:69:7b:7d:43:df:4e:a9:11:4d:8a:68:33:
-         a3:7d:9b:b1:04:9c:c2:bf:d4:9f:78:d9:8f:a5:51:9a:20:8a:
-         79:c8:40:49:e4:30:d1:b9:9b:09:5e:3d:5e:93:f5:84:e5:2b:
-         9f:1e:56:1c:2d:ef:09:34:8c:db:a0:b6:f0:91:88:91:6b:1f:
-         4e:86:11:b6:62:33:63:8b:03:b2:40:d2:b8:28:33:e1:33:5d:
-         ae:e4:0c:08:4b:ab:05:08:6c:4a:b2:b7:cd:cd:28:7f:4a:5c:
-         4c:9d:fa:93:c7:00:fa:47:4e:00:ca:2d:2b:c9:ed:da:e8:33:
-         23:b6:98:f1:e5:6f:1b:cc:8b:e2:27:b2:1d:46:53:39:29:45:
-         46:1a:50:94:c0:e7:5e:a4:ef:a3:ee:13:7a:81:89:e2:4e:f9:
-         5e:1c:e3:ee:fe:d9:6d:7b:85:c6:99:ed:b0:30:d4:ef:16:65:
-         1f:37:d9:f9:c1:54:c2:d9:18:3f:e9:89:a3:28:6a:ad:fc:a2:
-         01:b8:82:d3
+         38:9c:d0:a9:cd:d2:c4:1a:a1:77:b6:2f:22:12:2d:e4:1f:f3:
+         7f:05:68:0c:34:22:2b:bc:4c:4a:58:ce:9a:4b:20:e5:b0:b2:
+         c7:81:a3:cc:b0:a4:d2:ce:96:ed:56:2e:bb:33:d6:a4:81:53:
+         52:3a:5d:35:b1:3d:74:70:a4:f6:85:a8:60:e2:e7:79:d6:48:
+         2c:3e:05:63:4b:42:10:1c:cc:5c:e8:13:ac:97:e1:7c:17:c1:
+         4c:bc:6b:66:0e:e9:56:0a:92:05:94:dc:ad:3a:49:8c:f2:e6:
+         31:23:33:d3:ad:ac:63:5e:18:ce:9e:85:78:c2:99:d3:7d:19:
+         bd:a3:a3:83:7e:6b:2d:ed:33:df:88:2f:e4:66:77:2f:6a:4f:
+         22:48:68:c8:73:58:2d:cf:8c:f1:e7:cd:e4:16:7d:5b:0d:f6:
+         7a:30:43:be:1d:17:83:43:6e:13:c3:8a:8b:0b:cc:20:e8:f2:
+         d6:9c:da:09:eb:1b:c1:20:69:70:29:fb:bf:96:ec:3b:c9:ae:
+         e2:27:f2:6e:22:bf:04:9e:1c:6a:1a:11:b9:1e:52:b7:01:c4:
+         ae:93:91:14:b4:c9:52:9f:b4:bb:34:38:5f:87:ba:c6:5a:b4:
+         3c:6f:ad:f3:a9:05:40:c9:98:1b:e0:5e:a5:ff:13:9b:db:c6:
+         19:df:0a:11
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCl/RLy
-h0BcB6d8qHosLJ7evOWOxlWQzl2p5sh9Wp+x9zK0kJyAEqJD+nGVVHZFsyjMkwXx
-9OldHU5dGqGtpUtPUHrCzWMs3l1UdAmL0lsfDkm0zswk9J33ymVuWALAjQY1gQGx
-LTcHHpsH+qMSazK7mPFBAy8XtVrTvbAqDL4vNCm6h0Sl2bccwP/F3b8heDhxznpU
-0ZfZqoaE6ywXv2EbSxBUoqGm7AEE+PPIbC8wFeDalEmYAd7mxARXu/VtCVPh/3aU
-zLosdHC3+dQQNYqwjExbX1zb46W2ydW0E3wXd/2sDWX7CqTUDqUuj+8NXMGbAMHd
-DU/Dfjs7p0rSmfDjAgMBAAGjgekwgeYwHQYDVR0OBBYEFI73TEymOkra+77e0yTS
-VrU9VUMYMB8GA1UdIwQYMBaAFCUd20RBzd52qpY7m1sXJDmGt93gMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQHdLA
+Av6rHl8RqEGeGnAAc4nROddk/lL07Xod5Xpf1QwjkRkOwy0ztxChq3tpT4DUHSM8
+quubhaeSOv3kfkMNZrDxroYhEPEVAttX/I309ITOeqyTfporlsK2T0tr07ams698
+jpHklf4zNeAlAVstviOm2yFpJC5cLcGIk8PClQOqGPPYD7A8fYb8wORYF3hhbxdS
+8adfMzGd8XVtLA39wFUdx9P0xtycKl8g3YFspnNTJS/xVamudOcVu1918bHRaXY2
+AbC7sbKErWBJjWye1TxprtoKph5RAhEhjuvYjC7iSUtnBpgtR50BSYc6NTYizZGH
+FnhQcbOGQZ4oJ7eRAgMBAAGjgekwgeYwHQYDVR0OBBYEFK8O/QV5/8eW4mtlTTGD
+OlNCTqwlMB8GA1UdIwQYMBaAFMc5fCQmSEolgOyGMm4kt68tPIxkMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbim6c9LOE+ioYcwcyWPD
-5WJyPb0Z2RDOBFy0GgxSxldN0KctpxGQeHKMHFZP5L5O3m7z4et+nAWG5PIiaXt9
-Q99OqRFNimgzo32bsQScwr/Un3jZj6VRmiCKechASeQw0bmbCV49XpP1hOUrnx5W
-HC3vCTSM26C28JGIkWsfToYRtmIzY4sDskDSuCgz4TNdruQMCEurBQhsSrK3zc0o
-f0pcTJ36k8cA+kdOAMotK8nt2ugzI7aY8eVvG8yL4ieyHUZTOSlFRhpQlMDnXqTv
-o+4TeoGJ4k75Xhzj7v7ZbXuFxpntsDDU7xZlHzfZ+cFUwtkYP+mJoyhqrfyiAbiC
-0w==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAOJzQqc3SxBqhd7YvIhIt
+5B/zfwVoDDQiK7xMSljOmksg5bCyx4GjzLCk0s6W7VYuuzPWpIFTUjpdNbE9dHCk
+9oWoYOLnedZILD4FY0tCEBzMXOgTrJfhfBfBTLxrZg7pVgqSBZTcrTpJjPLmMSMz
+062sY14Yzp6FeMKZ030ZvaOjg35rLe0z34gv5GZ3L2pPIkhoyHNYLc+M8efN5BZ9
+Ww32ejBDvh0Xg0NuE8OKiwvMIOjy1pzaCesbwSBpcCn7v5bsO8mu4ifybiK/BJ4c
+ahoRuR5StwHErpORFLTJUp+0uzQ4X4e6xlq0PG+t86kFQMmYG+Bepf8Tm9vGGd8K
+EQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:dd:9f:7d:91:ef:30:35:17:fe:58:20:b0:99:23:
-                    d3:ce:e4:f6:b2:05:82:69:5b:4c:e4:94:40:41:ad:
-                    d6:6b:b3:44:08:50:be:9f:b3:f4:26:d6:10:50:52:
-                    e3:a4:71:bd:3d:ed:f0:a8:30:da:21:06:aa:d9:ae:
-                    62:51:ed:06:c1:6e:f5:e2:23:a8:62:db:04:b7:0f:
-                    69:84:39:1f:3d:46:28:ae:a0:56:fe:aa:9b:68:0e:
-                    30:65:6a:38:f8:a6:66:12:78:99:cc:8e:c9:80:15:
-                    ab:5a:66:75:71:42:4d:8c:32:2c:15:a7:6d:c9:51:
-                    c8:d8:88:28:56:03:e4:ab:98:3b:52:d9:01:f0:4d:
-                    18:71:cf:d3:82:cb:62:af:6c:12:8a:a2:4b:44:c7:
-                    a7:61:fd:d6:34:89:c6:f0:6e:2c:77:fd:cc:93:a9:
-                    90:5b:85:e7:46:1c:04:41:3d:df:02:79:c3:e6:98:
-                    66:28:b0:39:9b:59:ce:5e:8c:d1:63:b1:28:a3:05:
-                    a3:79:93:3a:dd:92:8b:d2:07:15:96:61:27:98:ae:
-                    53:78:3f:da:79:09:01:e7:dc:03:c4:05:8f:e5:52:
-                    b3:bc:d8:8f:6d:0a:89:21:a6:cf:b5:db:1c:65:67:
-                    4c:5f:5e:33:24:d7:3c:3e:61:ce:9a:4e:6e:e7:a5:
-                    30:9f
+                    00:be:b9:02:79:50:20:a3:e5:6d:2e:79:97:1a:94:
+                    82:1d:25:8f:a5:f8:66:c3:13:91:aa:35:ec:99:d2:
+                    da:75:c8:80:bc:05:2d:6c:c6:53:f2:a8:78:ed:60:
+                    f4:f3:56:40:65:3d:d6:ea:fa:62:87:16:ed:eb:c7:
+                    54:8e:d3:0b:61:63:bb:6d:3d:a7:7b:9e:ac:9b:dc:
+                    2e:8a:68:2a:79:81:52:79:fb:d7:b7:24:29:e5:c3:
+                    36:57:bd:02:20:9e:e2:73:20:82:6d:7f:7e:8f:9a:
+                    0a:4e:3d:a0:1f:b3:ca:20:82:70:a6:bc:08:b7:97:
+                    b3:b7:cf:04:2c:e1:96:e6:7a:6f:bf:b0:47:6a:fc:
+                    fb:03:75:1a:7f:27:03:a0:5c:62:23:5c:59:94:28:
+                    71:c2:a7:15:6a:87:9a:22:63:5d:a3:dd:49:b6:c2:
+                    57:1b:89:d1:4a:75:dd:b8:a7:87:29:32:37:da:69:
+                    15:2e:fb:37:e8:aa:db:12:7c:13:9e:44:49:b6:67:
+                    eb:fa:87:36:3c:93:62:fc:f5:f7:2b:42:56:4f:3e:
+                    4f:a7:3a:18:ee:45:aa:9c:ab:dc:0d:8b:74:47:e3:
+                    a4:ed:69:71:7f:49:72:46:b4:d2:b5:00:eb:e0:8c:
+                    32:e0:d2:35:9c:f2:34:e7:4d:a3:56:c0:1b:fd:d8:
+                    f8:7f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                25:1D:DB:44:41:CD:DE:76:AA:96:3B:9B:5B:17:24:39:86:B7:DD:E0
+                C7:39:7C:24:26:48:4A:25:80:EC:86:32:6E:24:B7:AF:2D:3C:8C:64
             X509v3 Authority Key Identifier: 
-                keyid:63:A2:D5:4E:83:BA:38:5F:50:C5:93:E5:5C:93:9D:DE:55:08:73:A9
+                keyid:EA:EB:56:0E:30:42:FC:D3:45:B9:0B:D8:88:4C:F0:E9:B8:D6:F4:3C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         c5:e9:f1:a5:8e:03:ae:78:a2:51:87:0b:ee:26:02:97:5e:31:
-         41:72:f2:7c:00:46:1b:45:51:02:03:4e:16:d0:69:61:e9:7e:
-         aa:fc:5f:5e:6b:63:99:98:c0:cf:36:96:ae:82:56:70:13:33:
-         8d:f2:00:7a:b3:50:c7:15:ad:56:1b:ab:1a:6f:27:a4:e1:65:
-         da:22:4c:11:32:02:23:30:f8:7c:63:4d:c6:3b:5f:5b:55:37:
-         82:29:0d:74:ff:49:4c:10:25:60:4b:3f:e8:06:1f:47:67:38:
-         26:df:c4:92:d8:c4:9a:c8:bd:e6:1f:b9:52:2e:70:f7:21:48:
-         43:6b:f5:40:07:c7:fd:15:51:80:54:c6:c8:74:14:a9:56:bd:
-         ad:b4:d4:da:a3:1d:b4:c4:91:73:0a:3d:1e:71:e0:97:e2:d4:
-         79:8d:00:42:a7:8a:28:a2:2c:49:94:3f:23:e6:66:75:42:88:
-         66:e5:98:14:b0:8d:76:d3:80:32:60:e9:05:18:65:ff:c8:4d:
-         3b:ea:b3:d1:77:1b:7f:d1:99:c9:b5:58:72:ea:49:d4:31:68:
-         28:2d:04:3c:49:99:f0:3a:74:11:91:0e:82:46:84:c7:54:7c:
-         0b:9b:1a:64:ea:e3:9c:d4:c2:b9:90:e8:0e:2c:82:8b:2a:e1:
-         d1:03:32:77
+         1c:c7:a3:8a:bf:92:37:da:ef:79:5f:53:60:f5:ce:90:9c:51:
+         4e:20:61:4c:c2:bf:8c:9a:ed:2a:c7:aa:3f:c4:9b:b3:28:db:
+         7f:2c:95:18:34:d0:c0:0d:98:50:24:d0:31:de:3e:b5:ca:5f:
+         2f:34:44:3c:5c:24:d3:a8:48:d1:52:68:74:20:f4:f9:7f:8b:
+         40:80:b4:b6:c7:a5:95:4c:64:e1:6b:20:48:57:29:58:70:a1:
+         16:3a:b7:f5:5e:25:c5:77:96:10:1c:67:03:95:fc:d0:d0:42:
+         ce:26:5a:a0:6f:40:c4:83:30:96:36:f5:b9:9e:17:20:3b:a5:
+         96:9f:49:cf:9b:9f:86:5e:be:13:17:1b:7e:54:0f:02:01:68:
+         b7:fb:49:81:48:59:bc:ea:d3:fb:47:49:65:68:bd:2e:97:0c:
+         4f:f6:3c:34:77:07:16:8b:68:66:d4:a8:68:09:57:40:6d:5d:
+         bf:d2:7b:94:e3:a6:73:be:73:30:13:e9:47:71:25:17:7a:78:
+         ca:7e:ef:68:ac:a5:2d:80:60:56:7e:3d:89:d5:76:3f:5f:ac:
+         7f:95:65:b0:34:f3:50:9c:e8:d3:f2:23:14:50:3d:0d:fe:3a:
+         73:a7:f5:13:8f:72:bb:38:04:a2:d2:6e:fa:c3:b9:f8:bc:5d:
+         4a:ee:c0:34
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3Z99ke8w
-NRf+WCCwmSPTzuT2sgWCaVtM5JRAQa3Wa7NECFC+n7P0JtYQUFLjpHG9Pe3wqDDa
-IQaq2a5iUe0GwW714iOoYtsEtw9phDkfPUYorqBW/qqbaA4wZWo4+KZmEniZzI7J
-gBWrWmZ1cUJNjDIsFadtyVHI2IgoVgPkq5g7UtkB8E0Ycc/Tgstir2wSiqJLRMen
-Yf3WNInG8G4sd/3Mk6mQW4XnRhwEQT3fAnnD5phmKLA5m1nOXozRY7EoowWjeZM6
-3ZKL0gcVlmEnmK5TeD/aeQkB59wDxAWP5VKzvNiPbQqJIabPtdscZWdMX14zJNc8
-PmHOmk5u56UwnwIDAQABo4HLMIHIMB0GA1UdDgQWBBQlHdtEQc3edqqWO5tbFyQ5
-hrfd4DAfBgNVHSMEGDAWgBRjotVOg7o4X1DFk+Vck53eVQhzqTA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvrkCeVAg
+o+VtLnmXGpSCHSWPpfhmwxORqjXsmdLadciAvAUtbMZT8qh47WD081ZAZT3W6vpi
+hxbt68dUjtMLYWO7bT2ne56sm9wuimgqeYFSefvXtyQp5cM2V70CIJ7icyCCbX9+
+j5oKTj2gH7PKIIJwprwIt5ezt88ELOGW5npvv7BHavz7A3UafycDoFxiI1xZlChx
+wqcVaoeaImNdo91JtsJXG4nRSnXduKeHKTI32mkVLvs36KrbEnwTnkRJtmfr+oc2
+PJNi/PX3K0JWTz5PpzoY7kWqnKvcDYt0R+Ok7Wlxf0lyRrTStQDr4Iwy4NI1nPI0
+502jVsAb/dj4fwIDAQABo4HLMIHIMB0GA1UdDgQWBBTHOXwkJkhKJYDshjJuJLev
+LTyMZDAfBgNVHSMEGDAWgBTq61YOMEL800W5C9iITPDpuNb0PDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AMXp8aWOA654olGHC+4mApdeMUFy8nwARhtFUQIDThbQaWHpfqr8X15rY5mYwM82
-lq6CVnATM43yAHqzUMcVrVYbqxpvJ6ThZdoiTBEyAiMw+HxjTcY7X1tVN4IpDXT/
-SUwQJWBLP+gGH0dnOCbfxJLYxJrIveYfuVIucPchSENr9UAHx/0VUYBUxsh0FKlW
-va201NqjHbTEkXMKPR5x4Jfi1HmNAEKniiiiLEmUPyPmZnVCiGblmBSwjXbTgDJg
-6QUYZf/ITTvqs9F3G3/Rmcm1WHLqSdQxaCgtBDxJmfA6dBGRDoJGhMdUfAubGmTq
-45zUwrmQ6A4sgosq4dEDMnc=
+ABzHo4q/kjfa73lfU2D1zpCcUU4gYUzCv4ya7SrHqj/Em7Mo238slRg00MANmFAk
+0DHePrXKXy80RDxcJNOoSNFSaHQg9Pl/i0CAtLbHpZVMZOFrIEhXKVhwoRY6t/Ve
+JcV3lhAcZwOV/NDQQs4mWqBvQMSDMJY29bmeFyA7pZafSc+bn4ZevhMXG35UDwIB
+aLf7SYFIWbzq0/tHSWVovS6XDE/2PDR3BxaLaGbUqGgJV0BtXb/Se5TjpnO+czAT
+6UdxJRd6eMp+72ispS2AYFZ+PYnVdj9frH+VZbA081Cc6NPyIxRQPQ3+OnOn9ROP
+crs4BKLSbvrDufi8XUruwDQ=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d4:fa:c0:4f:fa:75:57:2e:07:a4:26:6d:43:48:
-                    a2:47:06:03:dd:a3:f2:10:d1:66:21:4f:fa:28:42:
-                    b9:4f:c1:f5:4c:fa:dc:ad:92:30:50:2a:ce:ac:db:
-                    05:cd:c2:19:26:b8:de:46:0e:ec:14:9b:27:92:71:
-                    bd:e9:a5:28:55:eb:27:71:dc:ff:d7:2b:ea:ed:f0:
-                    5b:e3:38:bc:35:f8:7b:ec:5d:ba:67:8d:d8:8a:95:
-                    bb:a2:01:32:3e:a6:d2:d3:a2:c7:70:f5:7c:fb:53:
-                    6f:b8:11:48:af:0c:a0:60:87:98:43:87:ff:d2:c2:
-                    18:b5:50:67:18:ee:06:8f:80:ff:4b:02:c6:c3:01:
-                    34:e2:7e:fa:60:62:23:2c:8a:68:ae:5a:0f:ad:1a:
-                    52:1f:7f:58:ae:9a:50:6e:fb:c7:53:1a:b6:b7:92:
-                    5d:ba:65:53:4c:73:b4:ed:c5:b5:b4:3a:f6:cb:79:
-                    b3:87:f9:69:ac:29:e5:e4:bb:54:89:bf:45:bf:0c:
-                    b9:83:6c:31:3e:a5:6e:7d:50:f1:68:f8:3d:ca:c2:
-                    3f:9f:5c:61:35:21:bc:6a:a2:77:2c:53:22:71:2e:
-                    96:70:f9:c2:c3:f6:3a:8c:3a:a4:00:f9:55:d4:01:
-                    6e:be:fc:f9:9a:2b:78:7e:3c:25:e9:09:87:47:5e:
-                    a5:4d
+                    00:b6:a5:77:05:c8:3c:ec:e8:01:e4:a7:d9:ea:ae:
+                    3a:b2:0f:ba:09:36:36:9e:e1:20:68:4c:c3:35:48:
+                    92:ff:a1:3d:0b:0f:ba:57:dd:8a:fe:a3:6c:24:5a:
+                    4d:45:64:fe:c7:6d:60:7b:eb:6a:69:f3:24:a4:4c:
+                    43:34:2b:c8:f5:dd:f8:50:bb:3e:3a:71:d7:d4:7a:
+                    63:43:46:c3:0d:54:0f:ba:0d:d4:47:b6:25:98:13:
+                    84:c5:6a:cd:1b:57:57:6c:c1:f6:08:e8:77:e7:71:
+                    5e:c3:76:56:18:7a:78:fa:e1:c9:89:17:f8:3d:c4:
+                    d7:55:c0:85:5b:32:ee:db:a8:08:b2:31:87:b3:cd:
+                    dd:c4:e2:06:17:39:5c:9c:45:74:c8:ce:4d:58:37:
+                    de:f1:8a:a5:c9:8d:21:45:69:9c:46:3e:bf:f8:68:
+                    69:20:fa:e4:14:ca:2f:94:da:ad:30:de:69:35:43:
+                    32:9e:6d:b3:d9:e9:a3:21:41:75:f0:26:19:84:32:
+                    33:21:c6:05:b5:6b:39:2f:3c:f9:1f:ec:52:8b:9d:
+                    29:8d:c7:94:de:a3:0e:72:2b:92:e9:9d:aa:21:33:
+                    d1:34:e9:4d:1d:82:4e:b0:2e:9f:c6:65:be:b6:7f:
+                    f1:57:92:e5:f3:b0:ef:52:74:04:28:a2:c1:16:f4:
+                    53:f7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                63:A2:D5:4E:83:BA:38:5F:50:C5:93:E5:5C:93:9D:DE:55:08:73:A9
+                EA:EB:56:0E:30:42:FC:D3:45:B9:0B:D8:88:4C:F0:E9:B8:D6:F4:3C
             X509v3 Authority Key Identifier: 
-                keyid:F9:8A:EA:DF:3D:59:DD:70:5F:B5:B8:D5:24:99:76:02:DC:6E:30:8F
+                keyid:58:23:6F:FD:7A:05:9C:E1:4D:0D:C5:7D:77:B3:D7:75:B1:11:F8:E1
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/ShadowRoot.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         ce:fc:9e:82:80:f8:42:20:0d:93:e5:35:7d:8b:44:89:7b:dd:
-         a6:2b:dd:69:ee:16:da:2c:98:76:31:ae:7e:b3:c2:30:e5:9d:
-         6b:be:11:48:70:d8:bd:d6:01:22:93:c7:14:da:0f:46:2f:98:
-         e7:b1:0b:33:10:75:77:3e:3a:e4:ba:ee:10:98:bd:b3:0a:34:
-         f7:85:09:d2:73:d4:7f:61:e1:5d:e4:eb:d6:7b:c6:f3:a9:a0:
-         4d:15:46:f9:de:c5:31:10:5b:87:c4:58:99:51:64:7e:0b:31:
-         22:73:ca:54:34:bd:e6:30:44:0a:59:01:ba:1a:7a:e6:83:76:
-         3c:5e:8b:d4:06:72:b6:a8:62:07:eb:01:97:02:2d:69:95:4a:
-         2b:77:27:a3:30:e5:22:7d:96:81:c9:ba:90:22:f4:fe:6c:bc:
-         a2:eb:96:81:4c:1a:83:4f:af:9e:21:77:5e:68:87:f3:eb:f8:
-         10:7d:38:00:9b:83:0c:2d:9f:7f:b8:93:23:c4:f4:b2:77:c7:
-         cf:1d:bb:12:e4:30:f3:bb:5c:ec:82:1c:47:bf:31:93:93:b2:
-         a0:6f:f8:d2:ec:67:7e:95:4e:f5:eb:d4:64:c5:32:2c:0f:b4:
-         6c:e4:64:ef:b5:a5:07:cf:f8:b2:f1:c9:67:10:e6:1a:0d:a3:
-         9c:44:65:6e
+         87:93:6b:06:54:ca:38:9a:c9:34:e0:7a:50:cb:4e:1a:c2:43:
+         21:02:48:fb:c1:2e:79:1c:75:06:c4:bf:c7:6d:a5:69:1b:42:
+         ba:b8:7e:03:24:42:0c:81:e7:e0:77:32:82:81:df:d8:64:7d:
+         0a:57:33:44:b1:e6:b9:c8:68:f8:11:bb:45:e6:42:85:27:d4:
+         09:78:7e:86:a3:8b:10:16:0c:3c:e7:1e:50:33:38:47:28:37:
+         ef:35:d9:66:c8:bd:f4:4f:de:13:79:f6:a2:b3:73:6e:3b:88:
+         14:d4:a9:0c:91:72:85:a3:3b:ab:ff:7a:87:26:51:69:8f:fe:
+         fe:53:44:42:22:e0:2e:74:25:22:f2:07:b5:50:27:a5:68:6a:
+         26:16:4a:4c:7f:bd:e4:2e:1e:0d:ea:a8:f3:de:99:cf:3a:99:
+         b4:48:34:2c:e7:cc:c4:1c:28:1e:65:22:33:8c:2d:7f:fd:94:
+         99:f2:3e:08:e0:96:e0:22:ce:2c:f3:e3:06:ee:2e:8b:0f:6e:
+         b9:ae:76:15:5d:1c:66:7f:f8:16:25:80:09:c6:b4:fb:cc:bc:
+         9a:96:03:57:b4:fd:4f:e8:40:2d:46:74:84:f9:47:9e:7b:5b:
+         22:1c:5e:43:53:56:c9:84:da:29:e8:f9:b6:72:3f:dc:a3:12:
+         b2:34:56:4d
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDdzCCAl+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApTaGFk
 b3dSb290MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UE
-AwwEUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANT6wE/6dVcu
-B6QmbUNIokcGA92j8hDRZiFP+ihCuU/B9Uz63K2SMFAqzqzbBc3CGSa43kYO7BSb
-J5JxvemlKFXrJ3Hc/9cr6u3wW+M4vDX4e+xdumeN2IqVu6IBMj6m0tOix3D1fPtT
-b7gRSK8MoGCHmEOH/9LCGLVQZxjuBo+A/0sCxsMBNOJ++mBiIyyKaK5aD60aUh9/
-WK6aUG77x1MatreSXbplU0xztO3FtbQ69st5s4f5aawp5eS7VIm/Rb8MuYNsMT6l
-bn1Q8Wj4PcrCP59cYTUhvGqidyxTInEulnD5wsP2Oow6pAD5VdQBbr78+ZoreH48
-JekJh0depU0CAwEAAaOB1zCB1DAdBgNVHQ4EFgQUY6LVToO6OF9QxZPlXJOd3lUI
-c6kwHwYDVR0jBBgwFoAU+Yrq3z1Z3XBftbjVJJl2AtxuMI8wPQYIKwYBBQUHAQEE
+AwwEUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALaldwXIPOzo
+AeSn2equOrIPugk2Np7hIGhMwzVIkv+hPQsPulfdiv6jbCRaTUVk/sdtYHvramnz
+JKRMQzQryPXd+FC7Pjpx19R6Y0NGww1UD7oN1Ee2JZgThMVqzRtXV2zB9gjod+dx
+XsN2Vhh6ePrhyYkX+D3E11XAhVsy7tuoCLIxh7PN3cTiBhc5XJxFdMjOTVg33vGK
+pcmNIUVpnEY+v/hoaSD65BTKL5TarTDeaTVDMp5ts9npoyFBdfAmGYQyMyHGBbVr
+OS88+R/sUoudKY3HlN6jDnIrkumdqiEz0TTpTR2CTrAun8ZlvrZ/8VeS5fOw71J0
+BCiiwRb0U/cCAwEAAaOB1zCB1DAdBgNVHQ4EFgQU6utWDjBC/NNFuQvYiEzw6bjW
+9DwwHwYDVR0jBBgwFoAUWCNv/XoFnOFNDcV9d7PXdbER+OEwPQYIKwYBBQUHAQEE
 MTAvMC0GCCsGAQUFBzAChiFodHRwOi8vdXJsLWZvci1haWEvU2hhZG93Um9vdC5j
 ZXIwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL3VybC1mb3ItY3JsL1NoYWRvd1Jv
 b3QuY3JsMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBCwUAA4IBAQDO/J6CgPhCIA2T5TV9i0SJe92mK91p7hbaLJh2Ma5+s8Iw5Z1r
-vhFIcNi91gEik8cU2g9GL5jnsQszEHV3Pjrkuu4QmL2zCjT3hQnSc9R/YeFd5OvW
-e8bzqaBNFUb53sUxEFuHxFiZUWR+CzEic8pUNL3mMEQKWQG6Gnrmg3Y8XovUBnK2
-qGIH6wGXAi1plUordyejMOUifZaBybqQIvT+bLyi65aBTBqDT6+eIXdeaIfz6/gQ
-fTgAm4MMLZ9/uJMjxPSyd8fPHbsS5DDzu1zsghxHvzGTk7Kgb/jS7Gd+lU7169Rk
-xTIsD7Rs5GTvtaUHz/iy8clnEOYaDaOcRGVu
+DQEBCwUAA4IBAQCHk2sGVMo4msk04HpQy04awkMhAkj7wS55HHUGxL/HbaVpG0K6
+uH4DJEIMgefgdzKCgd/YZH0KVzNEsea5yGj4EbtF5kKFJ9QJeH6Go4sQFgw85x5Q
+MzhHKDfvNdlmyL30T94Tefais3NuO4gU1KkMkXKFozur/3qHJlFpj/7+U0RCIuAu
+dCUi8ge1UCelaGomFkpMf73kLh4N6qjz3pnPOpm0SDQs58zEHCgeZSIzjC1//ZSZ
+8j4I4JbgIs4s8+MG7i6LD265rnYVXRxmf/gWJYAJxrT7zLyalgNXtP1P6EAtRnSE
++Ueee1siHF5DU1bJhNop6Pm2cj/coxKyNFZN
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,3 +281,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/rebase-errors.py b/net/data/verify_certificate_chain_unittest/rebase-errors.py
index 9237575..8640e18 100755
--- a/net/data/verify_certificate_chain_unittest/rebase-errors.py
+++ b/net/data/verify_certificate_chain_unittest/rebase-errors.py
@@ -33,7 +33,7 @@
 #  * Group 2 of the match is file path (relative to //src) where the expected
 #    errors were read from.
 failed_test_regex = re.compile(r"""
-Value of: errors.ToDebugString\((?:chain)?\)
+Value of: errors.ToDebugString\((?:test.chain)?\)
   Actual: "(.*)"
 (?:.|\n)+?
 Test file: (.*)
diff --git a/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem b/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem
index 5fbfbccb9..46a1f9b3 100644
--- a/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem
+++ b/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:99:a4:c0:d4:dd:a9:aa:60:8b:ae:df:d6:20:ae:
-                    b9:f2:f2:ae:44:0e:1f:13:9c:cc:bb:03:81:36:91:
-                    75:72:b4:f8:36:61:2b:7d:70:a9:da:e5:35:7e:e5:
-                    39:a6:fa:da:45:37:fd:77:04:af:21:c3:43:c4:15:
-                    9e:07:a1:4e:19:04:66:e7:bf:ae:76:b1:95:8a:9b:
-                    b8:79:12:b7:ca:d3:ec:72:16:4b:47:08:89:1f:d5:
-                    5d:cf:e2:a6:1e:c3:c9:28:54:41:f6:68:e4:01:a9:
-                    df:4a:f1:ab:d5:45:26:1a:4e:f9:f7:11:1e:c2:43:
-                    52:d9:2e:95:52:35:71:dc:6a:eb:56:ee:81:73:6a:
-                    86:5b:bd:4f:a6:8f:4b:b3:4e:35:06:d5:35:8a:aa:
-                    d5:f7:bd:6a:e1:79:6a:61:37:dc:a8:06:d9:5a:31:
-                    ea:3b:2e:8c:8f:de:1e:47:02:c7:ca:27:00:b9:49:
-                    7b:29:c4:f4:82:f2:bc:58:52:bb:f2:36:1c:10:4f:
-                    a7:93:fa:46:d0:92:80:15:e7:b9:da:1d:70:21:2b:
-                    9c:47:9c:17:5a:26:2d:94:8a:ce:ae:ba:ac:cb:31:
-                    96:a9:e8:9e:51:73:4f:8c:bf:8c:57:d8:c8:61:0e:
-                    c0:45:09:e4:56:a0:47:f9:df:97:af:9c:76:63:54:
-                    c6:9b
+                    00:ab:d6:f2:11:cf:09:be:ed:79:b0:d0:72:db:88:
+                    4e:d1:b4:17:e0:3a:01:ea:42:9f:a8:53:87:96:30:
+                    df:64:be:82:ef:ec:06:45:d9:e0:9d:9f:56:3d:b9:
+                    a2:bd:48:5e:c2:85:0b:41:2c:6c:8c:c2:f6:16:b0:
+                    0a:ff:f8:89:8f:75:72:90:90:c2:59:58:ea:c7:89:
+                    64:2d:0a:bc:24:8b:2e:de:0e:63:53:6a:fb:90:09:
+                    fc:a6:59:0f:48:39:52:21:98:70:da:20:f8:81:f0:
+                    c0:13:f2:b0:0a:40:be:6c:ec:ec:8a:d6:e5:5c:ce:
+                    b2:f9:bf:02:7e:be:07:ff:b4:da:ef:24:af:a0:1d:
+                    e4:bb:5f:cc:2f:e5:81:d0:63:e5:2f:2a:c3:a2:fb:
+                    86:a6:4b:e9:86:8b:5a:37:7c:a8:ba:7a:cd:13:dd:
+                    db:fb:e9:e4:fa:64:38:4f:a7:65:85:21:b8:dc:6c:
+                    f3:d2:43:bf:0f:fd:46:87:e4:7d:34:99:ec:ce:86:
+                    7a:49:f3:6b:c9:ba:ed:02:86:ff:b0:15:1e:d3:b2:
+                    d0:7b:b0:0c:b9:88:ba:24:c2:bd:21:bb:ce:43:7b:
+                    1b:b2:df:a1:72:6b:d5:62:bf:79:89:21:c1:65:1d:
+                    6c:6b:a2:43:21:08:67:2f:ca:96:96:02:b0:66:77:
+                    f3:23
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                05:BE:F6:16:F8:E7:6A:1B:E6:6D:6D:5A:A4:AF:01:89:8B:98:88:E3
+                16:59:9F:7A:88:28:97:0E:C5:B2:2C:7F:4C:A2:FC:23:C4:3F:AD:47
             X509v3 Authority Key Identifier: 
-                keyid:6E:35:75:BC:3A:85:BC:B6:F7:B8:01:75:BD:9E:A8:36:8D:1E:C7:D9
+                keyid:FD:99:CF:DC:B9:A6:39:F7:33:FC:A3:D6:1F:F5:5B:4E:6A:69:62:E7
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         a4:7d:30:26:06:98:4b:33:c7:b7:84:04:cb:1b:1f:29:1c:b4:
-         44:6e:6f:b2:5e:40:ce:e9:5d:e5:3d:ed:5c:a4:34:67:08:c0:
-         10:55:f3:c8:90:43:65:d9:fc:b9:64:43:1a:fc:cb:6c:3f:fc:
-         2a:48:87:60:6b:95:a6:4f:d6:6f:ac:e3:39:19:54:5d:96:6b:
-         80:15:db:e3:9f:84:90:4d:23:b1:74:f2:f8:d1:4e:8e:6b:05:
-         2c:28:94:05:03:90:04:98:08:e3:73:34:b6:05:1e:8e:b0:52:
-         33:cf:41:ff:99:cd:26:70:12:b1:0a:5c:c7:ed:d3:87:be:fa:
-         f1:24:34:42:22:35:a0:e5:7c:ef:18:b8:61:ce:a1:0a:99:7a:
-         2d:3f:b9:48:36:a2:3c:5e:70:e4:36:32:a2:9d:1d:3a:37:fa:
-         bf:e4:b4:89:0d:48:e7:9d:f5:9f:48:13:ec:6a:8b:e6:b3:3f:
-         23:f7:94:b1:2d:cf:b4:26:f4:1b:b5:01:3b:92:bb:63:4e:d6:
-         ee:ed:c0:2e:77:53:5b:3e:a5:8c:c6:b9:40:67:bb:cd:67:65:
-         6b:41:46:7e:90:f9:2a:a7:5f:09:92:37:13:23:19:2d:66:cb:
-         73:7e:a3:42:dd:da:ed:f6:08:8a:8a:97:ef:4b:f7:5d:22:81:
-         82:95:87:7c
+         61:b6:09:72:f2:1a:e9:29:93:bd:df:88:02:a5:5f:f5:63:43:
+         7e:17:da:da:eb:55:f5:b8:9f:03:d8:37:18:9f:98:1f:a7:26:
+         92:cf:f5:39:6b:b6:b2:ce:ba:4f:67:a1:5e:02:07:0b:8b:95:
+         59:49:63:a1:7e:ff:c5:e2:83:5d:e5:c0:a9:e6:1e:7e:09:ce:
+         8d:2d:00:82:58:d6:2e:31:5c:7f:29:b3:a4:5e:d9:e9:a2:a6:
+         2b:df:5a:a3:b5:38:cb:42:d9:ca:24:f3:0e:17:85:62:88:53:
+         c0:d1:82:f1:e0:7b:78:29:93:d7:3a:3a:56:b4:91:98:4b:8f:
+         7f:33:08:65:e5:2e:8e:52:a2:ab:8f:3a:ff:59:0e:47:cb:e1:
+         27:b4:c8:74:c9:69:ab:9a:f5:8a:b0:a4:7d:cd:79:51:83:fb:
+         2b:fa:1f:a1:e6:a3:f2:13:90:11:5a:25:5b:6e:30:9f:a2:94:
+         60:7e:df:55:0a:42:20:84:fa:ba:ae:5b:1c:74:42:47:8e:f1:
+         c8:bf:2c:07:58:b8:92:50:fd:74:3f:5e:19:ce:b3:9f:3f:dd:
+         75:c3:f3:d6:f0:4b:60:e2:7c:d4:c7:70:14:4c:fd:6a:02:c8:
+         f5:45:f7:d3:c2:c9:d8:be:e7:e7:1b:92:fd:cc:5a:b0:1b:2a:
+         f8:a7:e3:41
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCZpMDU
-3amqYIuu39Ygrrny8q5EDh8TnMy7A4E2kXVytPg2YSt9cKna5TV+5Tmm+tpFN/13
-BK8hw0PEFZ4HoU4ZBGbnv652sZWKm7h5ErfK0+xyFktHCIkf1V3P4qYew8koVEH2
-aOQBqd9K8avVRSYaTvn3ER7CQ1LZLpVSNXHcautW7oFzaoZbvU+mj0uzTjUG1TWK
-qtX3vWrheWphN9yoBtlaMeo7LoyP3h5HAsfKJwC5SXspxPSC8rxYUrvyNhwQT6eT
-+kbQkoAV57naHXAhK5xHnBdaJi2Uis6uuqzLMZap6J5Rc0+Mv4xX2MhhDsBFCeRW
-oEf535evnHZjVMabAgMBAAGjgekwgeYwHQYDVR0OBBYEFAW+9hb452ob5m1tWqSv
-AYmLmIjjMB8GA1UdIwQYMBaAFG41dbw6hby297gBdb2eqDaNHsfZMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCr1vIR
+zwm+7Xmw0HLbiE7RtBfgOgHqQp+oU4eWMN9kvoLv7AZF2eCdn1Y9uaK9SF7ChQtB
+LGyMwvYWsAr/+ImPdXKQkMJZWOrHiWQtCrwkiy7eDmNTavuQCfymWQ9IOVIhmHDa
+IPiB8MAT8rAKQL5s7OyK1uVczrL5vwJ+vgf/tNrvJK+gHeS7X8wv5YHQY+UvKsOi
++4amS+mGi1o3fKi6es0T3dv76eT6ZDhPp2WFIbjcbPPSQ78P/UaH5H00mezOhnpJ
+82vJuu0Chv+wFR7TstB7sAy5iLokwr0hu85Dexuy36Fya9Viv3mJIcFlHWxrokMh
+CGcvypaWArBmd/MjAgMBAAGjgekwgeYwHQYDVR0OBBYEFBZZn3qIKJcOxbIsf0yi
+/CPEP61HMB8GA1UdIwQYMBaAFP2Zz9y5pjn3M/yj1h/1W05qaWLnMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEApH0wJgaYSzPHt4QEyxsf
-KRy0RG5vsl5Azuld5T3tXKQ0ZwjAEFXzyJBDZdn8uWRDGvzLbD/8KkiHYGuVpk/W
-b6zjORlUXZZrgBXb45+EkE0jsXTy+NFOjmsFLCiUBQOQBJgI43M0tgUejrBSM89B
-/5nNJnASsQpcx+3Th7768SQ0QiI1oOV87xi4Yc6hCpl6LT+5SDaiPF5w5DYyop0d
-Ojf6v+S0iQ1I5531n0gT7GqL5rM/I/eUsS3PtCb0G7UBO5K7Y07W7u3ALndTWz6l
-jMa5QGe7zWdla0FGfpD5KqdfCZI3EyMZLWbLc36jQt3a7fYIioqX70v3XSKBgpWH
-fA==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAYbYJcvIa6SmTvd+IAqVf
+9WNDfhfa2utV9bifA9g3GJ+YH6cmks/1OWu2ss66T2ehXgIHC4uVWUljoX7/xeKD
+XeXAqeYefgnOjS0AgljWLjFcfymzpF7Z6aKmK99ao7U4y0LZyiTzDheFYohTwNGC
+8eB7eCmT1zo6VrSRmEuPfzMIZeUujlKiq486/1kOR8vhJ7TIdMlpq5r1irCkfc15
+UYP7K/ofoeaj8hOQEVolW24wn6KUYH7fVQpCIIT6uq5bHHRCR47xyL8sB1i4klD9
+dD9eGc6znz/ddcPz1vBLYOJ81MdwFEz9agLI9UX308LJ2L7n5xuS/cxasBsq+Kfj
+QQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d2:ee:b5:26:40:84:3d:98:ee:bc:3e:62:1a:09:
-                    5e:53:b1:72:28:f6:70:c0:a1:08:65:6f:54:24:4c:
-                    fc:bf:fe:14:25:fa:5d:a5:17:f1:00:64:b3:33:6f:
-                    09:3a:0f:cc:25:87:f6:20:e4:f4:49:f3:5a:5d:a4:
-                    d5:02:e7:db:20:c9:66:b4:cf:44:4d:58:4b:48:13:
-                    7b:83:60:14:28:f7:5a:5b:f8:f5:34:40:81:32:bd:
-                    d2:8c:34:4f:d6:5d:5f:65:dd:74:56:7a:07:7a:82:
-                    c3:0b:42:d5:cb:09:30:76:41:6e:08:28:ad:0c:27:
-                    51:9c:86:e1:fe:e8:85:68:aa:59:d0:f8:39:c2:59:
-                    6e:95:90:de:c9:f8:df:77:5e:56:3f:d5:9d:f8:09:
-                    29:ed:7c:cc:92:e7:c3:40:27:76:fc:08:4f:ae:98:
-                    c9:7c:95:43:05:cc:1f:f5:b2:0b:51:ec:09:cd:22:
-                    3d:7e:e4:5a:b9:4f:86:62:76:d7:c0:42:23:bb:97:
-                    e1:b3:ae:af:9d:56:89:00:68:01:b0:cb:11:cc:f4:
-                    ea:cd:1e:7d:32:81:d9:93:20:00:22:ed:31:78:3c:
-                    62:de:73:3f:1d:38:17:4e:04:a2:58:45:36:26:95:
-                    93:ab:36:f1:54:01:81:b1:c2:70:f5:06:17:47:40:
-                    0e:fb
+                    00:c2:39:8e:c5:e5:05:17:ac:b8:b7:d1:f5:91:ec:
+                    59:62:15:67:d4:d2:4c:e8:32:9b:99:b0:28:11:44:
+                    68:ef:35:96:63:9c:f7:f8:f2:7f:0e:15:a9:d3:bf:
+                    34:9f:37:95:b8:59:90:53:0b:62:36:11:ac:08:cd:
+                    0f:67:1f:62:91:c2:9b:5c:7e:3e:eb:83:e3:5d:27:
+                    ed:11:f2:92:0b:4a:1d:96:4c:12:7c:8c:c0:b2:ed:
+                    6e:46:b2:e8:c2:0d:a6:33:b2:7f:46:9c:fc:e7:b0:
+                    34:80:45:c5:0d:f0:88:82:af:7f:3b:a1:e7:f7:98:
+                    3b:f6:69:d3:b7:47:8b:99:bb:21:ab:d4:1c:37:62:
+                    35:06:5f:dc:58:5d:f0:f3:01:b1:e9:e1:75:f1:3f:
+                    5c:6a:d3:b1:16:f2:d0:5d:25:10:fc:89:48:a8:a1:
+                    ce:ce:3a:97:28:0b:76:e6:8d:84:8b:0c:13:44:27:
+                    61:05:c3:35:ec:06:1e:7e:2e:e0:e8:17:4b:2d:02:
+                    2e:2d:45:ce:ff:8c:c0:6e:8e:7e:ef:d6:7a:e0:9c:
+                    8e:54:99:15:65:af:fa:a9:ce:e8:1c:ef:59:78:eb:
+                    9f:a4:c4:cb:5c:5d:31:0e:79:8f:ee:df:bf:20:9c:
+                    f3:6d:1a:8f:2b:70:ed:64:03:c8:6a:17:74:44:98:
+                    6b:8d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                6E:35:75:BC:3A:85:BC:B6:F7:B8:01:75:BD:9E:A8:36:8D:1E:C7:D9
+                FD:99:CF:DC:B9:A6:39:F7:33:FC:A3:D6:1F:F5:5B:4E:6A:69:62:E7
             X509v3 Authority Key Identifier: 
-                keyid:4F:DE:F3:E5:5E:F5:98:0D:CA:3A:20:2B:E9:C8:B4:5D:D0:1D:86:BF
+                keyid:36:71:80:E6:BA:70:6D:BD:44:11:75:BE:9D:91:C8:E5:6A:86:DB:F5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         10:e4:01:2e:8b:a4:ea:e0:cc:ac:c2:57:68:b7:97:98:e2:57:
-         d6:ff:e2:70:d9:de:bd:7e:44:59:da:3c:cc:1e:62:5d:a8:77:
-         70:b5:fc:4c:21:50:b1:5f:4d:d8:dc:18:bf:d7:1e:40:fa:11:
-         8e:40:e6:b8:38:87:a3:10:ed:97:93:ae:a6:7f:6c:cf:75:43:
-         e1:88:b9:84:b3:f3:73:05:fb:24:de:2b:f1:20:65:3f:70:25:
-         87:4d:e0:66:73:ca:29:52:60:88:e9:e3:5f:cc:2b:83:1c:b3:
-         8c:4d:12:7b:35:70:fd:d1:1a:08:85:94:77:39:3c:b0:c5:d7:
-         7e:a5:71:f3:ca:a7:98:30:69:62:f6:96:d4:f9:30:07:aa:56:
-         da:ba:16:fc:1b:57:24:a0:f1:84:e2:4a:a2:97:a4:a1:82:05:
-         1a:02:c7:41:2f:98:c8:e5:27:b4:85:98:72:d0:a0:e1:b5:c1:
-         57:ab:aa:6b:71:79:d0:4d:91:68:18:25:f8:b4:b7:cb:1d:0c:
-         74:6a:77:66:48:3f:24:b0:92:d9:22:6f:6e:54:b7:f8:8c:21:
-         57:0e:a9:cc:52:ff:56:2e:42:fa:08:2e:fe:29:3c:f1:86:8b:
-         74:88:68:82:3f:16:2d:06:12:57:a6:e2:b1:b7:1b:5d:3a:a1:
-         75:c7:24:d7
+         28:62:d2:74:c7:a9:05:0d:f3:89:d9:43:7b:f4:85:32:19:73:
+         47:df:c6:d5:6f:44:e6:9e:0c:b3:c2:5b:90:68:48:7e:d2:30:
+         2e:53:23:5f:e4:cc:4c:92:5e:b0:51:95:47:69:0f:41:c7:21:
+         f3:8c:96:2b:1b:ab:1f:04:f8:d1:5c:65:5f:e2:d5:31:2a:ff:
+         74:82:c3:f5:59:04:e7:76:65:dc:df:e5:77:98:5e:cc:81:65:
+         ac:21:aa:2b:c7:95:2c:1e:bf:aa:17:92:2a:38:a5:d5:b3:8b:
+         41:60:78:1b:cf:a3:43:22:e6:3e:15:47:04:d3:1a:0b:26:b4:
+         78:15:5f:df:ec:62:ac:24:4f:3d:3f:a7:59:a5:46:82:2d:30:
+         91:23:23:47:fd:ba:6e:de:b8:0c:f0:34:d8:34:63:8a:a4:0c:
+         c9:fa:3a:bc:38:99:cf:ad:ed:17:87:b1:b4:fa:c8:ed:55:cb:
+         f4:46:35:4a:62:d1:32:bc:c3:3b:4d:53:29:2e:88:48:ec:59:
+         46:c4:d3:4f:0f:11:13:ba:ee:c9:89:78:95:70:18:8c:30:6f:
+         f4:03:dc:00:a7:79:0e:6e:a4:a1:99:fa:73:fb:90:5f:bd:1c:
+         b8:9d:25:36:02:82:03:b9:ca:90:6e:9d:ce:0f:6e:00:3f:c0:
+         32:3d:50:f4
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0u61JkCE
-PZjuvD5iGgleU7FyKPZwwKEIZW9UJEz8v/4UJfpdpRfxAGSzM28JOg/MJYf2IOT0
-SfNaXaTVAufbIMlmtM9ETVhLSBN7g2AUKPdaW/j1NECBMr3SjDRP1l1fZd10VnoH
-eoLDC0LVywkwdkFuCCitDCdRnIbh/uiFaKpZ0Pg5wllulZDeyfjfd15WP9Wd+Akp
-7XzMkufDQCd2/AhPrpjJfJVDBcwf9bILUewJzSI9fuRauU+GYnbXwEIju5fhs66v
-nVaJAGgBsMsRzPTqzR59MoHZkyAAIu0xeDxi3nM/HTgXTgSiWEU2JpWTqzbxVAGB
-scJw9QYXR0AO+wIDAQABo4HLMIHIMB0GA1UdDgQWBBRuNXW8OoW8tve4AXW9nqg2
-jR7H2TAfBgNVHSMEGDAWgBRP3vPlXvWYDco6ICvpyLRd0B2GvzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjmOxeUF
+F6y4t9H1kexZYhVn1NJM6DKbmbAoEURo7zWWY5z3+PJ/DhWp0780nzeVuFmQUwti
+NhGsCM0PZx9ikcKbXH4+64PjXSftEfKSC0odlkwSfIzAsu1uRrLowg2mM7J/Rpz8
+57A0gEXFDfCIgq9/O6Hn95g79mnTt0eLmbshq9QcN2I1Bl/cWF3w8wGx6eF18T9c
+atOxFvLQXSUQ/IlIqKHOzjqXKAt25o2EiwwTRCdhBcM17AYefi7g6BdLLQIuLUXO
+/4zAbo5+79Z64JyOVJkVZa/6qc7oHO9ZeOufpMTLXF0xDnmP7t+/IJzzbRqPK3Dt
+ZAPIahd0RJhrjQIDAQABo4HLMIHIMB0GA1UdDgQWBBT9mc/cuaY59zP8o9Yf9VtO
+amli5zAfBgNVHSMEGDAWgBQ2cYDmunBtvUQRdb6dkcjlaobb9TA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABDkAS6LpOrgzKzCV2i3l5jiV9b/4nDZ3r1+RFnaPMweYl2od3C1/EwhULFfTdjc
-GL/XHkD6EY5A5rg4h6MQ7ZeTrqZ/bM91Q+GIuYSz83MF+yTeK/EgZT9wJYdN4GZz
-yilSYIjp41/MK4Mcs4xNEns1cP3RGgiFlHc5PLDF136lcfPKp5gwaWL2ltT5MAeq
-Vtq6FvwbVySg8YTiSqKXpKGCBRoCx0EvmMjlJ7SFmHLQoOG1wVerqmtxedBNkWgY
-Jfi0t8sdDHRqd2ZIPySwktkib25Ut/iMIVcOqcxS/1YuQvoILv4pPPGGi3SIaII/
-Fi0GElem4rG3G106oXXHJNc=
+AChi0nTHqQUN84nZQ3v0hTIZc0ffxtVvROaeDLPCW5BoSH7SMC5TI1/kzEySXrBR
+lUdpD0HHIfOMlisbqx8E+NFcZV/i1TEq/3SCw/VZBOd2Zdzf5XeYXsyBZawhqivH
+lSwev6oXkio4pdWzi0FgeBvPo0Mi5j4VRwTTGgsmtHgVX9/sYqwkTz0/p1mlRoIt
+MJEjI0f9um7euAzwNNg0Y4qkDMn6Orw4mc+t7ReHsbT6yO1Vy/RGNUpi0TK8wztN
+UykuiEjsWUbE008PERO67smJeJVwGIwwb/QD3ACneQ5upKGZ+nP7kF+9HLidJTYC
+ggO5ypBunc4PbgA/wDI9UPQ=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ba:0d:d2:51:af:0c:48:94:37:cf:ea:83:8f:d6:
-                    39:b5:c9:58:fe:59:5b:e5:61:b6:21:98:86:16:a0:
-                    85:e6:cd:c8:21:81:65:4c:65:97:55:72:76:2f:c6:
-                    0d:25:f8:c8:28:9f:20:d1:56:4c:06:99:ff:6d:0f:
-                    24:d3:92:f1:31:25:5a:13:6c:be:4b:19:6a:65:af:
-                    2f:32:be:a9:0f:f8:9b:6d:6f:10:7c:e9:24:61:4d:
-                    fe:ba:e9:b5:b4:54:5e:82:f7:02:7a:e2:e2:d7:53:
-                    6a:69:f4:9a:41:27:0f:50:dc:64:a1:47:84:53:3f:
-                    f1:38:cd:80:a3:5a:2b:dd:96:81:8a:ea:e3:94:72:
-                    f7:aa:f8:2f:cc:a9:d0:9e:36:9f:56:0c:45:ec:dd:
-                    6a:05:52:85:60:99:d7:94:9f:76:7e:1d:8f:3f:50:
-                    fb:33:bc:ca:f8:10:2e:db:15:b2:49:57:d8:f4:59:
-                    fa:73:3b:03:32:86:a7:f1:46:a1:62:ac:67:10:73:
-                    70:51:07:ff:d2:04:33:d8:7c:e2:a8:ff:8e:53:24:
-                    e8:e4:96:da:fb:d1:ea:2f:9c:a9:b5:8f:c5:50:fb:
-                    90:67:b1:8c:5b:8d:f7:5f:af:da:a4:fa:3c:fb:4f:
-                    05:bf:56:4c:dd:d6:6e:43:54:fd:f4:a0:c9:13:93:
-                    55:07
+                    00:c0:d2:20:95:59:77:a4:3d:24:64:e8:47:fb:b2:
+                    4a:c5:da:b8:22:bd:0e:d2:21:41:09:43:e9:85:da:
+                    07:04:11:c4:7c:7a:27:45:14:21:a2:69:44:10:76:
+                    fc:95:d0:03:57:f4:a7:39:8c:ea:06:ae:1d:fd:c0:
+                    71:6f:49:94:1b:5d:58:de:a7:11:6d:f9:d1:9e:88:
+                    f9:93:ad:93:28:6c:4b:15:62:f0:cf:ff:de:a5:84:
+                    d2:9a:f4:27:76:e6:fa:68:a7:29:c8:11:40:31:5a:
+                    2f:42:f1:65:ca:a9:18:e4:e2:8b:f4:5f:6f:63:81:
+                    46:14:24:81:c6:5e:98:f2:01:93:8b:c5:f9:12:c5:
+                    56:45:b9:85:3b:4d:cf:7b:b0:3f:77:e1:2d:d1:4f:
+                    7a:0b:64:a8:66:bb:a2:89:3f:fc:2f:35:82:64:c7:
+                    1e:97:01:cc:bf:8f:26:dc:6a:7d:d9:b2:e6:63:b7:
+                    d3:49:86:2e:11:08:86:ae:56:e4:79:ec:91:5f:95:
+                    26:d8:57:74:7e:be:be:95:f8:4d:34:31:23:91:76:
+                    b2:2d:77:64:a6:73:d4:33:0b:23:9b:65:89:4e:af:
+                    15:37:3a:10:a8:ff:f5:9c:4c:26:a7:37:a5:6a:ec:
+                    56:cd:de:3a:ce:c8:6b:d6:2e:09:bd:5f:83:bd:87:
+                    22:df
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4F:DE:F3:E5:5E:F5:98:0D:CA:3A:20:2B:E9:C8:B4:5D:D0:1D:86:BF
+                36:71:80:E6:BA:70:6D:BD:44:11:75:BE:9D:91:C8:E5:6A:86:DB:F5
             X509v3 Authority Key Identifier: 
-                keyid:4F:DE:F3:E5:5E:F5:98:0D:CA:3A:20:2B:E9:C8:B4:5D:D0:1D:86:BF
+                keyid:36:71:80:E6:BA:70:6D:BD:44:11:75:BE:9D:91:C8:E5:6A:86:DB:F5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         75:4e:86:e1:25:9e:a8:7b:0e:65:db:bb:ca:49:e3:0c:70:df:
-         07:bd:1a:83:d8:48:e1:b7:0b:39:ed:da:61:a0:98:1d:de:9b:
-         5f:66:a6:33:79:43:46:1b:7d:bf:b4:e4:37:8c:96:5e:89:a8:
-         8f:92:04:0f:c5:e4:0d:81:a3:76:98:c1:b0:b2:70:70:11:f6:
-         8e:34:3a:82:ae:6b:7d:e9:ff:b4:58:85:20:b0:85:fc:86:89:
-         40:08:62:e5:0f:34:83:82:90:da:2a:59:e4:53:53:ee:61:ac:
-         46:51:ab:cb:81:1d:c1:f7:f0:c2:64:55:b9:fd:2a:67:44:3a:
-         6a:af:f9:c2:55:c8:35:e6:8b:3a:d1:06:82:8f:14:ee:f1:11:
-         25:db:a2:98:cc:be:bd:63:21:65:77:6e:6a:f8:d1:7e:a1:c6:
-         df:48:0e:74:0d:e3:03:51:ff:f9:98:92:3c:f8:36:75:90:5e:
-         09:6c:7f:3f:c1:5e:40:03:72:de:ab:ed:6f:bb:fe:f7:9d:14:
-         92:5c:69:13:ba:cf:7a:d8:4b:f1:29:04:6e:bc:5f:c9:8e:52:
-         b6:db:58:41:bb:8d:32:e7:5b:4b:74:bf:4c:8d:ec:07:0b:7d:
-         3c:d6:2f:4d:27:11:31:15:6f:38:0d:ba:2a:53:76:2a:47:e6:
-         32:52:df:ea
+         31:81:95:51:bc:3e:b5:15:21:85:3c:07:d0:95:b1:86:87:e2:
+         70:f1:01:c5:22:2d:7e:16:73:89:db:56:fd:1a:42:f6:5e:ad:
+         fd:1e:ad:8b:01:ae:d9:15:9f:80:c3:d8:62:4a:f9:0d:65:bf:
+         05:00:8a:5c:61:1a:62:8c:a0:f6:9c:72:e1:e6:e9:56:6b:68:
+         1c:74:8c:2d:2e:8f:4f:46:65:15:4c:2e:2b:e4:a0:92:da:27:
+         84:f8:89:54:70:fc:95:ba:52:1d:6b:08:14:55:6b:76:c9:05:
+         59:3e:c4:54:b7:76:79:34:f7:e8:af:01:79:08:96:9f:ec:7e:
+         0a:39:42:b9:e2:90:1f:3b:4c:00:f1:8f:a2:04:68:a3:75:c1:
+         96:9c:9b:6c:68:5b:35:95:d8:d8:a1:dd:dd:96:9b:05:88:ba:
+         31:ac:f6:5b:f0:8f:7f:70:40:8a:1c:68:0e:a5:a6:e6:67:cd:
+         5c:91:2b:e7:c4:5a:f7:f7:f0:20:df:bd:12:92:ae:8b:d3:5f:
+         31:1a:44:44:3f:29:15:39:c0:fd:4e:31:ec:0a:cb:78:a0:02:
+         1b:66:ef:20:d7:ab:cd:19:89:3f:86:24:24:f5:ed:14:5f:40:
+         d4:96:d6:51:38:78:52:6c:42:00:a1:1a:22:7b:25:0d:43:77:
+         0b:1b:d2:76
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoN0lGvDEiUN8/qg4/W
-ObXJWP5ZW+VhtiGYhhaghebNyCGBZUxll1Vydi/GDSX4yCifINFWTAaZ/20PJNOS
-8TElWhNsvksZamWvLzK+qQ/4m21vEHzpJGFN/rrptbRUXoL3Anri4tdTamn0mkEn
-D1DcZKFHhFM/8TjNgKNaK92WgYrq45Ry96r4L8yp0J42n1YMRezdagVShWCZ15Sf
-dn4djz9Q+zO8yvgQLtsVsklX2PRZ+nM7AzKGp/FGoWKsZxBzcFEH/9IEM9h84qj/
-jlMk6OSW2vvR6i+cqbWPxVD7kGexjFuN91+v2qT6PPtPBb9WTN3WbkNU/fSgyROT
-VQcCAwEAAaOByzCByDAdBgNVHQ4EFgQUT97z5V71mA3KOiAr6ci0XdAdhr8wHwYD
-VR0jBBgwFoAUT97z5V71mA3KOiAr6ci0XdAdhr8wNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMDSIJVZd6Q9JGToR/uy
+SsXauCK9DtIhQQlD6YXaBwQRxHx6J0UUIaJpRBB2/JXQA1f0pzmM6gauHf3AcW9J
+lBtdWN6nEW350Z6I+ZOtkyhsSxVi8M//3qWE0pr0J3bm+minKcgRQDFaL0LxZcqp
+GOTii/Rfb2OBRhQkgcZemPIBk4vF+RLFVkW5hTtNz3uwP3fhLdFPegtkqGa7ook/
+/C81gmTHHpcBzL+PJtxqfdmy5mO300mGLhEIhq5W5HnskV+VJthXdH6+vpX4TTQx
+I5F2si13ZKZz1DMLI5tliU6vFTc6EKj/9ZxMJqc3pWrsVs3eOs7Ia9YuCb1fg72H
+It8CAwEAAaOByzCByDAdBgNVHQ4EFgQUNnGA5rpwbb1EEXW+nZHI5WqG2/UwHwYD
+VR0jBBgwFoAUNnGA5rpwbb1EEXW+nZHI5WqG2/UwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB1TobhJZ6o
-ew5l27vKSeMMcN8HvRqD2Ejhtws57dphoJgd3ptfZqYzeUNGG32/tOQ3jJZeiaiP
-kgQPxeQNgaN2mMGwsnBwEfaONDqCrmt96f+0WIUgsIX8holACGLlDzSDgpDaKlnk
-U1PuYaxGUavLgR3B9/DCZFW5/SpnRDpqr/nCVcg15os60QaCjxTu8REl26KYzL69
-YyFld25q+NF+ocbfSA50DeMDUf/5mJI8+DZ1kF4JbH8/wV5AA3Leq+1vu/73nRSS
-XGkTus962EvxKQRuvF/JjlK221hBu40y51tLdL9MjewHC3081i9NJxExFW84Dboq
-U3YqR+YyUt/q
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAxgZVRvD61
+FSGFPAfQlbGGh+Jw8QHFIi1+FnOJ21b9GkL2Xq39Hq2LAa7ZFZ+Aw9hiSvkNZb8F
+AIpcYRpijKD2nHLh5ulWa2gcdIwtLo9PRmUVTC4r5KCS2ieE+IlUcPyVulIdawgU
+VWt2yQVZPsRUt3Z5NPforwF5CJaf7H4KOUK54pAfO0wA8Y+iBGijdcGWnJtsaFs1
+ldjYod3dlpsFiLoxrPZb8I9/cECKHGgOpabmZ81ckSvnxFr39/Ag370Skq6L018x
+GkREPykVOcD9TjHsCst4oAIbZu8g16vNGYk/hiQk9e0UX0DUltZROHhSbEIAoRoi
+eyUNQ3cLG9J2
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -280,3 +280,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem b/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem
index 56de07fa..edd7193 100644
--- a/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem
+++ b/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:aa:e6:1b:b4:96:49:1d:88:99:c3:be:30:44:ed:
-                    2a:6e:80:18:66:5a:66:26:44:14:8f:1a:1d:69:81:
-                    8b:44:fb:ee:76:a1:c6:6d:e1:c1:ad:50:aa:99:a2:
-                    d5:ce:ac:f4:86:04:93:02:d9:33:aa:24:ef:36:ef:
-                    5c:93:9a:69:00:45:95:c3:82:37:67:df:25:3e:ea:
-                    dc:d0:fb:08:7f:89:aa:ad:df:a6:b6:c8:09:a3:74:
-                    dc:17:12:b4:03:7d:7d:86:7d:57:1e:ff:d2:16:f7:
-                    9f:85:79:6e:5c:01:e3:cf:64:9d:55:e1:77:2c:43:
-                    89:30:d1:eb:d0:2e:68:e6:d1:c1:2a:92:58:c8:e2:
-                    9b:95:be:f6:d0:42:2d:38:fe:c8:17:a3:cf:37:76:
-                    af:b1:0e:32:a5:6d:58:c9:de:4b:f4:2f:fa:8c:e4:
-                    9c:c6:1c:88:7c:55:01:4b:48:81:b0:0f:4f:19:f7:
-                    fa:12:e7:9e:27:27:85:47:e6:b8:07:d9:59:a3:9a:
-                    ac:3f:7d:a6:14:16:c8:8b:8d:70:d7:7b:fa:46:d4:
-                    32:fc:50:c7:83:82:e3:18:69:a5:a4:56:df:24:a3:
-                    c5:7d:d5:f3:24:a4:67:22:4c:c8:b6:93:c2:05:fc:
-                    01:1b:ae:9d:a4:76:f4:bb:d6:b6:a9:32:2c:3a:fe:
-                    91:93
+                    00:cd:a3:3d:e1:b1:b2:0a:1c:aa:96:29:01:cd:5a:
+                    89:00:99:56:69:3b:d0:c1:28:b1:d1:52:18:30:21:
+                    d0:28:da:7a:f0:b0:94:cb:0f:8c:ec:5f:d3:7f:45:
+                    6a:db:ea:c8:10:8c:c4:42:3e:d3:7a:0b:50:61:38:
+                    e6:11:c5:c8:ac:d9:8d:da:47:b1:2c:15:79:48:49:
+                    19:d1:5e:31:9d:5f:27:e2:46:a1:0b:01:ce:2b:14:
+                    8a:b1:d4:31:05:be:33:79:12:e7:dc:91:9b:f0:b6:
+                    bf:91:bd:73:f8:75:a2:83:53:1e:94:54:70:32:fa:
+                    35:1a:0a:21:56:aa:a4:f5:db:36:ae:b7:22:07:c5:
+                    43:c5:c9:8e:78:d0:87:5e:29:95:c5:09:76:1b:16:
+                    03:66:b7:7f:20:15:33:e1:1a:10:e5:cf:2c:83:58:
+                    2c:25:76:72:de:30:50:a7:24:89:04:0f:17:ee:e9:
+                    a8:74:67:43:16:89:7c:7f:7f:3d:11:ba:95:bd:69:
+                    51:75:c7:9e:35:c6:c6:16:d9:fb:92:39:9d:c2:c4:
+                    02:09:cc:83:e5:4c:30:58:9b:fd:0b:eb:94:f0:e4:
+                    f5:a0:25:d3:ad:f6:50:86:4a:eb:5b:2f:11:62:7c:
+                    39:ac:35:e1:45:06:10:d6:1c:4a:44:49:7c:df:9b:
+                    6b:73
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                55:B5:67:E4:CD:8D:51:AD:5E:A2:25:B0:94:40:72:52:F4:17:24:4E
+                7A:4D:BD:3C:FF:7D:AB:F5:27:F9:22:43:5F:94:4B:64:19:8C:FC:3D
             X509v3 Authority Key Identifier: 
-                keyid:71:AE:42:1C:8C:C1:FB:35:F7:C0:9F:63:95:A7:7B:4F:9D:8E:D2:7A
+                keyid:1D:C8:D6:28:C1:89:4C:16:F8:7E:CF:73:C3:0B:64:07:BF:A5:1E:78
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         25:e8:87:e7:07:ba:bd:47:c3:dd:5a:3c:29:bc:af:cb:fb:cd:
-         c6:55:e6:9c:7b:cd:0e:8f:1a:0a:e4:cb:06:db:42:44:02:e5:
-         37:6e:1a:a3:7d:23:96:c6:b2:67:cb:5a:1e:71:a1:e3:4f:15:
-         80:7f:a1:0d:59:60:b0:6f:c9:ab:0f:ef:20:d3:c2:45:e0:99:
-         aa:7e:e1:b7:31:dc:4b:b2:16:78:c5:06:27:a8:5e:c5:7b:3b:
-         dc:81:81:0d:eb:31:13:d5:4b:23:2e:4e:2c:86:fd:ce:58:96:
-         b5:cc:33:80:5c:7b:8a:ce:74:97:aa:df:fc:7c:1e:42:7d:12:
-         58:bb:84:0f:2d:30:7c:a9:0c:1e:5c:c4:c6:ce:2b:c0:9d:bb:
-         7d:c2:51:04:5d:70:c3:63:43:59:57:40:e4:69:52:be:72:79:
-         b4:c5:74:51:30:af:9c:30:8e:33:89:be:69:69:4a:01:03:07:
-         d9:df:8b:0c:69:ff:cc:57:45:7c:c6:23:e5:4a:1f:19:94:19:
-         25:9d:eb:87:04:51:06:ba:9c:6b:72:da:2b:05:ef:72:21:e9:
-         95:5e:61:83:6a:7a:b6:30:f8:97:a1:99:dd:12:ea:47:50:ee:
-         26:02:3b:81:94:a8:19:29:a7:ad:b6:7c:28:10:53:09:53:a4:
-         61:74:57:ed
+         b0:14:85:d7:ca:ca:c2:88:ba:d8:44:6b:08:4b:fc:3a:7c:ec:
+         e1:5b:65:84:47:51:71:67:c2:b2:19:a0:5c:88:21:88:e4:e1:
+         82:bc:19:f4:1f:0d:32:0e:e0:98:29:e2:30:1e:25:24:6c:20:
+         ea:75:b6:45:c7:b1:b6:26:5c:fe:fd:da:22:0a:ac:3d:ad:7f:
+         0d:ae:5b:9d:a8:de:72:c6:8a:00:b5:60:85:aa:a2:98:4a:fa:
+         f5:0f:66:17:3b:5e:32:81:b3:ab:20:f1:98:40:62:d3:39:a1:
+         85:cd:a8:f9:57:2f:7e:80:a2:82:b4:5c:8e:c4:41:c2:cb:d7:
+         46:30:9b:ec:7e:09:b4:97:47:a5:5a:65:3d:1a:f7:44:8b:58:
+         ca:4a:55:15:e6:62:96:2f:11:3d:93:00:a0:44:25:2e:75:36:
+         8e:6f:57:3b:a4:7b:4d:a5:07:63:13:bb:6b:52:e9:43:e4:34:
+         31:3f:c1:71:ef:70:02:b5:40:e1:38:7b:80:ef:1b:86:8d:a8:
+         50:3f:87:76:16:38:fb:4d:4c:03:af:8f:45:a9:54:31:a1:a1:
+         1d:8c:f5:e9:ad:5d:de:5c:cf:1d:8c:20:65:b6:c6:b0:f7:71:
+         2f:2b:b5:3d:5c:b3:32:d4:40:91:6a:bf:67:33:3e:d8:90:af:
+         0d:41:43:7d
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCq5hu0
-lkkdiJnDvjBE7SpugBhmWmYmRBSPGh1pgYtE++52ocZt4cGtUKqZotXOrPSGBJMC
-2TOqJO8271yTmmkARZXDgjdn3yU+6tzQ+wh/iaqt36a2yAmjdNwXErQDfX2GfVce
-/9IW95+FeW5cAePPZJ1V4XcsQ4kw0evQLmjm0cEqkljI4puVvvbQQi04/sgXo883
-dq+xDjKlbVjJ3kv0L/qM5JzGHIh8VQFLSIGwD08Z9/oS554nJ4VH5rgH2Vmjmqw/
-faYUFsiLjXDXe/pG1DL8UMeDguMYaaWkVt8ko8V91fMkpGciTMi2k8IF/AEbrp2k
-dvS71rapMiw6/pGTAgMBAAGjgekwgeYwHQYDVR0OBBYEFFW1Z+TNjVGtXqIlsJRA
-clL0FyROMB8GA1UdIwQYMBaAFHGuQhyMwfs198CfY5Wne0+djtJ6MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNoz3h
+sbIKHKqWKQHNWokAmVZpO9DBKLHRUhgwIdAo2nrwsJTLD4zsX9N/RWrb6sgQjMRC
+PtN6C1BhOOYRxcis2Y3aR7EsFXlISRnRXjGdXyfiRqELAc4rFIqx1DEFvjN5Eufc
+kZvwtr+RvXP4daKDUx6UVHAy+jUaCiFWqqT12zautyIHxUPFyY540IdeKZXFCXYb
+FgNmt38gFTPhGhDlzyyDWCwldnLeMFCnJIkEDxfu6ah0Z0MWiXx/fz0RupW9aVF1
+x541xsYW2fuSOZ3CxAIJzIPlTDBYm/0L65Tw5PWgJdOt9lCGSutbLxFifDmsNeFF
+BhDWHEpESXzfm2tzAgMBAAGjgekwgeYwHQYDVR0OBBYEFHpNvTz/fav1J/kiQ1+U
+S2QZjPw9MB8GA1UdIwQYMBaAFB3I1ijBiUwW+H7Pc8MLZAe/pR54MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgKkMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAJeiH5we6vUfD3Vo8Kbyv
-y/vNxlXmnHvNDo8aCuTLBttCRALlN24ao30jlsayZ8taHnGh408VgH+hDVlgsG/J
-qw/vINPCReCZqn7htzHcS7IWeMUGJ6hexXs73IGBDesxE9VLIy5OLIb9zliWtcwz
-gFx7is50l6rf/HweQn0SWLuEDy0wfKkMHlzExs4rwJ27fcJRBF1ww2NDWVdA5GlS
-vnJ5tMV0UTCvnDCOM4m+aWlKAQMH2d+LDGn/zFdFfMYj5UofGZQZJZ3rhwRRBrqc
-a3LaKwXvciHplV5hg2p6tjD4l6GZ3RLqR1DuJgI7gZSoGSmnrbZ8KBBTCVOkYXRX
-7Q==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAsBSF18rKwoi62ERrCEv8
+Onzs4VtlhEdRcWfCshmgXIghiOThgrwZ9B8NMg7gmCniMB4lJGwg6nW2RcextiZc
+/v3aIgqsPa1/Da5bnajecsaKALVghaqimEr69Q9mFzteMoGzqyDxmEBi0zmhhc2o
++VcvfoCigrRcjsRBwsvXRjCb7H4JtJdHpVplPRr3RItYykpVFeZili8RPZMAoEQl
+LnU2jm9XO6R7TaUHYxO7a1LpQ+Q0MT/Bce9wArVA4Th7gO8bho2oUD+HdhY4+01M
+A6+PRalUMaGhHYz16a1d3lzPHYwgZbbGsPdxLyu1PVyzMtRAkWq/ZzM+2JCvDUFD
+fQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c4:8f:d1:37:69:c5:65:2a:c8:df:6e:82:4d:1a:
-                    ea:2c:59:9d:43:07:8b:d1:c3:01:3a:1d:7a:9f:81:
-                    ad:b8:fb:10:35:ae:84:80:07:69:5b:47:eb:af:1c:
-                    7b:43:21:f3:3c:13:8a:3b:62:c0:20:fa:96:06:9b:
-                    50:04:82:05:c2:7a:e3:53:d1:34:ab:2e:94:a9:6b:
-                    5f:6c:a9:66:0d:df:d0:73:79:f0:bd:ac:9c:99:68:
-                    e7:1c:25:6f:c6:68:36:07:99:57:23:17:a8:8e:4e:
-                    8c:b9:41:ef:25:7e:92:3d:08:8a:82:c2:de:fe:a3:
-                    cc:05:ed:b5:8b:b8:2f:09:eb:87:29:4d:55:f1:4e:
-                    ee:3a:91:54:dc:6f:6a:9e:d8:17:2a:3a:46:00:65:
-                    f4:4d:ae:26:35:72:97:06:41:ef:4e:bd:af:83:ec:
-                    9b:e2:96:24:61:2b:88:71:77:a7:e8:cf:2e:3e:79:
-                    5b:a2:33:11:94:aa:e7:65:6b:06:a2:4e:94:c8:d7:
-                    56:0f:cc:12:b9:9c:c1:b5:f6:bf:2a:a0:f8:b1:74:
-                    34:54:0e:cb:f0:87:87:f6:93:3f:f4:5f:10:81:90:
-                    78:51:ae:41:19:6e:c9:89:8c:9d:d9:85:64:18:de:
-                    e5:d6:8c:a8:5a:4b:60:b0:44:5f:7a:1e:f4:d1:5b:
-                    94:97
+                    00:f2:b6:c9:a7:02:57:38:c5:5f:78:1c:51:80:aa:
+                    71:61:a7:55:85:4f:03:7c:19:ce:d5:cb:24:ae:e1:
+                    8f:3e:b9:4a:ad:8e:bd:7f:84:fb:98:ae:08:7c:c6:
+                    6a:69:7c:24:fa:72:ae:90:ea:04:5a:01:3b:4e:f2:
+                    a2:c1:92:0e:ac:f2:0f:11:de:ea:53:94:e2:49:61:
+                    6c:b2:e5:71:0c:cb:47:10:b2:f4:d4:ae:b5:9e:03:
+                    d9:ec:3c:da:9e:f7:ef:4b:69:29:57:52:e7:3c:dc:
+                    8a:97:69:79:16:47:85:38:0e:5d:77:90:ff:59:c7:
+                    4d:a3:4c:6b:3f:31:a9:97:51:00:1e:94:91:86:3d:
+                    45:ba:84:f1:2d:1a:2e:49:0f:5e:fa:de:bf:db:d9:
+                    b7:0e:31:86:04:63:bf:0e:6c:de:8a:78:d9:a1:0c:
+                    9a:6d:3c:5e:00:c3:cf:f6:21:87:b9:d0:28:7c:c6:
+                    c1:3c:ab:60:2d:38:02:84:ad:3d:b6:e1:77:80:b6:
+                    93:d6:8a:30:ca:8f:7c:b8:71:04:af:4c:a8:f8:20:
+                    a2:1e:7b:00:38:e4:8d:fc:ab:67:28:6c:2a:69:b3:
+                    b0:d3:c9:48:2a:b8:ac:eb:13:94:1c:26:2c:ff:8c:
+                    9c:47:94:0d:b7:32:00:1f:70:6e:c9:90:f5:3e:2e:
+                    ed:49
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                71:AE:42:1C:8C:C1:FB:35:F7:C0:9F:63:95:A7:7B:4F:9D:8E:D2:7A
+                1D:C8:D6:28:C1:89:4C:16:F8:7E:CF:73:C3:0B:64:07:BF:A5:1E:78
             X509v3 Authority Key Identifier: 
-                keyid:F7:A4:4C:CA:BB:81:7B:10:63:6B:CC:BC:73:ED:C6:1C:56:55:40:1C
+                keyid:14:AB:FE:3A:B7:AA:66:F4:9F:E4:59:25:44:0F:D3:3A:D6:7B:59:5C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         7b:29:bd:b8:c7:76:7f:09:90:d3:5d:e7:20:9e:f6:a0:bd:dc:
-         a1:cb:7c:c8:c8:17:d5:80:81:79:6a:88:e5:e8:c8:e3:56:37:
-         60:3f:9c:2a:14:86:fe:e0:79:2f:d6:ec:67:51:d4:d8:65:9d:
-         ce:3b:59:b6:42:06:7b:c8:2a:79:7f:40:2f:ed:fb:50:d3:78:
-         9e:99:fe:1d:fe:a1:4f:1d:58:c9:2d:b4:75:72:3f:6a:7a:db:
-         2e:7b:81:3b:00:3f:e4:95:47:63:42:90:fd:25:ba:db:53:0a:
-         01:37:28:78:7d:c6:cf:54:5e:2b:94:88:79:bb:4c:f7:06:e3:
-         7a:be:44:29:c3:2e:17:ea:61:c4:8f:16:f0:b6:e0:60:fe:19:
-         08:48:fd:a8:bf:95:ef:e5:32:1c:cf:e5:59:6b:04:1d:4c:6d:
-         ea:9b:4d:b4:f9:14:c2:00:a3:32:d6:1b:54:00:5a:17:29:8f:
-         85:0c:eb:ed:41:70:6f:52:f8:37:92:ed:2b:ae:8c:b8:e4:51:
-         aa:68:62:12:9b:97:62:1a:5b:27:46:b5:5f:8c:0e:c9:93:15:
-         d7:d8:85:99:67:56:ef:31:4a:55:1f:67:7c:09:fc:03:c9:a0:
-         67:b8:ed:32:d7:c0:0b:bd:b6:47:b9:50:78:f2:0a:ec:1d:bd:
-         d5:e9:06:b3
+         60:93:90:eb:55:18:92:93:6e:e2:6e:e8:6d:93:9b:47:c7:00:
+         9d:25:b9:54:e9:23:41:37:5c:89:0b:18:dd:f5:ce:17:a5:1d:
+         fb:11:7e:e1:cf:b4:e0:27:68:06:14:68:9c:40:68:44:72:00:
+         95:c4:db:10:4d:ca:ad:a2:4a:d2:b0:b8:86:79:33:75:7c:c7:
+         83:68:7b:6f:12:aa:06:3c:3c:82:c4:d6:cd:35:18:9d:24:78:
+         b9:b4:69:67:e8:62:27:ed:ab:2f:b2:2d:26:d2:ad:bf:d6:d6:
+         ef:71:eb:48:46:0d:fd:ee:9e:ad:5f:02:fa:4b:bf:f1:09:c2:
+         6b:8b:8e:4b:ca:a1:52:12:df:24:82:94:cf:da:5c:36:04:d8:
+         3e:f8:e0:c9:6d:f4:03:2f:f1:56:c4:d0:aa:0c:ea:21:32:29:
+         da:09:e0:ac:9d:14:f1:db:53:77:f1:cc:14:09:f7:31:00:7e:
+         86:55:a9:91:dc:c7:bf:ba:5f:2e:b8:22:a4:73:e7:89:1a:ef:
+         9d:58:ac:a4:8c:b1:77:38:2c:0b:b6:70:89:93:bf:5f:b0:17:
+         4f:d7:0f:c7:4f:e7:58:8b:1e:e9:92:40:05:20:fd:05:a8:71:
+         9a:f0:1d:1d:38:96:b3:01:ae:d0:8d:1a:12:9d:33:54:31:79:
+         a7:b1:85:0f
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxI/RN2nF
-ZSrI326CTRrqLFmdQweL0cMBOh16n4GtuPsQNa6EgAdpW0frrxx7QyHzPBOKO2LA
-IPqWBptQBIIFwnrjU9E0qy6UqWtfbKlmDd/Qc3nwvaycmWjnHCVvxmg2B5lXIxeo
-jk6MuUHvJX6SPQiKgsLe/qPMBe21i7gvCeuHKU1V8U7uOpFU3G9qntgXKjpGAGX0
-Ta4mNXKXBkHvTr2vg+yb4pYkYSuIcXen6M8uPnlbojMRlKrnZWsGok6UyNdWD8wS
-uZzBtfa/KqD4sXQ0VA7L8IeH9pM/9F8QgZB4Ua5BGW7JiYyd2YVkGN7l1oyoWktg
-sERfeh700VuUlwIDAQABo4HLMIHIMB0GA1UdDgQWBBRxrkIcjMH7NffAn2OVp3tP
-nY7SejAfBgNVHSMEGDAWgBT3pEzKu4F7EGNrzLxz7cYcVlVAHDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8rbJpwJX
+OMVfeBxRgKpxYadVhU8DfBnO1cskruGPPrlKrY69f4T7mK4IfMZqaXwk+nKukOoE
+WgE7TvKiwZIOrPIPEd7qU5TiSWFssuVxDMtHELL01K61ngPZ7DzanvfvS2kpV1Ln
+PNyKl2l5FkeFOA5dd5D/WcdNo0xrPzGpl1EAHpSRhj1FuoTxLRouSQ9e+t6/29m3
+DjGGBGO/DmzeinjZoQyabTxeAMPP9iGHudAofMbBPKtgLTgChK09tuF3gLaT1oow
+yo98uHEEr0yo+CCiHnsAOOSN/KtnKGwqabOw08lIKris6xOUHCYs/4ycR5QNtzIA
+H3BuyZD1Pi7tSQIDAQABo4HLMIHIMB0GA1UdDgQWBBQdyNYowYlMFvh+z3PDC2QH
+v6UeeDAfBgNVHSMEGDAWgBQUq/46t6pm9J/kWSVED9M61ntZXDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AHspvbjHdn8JkNNd5yCe9qC93KHLfMjIF9WAgXlqiOXoyONWN2A/nCoUhv7geS/W
-7GdR1Nhlnc47WbZCBnvIKnl/QC/t+1DTeJ6Z/h3+oU8dWMkttHVyP2p62y57gTsA
-P+SVR2NCkP0luttTCgE3KHh9xs9UXiuUiHm7TPcG43q+RCnDLhfqYcSPFvC24GD+
-GQhI/ai/le/lMhzP5VlrBB1MbeqbTbT5FMIAozLWG1QAWhcpj4UM6+1BcG9S+DeS
-7SuujLjkUapoYhKbl2IaWydGtV+MDsmTFdfYhZlnVu8xSlUfZ3wJ/APJoGe47TLX
-wAu9tke5UHjyCuwdvdXpBrM=
+AGCTkOtVGJKTbuJu6G2Tm0fHAJ0luVTpI0E3XIkLGN31zhelHfsRfuHPtOAnaAYU
+aJxAaERyAJXE2xBNyq2iStKwuIZ5M3V8x4Noe28SqgY8PILE1s01GJ0keLm0aWfo
+Yiftqy+yLSbSrb/W1u9x60hGDf3unq1fAvpLv/EJwmuLjkvKoVIS3ySClM/aXDYE
+2D744Mlt9AMv8VbE0KoM6iEyKdoJ4KydFPHbU3fxzBQJ9zEAfoZVqZHcx7+6Xy64
+IqRz54ka751YrKSMsXc4LAu2cImTv1+wF0/XD8dP51iLHumSQAUg/QWocZrwHR04
+lrMBrtCNGhKdM1QxeaexhQ8=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cd:6b:8f:1c:b6:4c:54:b3:0d:f7:e0:b8:5a:a6:
-                    d3:cc:0b:63:89:cb:3a:5a:87:3c:39:65:aa:63:32:
-                    79:fe:5c:67:f6:00:8c:32:b6:75:01:2f:7b:45:d3:
-                    a4:53:f4:7a:47:7e:2d:ca:5a:d2:22:eb:22:8c:02:
-                    e3:c1:91:ad:71:f8:67:43:62:8f:f1:60:17:77:ea:
-                    a3:d6:78:64:b2:58:c2:fd:20:e0:a2:06:d5:18:a8:
-                    36:9e:2e:b0:97:20:c7:72:a4:51:0d:d5:f0:f0:1f:
-                    b2:05:8e:82:98:9e:b5:67:dd:55:bb:c1:03:e1:9f:
-                    45:73:74:d7:11:aa:5b:de:c1:5d:5e:f2:29:85:29:
-                    03:e3:14:fa:e8:91:f5:29:a3:8c:c0:78:1c:4c:18:
-                    2b:49:2b:20:31:1e:bf:e1:55:7f:ed:76:25:4d:95:
-                    a5:40:4c:cc:f4:8e:de:85:d3:88:0a:86:27:95:f4:
-                    c8:4b:00:8d:16:b7:33:e9:76:12:aa:85:43:1e:89:
-                    bb:ae:16:f2:f1:26:c4:a7:b9:44:89:76:1b:1a:2c:
-                    34:50:4b:e0:68:bc:f1:fb:be:22:14:b0:2b:67:78:
-                    22:f0:71:07:43:21:a3:24:d7:4e:28:a0:7d:04:16:
-                    b1:a2:d8:35:2a:2b:2e:13:8e:6b:e9:c9:7f:78:7e:
-                    98:df
+                    00:c1:49:cb:88:de:c9:13:63:49:6b:e4:12:db:c5:
+                    2e:d2:00:04:fc:c0:22:3f:24:fe:ed:2d:ce:98:69:
+                    c6:2d:9c:10:87:7a:ab:2b:75:30:50:0f:b9:11:43:
+                    ad:35:a5:d1:f4:ce:fa:9b:cf:53:d7:51:91:b4:68:
+                    7c:6c:66:f4:0b:87:06:7f:48:c2:ed:20:ce:04:42:
+                    ad:d4:05:eb:48:c2:c0:38:4b:d4:a6:a4:7f:f9:6c:
+                    2a:cb:d3:9a:38:a2:c5:80:35:38:53:9a:2a:f6:4d:
+                    0c:04:34:57:ee:03:5b:92:7f:77:af:5a:0c:ae:cf:
+                    44:f7:ce:15:5b:53:b2:4c:dd:54:cc:52:97:44:19:
+                    e2:1a:d7:9d:7d:69:f9:86:6c:1a:da:d5:01:43:33:
+                    1d:8d:4c:9c:6b:60:9d:a8:05:91:3e:e8:09:d0:57:
+                    04:5a:b7:29:f5:bd:af:d8:20:de:ae:28:98:cb:df:
+                    0d:41:89:d1:bf:b3:20:03:3c:8a:66:23:16:bf:10:
+                    af:ba:cc:19:67:42:a7:45:0b:e6:68:13:55:d6:1b:
+                    c5:7b:56:b2:a4:0a:28:eb:f4:1b:9b:6c:67:82:58:
+                    bd:d7:a4:d5:1c:8e:e5:20:44:7d:14:00:52:5c:ea:
+                    b8:ab:a2:00:bc:78:31:e3:09:be:d5:da:c4:fd:9e:
+                    6f:6b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                F7:A4:4C:CA:BB:81:7B:10:63:6B:CC:BC:73:ED:C6:1C:56:55:40:1C
+                14:AB:FE:3A:B7:AA:66:F4:9F:E4:59:25:44:0F:D3:3A:D6:7B:59:5C
             X509v3 Authority Key Identifier: 
-                keyid:F7:A4:4C:CA:BB:81:7B:10:63:6B:CC:BC:73:ED:C6:1C:56:55:40:1C
+                keyid:14:AB:FE:3A:B7:AA:66:F4:9F:E4:59:25:44:0F:D3:3A:D6:7B:59:5C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         50:5f:b0:32:ec:41:85:3d:75:ff:8d:05:17:be:20:98:81:da:
-         48:39:17:20:24:a7:31:cf:63:35:90:29:26:d0:60:29:e1:68:
-         fe:35:fd:6c:61:c0:3a:cd:08:92:9b:cc:ad:73:d4:dd:a5:51:
-         0e:a9:65:04:7d:16:77:8b:b8:b4:9d:fb:c4:7a:4a:ab:8a:9e:
-         d0:70:47:45:74:a4:57:ab:c2:cd:b3:c5:44:6b:7e:3b:78:8f:
-         5b:7f:f0:f7:c3:ef:24:a2:40:fe:c6:71:cd:a8:a6:ac:63:22:
-         57:39:f5:98:c3:91:79:bf:47:6a:0b:c6:b1:61:c6:35:1b:1c:
-         10:cc:e7:bc:20:83:f6:48:26:4a:80:47:e0:22:fa:04:1f:b0:
-         06:9c:54:fa:46:45:9b:d5:20:a2:f0:ee:be:b5:a2:83:92:86:
-         5d:f5:40:f5:32:d0:85:35:eb:af:5d:9b:04:5d:21:b3:35:90:
-         e8:5f:0a:6c:90:85:eb:86:31:e4:89:81:c6:aa:73:4d:1e:3e:
-         af:40:07:f1:38:ae:30:ab:2d:aa:6d:2f:b2:1d:ff:d8:18:2e:
-         f3:d0:74:8e:ff:6d:24:97:30:cb:b6:e5:6f:cb:6b:c2:27:5e:
-         a5:f1:63:c0:d9:0d:c5:08:7f:86:8c:47:c4:9b:cb:e2:d9:da:
-         17:51:5b:12
+         85:11:4e:e7:d7:8d:db:f0:78:1e:04:2e:43:17:0a:f6:24:42:
+         75:ec:e9:59:37:46:3b:ee:f6:1b:8b:d1:62:49:cc:fe:dd:74:
+         ac:78:08:0f:75:12:d3:5f:5b:77:7e:f7:49:09:db:18:d4:c4:
+         4b:9f:d3:ef:6e:7f:ab:a7:02:c9:c4:fa:98:40:cf:37:96:dd:
+         0f:53:5a:23:60:e5:29:3c:0a:74:9d:3d:8b:7b:73:43:0f:c1:
+         fe:25:73:03:a1:15:83:9f:48:fa:7b:78:f9:a2:0d:52:69:17:
+         eb:bb:41:66:64:16:c3:a0:cf:00:ae:4f:45:e0:e4:da:5c:2e:
+         81:8d:41:11:86:f0:57:c3:27:3f:62:af:39:94:85:17:58:66:
+         39:fa:cf:5f:78:af:d2:00:b9:1e:62:42:6f:b6:1f:40:85:c4:
+         1e:30:01:0e:8a:99:49:53:bb:35:b0:83:dc:a9:c7:14:ff:43:
+         f5:2a:da:06:06:70:81:db:b9:39:57:1d:17:37:57:ea:e5:1a:
+         a8:7c:92:73:42:44:02:fb:73:1b:34:ac:ec:65:9e:22:0e:55:
+         1d:61:2c:4c:50:e3:67:76:2d:90:ab:3e:d9:a9:64:dd:f7:53:
+         09:36:a9:a4:56:89:d0:c6:c1:0f:03:07:c7:7f:0e:71:95:02:
+         69:a7:01:73
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1rjxy2TFSzDffguFqm
-08wLY4nLOlqHPDllqmMyef5cZ/YAjDK2dQEve0XTpFP0ekd+Lcpa0iLrIowC48GR
-rXH4Z0Nij/FgF3fqo9Z4ZLJYwv0g4KIG1RioNp4usJcgx3KkUQ3V8PAfsgWOgpie
-tWfdVbvBA+GfRXN01xGqW97BXV7yKYUpA+MU+uiR9SmjjMB4HEwYK0krIDEev+FV
-f+12JU2VpUBMzPSO3oXTiAqGJ5X0yEsAjRa3M+l2EqqFQx6Ju64W8vEmxKe5RIl2
-GxosNFBL4Gi88fu+IhSwK2d4IvBxB0MhoyTXTiigfQQWsaLYNSorLhOOa+nJf3h+
-mN8CAwEAAaOByzCByDAdBgNVHQ4EFgQU96RMyruBexBja8y8c+3GHFZVQBwwHwYD
-VR0jBBgwFoAU96RMyruBexBja8y8c+3GHFZVQBwwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFJy4jeyRNjSWvkEtvF
+LtIABPzAIj8k/u0tzphpxi2cEId6qyt1MFAPuRFDrTWl0fTO+pvPU9dRkbRofGxm
+9AuHBn9Iwu0gzgRCrdQF60jCwDhL1Kakf/lsKsvTmjiixYA1OFOaKvZNDAQ0V+4D
+W5J/d69aDK7PRPfOFVtTskzdVMxSl0QZ4hrXnX1p+YZsGtrVAUMzHY1MnGtgnagF
+kT7oCdBXBFq3KfW9r9gg3q4omMvfDUGJ0b+zIAM8imYjFr8Qr7rMGWdCp0UL5mgT
+VdYbxXtWsqQKKOv0G5tsZ4JYvdek1RyO5SBEfRQAUlzquKuiALx4MeMJvtXaxP2e
+b2sCAwEAAaOByzCByDAdBgNVHQ4EFgQUFKv+OreqZvSf5FklRA/TOtZ7WVwwHwYD
+VR0jBBgwFoAUFKv+OreqZvSf5FklRA/TOtZ7WVwwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBQX7Ay7EGF
-PXX/jQUXviCYgdpIORcgJKcxz2M1kCkm0GAp4Wj+Nf1sYcA6zQiSm8ytc9TdpVEO
-qWUEfRZ3i7i0nfvEekqrip7QcEdFdKRXq8LNs8VEa347eI9bf/D3w+8kokD+xnHN
-qKasYyJXOfWYw5F5v0dqC8axYcY1GxwQzOe8IIP2SCZKgEfgIvoEH7AGnFT6RkWb
-1SCi8O6+taKDkoZd9UD1MtCFNeuvXZsEXSGzNZDoXwpskIXrhjHkiYHGqnNNHj6v
-QAfxOK4wqy2qbS+yHf/YGC7z0HSO/20klzDLtuVvy2vCJ16l8WPA2Q3FCH+GjEfE
-m8vi2doXUVsS
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCFEU7n143b
+8HgeBC5DFwr2JEJ17OlZN0Y77vYbi9FiScz+3XSseAgPdRLTX1t3fvdJCdsY1MRL
+n9Pvbn+rpwLJxPqYQM83lt0PU1ojYOUpPAp0nT2Le3NDD8H+JXMDoRWDn0j6e3j5
+og1SaRfru0FmZBbDoM8Ark9F4OTaXC6BjUERhvBXwyc/Yq85lIUXWGY5+s9feK/S
+ALkeYkJvth9AhcQeMAEOiplJU7s1sIPcqccU/0P1KtoGBnCB27k5Vx0XN1fq5Rqo
+fJJzQkQC+3MbNKzsZZ4iDlUdYSxMUONndi2Qqz7ZqWTd91MJNqmkVonQxsEPAwfH
+fw5xlQJppwFz
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -283,6 +283,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Target certificate looks like a CA but does not set all CA properties
 
diff --git a/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem b/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem
index 1ca13ee39..8906285e 100644
--- a/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem
+++ b/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ca:73:f9:c5:cb:c6:2c:26:07:85:8f:4b:a4:ac:
-                    52:18:84:42:ca:cb:34:59:92:5a:d8:f7:1f:df:51:
-                    ed:6a:d5:e2:e1:dc:06:fb:72:0d:f3:e7:9f:38:0d:
-                    46:f4:19:77:31:33:4c:5b:ac:dd:6c:8c:06:68:4c:
-                    48:84:e2:c7:17:28:a9:0b:4e:07:07:b6:7b:cc:a9:
-                    ef:6c:ae:22:6e:03:d6:d4:5b:f1:d9:aa:9e:61:54:
-                    c7:14:79:cb:d6:c2:8f:da:87:e8:ae:d2:b3:66:4f:
-                    d3:4c:56:b8:e0:80:f8:45:b7:11:35:53:ec:d4:49:
-                    f8:05:70:f3:5b:56:b2:05:6d:3e:46:f8:be:67:71:
-                    48:a6:65:dd:55:62:a3:23:b0:94:e1:f2:3b:17:54:
-                    40:cc:37:90:d9:78:5a:d8:29:99:3f:02:16:a8:5b:
-                    5e:64:f4:f2:84:ad:25:c6:cf:2c:5b:e7:6c:bf:88:
-                    63:0c:8a:9b:fb:d9:b1:30:5a:21:74:1f:e4:5a:54:
-                    23:3a:a1:02:34:97:2c:a2:af:08:05:f0:db:52:58:
-                    7f:86:80:12:a3:f9:78:c0:ad:d6:8b:12:53:72:55:
-                    24:ca:3e:70:f2:7f:78:8f:b7:a1:32:f1:2c:7f:23:
-                    db:7b:ce:79:cf:cc:6d:d8:f7:14:54:5c:e0:db:7d:
-                    60:b3
+                    00:c8:bd:cf:49:54:fa:f7:4c:6b:1d:c4:0e:2a:3d:
+                    4f:ed:1a:80:d5:f9:bc:ea:64:89:fa:c7:c7:39:32:
+                    dd:7a:8f:4b:b8:11:85:9b:ef:bb:8f:71:93:69:59:
+                    e3:b5:5c:69:2f:d9:fa:04:e1:df:31:9e:f8:cc:17:
+                    4e:8b:c4:3d:f5:2f:02:23:c7:4c:e6:31:d5:bd:ef:
+                    06:af:f3:cd:81:f4:5d:f3:b9:0a:bf:7e:71:c0:5a:
+                    ea:9b:46:cf:ff:04:ed:11:a3:6f:6c:c6:84:d7:48:
+                    31:3a:ce:d6:ff:c8:95:7c:db:95:bd:cc:3f:3f:0e:
+                    e9:3b:1c:46:91:c2:3a:cc:5b:31:9b:66:16:4b:ac:
+                    a0:be:8c:98:9b:26:27:4a:50:08:20:d8:01:6e:cc:
+                    83:b0:1f:69:0a:d6:22:80:43:63:25:6b:fb:e3:76:
+                    b6:fd:e0:fc:13:38:6d:5b:3e:93:04:0d:0d:93:20:
+                    a8:d2:01:3c:e6:21:f7:0d:ac:9d:8e:aa:b7:69:fe:
+                    e0:f8:15:98:95:a1:2c:58:35:de:4d:d5:eb:7f:fe:
+                    72:d8:14:18:dc:46:34:5c:4d:42:33:71:ea:39:71:
+                    8b:8b:e4:7f:0f:4d:22:d3:cf:30:ce:d0:cd:3b:fb:
+                    a2:dd:39:0e:bb:71:19:d5:93:2e:9c:2b:d1:d0:2b:
+                    2f:05
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                99:D8:C1:91:A6:13:EB:0F:B4:6F:F2:B0:C4:0C:D9:0A:25:8E:53:10
+                01:F7:E1:07:3C:38:BF:84:61:21:DB:33:07:81:43:0E:50:9C:D5:5C
             X509v3 Authority Key Identifier: 
-                keyid:5B:9F:DF:D5:C6:FF:4F:39:52:EA:EF:97:5B:C1:ED:E1:CC:44:4E:B6
+                keyid:33:20:9D:8B:1C:46:DB:58:8D:CB:59:57:17:C8:F8:9F:35:AB:BE:99
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -58,42 +58,42 @@
             X509v3 Basic Constraints: critical
                 CA:FALSE, pathlen:1
     Signature Algorithm: sha256WithRSAEncryption
-         70:43:96:4c:98:6f:28:18:8a:59:39:82:cc:24:47:f8:58:f8:
-         f8:43:04:09:1e:a6:51:59:bc:60:36:ff:a1:41:51:e1:4c:40:
-         6b:5e:8b:73:3c:c4:37:65:f4:b0:57:01:8f:c6:ba:0c:5b:97:
-         a1:6b:3a:ea:53:79:8f:9a:99:f8:ca:01:a5:15:ac:60:4c:a7:
-         a7:68:07:72:3c:ed:06:70:d8:a4:d0:c0:5f:88:f2:6a:c0:a1:
-         2b:e7:58:68:23:d3:7e:f0:98:99:7d:3d:91:25:e3:84:4f:ef:
-         55:a4:ee:f7:1f:dc:f2:af:a8:74:96:6c:26:c4:d8:b6:84:dc:
-         b7:e7:7d:9d:2b:7b:3b:e6:e4:ad:76:e0:aa:ea:a4:26:97:4b:
-         20:cd:b1:bd:a8:6e:b3:08:47:31:a2:01:7b:b5:6c:72:d0:f0:
-         12:ac:bd:4f:be:de:23:cb:34:14:d2:11:42:3f:d5:70:76:4c:
-         99:db:ce:bc:0e:d5:2e:4b:6f:c3:1b:5d:c6:58:89:74:5f:1d:
-         62:cf:df:1e:4c:13:08:88:cb:66:6f:00:c2:c5:6f:bb:b4:9e:
-         1f:8a:7d:9d:0b:a6:11:6f:28:bb:5e:46:ab:71:d4:eb:00:8c:
-         71:6b:32:85:3d:17:ca:d0:15:90:66:7a:b2:96:0c:c1:9d:2e:
-         53:36:97:5b
+         3e:03:4f:21:11:cc:df:a5:0d:c1:00:85:8f:5b:47:06:b0:e6:
+         58:c3:31:64:93:70:86:5a:a3:d2:f7:24:e6:75:8e:15:cd:f6:
+         7b:46:b1:44:70:06:7c:4d:ef:e6:38:cc:28:d2:c5:9a:36:d2:
+         77:ea:fc:b5:c0:7b:cd:37:ca:99:07:dc:fb:45:f5:42:2f:31:
+         64:99:da:c2:76:d8:43:c2:f5:8d:0b:64:53:bb:bb:4f:73:3b:
+         b8:ac:e3:1e:21:75:99:dc:7c:69:8e:46:a7:38:54:7b:32:98:
+         bd:6a:87:4e:47:47:04:90:ff:02:63:81:1c:14:3b:73:b4:89:
+         ee:20:3e:72:79:68:33:a1:a2:34:be:5f:a4:74:4c:59:ea:e3:
+         2d:b8:f4:f5:f3:57:51:30:86:b5:2e:d6:53:01:04:78:37:1c:
+         23:45:59:95:f5:0f:55:b4:38:6f:1c:82:a7:20:03:c4:b0:5c:
+         bd:df:57:bb:3e:a7:9b:c4:92:b4:58:5a:e7:94:98:69:b9:00:
+         82:93:f2:89:a0:c1:b6:79:6b:0b:f5:81:b7:14:8d:70:1b:ef:
+         a2:a9:6f:ea:ed:a3:76:12:2b:09:7a:c9:0a:b4:8a:42:03:12:
+         df:a7:38:ee:38:10:49:04:d5:e6:6a:59:bf:60:a1:d3:4a:f7:
+         7f:9a:4c:f9
 -----BEGIN CERTIFICATE-----
 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKc/nF
-y8YsJgeFj0ukrFIYhELKyzRZklrY9x/fUe1q1eLh3Ab7cg3z5584DUb0GXcxM0xb
-rN1sjAZoTEiE4scXKKkLTgcHtnvMqe9sriJuA9bUW/HZqp5hVMcUecvWwo/ah+iu
-0rNmT9NMVrjggPhFtxE1U+zUSfgFcPNbVrIFbT5G+L5ncUimZd1VYqMjsJTh8jsX
-VEDMN5DZeFrYKZk/AhaoW15k9PKErSXGzyxb52y/iGMMipv72bEwWiF0H+RaVCM6
-oQI0lyyirwgF8NtSWH+GgBKj+XjArdaLElNyVSTKPnDyf3iPt6Ey8Sx/I9t7znnP
-zG3Y9xRUXODbfWCzAgMBAAGjgfowgfcwHQYDVR0OBBYEFJnYwZGmE+sPtG/ysMQM
-2QoljlMQMB8GA1UdIwQYMBaAFFuf39XG/085Uurvl1vB7eHMRE62MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIvc9J
+VPr3TGsdxA4qPU/tGoDV+bzqZIn6x8c5Mt16j0u4EYWb77uPcZNpWeO1XGkv2foE
+4d8xnvjMF06LxD31LwIjx0zmMdW97wav882B9F3zuQq/fnHAWuqbRs//BO0Ro29s
+xoTXSDE6ztb/yJV825W9zD8/Duk7HEaRwjrMWzGbZhZLrKC+jJibJidKUAgg2AFu
+zIOwH2kK1iKAQ2Mla/vjdrb94PwTOG1bPpMEDQ2TIKjSATzmIfcNrJ2Oqrdp/uD4
+FZiVoSxYNd5N1et//nLYFBjcRjRcTUIzceo5cYuL5H8PTSLTzzDO0M07+6LdOQ67
+cRnVky6cK9HQKy8FAgMBAAGjgfowgfcwHQYDVR0OBBYEFAH34Qc8OL+EYSHbMweB
+Qw5QnNVcMB8GA1UdIwQYMBaAFDMgnYscRttYjctZVxfI+J81q76ZMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
 BwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAgEBMA0GCSqGSIb3DQEBCwUAA4IB
-AQBwQ5ZMmG8oGIpZOYLMJEf4WPj4QwQJHqZRWbxgNv+hQVHhTEBrXotzPMQ3ZfSw
-VwGPxroMW5ehazrqU3mPmpn4ygGlFaxgTKenaAdyPO0GcNik0MBfiPJqwKEr51ho
-I9N+8JiZfT2RJeOET+9VpO73H9zyr6h0lmwmxNi2hNy3532dK3s75uStduCq6qQm
-l0sgzbG9qG6zCEcxogF7tWxy0PASrL1Pvt4jyzQU0hFCP9VwdkyZ2868DtUuS2/D
-G13GWIl0Xx1iz98eTBMIiMtmbwDCxW+7tJ4fin2dC6YRbyi7XkarcdTrAIxxazKF
-PRfK0BWQZnqylgzBnS5TNpdb
+AQA+A08hEczfpQ3BAIWPW0cGsOZYwzFkk3CGWqPS9yTmdY4VzfZ7RrFEcAZ8Te/m
+OMwo0sWaNtJ36vy1wHvNN8qZB9z7RfVCLzFkmdrCdthDwvWNC2RTu7tPczu4rOMe
+IXWZ3HxpjkanOFR7Mpi9aodOR0cEkP8CY4EcFDtztInuID5yeWgzoaI0vl+kdExZ
+6uMtuPT181dRMIa1LtZTAQR4NxwjRVmV9Q9VtDhvHIKnIAPEsFy931e7PqebxJK0
+WFrnlJhpuQCCk/KJoMG2eWsL9YG3FI1wG++iqW/q7aN2EisJeskKtIpCAxLfpzju
+OBBJBNXmalm/YKHTSvd/mkz5
 -----END CERTIFICATE-----
 
 Certificate:
@@ -110,30 +110,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c8:43:a7:fe:04:ff:78:d4:be:60:bd:16:7d:46:
-                    a2:cf:a8:74:42:6b:2b:49:13:61:2e:78:e7:7c:49:
-                    52:0b:df:bf:b0:e1:5e:dd:f5:39:99:11:ff:d2:14:
-                    8f:db:de:10:55:90:29:05:b3:49:db:80:87:d1:82:
-                    6b:15:97:4b:da:5e:d7:da:11:0c:84:1e:db:d9:57:
-                    4d:52:cf:31:a0:1f:bd:4f:79:22:7a:ee:5a:ae:9d:
-                    22:df:71:d3:20:12:e5:c8:7e:1e:76:d3:6f:07:6e:
-                    5c:c3:89:11:a2:35:50:05:4d:6f:30:d8:3c:ef:38:
-                    80:51:e3:ee:7d:66:81:7f:7c:c4:e7:d0:d4:53:1d:
-                    00:3d:03:cb:87:f4:3d:b9:13:cd:16:ef:b2:51:3f:
-                    1c:96:0a:71:90:ca:25:c4:10:71:aa:ba:27:c8:67:
-                    94:af:63:7c:29:2a:2e:a8:4e:03:7e:6c:5c:2f:96:
-                    8d:9d:ca:c5:6f:f1:e7:8d:92:a9:ed:aa:87:3a:74:
-                    12:c7:ea:3f:ad:a2:6a:76:d8:f6:c9:96:27:6e:8b:
-                    a3:b8:cc:d4:2b:9b:61:be:2b:11:c5:bb:da:ef:14:
-                    23:5d:5d:96:69:c0:a7:7a:16:db:3a:4e:e4:22:84:
-                    55:02:26:7b:a5:8e:84:12:e4:36:fc:c5:07:d9:ee:
-                    c5:19
+                    00:b6:71:f4:27:39:eb:53:1f:5a:56:ca:0b:d1:43:
+                    c5:55:d1:c2:7a:28:b8:34:d9:7e:4e:16:01:77:90:
+                    ba:ae:85:ca:22:43:c4:d9:ca:5b:86:87:c0:f5:b6:
+                    c6:41:75:ae:97:3f:f6:4d:24:7d:0c:b4:ac:e7:a0:
+                    89:61:b9:08:c8:81:3d:b3:d1:3a:8c:44:35:fb:b1:
+                    c3:73:89:39:cc:7b:b7:a7:c2:31:cb:12:a0:52:59:
+                    91:0e:c5:83:ad:5a:0c:fa:1c:64:39:e0:ce:b4:cf:
+                    31:db:e0:36:bd:11:88:ae:56:36:e0:fa:70:ba:ad:
+                    53:34:2c:4d:7d:f0:74:f9:7d:82:2c:46:4a:39:1b:
+                    d3:8f:8b:85:b9:3d:53:36:8f:d6:5a:2f:57:bd:e5:
+                    10:76:ec:90:26:79:cd:f2:9f:cb:9d:e5:d7:10:46:
+                    63:f2:b7:58:7f:10:3b:ed:02:9c:2a:dd:38:87:7a:
+                    32:de:d5:9b:96:e2:54:5a:9c:ac:97:07:96:9b:eb:
+                    21:40:96:b4:bf:bb:91:77:db:8d:40:66:2d:81:d1:
+                    90:30:42:86:55:e9:f1:51:bc:ce:9e:27:71:9a:07:
+                    e6:ce:b0:43:82:b9:4e:81:2b:40:79:35:a8:99:80:
+                    27:af:30:e7:85:fb:ba:6c:3a:f5:94:c0:09:85:08:
+                    26:cf
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5B:9F:DF:D5:C6:FF:4F:39:52:EA:EF:97:5B:C1:ED:E1:CC:44:4E:B6
+                33:20:9D:8B:1C:46:DB:58:8D:CB:59:57:17:C8:F8:9F:35:AB:BE:99
             X509v3 Authority Key Identifier: 
-                keyid:8A:85:CE:7E:DC:AF:15:B7:01:C2:5C:81:3F:3D:14:49:D2:38:08:AB
+                keyid:B6:A7:01:A0:0E:41:B3:BB:1A:67:83:71:F1:6A:17:D0:64:9C:68:BF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -148,41 +148,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         14:37:73:58:3c:37:40:b3:ff:a3:e4:f3:2d:f1:26:6b:c9:82:
-         17:c5:97:4d:bd:84:6a:19:25:08:20:a9:7d:38:fb:3d:a4:7f:
-         06:80:7e:fb:6e:7e:bf:26:90:4b:96:ab:a7:f9:49:a5:d6:77:
-         67:b5:ab:bb:ad:ea:84:5a:43:13:f9:b3:1a:80:b1:59:cc:d4:
-         1d:33:e8:0d:b0:af:9a:80:44:0e:a6:01:f3:a4:e2:87:2b:db:
-         47:be:0f:28:08:d9:ab:7c:d9:4c:86:d0:ba:bc:1b:dc:99:9b:
-         33:ea:a7:3e:ef:52:b8:70:a8:27:e7:83:59:cd:57:38:7f:a1:
-         36:53:4f:a0:1b:69:7d:e4:fa:9f:2b:52:50:09:23:62:c6:c0:
-         01:a6:85:76:45:80:6a:b6:54:bd:60:5d:5a:3a:04:92:ab:e3:
-         bd:0c:94:7f:5f:79:9c:3f:6e:12:c3:96:b0:78:44:9b:03:1e:
-         79:11:fb:8d:a5:1d:55:c9:b3:e5:a0:26:18:10:68:92:b8:54:
-         68:d0:2d:e1:99:0c:08:9c:cc:40:50:34:69:9f:13:e6:d7:87:
-         85:e7:57:63:3e:17:0f:ce:02:7b:78:e5:18:ef:1a:55:b1:6a:
-         55:f8:44:3e:92:1d:08:a1:7d:bb:fc:00:be:e3:1b:83:aa:b8:
-         75:f0:05:45
+         cf:16:2a:e7:82:dd:17:0f:54:74:e5:31:4e:d7:d1:52:1f:b2:
+         97:17:4f:f7:0e:68:07:a5:74:93:dc:45:c8:81:60:e9:6a:d8:
+         16:dd:99:65:66:09:48:1c:93:45:8c:ed:48:a3:16:63:50:0c:
+         6c:0f:dc:ad:7a:50:20:05:64:68:fa:70:37:af:7e:0b:88:e5:
+         61:8f:8d:93:88:9e:45:09:95:75:21:42:af:6a:79:40:56:c9:
+         f8:9b:5a:b5:c3:77:44:d5:1b:28:cb:3f:2f:59:84:21:ae:c2:
+         34:25:48:6d:ed:3e:7d:40:9c:eb:bd:3f:3e:5e:34:de:f7:eb:
+         b6:66:26:4e:05:49:00:13:a1:93:ad:fa:5f:8b:77:86:d7:1b:
+         27:da:49:83:b4:3e:df:dc:d0:0d:bb:75:a3:ff:f5:2a:f4:62:
+         f8:da:8a:ab:f0:38:ce:a4:34:f0:9a:9e:2e:de:aa:9a:db:cf:
+         47:ec:ec:12:00:3d:57:bf:d3:17:c6:f9:b4:52:4e:22:45:3f:
+         64:15:c8:f3:ad:74:58:a1:7f:b4:e0:0e:d7:6a:7f:c4:e8:ff:
+         51:5b:b4:e8:81:e7:21:63:cd:57:f1:0d:39:58:ea:17:9e:3e:
+         2e:91:94:c8:df:44:57:77:7e:a5:83:e2:d4:2e:80:42:89:c8:
+         33:37:04:f9
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyEOn/gT/
-eNS+YL0WfUaiz6h0QmsrSRNhLnjnfElSC9+/sOFe3fU5mRH/0hSP294QVZApBbNJ
-24CH0YJrFZdL2l7X2hEMhB7b2VdNUs8xoB+9T3kieu5arp0i33HTIBLlyH4edtNv
-B25cw4kRojVQBU1vMNg87ziAUePufWaBf3zE59DUUx0APQPLh/Q9uRPNFu+yUT8c
-lgpxkMolxBBxqronyGeUr2N8KSouqE4DfmxcL5aNncrFb/HnjZKp7aqHOnQSx+o/
-raJqdtj2yZYnboujuMzUK5thvisRxbva7xQjXV2WacCnehbbOk7kIoRVAiZ7pY6E
-EuQ2/MUH2e7FGQIDAQABo4HLMIHIMB0GA1UdDgQWBBRbn9/Vxv9POVLq75dbwe3h
-zEROtjAfBgNVHSMEGDAWgBSKhc5+3K8VtwHCXIE/PRRJ0jgIqzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtnH0Jznr
+Ux9aVsoL0UPFVdHCeii4NNl+ThYBd5C6roXKIkPE2cpbhofA9bbGQXWulz/2TSR9
+DLSs56CJYbkIyIE9s9E6jEQ1+7HDc4k5zHu3p8IxyxKgUlmRDsWDrVoM+hxkOeDO
+tM8x2+A2vRGIrlY24Ppwuq1TNCxNffB0+X2CLEZKORvTj4uFuT1TNo/WWi9XveUQ
+duyQJnnN8p/LneXXEEZj8rdYfxA77QKcKt04h3oy3tWbluJUWpyslweWm+shQJa0
+v7uRd9uNQGYtgdGQMEKGVenxUbzOnidxmgfmzrBDgrlOgStAeTWomYAnrzDnhfu6
+bDr1lMAJhQgmzwIDAQABo4HLMIHIMB0GA1UdDgQWBBQzIJ2LHEbbWI3LWVcXyPif
+Nau+mTAfBgNVHSMEGDAWgBS2pwGgDkGzuxpng3HxahfQZJxovzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABQ3c1g8N0Cz/6Pk8y3xJmvJghfFl029hGoZJQggqX04+z2kfwaAfvtufr8mkEuW
-q6f5SaXWd2e1q7ut6oRaQxP5sxqAsVnM1B0z6A2wr5qARA6mAfOk4ocr20e+DygI
-2at82UyG0Lq8G9yZmzPqpz7vUrhwqCfng1nNVzh/oTZTT6AbaX3k+p8rUlAJI2LG
-wAGmhXZFgGq2VL1gXVo6BJKr470MlH9feZw/bhLDlrB4RJsDHnkR+42lHVXJs+Wg
-JhgQaJK4VGjQLeGZDAiczEBQNGmfE+bXh4XnV2M+Fw/OAnt45RjvGlWxalX4RD6S
-HQihfbv8AL7jG4OquHXwBUU=
+AM8WKueC3RcPVHTlMU7X0VIfspcXT/cOaAeldJPcRciBYOlq2BbdmWVmCUgck0WM
+7UijFmNQDGwP3K16UCAFZGj6cDevfguI5WGPjZOInkUJlXUhQq9qeUBWyfibWrXD
+d0TVGyjLPy9ZhCGuwjQlSG3tPn1AnOu9Pz5eNN7367ZmJk4FSQAToZOt+l+Ld4bX
+GyfaSYO0Pt/c0A27daP/9Sr0YvjaiqvwOM6kNPCani7eqprbz0fs7BIAPVe/0xfG
++bRSTiJFP2QVyPOtdFihf7TgDtdqf8To/1FbtOiB5yFjzVfxDTlY6heePi6RlMjf
+RFd3fqWD4tQugEKJyDM3BPk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -199,30 +199,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d3:fa:b1:7f:2b:e4:ff:ad:10:e9:54:54:ef:6a:
-                    81:02:0b:b6:83:70:89:ae:d9:4d:54:ea:95:99:88:
-                    3d:59:7d:97:1e:fd:b9:9b:53:8b:14:1e:a4:68:07:
-                    ed:68:65:68:7d:4f:ba:28:38:ff:87:33:98:2c:32:
-                    d0:e5:00:78:0f:6a:20:32:7d:9e:7d:9b:af:e9:39:
-                    fe:5c:bc:04:1c:06:1a:11:1a:46:24:34:f7:e3:af:
-                    56:6d:38:8f:46:39:a6:01:fa:56:f9:d7:9e:73:35:
-                    1a:23:94:12:0f:0d:d3:ec:fe:09:57:f6:a0:9c:18:
-                    a7:ba:4b:c9:37:a3:0c:60:77:4b:77:5f:c8:9c:7e:
-                    b1:5c:b3:43:72:da:c9:6c:c8:71:24:ab:2f:c4:83:
-                    bd:b0:4f:60:af:46:0d:7b:34:8f:e9:70:a2:85:ed:
-                    6e:05:df:e3:c1:40:3d:17:b1:f0:a3:7d:e2:17:6f:
-                    3d:fe:11:81:90:1f:c2:f8:bc:2c:d5:9c:fc:04:47:
-                    24:c4:5e:cf:20:0f:31:e8:7d:ea:b5:69:b8:0f:35:
-                    19:5d:13:08:db:d6:a2:dc:7a:33:92:b3:9c:fc:35:
-                    de:cf:55:96:f7:52:6e:a9:e2:93:b0:52:07:8d:0f:
-                    95:9c:0e:0d:1b:48:0e:b8:41:4f:eb:68:da:e5:6d:
-                    a1:63
+                    00:f9:ba:6f:a7:d8:e8:a7:e1:04:56:72:f9:21:45:
+                    73:22:1e:f9:fc:2e:33:d8:ef:57:7b:23:fe:3f:61:
+                    c7:c9:b8:16:67:dd:1c:78:f1:d0:64:df:a7:88:af:
+                    f6:ab:f7:a7:38:84:3f:20:e5:37:42:6f:f5:37:c4:
+                    63:cf:68:4a:35:e0:05:da:8c:95:83:a9:98:f9:e5:
+                    7f:03:45:5c:e5:39:70:61:d6:ee:09:da:30:24:6d:
+                    7f:3c:c9:ff:d1:65:c9:20:06:77:7d:91:e0:4a:00:
+                    8d:c4:2d:23:f6:03:c5:8c:c7:b6:af:3f:8b:fd:3f:
+                    12:e3:36:1b:81:eb:61:8f:ab:20:19:c1:52:f4:8e:
+                    83:97:06:29:35:be:ab:cc:a6:bd:10:fb:35:aa:70:
+                    09:bb:a9:4b:91:ab:5b:e7:c2:84:73:05:6f:c6:c8:
+                    e6:8b:aa:95:0a:ed:3c:42:84:24:11:23:c0:85:1b:
+                    be:2c:37:61:01:62:65:d8:3f:6f:06:b2:06:e7:c0:
+                    57:10:46:42:2e:4b:70:a1:43:95:85:54:48:40:0d:
+                    08:0b:0d:b9:3d:db:0b:45:af:88:60:2c:e5:a7:e5:
+                    7d:8a:b3:a8:3a:8e:c0:22:05:ae:fb:99:e5:47:72:
+                    10:ca:7e:5d:de:75:b1:fd:25:b0:2d:c4:42:c5:b7:
+                    2c:c7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                8A:85:CE:7E:DC:AF:15:B7:01:C2:5C:81:3F:3D:14:49:D2:38:08:AB
+                B6:A7:01:A0:0E:41:B3:BB:1A:67:83:71:F1:6A:17:D0:64:9C:68:BF
             X509v3 Authority Key Identifier: 
-                keyid:8A:85:CE:7E:DC:AF:15:B7:01:C2:5C:81:3F:3D:14:49:D2:38:08:AB
+                keyid:B6:A7:01:A0:0E:41:B3:BB:1A:67:83:71:F1:6A:17:D0:64:9C:68:BF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -237,41 +237,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         3b:f2:cd:03:ef:d9:61:67:ea:7b:dd:e9:88:13:07:8d:94:51:
-         62:bb:56:d6:c1:be:8a:d0:a0:81:fe:1d:90:6d:85:94:2c:ac:
-         33:fb:5d:f6:c9:74:72:7b:f7:5a:b8:e4:b6:dd:30:bb:93:3b:
-         74:22:e9:fe:e9:5c:b2:8b:d4:a1:21:0c:e6:3c:ee:86:ae:9e:
-         8a:fd:88:bb:a7:fd:20:bb:9c:ff:d4:ca:6f:66:60:19:14:d1:
-         d1:f2:d6:f3:b2:58:c8:4d:15:30:e1:e0:fc:40:ad:55:25:ba:
-         8d:25:68:26:c4:64:68:7e:94:e6:f4:96:5a:c4:e6:ba:85:5b:
-         b2:32:d1:82:32:8b:f4:3f:6f:4e:d5:de:2e:d7:09:3c:1f:7e:
-         93:3a:22:d8:ef:40:41:47:28:80:03:77:0d:f9:51:28:28:b6:
-         53:24:66:f7:3b:56:6c:53:58:55:b2:49:7c:c4:1a:3d:a1:37:
-         29:19:8a:9a:99:84:7f:63:ac:21:85:f5:02:5a:5a:1c:7c:0a:
-         8b:bc:83:ff:80:57:2e:ce:62:c5:79:58:24:12:e8:af:a4:6c:
-         ce:a8:92:2b:25:c4:e3:b6:27:f7:d5:dd:e6:fa:cc:91:6c:59:
-         5e:f5:a4:e2:4f:0b:18:fa:4e:9c:88:66:20:25:af:87:14:01:
-         27:08:89:6a
+         47:75:3e:74:30:6f:a8:e6:a2:f7:15:42:c3:8a:00:e4:68:a8:
+         86:bf:7d:22:18:e7:1c:cb:a6:b1:94:46:50:85:c8:e5:aa:99:
+         7e:03:96:56:4a:44:99:18:e1:c4:a9:3a:b0:1e:7b:46:e1:8d:
+         91:e4:f7:b2:2c:a3:dd:26:00:eb:f5:cf:cd:b6:65:54:c1:fd:
+         22:b0:66:80:d0:7d:bc:bd:b7:7a:c2:5b:df:ce:00:a3:94:b2:
+         c0:ed:73:28:5e:41:c7:1c:25:2b:a0:98:ec:62:fc:46:f9:f0:
+         19:d7:2f:7b:d5:12:f6:a4:97:b2:97:c1:e3:27:6a:9b:f9:91:
+         52:c7:0b:0f:a6:68:e4:62:90:c9:e2:82:49:e3:44:cf:e6:14:
+         ca:b7:ae:79:5a:b1:03:bc:68:fc:65:4d:28:a8:91:41:89:53:
+         85:ef:66:b8:5c:4b:68:10:1d:0c:07:9f:21:3c:93:19:97:72:
+         78:7f:53:7d:b7:68:c1:2a:cf:d2:a7:c8:63:08:27:ec:23:81:
+         9d:b9:d3:1a:2b:68:86:36:dc:1a:96:c1:c9:bf:4e:e0:3c:de:
+         84:9c:ae:5b:9b:ac:5c:fd:41:b2:cb:07:bc:29:4b:49:8e:da:
+         40:bc:71:4d:b4:50:94:d2:db:09:4f:28:ba:d8:5e:52:93:a1:
+         33:e1:ae:0c
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANP6sX8r5P+tEOlUVO9q
-gQILtoNwia7ZTVTqlZmIPVl9lx79uZtTixQepGgH7WhlaH1Puig4/4czmCwy0OUA
-eA9qIDJ9nn2br+k5/ly8BBwGGhEaRiQ09+OvVm04j0Y5pgH6VvnXnnM1GiOUEg8N
-0+z+CVf2oJwYp7pLyTejDGB3S3dfyJx+sVyzQ3LayWzIcSSrL8SDvbBPYK9GDXs0
-j+lwooXtbgXf48FAPRex8KN94hdvPf4RgZAfwvi8LNWc/ARHJMRezyAPMeh96rVp
-uA81GV0TCNvWotx6M5KznPw13s9VlvdSbqnik7BSB40PlZwODRtIDrhBT+to2uVt
-oWMCAwEAAaOByzCByDAdBgNVHQ4EFgQUioXOftyvFbcBwlyBPz0USdI4CKswHwYD
-VR0jBBgwFoAUioXOftyvFbcBwlyBPz0USdI4CKswNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPm6b6fY6KfhBFZy+SFF
+cyIe+fwuM9jvV3sj/j9hx8m4FmfdHHjx0GTfp4iv9qv3pziEPyDlN0Jv9TfEY89o
+SjXgBdqMlYOpmPnlfwNFXOU5cGHW7gnaMCRtfzzJ/9FlySAGd32R4EoAjcQtI/YD
+xYzHtq8/i/0/EuM2G4HrYY+rIBnBUvSOg5cGKTW+q8ymvRD7NapwCbupS5GrW+fC
+hHMFb8bI5ouqlQrtPEKEJBEjwIUbviw3YQFiZdg/bwayBufAVxBGQi5LcKFDlYVU
+SEANCAsNuT3bC0WviGAs5aflfYqzqDqOwCIFrvuZ5UdyEMp+Xd51sf0lsC3EQsW3
+LMcCAwEAAaOByzCByDAdBgNVHQ4EFgQUtqcBoA5Bs7saZ4Nx8WoX0GScaL8wHwYD
+VR0jBBgwFoAUtqcBoA5Bs7saZ4Nx8WoX0GScaL8wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA78s0D79lh
-Z+p73emIEweNlFFiu1bWwb6K0KCB/h2QbYWULKwz+132yXRye/dauOS23TC7kzt0
-Iun+6Vyyi9ShIQzmPO6Grp6K/Yi7p/0gu5z/1MpvZmAZFNHR8tbzsljITRUw4eD8
-QK1VJbqNJWgmxGRofpTm9JZaxOa6hVuyMtGCMov0P29O1d4u1wk8H36TOiLY70BB
-RyiAA3cN+VEoKLZTJGb3O1ZsU1hVskl8xBo9oTcpGYqamYR/Y6whhfUCWlocfAqL
-vIP/gFcuzmLFeVgkEuivpGzOqJIrJcTjtif31d3m+syRbFle9aTiTwsY+k6ciGYg
-Ja+HFAEnCIlq
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBHdT50MG+o
+5qL3FULDigDkaKiGv30iGOccy6axlEZQhcjlqpl+A5ZWSkSZGOHEqTqwHntG4Y2R
+5PeyLKPdJgDr9c/NtmVUwf0isGaA0H28vbd6wlvfzgCjlLLA7XMoXkHHHCUroJjs
+YvxG+fAZ1y971RL2pJeyl8HjJ2qb+ZFSxwsPpmjkYpDJ4oJJ40TP5hTKt655WrED
+vGj8ZU0oqJFBiVOF72a4XEtoEB0MB58hPJMZl3J4f1N9t2jBKs/Sp8hjCCfsI4Gd
+udMaK2iGNtwalsHJv07gPN6EnK5bm6xc/UGyywe8KUtJjtpAvHFNtFCU0tsJTyi6
+2F5Sk6Ez4a4M
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -284,6 +284,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Target certificate looks like a CA but does not set all CA properties
 
diff --git a/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem b/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem
index 4cb7258..8915cc8 100644
--- a/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem
+++ b/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:f5:cd:3c:3f:41:74:34:24:e9:1d:74:42:a1:a8:
-                    16:8e:38:0b:ef:74:5b:38:0c:fb:18:b5:f6:08:f3:
-                    7e:d6:03:ac:02:7c:38:07:dc:c2:3e:78:bd:a7:2d:
-                    44:3d:6b:b4:74:42:71:c4:0c:93:c7:9a:ba:83:e9:
-                    6a:12:39:ab:fd:63:f5:e9:d7:97:33:93:7c:1b:77:
-                    78:c6:7a:7b:32:31:c3:68:aa:b0:b9:78:7b:c2:5a:
-                    85:0b:04:b4:c1:2b:fd:ce:71:02:6a:b1:0c:f6:1a:
-                    65:99:58:29:6e:95:21:69:7c:2a:c0:ff:18:90:28:
-                    92:ad:40:f5:83:67:63:04:14:21:aa:d2:29:35:22:
-                    03:f8:28:27:8a:69:82:de:aa:f4:1e:5e:93:19:27:
-                    74:4a:6b:d5:82:d3:2e:66:cb:23:e9:34:d1:70:0f:
-                    84:cb:1d:87:55:9e:1c:f2:b9:5a:e8:d0:43:dc:89:
-                    a3:5c:28:61:fc:89:97:ab:ff:4a:2c:bc:c0:58:f2:
-                    68:f8:d7:9f:3e:e8:b1:8c:70:5a:d0:f7:1a:d3:dd:
-                    d1:24:ba:fe:15:f8:bd:ea:16:8d:ee:9e:7e:99:30:
-                    22:6c:24:21:67:d1:fa:50:61:ce:65:48:5f:0e:79:
-                    02:0d:e9:b1:69:d3:4c:e7:2d:5d:57:8b:d5:e8:42:
-                    d4:e7
+                    00:b4:59:94:09:11:c2:ed:91:34:ab:18:16:c4:2e:
+                    1d:29:52:fc:6e:92:3c:93:7d:9d:fb:d8:99:a0:72:
+                    93:43:d6:62:47:53:ff:23:f7:77:44:17:d0:0d:c5:
+                    21:c4:d5:bd:5d:e6:29:d5:b9:46:b0:15:16:59:5b:
+                    61:77:74:95:3f:32:a1:1b:6b:d2:42:22:4f:91:7c:
+                    fe:92:60:53:b3:92:88:d9:82:98:a2:7e:cb:ad:24:
+                    b6:43:f0:c3:dd:bf:05:62:5d:86:10:f1:15:90:bd:
+                    e2:43:54:85:30:6d:ee:5d:17:62:fc:67:ae:3e:da:
+                    78:58:84:e9:f1:9e:f5:ad:d5:67:22:51:05:6c:b6:
+                    c3:0b:5e:1c:a8:95:27:be:26:e6:ef:63:55:3c:05:
+                    69:64:bf:c8:98:b2:86:f6:57:c0:2e:83:4d:2e:56:
+                    59:87:45:a6:bb:3b:94:7d:97:9b:8c:37:b1:d8:d6:
+                    25:f2:66:49:6c:dc:3c:9c:dc:08:51:64:2b:1d:53:
+                    ae:83:69:75:87:9c:46:b5:93:57:c0:2f:ff:ba:91:
+                    8d:a6:8d:53:cb:37:5d:13:09:ac:22:94:65:08:c6:
+                    93:75:d6:f6:ff:b6:36:19:da:e4:9a:fb:a8:b4:fa:
+                    eb:5b:3f:0d:e6:f8:dc:25:f8:5d:30:b3:5a:c9:8b:
+                    57:37
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B4:44:21:DE:96:81:AA:7F:9A:5B:79:CB:57:AA:3D:13:A5:4B:6A:93
+                77:17:9D:DC:51:C4:B1:95:4B:96:56:2B:A0:13:EF:2D:9C:19:7A:38
             X509v3 Authority Key Identifier: 
-                keyid:01:CB:1D:FC:13:00:C9:67:B2:D6:76:F2:0A:4F:9D:6A:D4:E2:9D:3D
+                keyid:33:DF:16:E8:65:99:B1:A4:A5:43:E7:13:B8:00:2A:1E:77:8B:75:67
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,41 +56,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         0e:8f:41:87:a8:42:bd:13:c8:62:be:1d:f6:ad:a4:cd:00:5d:
-         21:61:73:5f:75:27:67:16:98:11:ca:0f:cd:9d:bf:96:2a:75:
-         62:35:68:e0:af:f7:6f:c4:75:69:f2:a7:89:27:96:64:4f:0e:
-         7e:f0:82:89:65:1e:a2:08:cd:8b:f1:e5:a0:32:c5:93:2a:62:
-         4c:3c:d2:9f:95:55:5d:87:a8:fe:ef:fa:92:aa:08:76:38:67:
-         0a:d3:f9:0a:b9:93:69:e6:d3:78:ab:9f:eb:ef:35:a7:24:ae:
-         10:d7:3d:17:bd:86:07:c0:64:0f:d6:fc:55:c1:54:70:6c:22:
-         4f:ae:c1:64:ca:fc:dc:97:eb:8b:d2:22:52:d8:52:2c:4d:d4:
-         5c:df:10:52:ab:ab:b2:89:10:e8:ed:00:19:8a:65:e8:4e:8c:
-         e2:5d:5b:cd:35:4c:55:24:30:be:57:f7:f0:51:ef:52:9d:34:
-         60:0d:1e:f5:ba:8a:33:83:ac:db:dc:d9:2b:0b:f3:46:1c:98:
-         3a:5e:5c:c7:36:7e:62:62:a4:13:68:2e:35:32:a1:bd:9d:e9:
-         67:bb:58:85:3b:ea:94:1f:c7:91:35:b0:2c:ce:25:2b:9c:9f:
-         60:7a:09:fa:32:1c:9d:4e:ca:ef:20:9d:ca:e1:ad:20:cd:63:
-         20:ce:48:fd
+         53:8b:42:95:c7:8b:3a:b4:97:9e:56:2b:51:99:4e:77:ea:5a:
+         b2:77:7b:60:ea:fd:72:08:3d:8d:2a:02:ac:26:a3:78:3e:cd:
+         93:39:6c:1a:55:39:f1:cc:c2:eb:ab:13:25:b5:a5:7a:0a:6a:
+         08:d8:32:ab:88:b3:af:8e:ec:c0:c5:a8:33:ad:45:a5:b7:00:
+         23:32:fa:5b:b7:9f:cd:0a:08:0a:a1:0f:00:5f:66:30:d1:ac:
+         4d:7f:34:ed:95:e2:15:f2:00:dc:45:30:77:1f:ab:f0:3c:65:
+         de:7f:56:a4:fe:f7:d4:c8:86:2e:dd:37:41:05:a8:05:1e:b1:
+         5a:90:ef:6e:12:2d:ff:f6:75:e7:f1:b0:39:da:54:b0:30:df:
+         85:32:4c:d1:27:47:a8:f8:94:a4:4a:00:63:5f:10:d8:07:88:
+         ff:5d:ae:1e:22:e0:f3:58:85:18:d2:05:74:d6:4e:e4:4b:4f:
+         80:83:f1:18:92:6d:1f:c5:b6:12:08:15:55:d7:f9:62:86:3d:
+         d2:23:9e:38:c6:8d:2b:5a:76:ee:9f:51:4f:56:a1:42:bf:e0:
+         a1:65:30:dc:f5:37:c6:49:5f:e5:82:f5:8b:16:1d:d3:bd:e2:
+         82:d8:69:35:9b:b8:cb:f3:92:6d:d7:cd:19:f5:77:41:2c:c7:
+         74:75:31:c7
 -----BEGIN CERTIFICATE-----
 MIIDfzCCAmegAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD1zTw/
-QXQ0JOkddEKhqBaOOAvvdFs4DPsYtfYI837WA6wCfDgH3MI+eL2nLUQ9a7R0QnHE
-DJPHmrqD6WoSOav9Y/Xp15czk3wbd3jGensyMcNoqrC5eHvCWoULBLTBK/3OcQJq
-sQz2GmWZWClulSFpfCrA/xiQKJKtQPWDZ2MEFCGq0ik1IgP4KCeKaYLeqvQeXpMZ
-J3RKa9WC0y5myyPpNNFwD4TLHYdVnhzyuVro0EPciaNcKGH8iZer/0osvMBY8mj4
-158+6LGMcFrQ9xrT3dEkuv4V+L3qFo3unn6ZMCJsJCFn0fpQYc5lSF8OeQIN6bFp
-00znLV1Xi9XoQtTnAgMBAAGjgdswgdgwHQYDVR0OBBYEFLREId6Wgap/mlt5y1eq
-PROlS2qTMB8GA1UdIwQYMBaAFAHLHfwTAMlnstZ28gpPnWrU4p09MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0WZQJ
+EcLtkTSrGBbELh0pUvxukjyTfZ372JmgcpND1mJHU/8j93dEF9ANxSHE1b1d5inV
+uUawFRZZW2F3dJU/MqEba9JCIk+RfP6SYFOzkojZgpiifsutJLZD8MPdvwViXYYQ
+8RWQveJDVIUwbe5dF2L8Z64+2nhYhOnxnvWt1WciUQVstsMLXhyolSe+JubvY1U8
+BWlkv8iYsob2V8Aug00uVlmHRaa7O5R9l5uMN7HY1iXyZkls3Dyc3AhRZCsdU66D
+aXWHnEa1k1fAL/+6kY2mjVPLN10TCawilGUIxpN11vb/tjYZ2uSa+6i0+utbPw3m
++Nwl+F0ws1rJi1c3AgMBAAGjgdswgdgwHQYDVR0OBBYEFHcXndxRxLGVS5ZWK6AT
+7y2cGXo4MB8GA1UdIwQYMBaAFDPfFuhlmbGkpUPnE7gAKh53i3VnMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-DQYJKoZIhvcNAQELBQADggEBAA6PQYeoQr0TyGK+HfatpM0AXSFhc191J2cWmBHK
-D82dv5YqdWI1aOCv92/EdWnyp4knlmRPDn7wgollHqIIzYvx5aAyxZMqYkw80p+V
-VV2HqP7v+pKqCHY4ZwrT+Qq5k2nm03irn+vvNackrhDXPRe9hgfAZA/W/FXBVHBs
-Ik+uwWTK/NyX64vSIlLYUixN1FzfEFKrq7KJEOjtABmKZehOjOJdW801TFUkML5X
-9/BR71KdNGANHvW6ijODrNvc2SsL80YcmDpeXMc2fmJipBNoLjUyob2d6We7WIU7
-6pQfx5E1sCzOJSucn2B6CfoyHJ1Oyu8gncrhrSDNYyDOSP0=
+DQYJKoZIhvcNAQELBQADggEBAFOLQpXHizq0l55WK1GZTnfqWrJ3e2Dq/XIIPY0q
+Aqwmo3g+zZM5bBpVOfHMwuurEyW1pXoKagjYMquIs6+O7MDFqDOtRaW3ACMy+lu3
+n80KCAqhDwBfZjDRrE1/NO2V4hXyANxFMHcfq/A8Zd5/VqT+99TIhi7dN0EFqAUe
+sVqQ724SLf/2defxsDnaVLAw34UyTNEnR6j4lKRKAGNfENgHiP9drh4i4PNYhRjS
+BXTWTuRLT4CD8RiSbR/FthIIFVXX+WKGPdIjnjjGjStadu6fUU9WoUK/4KFlMNz1
+N8ZJX+WC9YsWHdO94oLYaTWbuMvzkm3XzRn1d0Esx3R1Mcc=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:8e:2e:ba:a1:8d:d9:60:16:cd:17:31:c9:08:
-                    43:93:94:76:48:55:a2:78:19:17:70:8e:95:25:ac:
-                    f9:b9:81:33:66:8c:2c:79:b7:d9:f5:89:92:1b:d2:
-                    4e:01:e9:69:e6:61:b4:d7:96:78:6d:a0:23:cf:67:
-                    11:cd:fb:fe:3d:d6:b8:ad:64:3f:f6:b9:f5:17:05:
-                    89:1c:fb:3d:94:c3:18:43:e4:1e:15:0f:8d:26:25:
-                    de:db:f0:c0:d6:67:cc:90:f8:33:1c:d1:81:4b:63:
-                    3e:c9:76:61:65:80:b4:13:97:9d:2e:99:ca:a2:6b:
-                    cc:10:a6:3b:2f:20:90:ee:a5:6c:cf:f6:a0:7a:7b:
-                    ce:59:c6:19:42:3f:9f:69:ab:f3:c1:2f:26:8d:fe:
-                    ac:b8:ec:33:d2:d6:bb:4e:3f:80:c0:d9:12:33:35:
-                    05:2d:30:ce:6b:1c:12:ea:89:6f:8a:93:15:0e:0c:
-                    c0:10:7a:99:1e:3f:fb:85:88:09:82:16:f0:62:ed:
-                    fb:26:63:93:71:72:9b:15:11:19:c3:36:5b:10:c1:
-                    b1:12:51:2e:6a:af:c1:d1:9d:fd:8b:7f:13:19:5d:
-                    ce:00:49:3d:33:32:d1:6b:c5:14:4e:10:92:4d:1f:
-                    28:07:01:29:8f:fe:5d:ff:98:b8:2f:99:fc:68:21:
-                    1d:1f
+                    00:cd:90:16:22:ef:fa:93:b4:76:dc:f5:2d:17:6a:
+                    9f:b5:15:0a:dc:bd:3b:f9:d5:3d:34:da:20:b8:bf:
+                    f5:8d:a4:70:4d:36:3b:78:4d:13:bd:45:30:b2:06:
+                    ee:f1:44:7b:a2:b7:e1:01:42:7e:8a:c0:65:f0:a1:
+                    93:15:89:36:02:c8:a9:57:ca:e5:00:f5:12:b4:e6:
+                    50:3f:53:a7:a1:6b:db:ba:30:b5:ee:ab:2b:e4:1b:
+                    03:79:a9:bf:6e:1f:48:8c:f9:b4:57:77:64:ef:59:
+                    30:6d:7d:44:e6:8e:c4:ba:08:27:1f:34:5c:ef:ca:
+                    3e:d8:05:13:62:08:63:04:18:42:73:ea:d2:c1:87:
+                    8c:cd:e6:3e:76:48:8b:ce:e2:f9:c1:af:8c:42:ab:
+                    1e:c1:c1:13:f0:4b:eb:c2:06:5c:00:b8:5c:6f:f6:
+                    31:26:84:1d:b5:49:27:a1:15:25:7d:46:b7:66:e7:
+                    f8:17:50:2b:25:3f:a5:2a:a0:0e:7d:49:c1:cf:7b:
+                    ff:af:61:0d:97:5c:0e:1f:d6:13:10:31:e1:fc:2c:
+                    6e:8b:ec:e2:4d:6d:f0:9a:cb:5c:cd:e6:86:cd:6b:
+                    e1:eb:1a:d8:fd:7d:61:ab:36:61:4d:59:65:cc:51:
+                    42:e5:ca:7b:50:97:b6:90:6c:5f:ce:71:51:c6:ec:
+                    10:43
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:CB:1D:FC:13:00:C9:67:B2:D6:76:F2:0A:4F:9D:6A:D4:E2:9D:3D
+                33:DF:16:E8:65:99:B1:A4:A5:43:E7:13:B8:00:2A:1E:77:8B:75:67
             X509v3 Authority Key Identifier: 
-                keyid:2D:38:72:D3:21:CA:2A:39:AD:2D:B4:9A:10:5C:CB:58:56:82:C4:AA
+                keyid:88:21:D0:8E:E5:97:EE:C7:DE:F9:09:9B:D3:58:3B:2F:1C:03:D6:67
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         11:b8:7a:ac:f4:c5:c5:cc:bc:46:f9:9e:03:6d:69:f7:3c:15:
-         71:be:be:15:0d:a4:b9:23:cd:e0:15:a4:51:36:86:2a:65:7e:
-         7e:29:bc:58:d1:9d:11:2d:0e:22:61:65:ca:a4:9e:61:3f:16:
-         23:ca:ff:91:62:34:55:56:1c:b8:83:b7:62:cb:9a:07:46:53:
-         35:53:8a:04:7e:fa:12:72:af:af:04:1d:18:a4:c1:ba:5b:c7:
-         db:01:97:58:01:d1:73:e9:85:fb:16:27:0f:d2:eb:ce:35:7e:
-         e1:a1:91:52:d7:91:03:59:ab:c0:ed:a6:bc:7b:70:bc:af:73:
-         20:10:a6:a8:f4:45:28:0e:8b:a8:f7:e8:03:64:c6:f1:3d:12:
-         dc:f2:30:75:85:a9:68:44:ad:fb:ab:36:ed:8f:84:25:79:d3:
-         d6:f1:c8:10:1a:ac:c4:fc:65:6b:0c:77:ef:d3:61:de:91:74:
-         df:da:f3:f2:f1:07:93:5f:e0:c9:6a:6d:58:29:e1:ef:98:93:
-         3a:13:82:09:ec:90:82:5a:d7:ef:1d:d4:50:b8:e6:ff:ef:8f:
-         8f:9e:38:72:e5:f3:58:f9:04:90:b3:a9:a3:fd:dc:82:ab:44:
-         be:bc:47:f7:79:15:31:91:1c:c1:3c:5c:86:d1:78:bc:1e:0c:
-         9e:af:18:60
+         24:46:a0:6d:f1:89:52:ca:1f:3d:45:8b:f0:b6:d1:49:4c:c0:
+         62:f9:b1:80:59:2e:37:50:45:de:85:ee:67:e9:cb:ad:03:c0:
+         a6:a7:e2:df:65:30:0f:21:c4:5c:3a:d1:00:ff:99:40:56:bf:
+         7e:93:85:08:e7:1b:f5:bc:91:7b:a7:ef:27:b0:76:f4:1c:5f:
+         81:21:aa:f1:05:05:02:7d:c8:f7:86:6c:b5:3b:44:71:db:1d:
+         07:76:9c:57:5c:29:6f:e7:a9:c9:74:3c:3d:fa:44:52:66:d1:
+         24:70:a2:ca:1d:d7:fa:d2:a9:25:91:56:94:f0:60:12:2a:9e:
+         66:de:18:cc:b4:37:c6:96:9e:a1:bb:5d:22:6a:45:7e:d9:f3:
+         2a:1d:c3:94:cf:5e:aa:ce:14:16:fe:8d:06:6a:bc:ce:22:22:
+         da:1a:b4:5d:d6:25:05:6b:e2:3d:7a:60:10:66:c5:71:3c:74:
+         f4:c4:a2:86:a0:ac:8d:d9:54:b0:6c:25:64:75:68:f4:27:e5:
+         7c:69:b6:7c:19:93:31:45:39:b4:c8:a0:84:60:e9:ca:39:30:
+         c2:7f:e1:e0:99:40:2c:1e:a7:33:a4:27:c7:a6:ab:64:4c:b7:
+         60:bb:e6:82:94:ce:92:c5:97:9a:6f:9a:20:16:66:7a:9f:11:
+         06:51:89:20
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0I4uuqGN
-2WAWzRcxyQhDk5R2SFWieBkXcI6VJaz5uYEzZowsebfZ9YmSG9JOAelp5mG015Z4
-baAjz2cRzfv+Pda4rWQ/9rn1FwWJHPs9lMMYQ+QeFQ+NJiXe2/DA1mfMkPgzHNGB
-S2M+yXZhZYC0E5edLpnKomvMEKY7LyCQ7qVsz/agenvOWcYZQj+faavzwS8mjf6s
-uOwz0ta7Tj+AwNkSMzUFLTDOaxwS6olvipMVDgzAEHqZHj/7hYgJghbwYu37JmOT
-cXKbFREZwzZbEMGxElEuaq/B0Z39i38TGV3OAEk9MzLRa8UUThCSTR8oBwEpj/5d
-/5i4L5n8aCEdHwIDAQABo4HLMIHIMB0GA1UdDgQWBBQByx38EwDJZ7LWdvIKT51q
-1OKdPTAfBgNVHSMEGDAWgBQtOHLTIcoqOa0ttJoQXMtYVoLEqjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZAWIu/6
+k7R23PUtF2qftRUK3L07+dU9NNoguL/1jaRwTTY7eE0TvUUwsgbu8UR7orfhAUJ+
+isBl8KGTFYk2AsipV8rlAPUStOZQP1OnoWvbujC17qsr5BsDeam/bh9IjPm0V3dk
+71kwbX1E5o7EuggnHzRc78o+2AUTYghjBBhCc+rSwYeMzeY+dkiLzuL5wa+MQqse
+wcET8EvrwgZcALhcb/YxJoQdtUknoRUlfUa3Zuf4F1ArJT+lKqAOfUnBz3v/r2EN
+l1wOH9YTEDHh/Cxui+ziTW3wmstczeaGzWvh6xrY/X1hqzZhTVllzFFC5cp7UJe2
+kGxfznFRxuwQQwIDAQABo4HLMIHIMB0GA1UdDgQWBBQz3xboZZmxpKVD5xO4ACoe
+d4t1ZzAfBgNVHSMEGDAWgBSIIdCO5Zfux975CZvTWDsvHAPWZzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABG4eqz0xcXMvEb5ngNtafc8FXG+vhUNpLkjzeAVpFE2hiplfn4pvFjRnREtDiJh
-ZcqknmE/FiPK/5FiNFVWHLiDt2LLmgdGUzVTigR++hJyr68EHRikwbpbx9sBl1gB
-0XPphfsWJw/S6841fuGhkVLXkQNZq8Dtprx7cLyvcyAQpqj0RSgOi6j36ANkxvE9
-EtzyMHWFqWhErfurNu2PhCV509bxyBAarMT8ZWsMd+/TYd6RdN/a8/LxB5Nf4Mlq
-bVgp4e+YkzoTggnskIJa1+8d1FC45v/vj4+eOHLl81j5BJCzqaP93IKrRL68R/d5
-FTGRHME8XIbReLweDJ6vGGA=
+ACRGoG3xiVLKHz1Fi/C20UlMwGL5sYBZLjdQRd6F7mfpy60DwKan4t9lMA8hxFw6
+0QD/mUBWv36ThQjnG/W8kXun7yewdvQcX4EhqvEFBQJ9yPeGbLU7RHHbHQd2nFdc
+KW/nqcl0PD36RFJm0SRwosod1/rSqSWRVpTwYBIqnmbeGMy0N8aWnqG7XSJqRX7Z
+8yodw5TPXqrOFBb+jQZqvM4iItoatF3WJQVr4j16YBBmxXE8dPTEooagrI3ZVLBs
+JWR1aPQn5XxptnwZkzFFObTIoIRg6co5MMJ/4eCZQCwepzOkJ8emq2RMt2C75oKU
+zpLFl5pvmiAWZnqfEQZRiSA=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c4:68:12:a9:88:50:04:f4:70:9b:0a:1e:d1:83:
-                    30:a0:36:08:fe:20:f5:bc:b4:a5:32:74:dd:4c:ab:
-                    cc:73:a4:ce:25:ab:04:38:71:2d:5c:06:de:3b:c3:
-                    2f:b8:d9:91:f3:28:9a:70:f4:7f:be:d5:0e:4e:00:
-                    db:ce:d7:c6:9f:b2:aa:0b:5e:3a:b5:e3:ad:80:78:
-                    53:f1:38:61:05:7f:00:19:e4:ec:77:b5:1d:b6:c9:
-                    35:10:ca:18:c2:71:ae:c8:34:77:dc:46:26:a1:60:
-                    a4:f0:dc:49:5a:fe:af:91:98:41:1c:90:50:7d:be:
-                    94:61:0e:58:b6:21:48:83:2e:5f:c1:a6:0c:a6:72:
-                    95:4a:a5:c5:a1:d9:bd:14:dd:7c:f4:1a:db:b1:1c:
-                    09:0c:2b:60:e7:28:c0:fc:e1:36:0a:f4:68:dc:ee:
-                    89:d8:0f:47:9c:e4:7b:ca:fe:65:57:2c:3b:3b:e5:
-                    b4:89:c5:04:52:55:02:dc:09:44:fd:6a:19:fc:e4:
-                    52:6f:78:96:41:79:3f:b8:85:5a:fe:7f:8f:5d:fc:
-                    ee:ba:35:1d:eb:64:2d:e0:7b:f2:8c:17:d3:33:21:
-                    9c:2d:e6:85:d2:e3:2c:0f:5b:57:2c:c5:c6:de:93:
-                    24:a2:6e:1b:72:49:f5:c8:05:e2:0e:ae:68:7a:f6:
-                    b5:09
+                    00:bc:6f:14:16:0e:80:d7:63:ef:ea:2b:04:49:cd:
+                    0b:04:3a:84:e6:48:31:d4:4d:9a:bb:42:df:68:02:
+                    9f:ca:ae:1a:67:ce:23:d7:2a:f4:c9:30:6b:55:60:
+                    4b:9f:f5:d7:61:22:48:6b:e7:a6:79:af:f1:22:9a:
+                    88:ec:ae:0c:fa:e9:9b:84:43:06:fd:03:96:0b:bc:
+                    bd:e6:d8:63:8c:ed:f1:bd:83:9a:49:7d:a8:cc:54:
+                    90:70:e9:72:ec:d6:ec:9f:11:73:58:bc:db:6c:d6:
+                    e3:7c:9d:34:53:97:6f:10:66:64:43:65:d4:e8:c6:
+                    50:f2:de:42:aa:ae:b4:fb:4a:f4:c8:a2:7f:51:6e:
+                    fd:1c:76:a3:15:f8:7a:0a:36:c2:64:15:66:f5:43:
+                    9d:06:1a:ed:41:c3:a0:3e:6c:c0:29:1c:5e:91:32:
+                    ea:35:7e:a1:90:c8:fd:35:e4:05:0f:ef:7f:5d:6b:
+                    d7:3f:77:8e:07:d8:d5:93:a8:b0:4a:ed:89:5c:1f:
+                    d0:61:28:a6:88:2a:d0:5f:b9:bd:d6:f2:ca:c6:f9:
+                    8f:74:7e:04:b1:a3:ba:b4:78:a9:71:c7:d2:90:01:
+                    80:b3:8f:d0:d8:7c:3f:35:83:2c:f6:80:83:1f:63:
+                    85:11:99:22:13:d1:1d:5d:28:55:2f:26:d2:4f:a2:
+                    86:13
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                2D:38:72:D3:21:CA:2A:39:AD:2D:B4:9A:10:5C:CB:58:56:82:C4:AA
+                88:21:D0:8E:E5:97:EE:C7:DE:F9:09:9B:D3:58:3B:2F:1C:03:D6:67
             X509v3 Authority Key Identifier: 
-                keyid:2D:38:72:D3:21:CA:2A:39:AD:2D:B4:9A:10:5C:CB:58:56:82:C4:AA
+                keyid:88:21:D0:8E:E5:97:EE:C7:DE:F9:09:9B:D3:58:3B:2F:1C:03:D6:67
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         09:ee:80:43:2f:77:6c:2b:2f:51:79:35:59:ad:f0:a5:51:45:
-         22:6a:0a:20:c7:eb:d1:98:c2:43:06:5a:5c:92:cb:44:24:7b:
-         97:8e:18:b8:23:3c:8b:31:6d:54:0e:73:11:90:9e:8b:2c:a4:
-         78:53:e6:8e:55:93:64:cc:14:04:54:a1:b6:ec:28:59:67:3a:
-         64:0f:9d:51:ec:ba:35:06:af:5f:96:b5:3c:fe:62:0e:13:5a:
-         ee:29:af:55:d9:22:71:b3:c8:61:1a:36:4c:c8:f9:39:80:c2:
-         06:c2:54:93:fb:2f:1b:f7:01:66:42:2a:e2:08:7b:ee:3e:0d:
-         e0:c6:07:fd:f1:cf:5e:d1:77:b2:46:21:c6:c5:9f:db:15:75:
-         7e:ea:ec:5d:da:02:2a:42:35:7a:b5:a2:2e:86:08:8b:29:ea:
-         e9:f3:b5:cd:9d:46:96:86:c7:82:ed:64:ab:74:29:53:1c:3e:
-         f5:69:51:5b:11:1c:0d:c4:f0:01:31:a6:32:d2:68:af:1d:52:
-         c1:c4:d9:a2:9e:da:a2:bd:19:71:fa:26:f5:28:43:6a:fd:5c:
-         97:d2:bb:e0:cd:56:0e:b8:0e:f9:4d:d5:dd:a0:4e:ae:46:68:
-         00:93:d6:fd:ec:85:78:f4:c9:93:96:34:65:cc:f0:72:e7:0e:
-         00:3d:d0:6b
+         56:fc:d3:72:6b:c3:32:0f:62:ed:b7:15:91:f6:72:5f:7f:94:
+         01:93:45:32:69:b3:97:7d:df:4f:6b:03:2b:cf:25:73:e0:13:
+         2b:3d:91:33:aa:cc:62:ad:6d:3f:85:de:eb:a9:13:5d:6b:6b:
+         21:c5:bf:50:70:95:c9:0f:64:e5:c0:5c:60:ff:fd:52:88:fc:
+         40:28:be:a3:85:75:e8:3f:12:f5:aa:65:57:8a:05:7a:dc:8b:
+         cf:ac:45:6b:0e:f7:4d:3f:15:d5:43:d0:78:93:4b:6e:d9:9d:
+         2c:db:38:bc:cc:eb:04:cc:89:98:cf:29:4f:67:e0:8c:e2:aa:
+         f2:23:96:fa:a1:20:d8:0f:9b:4d:a5:2f:c0:52:ba:1a:13:a0:
+         ce:3f:2e:d8:9f:3f:37:17:21:62:e9:a0:60:c8:c3:ca:53:60:
+         42:43:af:66:0b:12:1e:65:7b:39:19:6e:11:cd:92:35:16:bc:
+         36:4e:a0:05:3b:e8:9b:35:d8:8b:6d:e1:0d:2e:b7:c5:4f:83:
+         b8:c8:8b:e3:15:0b:71:eb:39:e2:3b:c7:11:a5:de:4b:d9:8c:
+         87:c8:69:12:63:06:f3:64:82:24:f3:8e:64:df:34:39:77:2a:
+         c7:1c:c4:81:4b:79:3d:81:6e:d8:0b:47:b6:d2:cf:a2:f8:14:
+         6f:3e:49:89
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMRoEqmIUAT0cJsKHtGD
-MKA2CP4g9by0pTJ03UyrzHOkziWrBDhxLVwG3jvDL7jZkfMomnD0f77VDk4A287X
-xp+yqgteOrXjrYB4U/E4YQV/ABnk7He1HbbJNRDKGMJxrsg0d9xGJqFgpPDcSVr+
-r5GYQRyQUH2+lGEOWLYhSIMuX8GmDKZylUqlxaHZvRTdfPQa27EcCQwrYOcowPzh
-Ngr0aNzuidgPR5zke8r+ZVcsOzvltInFBFJVAtwJRP1qGfzkUm94lkF5P7iFWv5/
-j1387ro1HetkLeB78owX0zMhnC3mhdLjLA9bVyzFxt6TJKJuG3JJ9cgF4g6uaHr2
-tQkCAwEAAaOByzCByDAdBgNVHQ4EFgQULThy0yHKKjmtLbSaEFzLWFaCxKowHwYD
-VR0jBBgwFoAULThy0yHKKjmtLbSaEFzLWFaCxKowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxvFBYOgNdj7+orBEnN
+CwQ6hOZIMdRNmrtC32gCn8quGmfOI9cq9Mkwa1VgS5/112EiSGvnpnmv8SKaiOyu
+DPrpm4RDBv0Dlgu8vebYY4zt8b2Dmkl9qMxUkHDpcuzW7J8Rc1i822zW43ydNFOX
+bxBmZENl1OjGUPLeQqqutPtK9Miif1Fu/Rx2oxX4ego2wmQVZvVDnQYa7UHDoD5s
+wCkcXpEy6jV+oZDI/TXkBQ/vf11r1z93jgfY1ZOosErtiVwf0GEopogq0F+5vdby
+ysb5j3R+BLGjurR4qXHH0pABgLOP0Nh8PzWDLPaAgx9jhRGZIhPRHV0oVS8m0k+i
+hhMCAwEAAaOByzCByDAdBgNVHQ4EFgQUiCHQjuWX7sfe+Qmb01g7LxwD1mcwHwYD
+VR0jBBgwFoAUiCHQjuWX7sfe+Qmb01g7LxwD1mcwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAJ7oBDL3ds
-Ky9ReTVZrfClUUUiagogx+vRmMJDBlpckstEJHuXjhi4IzyLMW1UDnMRkJ6LLKR4
-U+aOVZNkzBQEVKG27ChZZzpkD51R7Lo1Bq9flrU8/mIOE1ruKa9V2SJxs8hhGjZM
-yPk5gMIGwlST+y8b9wFmQiriCHvuPg3gxgf98c9e0XeyRiHGxZ/bFXV+6uxd2gIq
-QjV6taIuhgiLKerp87XNnUaWhseC7WSrdClTHD71aVFbERwNxPABMaYy0mivHVLB
-xNmintqivRlx+ib1KENq/VyX0rvgzVYOuA75TdXdoE6uRmgAk9b97IV49MmTljRl
-zPBy5w4APdBr
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBW/NNya8My
+D2LttxWR9nJff5QBk0UyabOXfd9PawMrzyVz4BMrPZEzqsxirW0/hd7rqRNda2sh
+xb9QcJXJD2TlwFxg//1SiPxAKL6jhXXoPxL1qmVXigV63IvPrEVrDvdNPxXVQ9B4
+k0tu2Z0s2zi8zOsEzImYzylPZ+CM4qryI5b6oSDYD5tNpS/AUroaE6DOPy7Ynz83
+FyFi6aBgyMPKU2BCQ69mCxIeZXs5GW4RzZI1Frw2TqAFO+ibNdiLbeENLrfFT4O4
+yIvjFQtx6zniO8cRpd5L2YyHyGkSYwbzZIIk845k3zQ5dyrHHMSBS3k9gW7YC0e2
+0s+i+BRvPkmJ
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -280,3 +280,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem b/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem
index f42bb72f..85d7a3d 100644
--- a/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem
+++ b/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b8:8a:4e:71:4c:e6:58:02:9d:bc:08:20:2d:8d:
-                    74:e3:04:2f:59:9e:43:73:e0:ca:83:1b:3a:e2:30:
-                    78:de:f8:07:a1:17:62:5d:4e:35:e8:03:40:2a:1e:
-                    2e:8e:91:a4:96:bf:a7:34:45:13:19:b2:d7:b0:72:
-                    d0:10:e2:ad:ab:a8:f8:41:c5:ec:ee:1c:14:cb:cf:
-                    4f:cd:37:71:bd:2d:11:8d:95:e4:fa:2b:16:8c:bf:
-                    82:1c:22:85:25:4a:88:01:af:1e:fe:e7:53:d5:03:
-                    d4:36:14:ae:81:d2:3d:73:6c:96:e0:e7:d2:a4:fb:
-                    17:1d:df:6a:93:68:b5:f8:a8:70:df:d0:b6:9d:fb:
-                    e5:80:a3:a8:85:df:82:f3:05:23:9f:b6:62:89:b7:
-                    72:0c:99:49:5b:07:bd:c5:fb:4c:f4:32:83:a5:3c:
-                    c6:8c:6b:c1:a1:c0:ab:73:68:fb:91:14:12:3a:c5:
-                    31:89:ac:a2:4b:b6:20:3b:03:1f:50:48:ff:7b:3b:
-                    be:53:e5:46:e2:ad:18:7a:d3:3e:f9:bb:d0:0b:ac:
-                    0c:23:d8:9c:92:07:6c:ee:a6:64:0d:77:ef:aa:f4:
-                    64:5a:aa:ed:52:cb:20:9a:57:d5:ab:be:8c:07:71:
-                    b3:a4:43:8b:d9:7e:6f:46:2c:70:9f:c0:e3:68:89:
-                    e5:2b
+                    00:e6:5f:a8:d2:f3:bc:ce:7c:a1:a7:97:8a:a5:bb:
+                    3a:24:dd:5b:87:a1:3c:71:b1:e3:14:2e:72:39:ec:
+                    7b:1b:b6:a4:05:b5:4b:82:29:40:ef:1e:5a:2b:b5:
+                    f0:62:b2:2e:f2:2d:cd:a4:fe:2f:a4:5a:b6:6a:8c:
+                    b0:2f:46:f7:bc:f0:6e:71:1f:56:2f:6e:0d:5f:7d:
+                    15:24:76:d7:8a:b7:66:8f:b8:25:70:ba:3f:fa:ac:
+                    2b:81:99:85:49:53:ae:a5:4c:27:d9:63:d3:67:6d:
+                    6a:dc:c0:84:01:5f:35:49:3c:6a:21:76:7c:1e:e0:
+                    f0:f4:8d:ed:31:a8:e8:f8:0b:a1:ae:e4:d6:79:18:
+                    21:51:3a:08:98:30:6b:94:54:fe:e5:92:98:2d:e8:
+                    ee:12:05:53:96:21:9a:d3:cb:fc:8b:dd:0b:10:63:
+                    c2:e3:de:69:f8:3a:04:db:dc:ee:07:95:19:3b:32:
+                    fb:a7:5a:39:60:71:63:af:78:1d:dd:f5:5a:77:99:
+                    23:76:a8:e9:1e:6f:e2:50:3c:4c:b8:fa:58:83:26:
+                    1a:ee:63:7e:cb:2d:93:2c:f6:19:aa:b3:4a:57:81:
+                    6a:db:d7:59:44:29:a4:e0:71:5d:07:00:6b:83:99:
+                    49:3b:bc:f8:ab:d8:fe:7d:5d:ba:b4:02:f5:95:e9:
+                    90:65
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                3D:5B:07:9A:2F:A5:14:87:32:C3:F8:54:71:62:3F:A1:E6:60:7F:D0
+                4A:CE:67:BF:3B:63:C0:09:D1:FF:FF:E6:FE:83:5A:03:0F:C3:43:10
             X509v3 Authority Key Identifier: 
-                keyid:7C:0E:01:A5:04:38:CE:0F:6A:AB:34:B2:CD:77:19:DB:84:C1:EC:44
+                keyid:77:0D:A9:84:E8:2A:53:B8:C9:BB:D7:0F:D7:D0:85:E8:98:1A:E3:68
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,26 +56,26 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         6a:f4:be:75:7e:66:b3:42:6e:fb:64:ed:d2:a1:d8:3d:08:04:
-         bf:93:17:0b:9b:79:df:ca:73:95:b4:5a:78:e3:96:d0:7f:5e:
-         3c:2c:df:00:da:37:fc:61:22:9a:81:d1:bb:5d:13:6a:e4:21:
-         18:bf:dc:49:36:4e:7a:aa:b8:6f
+         65:fb:6d:6c:1a:df:48:9c:d1:36:07:e3:94:7b:d9:ea:36:84:
+         37:f2:c2:03:53:74:4b:f9:a3:91:75:f4:bf:11:14:86:b5:34:
+         8e:24:3d:9a:37:25:c2:27:19:48:f3:f0:a3:a6:51:e6:61:4a:
+         77:db:7a:1e:ae:f1:94:ad:de:93
 -----BEGIN CERTIFICATE-----
 MIICyzCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4ik5x
-TOZYAp28CCAtjXTjBC9ZnkNz4MqDGzriMHje+AehF2JdTjXoA0AqHi6OkaSWv6c0
-RRMZstewctAQ4q2rqPhBxezuHBTLz0/NN3G9LRGNleT6KxaMv4IcIoUlSogBrx7+
-51PVA9Q2FK6B0j1zbJbg59Kk+xcd32qTaLX4qHDf0Lad++WAo6iF34LzBSOftmKJ
-t3IMmUlbB73F+0z0MoOlPMaMa8GhwKtzaPuRFBI6xTGJrKJLtiA7Ax9QSP97O75T
-5UbirRh60z75u9ALrAwj2JySB2zupmQNd++q9GRaqu1SyyCaV9WrvowHcbOkQ4vZ
-fm9GLHCfwONoieUrAgMBAAGjgekwgeYwHQYDVR0OBBYEFD1bB5ovpRSHMsP4VHFi
-P6HmYH/QMB8GA1UdIwQYMBaAFHwOAaUEOM4Paqs0ss13GduEwexEMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmX6jS
+87zOfKGnl4qluzok3VuHoTxxseMULnI57HsbtqQFtUuCKUDvHlortfBisi7yLc2k
+/i+kWrZqjLAvRve88G5xH1Yvbg1ffRUkdteKt2aPuCVwuj/6rCuBmYVJU66lTCfZ
+Y9NnbWrcwIQBXzVJPGohdnwe4PD0je0xqOj4C6Gu5NZ5GCFROgiYMGuUVP7lkpgt
+6O4SBVOWIZrTy/yL3QsQY8Lj3mn4OgTb3O4HlRk7MvunWjlgcWOveB3d9Vp3mSN2
+qOkeb+JQPEy4+liDJhruY37LLZMs9hmqs0pXgWrb11lEKaTgcV0HAGuDmUk7vPir
+2P59Xbq0AvWV6ZBlAgMBAAGjgekwgeYwHQYDVR0OBBYEFErOZ787Y8AJ0f//5v6D
+WgMPw0MQMB8GA1UdIwQYMBaAFHcNqYToKlO4ybvXD9fQheiYGuNoMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAANBAGr0vnV+ZrNCbvtk7dKh2D0I
-BL+TFwubed/Kc5W0WnjjltB/Xjws3wDaN/xhIpqB0btdE2rkIRi/3Ek2TnqquG8=
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAANBAGX7bWwa30ic0TYH45R72eo2
+hDfywgNTdEv5o5F19L8RFIa1NI4kPZo3JcInGUjz8KOmUeZhSnfbeh6u8ZSt3pM=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -92,17 +92,17 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (512 bit)
                 Modulus:
-                    00:ba:89:53:56:03:c7:9f:d6:cc:d0:48:7d:3b:52:
-                    02:ee:7e:58:eb:d8:9c:8e:3c:d6:65:b2:8d:94:0d:
-                    87:48:e1:65:65:56:91:5b:1a:52:3a:84:96:46:2a:
-                    8b:1b:7d:0c:43:57:04:0d:38:55:21:5b:0b:45:06:
-                    a6:1e:67:ca:5b
+                    00:9e:57:91:28:65:2e:3a:22:df:b6:61:df:cb:09:
+                    a2:92:53:3b:bc:7a:20:99:41:d7:1e:fd:da:08:98:
+                    2d:dd:12:82:3c:c5:29:51:95:eb:cb:50:c0:ca:5c:
+                    76:06:df:b1:b6:48:bd:87:d2:71:6f:ee:21:78:0d:
+                    ca:4e:2b:f6:c7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7C:0E:01:A5:04:38:CE:0F:6A:AB:34:B2:CD:77:19:DB:84:C1:EC:44
+                77:0D:A9:84:E8:2A:53:B8:C9:BB:D7:0F:D7:D0:85:E8:98:1A:E3:68
             X509v3 Authority Key Identifier: 
-                keyid:71:59:49:4D:A5:43:49:C5:0E:E4:78:E9:5C:B7:4E:80:A8:A3:BB:5E
+                keyid:68:01:72:7E:35:BD:80:A0:AE:59:5C:D2:1E:21:52:72:04:31:4C:E0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -117,37 +117,37 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         8e:cc:d3:f3:5a:fb:ca:83:4e:55:e3:ae:2a:b7:b7:ac:9e:87:
-         f0:62:58:23:29:3d:63:7e:8d:42:60:ea:dc:3e:ec:66:19:4b:
-         e6:d6:a7:b7:e1:ea:33:88:3c:ea:8b:87:b9:e7:64:0d:35:b3:
-         0e:ab:81:71:0c:1c:0a:f3:0a:49:23:4e:d6:21:de:7f:e5:fd:
-         6d:8b:7a:33:2f:a6:ab:4e:b8:02:cc:01:1e:18:9a:90:f3:56:
-         f8:8a:b5:2f:68:12:c6:83:b2:91:59:00:51:86:75:68:45:3b:
-         27:c4:e0:0d:ed:e7:51:2d:47:60:26:19:02:fd:43:27:81:ad:
-         33:cb:eb:98:9a:a1:2e:81:d3:81:52:4a:1d:19:e9:30:f9:fc:
-         6b:e7:26:c8:c1:6c:65:e4:66:d4:cc:82:16:0a:a6:b9:68:3a:
-         eb:ee:cd:86:aa:a7:80:ed:4f:77:47:d2:c6:1b:eb:53:de:f3:
-         eb:24:60:41:ac:77:08:43:1b:76:ce:a6:4b:f1:4e:1d:32:2b:
-         31:bd:59:52:f1:60:e7:f5:db:6d:bf:be:af:55:9b:11:63:f7:
-         6e:19:2c:17:4b:db:fe:40:27:ae:02:f5:c2:17:62:21:7b:ac:
-         38:d6:17:3e:5c:80:61:6d:95:63:e4:64:d3:07:23:9f:14:bb:
-         df:b2:eb:c2
+         ad:f2:3c:b7:fe:59:a6:08:95:6f:a2:3a:b8:84:05:b2:5b:94:
+         1a:c0:36:8f:c2:9e:31:92:16:1a:de:e8:0b:d8:77:6a:5e:39:
+         93:91:77:20:e0:93:75:be:09:65:ea:03:3c:02:f3:5f:be:14:
+         40:c9:8f:e6:17:9d:bd:bd:2d:91:c2:cd:cd:f3:fe:06:a0:21:
+         e5:19:a3:95:d5:77:a1:b7:c3:0b:c8:a1:b9:0e:3c:77:e0:fc:
+         1c:66:dd:48:49:fd:41:74:b8:55:e3:51:16:13:3b:7c:c6:d7:
+         48:65:ea:1d:6c:5d:a8:02:fb:f9:dc:74:a5:79:ee:e0:20:8a:
+         14:84:d6:af:18:b5:5e:32:2d:f7:8d:e9:17:3c:50:af:cf:1c:
+         3e:0c:b1:71:d4:4c:67:fe:b9:75:8a:65:72:95:0a:36:06:19:
+         46:15:3c:90:a0:8e:8c:b1:cd:25:9d:06:04:98:8a:c6:f3:38:
+         5e:f9:ac:45:ee:ca:1b:84:c5:59:9f:55:58:7a:01:c3:9e:ca:
+         33:68:fd:bc:a3:94:46:85:d9:5a:6b:60:d9:d7:cb:47:c9:61:
+         7f:dd:97:11:75:55:b9:72:3a:61:3d:dc:52:fb:29:04:f3:22:
+         86:40:b8:fc:1f:cb:7b:35:3f:56:11:e7:7d:91:01:9a:13:89:
+         bc:3a:2e:b9
 -----BEGIN CERTIFICATE-----
 MIICpTCCAY2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALqJU1YDx5/WzNBIfTtS
-Au5+WOvYnI481mWyjZQNh0jhZWVWkVsaUjqElkYqixt9DENXBA04VSFbC0UGph5n
-ylsCAwEAAaOByzCByDAdBgNVHQ4EFgQUfA4BpQQ4zg9qqzSyzXcZ24TB7EQwHwYD
-VR0jBBgwFoAUcVlJTaVDScUO5HjpXLdOgKiju14wNwYIKwYBBQUHAQEEKzApMCcG
+ZXJtZWRpYXRlMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ5XkShlLjoi37Zh38sJ
+opJTO7x6IJlB1x792giYLd0SgjzFKVGV68tQwMpcdgbfsbZIvYfScW/uIXgNyk4r
+9scCAwEAAaOByzCByDAdBgNVHQ4EFgQUdw2phOgqU7jJu9cP19CF6Jga42gwHwYD
+VR0jBBgwFoAUaAFyfjW9gKCuWVzSHiFScgQxTOAwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCOzNPzWvvK
-g05V464qt7esnofwYlgjKT1jfo1CYOrcPuxmGUvm1qe34eoziDzqi4e552QNNbMO
-q4FxDBwK8wpJI07WId5/5f1ti3ozL6arTrgCzAEeGJqQ81b4irUvaBLGg7KRWQBR
-hnVoRTsnxOAN7edRLUdgJhkC/UMnga0zy+uYmqEugdOBUkodGekw+fxr5ybIwWxl
-5GbUzIIWCqa5aDrr7s2GqqeA7U93R9LGG+tT3vPrJGBBrHcIQxt2zqZL8U4dMisx
-vVlS8WDn9dttv76vVZsRY/duGSwXS9v+QCeuAvXCF2Ihe6w41hc+XIBhbZVj5GTT
-ByOfFLvfsuvC
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCt8jy3/lmm
+CJVvojq4hAWyW5QawDaPwp4xkhYa3ugL2HdqXjmTkXcg4JN1vgll6gM8AvNfvhRA
+yY/mF529vS2Rws3N8/4GoCHlGaOV1Xeht8MLyKG5Djx34PwcZt1ISf1BdLhV41EW
+Ezt8xtdIZeodbF2oAvv53HSlee7gIIoUhNavGLVeMi33jekXPFCvzxw+DLFx1Exn
+/rl1imVylQo2BhlGFTyQoI6Msc0lnQYEmIrG8zhe+axF7sobhMVZn1VYegHDnsoz
+aP28o5RGhdlaa2DZ18tHyWF/3ZcRdVW5cjphPdxS+ykE8yKGQLj8H8t7NT9WEed9
+kQGaE4m8Oi65
 -----END CERTIFICATE-----
 
 Certificate:
@@ -164,30 +164,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ca:5e:08:17:b7:7c:c4:55:39:a2:1c:7f:97:49:
-                    b0:bb:88:3e:9e:ed:46:36:41:c2:a7:5e:2b:ce:bb:
-                    7b:d2:d2:a8:3b:a3:53:27:39:ac:3a:76:48:a2:85:
-                    97:3f:ba:98:9f:14:f9:b9:31:64:e5:27:a8:9a:23:
-                    ae:7d:12:39:65:c0:10:f3:6d:2d:a3:45:3d:c3:69:
-                    e6:cf:3e:4d:8a:5c:37:a5:6c:32:17:7c:ab:8f:62:
-                    0e:e4:57:6b:e1:64:22:8d:3b:ad:c6:93:60:4a:c4:
-                    32:6d:be:c4:6b:06:e1:4b:e0:89:3c:ef:ad:78:94:
-                    bd:3d:d1:bb:19:1a:86:98:43:0e:84:bb:68:11:47:
-                    9a:06:49:33:e9:48:e6:f2:00:0e:ef:e7:4d:2a:1b:
-                    b2:aa:5b:a8:8d:59:ac:b7:c8:77:5d:c9:9f:d3:e8:
-                    c7:f2:88:0a:ce:6e:34:b5:8f:5a:63:24:68:42:2f:
-                    60:2c:a5:82:44:e9:12:1f:c3:7a:01:c3:e7:e3:24:
-                    97:0b:bc:5e:48:e1:33:4b:a0:cd:fa:ce:75:90:97:
-                    20:f4:0b:4c:8e:69:c5:8b:cd:1c:ac:8a:7f:d4:18:
-                    22:c7:10:09:52:dc:3a:17:3d:3a:5c:03:99:ee:f8:
-                    9d:a0:bf:ef:72:33:df:43:8d:9f:1b:1c:e3:22:24:
-                    73:99
+                    00:c4:1c:75:6c:84:a2:59:08:8c:30:5b:1f:63:1a:
+                    b7:80:76:db:e1:82:28:60:f8:b5:dc:6b:b0:92:43:
+                    d4:c9:3c:ee:8d:0c:e1:04:14:9e:2a:03:24:02:fb:
+                    3c:7a:cb:d2:42:4a:9f:36:5c:a7:7e:e4:c8:3d:2c:
+                    34:0a:9e:0b:43:07:87:69:0a:9d:dc:40:39:66:31:
+                    71:f0:51:b8:d2:24:2e:ad:8d:3d:f6:72:40:ba:a3:
+                    d8:12:fd:f6:2d:ab:23:41:3d:32:76:1d:e2:77:e2:
+                    2e:0b:5d:f8:05:12:d9:08:aa:49:18:52:41:01:43:
+                    f4:da:b1:a5:c9:06:2f:d7:52:b3:1b:dd:ee:16:46:
+                    8b:e4:ef:f8:12:52:7d:05:29:cf:a2:b2:4b:33:66:
+                    18:27:18:3a:ba:16:0f:62:7b:c2:d3:d5:19:62:1d:
+                    da:6a:84:a0:2e:e3:d1:71:91:3c:91:68:c0:40:22:
+                    4b:fb:0d:b6:68:80:d8:b8:f8:a0:11:f4:d9:6f:f9:
+                    50:cc:76:ff:af:1c:bf:4e:12:76:d1:ea:3c:96:85:
+                    76:c2:30:07:03:92:53:35:fd:26:66:7c:ea:48:ad:
+                    97:e7:25:16:83:6d:84:01:cf:9f:06:0b:d7:37:79:
+                    8e:68:25:44:88:72:a7:9d:2b:7c:57:24:6b:72:15:
+                    a5:ed
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                71:59:49:4D:A5:43:49:C5:0E:E4:78:E9:5C:B7:4E:80:A8:A3:BB:5E
+                68:01:72:7E:35:BD:80:A0:AE:59:5C:D2:1E:21:52:72:04:31:4C:E0
             X509v3 Authority Key Identifier: 
-                keyid:71:59:49:4D:A5:43:49:C5:0E:E4:78:E9:5C:B7:4E:80:A8:A3:BB:5E
+                keyid:68:01:72:7E:35:BD:80:A0:AE:59:5C:D2:1E:21:52:72:04:31:4C:E0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -202,41 +202,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         20:51:cc:39:0f:3c:0c:67:47:0c:73:f0:00:0d:57:fb:6f:fe:
-         4c:e3:c1:d1:a6:f7:40:54:4c:91:0f:ca:e1:eb:b3:7a:44:0e:
-         57:f5:81:1f:9a:4f:81:57:d8:91:01:7b:09:6a:61:19:04:8f:
-         00:7a:d1:5b:3f:cb:1b:c0:53:a4:da:dc:40:a5:ef:9b:59:1a:
-         fc:99:b2:0d:66:22:ee:d7:da:69:72:4d:b1:44:e9:2d:57:84:
-         52:d5:2b:c5:77:ac:a7:d0:f2:27:12:6b:5c:42:7a:3d:fc:e8:
-         04:91:98:aa:1d:3f:40:9d:9b:e2:43:24:47:7b:b8:24:23:a3:
-         47:24:cd:9a:44:87:f8:a7:c4:07:90:9a:73:60:e1:0e:7b:82:
-         a1:ef:73:4e:02:46:6d:06:e2:58:8f:79:47:79:a6:59:75:cf:
-         ac:5d:e2:37:6c:88:3f:bf:57:00:f5:fb:09:53:f4:5f:06:42:
-         58:5e:75:48:96:7d:4f:dd:3b:45:d3:7c:61:8f:75:20:17:a0:
-         2e:1c:08:4b:22:3f:37:be:d7:43:89:da:59:ac:79:87:1e:6a:
-         cc:53:4d:5b:e9:0a:d6:40:a5:a0:28:99:57:44:5d:d2:7b:bf:
-         02:38:a3:c4:df:14:a9:c1:b2:ec:15:21:7b:84:a1:a1:56:f8:
-         b9:45:42:cd
+         3b:71:85:c5:bf:83:55:c7:84:5e:51:cc:4b:00:35:82:f5:90:
+         c0:7b:95:f5:c4:f0:ff:5b:8a:ba:83:8a:42:3a:bb:0b:5d:e6:
+         0a:3a:91:2c:99:28:40:d3:49:6e:34:57:7b:de:1f:bd:d9:2c:
+         b4:95:69:eb:e7:79:01:6c:ec:a9:e0:78:82:8e:68:33:56:a7:
+         58:99:d4:4a:97:73:b1:bd:d7:ee:bd:07:18:a8:47:d3:28:5d:
+         23:07:59:21:2a:b1:e0:3a:f0:21:24:1d:44:66:dd:29:ea:02:
+         f8:17:7d:2b:b3:f8:15:3a:0d:60:42:d3:7d:f0:1d:59:30:99:
+         ae:36:24:bc:c7:d1:97:4f:44:67:19:b9:ea:33:0d:e7:57:81:
+         88:6e:35:3d:47:84:43:f7:f7:43:1a:dc:67:21:2e:a3:97:78:
+         bc:06:46:69:04:20:8b:e8:94:4b:a8:82:c3:2a:a4:ac:59:60:
+         4e:59:46:e4:7f:cc:59:21:b4:73:9e:29:51:a9:48:71:e6:f6:
+         5e:ec:25:f0:8e:87:4c:b4:4d:62:12:14:65:49:a3:4c:fd:59:
+         80:39:97:2a:57:f0:6f:9a:fa:cd:d0:a7:db:35:60:81:23:13:
+         be:a4:29:00:bd:58:e8:e2:e1:90:24:fd:f7:4e:fe:4d:fb:c7:
+         a9:2a:e8:24
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMpeCBe3fMRVOaIcf5dJ
-sLuIPp7tRjZBwqdeK867e9LSqDujUyc5rDp2SKKFlz+6mJ8U+bkxZOUnqJojrn0S
-OWXAEPNtLaNFPcNp5s8+TYpcN6VsMhd8q49iDuRXa+FkIo07rcaTYErEMm2+xGsG
-4UvgiTzvrXiUvT3RuxkahphDDoS7aBFHmgZJM+lI5vIADu/nTSobsqpbqI1ZrLfI
-d13Jn9Pox/KICs5uNLWPWmMkaEIvYCylgkTpEh/DegHD5+Mklwu8XkjhM0ugzfrO
-dZCXIPQLTI5pxYvNHKyKf9QYIscQCVLcOhc9OlwDme74naC/73Iz30ONnxsc4yIk
-c5kCAwEAAaOByzCByDAdBgNVHQ4EFgQUcVlJTaVDScUO5HjpXLdOgKiju14wHwYD
-VR0jBBgwFoAUcVlJTaVDScUO5HjpXLdOgKiju14wNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMQcdWyEolkIjDBbH2Ma
+t4B22+GCKGD4tdxrsJJD1Mk87o0M4QQUnioDJAL7PHrL0kJKnzZcp37kyD0sNAqe
+C0MHh2kKndxAOWYxcfBRuNIkLq2NPfZyQLqj2BL99i2rI0E9MnYd4nfiLgtd+AUS
+2QiqSRhSQQFD9NqxpckGL9dSsxvd7hZGi+Tv+BJSfQUpz6KySzNmGCcYOroWD2J7
+wtPVGWId2mqEoC7j0XGRPJFowEAiS/sNtmiA2Lj4oBH02W/5UMx2/68cv04SdtHq
+PJaFdsIwBwOSUzX9JmZ86kitl+clFoNthAHPnwYL1zd5jmglRIhyp50rfFcka3IV
+pe0CAwEAAaOByzCByDAdBgNVHQ4EFgQUaAFyfjW9gKCuWVzSHiFScgQxTOAwHwYD
+VR0jBBgwFoAUaAFyfjW9gKCuWVzSHiFScgQxTOAwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAgUcw5DzwM
-Z0cMc/AADVf7b/5M48HRpvdAVEyRD8rh67N6RA5X9YEfmk+BV9iRAXsJamEZBI8A
-etFbP8sbwFOk2txApe+bWRr8mbINZiLu19ppck2xROktV4RS1SvFd6yn0PInEmtc
-Qno9/OgEkZiqHT9AnZviQyRHe7gkI6NHJM2aRIf4p8QHkJpzYOEOe4Kh73NOAkZt
-BuJYj3lHeaZZdc+sXeI3bIg/v1cA9fsJU/RfBkJYXnVIln1P3TtF03xhj3UgF6Au
-HAhLIj83vtdDidpZrHmHHmrMU01b6QrWQKWgKJlXRF3Se78COKPE3xSpwbLsFSF7
-hKGhVvi5RULN
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA7cYXFv4NV
+x4ReUcxLADWC9ZDAe5X1xPD/W4q6g4pCOrsLXeYKOpEsmShA00luNFd73h+92Sy0
+lWnr53kBbOyp4HiCjmgzVqdYmdRKl3OxvdfuvQcYqEfTKF0jB1khKrHgOvAhJB1E
+Zt0p6gL4F30rs/gVOg1gQtN98B1ZMJmuNiS8x9GXT0RnGbnqMw3nV4GIbjU9R4RD
+9/dDGtxnIS6jl3i8BkZpBCCL6JRLqILDKqSsWWBOWUbkf8xZIbRznilRqUhx5vZe
+7CXwjodMtE1iEhRlSaNM/VmAOZcqV/BvmvrN0KfbNWCBIxO+pCkAvVjo4uGQJP33
+Tv5N+8epKugk
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -249,6 +249,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: RSA modulus too small
   actual: 512
diff --git a/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem b/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem
index 95a19b1..a4f8249 100644
--- a/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem
+++ b/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c1:2c:42:ca:d9:bd:0d:55:79:40:9a:cf:f4:1b:
-                    de:4e:e7:8b:77:40:55:83:bf:2c:27:72:58:db:62:
-                    24:12:e2:e5:4e:36:09:95:e0:0d:5b:09:d9:f8:bf:
-                    e5:f8:3a:d4:9a:c9:5a:ff:16:44:16:21:15:bc:cf:
-                    f6:99:ad:5c:bf:74:9a:02:3e:91:99:28:2b:76:eb:
-                    fe:14:8c:24:a2:f9:41:b3:7a:86:b2:15:34:a4:fc:
-                    93:49:42:b6:ee:20:70:61:f8:8e:ae:8b:55:aa:4f:
-                    3f:ec:1e:63:45:24:c4:01:c1:68:c2:cf:a7:c5:29:
-                    58:a7:c2:cc:89:00:25:b0:1a:b1:a0:dd:52:e4:3c:
-                    41:ff:2a:3b:97:07:63:70:13:01:3d:eb:1d:a1:12:
-                    f2:27:0a:c0:47:8a:96:f4:c9:f0:2f:b1:2a:7a:fa:
-                    57:f8:60:98:c5:b8:03:ce:36:fc:32:73:39:13:46:
-                    5b:71:02:42:22:45:4c:11:1d:3d:e1:77:53:9c:8d:
-                    0b:a0:bf:68:67:b4:b2:2b:6a:9a:1f:da:dd:dd:c2:
-                    0d:0c:12:00:ff:d9:d2:36:77:52:72:32:30:ea:68:
-                    bb:62:55:37:24:aa:13:92:a4:b5:8c:9d:71:19:6b:
-                    4a:1a:38:b0:21:79:14:70:d3:e9:7e:92:91:fc:8a:
-                    c7:35
+                    00:cd:72:19:2b:f3:f4:0b:d9:86:07:ec:81:9e:63:
+                    51:5c:dd:32:6c:6c:77:2a:01:c9:de:cf:01:50:b9:
+                    c7:a9:6e:83:a8:72:d5:83:b9:32:ce:a8:e2:ba:f8:
+                    32:41:4d:0f:ab:41:03:3b:4d:fa:19:43:07:85:f1:
+                    1a:c8:f7:46:47:c6:0f:5a:0d:d1:f3:1d:2f:f1:12:
+                    3b:cb:59:12:d8:06:fd:93:6f:95:99:63:97:0f:88:
+                    47:07:82:8f:58:32:62:76:dd:55:8a:0c:61:c9:ba:
+                    21:92:6f:e8:d4:2d:22:cb:cc:cc:d9:72:74:cd:38:
+                    0f:ef:30:96:88:b7:a8:24:3b:03:4b:e5:23:91:c2:
+                    40:98:59:b9:f7:7c:08:7b:04:b2:4f:e5:7c:e1:5d:
+                    98:ed:43:67:f0:23:f0:1b:24:69:e9:48:c5:05:5b:
+                    60:8e:b2:d7:54:9a:34:97:05:07:4f:e9:d4:6f:06:
+                    ea:b8:26:7b:99:e1:9a:12:04:eb:a2:73:4e:17:73:
+                    dc:68:4b:36:be:f0:42:d2:92:b2:3e:99:ca:b6:11:
+                    d9:ea:4a:10:c8:68:c7:27:c5:7c:9b:f2:18:c7:98:
+                    c8:46:c0:75:ee:dd:80:47:4f:2a:6c:3c:bc:5d:2d:
+                    86:01:72:19:80:95:89:28:d8:c7:3e:36:96:69:30:
+                    1b:95
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E2:9C:21:ED:AF:F9:55:73:3F:68:B8:CD:03:B2:45:FB:C8:4F:35:8C
+                46:75:48:47:EF:3B:5F:4D:A8:17:46:94:F8:D2:FD:FD:59:0F:65:82
             X509v3 Authority Key Identifier: 
-                keyid:71:4E:D7:4E:A8:0A:43:13:41:FE:F4:50:09:92:D0:56:1D:44:8A:3F
+                keyid:6F:70:17:EA:DE:B7:B8:63:CC:DA:8C:DF:5F:22:65:D4:BA:16:37:C8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,29 +55,29 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: ecdsa-with-SHA256
-         30:65:02:30:16:0c:16:b2:2c:2e:68:f7:e6:c9:e6:fc:25:67:
-         ab:1b:cd:65:0b:30:ca:d4:92:0b:0a:26:40:cd:7b:47:b5:37:
-         8b:84:12:b2:51:53:3e:a9:b8:d0:fa:0b:e5:ec:54:2e:02:31:
-         00:e5:d7:43:9b:58:f1:7e:90:79:de:63:49:7f:5b:fe:7a:34:
-         2e:5a:d1:92:13:66:3a:e0:1c:ea:77:e1:98:1c:a9:38:d5:ce:
-         98:7b:1f:5b:8a:d4:01:cb:35:7a:d5:74:8a
+         30:66:02:31:00:94:3c:e5:44:e7:b4:c2:82:ff:18:f6:1d:a3:
+         25:59:f8:50:9b:ff:20:60:87:d3:e9:47:ef:cb:8f:54:5e:ab:
+         ce:81:df:1d:35:a1:77:b0:24:9b:18:78:45:a6:d4:e6:88:02:
+         31:00:f4:e1:e1:f3:9f:83:b7:e6:19:21:b9:ce:8b:44:5a:eb:
+         dd:1c:5d:fe:64:77:f1:8f:35:bb:0f:09:87:ac:3d:2f:28:a3:
+         aa:3b:59:f0:2e:e1:ce:e0:5a:cc:b2:1a:3e:b2
 -----BEGIN CERTIFICATE-----
-MIIC7DCCAnKgAwIBAgIBATAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxJbnRlcm1l
+MIIC7TCCAnKgAwIBAgIBATAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxJbnRlcm1l
 ZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYDVQQD
-DAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBLELK2b0N
-VXlAms/0G95O54t3QFWDvywncljbYiQS4uVONgmV4A1bCdn4v+X4OtSayVr/FkQW
-IRW8z/aZrVy/dJoCPpGZKCt26/4UjCSi+UGzeoayFTSk/JNJQrbuIHBh+I6ui1Wq
-Tz/sHmNFJMQBwWjCz6fFKVinwsyJACWwGrGg3VLkPEH/KjuXB2NwEwE96x2hEvIn
-CsBHipb0yfAvsSp6+lf4YJjFuAPONvwyczkTRltxAkIiRUwRHT3hd1OcjQugv2hn
-tLIrapof2t3dwg0MEgD/2dI2d1JyMjDqaLtiVTckqhOSpLWMnXEZa0oaOLAheRRw
-0+l+kpH8isc1AgMBAAGjgekwgeYwHQYDVR0OBBYEFOKcIe2v+VVzP2i4zQOyRfvI
-TzWMMB8GA1UdIwQYMBaAFHFO106oCkMTQf70UAmS0FYdRIo/MD8GCCsGAQUFBwEB
+DAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNchkr8/QL
+2YYH7IGeY1Fc3TJsbHcqAcnezwFQucepboOoctWDuTLOqOK6+DJBTQ+rQQM7TfoZ
+QweF8RrI90ZHxg9aDdHzHS/xEjvLWRLYBv2Tb5WZY5cPiEcHgo9YMmJ23VWKDGHJ
+uiGSb+jULSLLzMzZcnTNOA/vMJaIt6gkOwNL5SORwkCYWbn3fAh7BLJP5XzhXZjt
+Q2fwI/AbJGnpSMUFW2COstdUmjSXBQdP6dRvBuq4JnuZ4ZoSBOuic04Xc9xoSza+
+8ELSkrI+mcq2EdnqShDIaMcnxXyb8hjHmMhGwHXu3YBHTypsPLxdLYYBchmAlYko
+2Mc+NpZpMBuVAgMBAAGjgekwgeYwHQYDVR0OBBYEFEZ1SEfvO19NqBdGlPjS/f1Z
+D2WCMB8GA1UdIwQYMBaAFG9wF+ret7hjzNqM318iZdS6FjfIMD8GCCsGAQUFBwEB
 BDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVkaWF0
 ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0ludGVy
 bWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMB
-BggrBgEFBQcDAjAKBggqhkjOPQQDAgNoADBlAjAWDBayLC5o9+bJ5vwlZ6sbzWUL
-MMrUkgsKJkDNe0e1N4uEErJRUz6puND6C+XsVC4CMQDl10ObWPF+kHneY0l/W/56
-NC5a0ZITZjrgHOp34ZgcqTjVzph7H1uK1AHLNXrVdIo=
+BggrBgEFBQcDAjAKBggqhkjOPQQDAgNpADBmAjEAlDzlROe0woL/GPYdoyVZ+FCb
+/yBgh9PpR+/Lj1Req86B3x01oXewJJsYeEWm1OaIAjEA9OHh85+Dt+YZIbnOi0Ra
+690cXf5kd/GPNbsPCYesPS8oo6o7WfAu4c7gWsyyGj6y
 -----END CERTIFICATE-----
 
 Certificate:
@@ -94,19 +94,19 @@
             Public Key Algorithm: id-ecPublicKey
                 Public-Key: (384 bit)
                 pub: 
-                    04:ff:41:5f:16:8c:e0:75:59:3b:4a:9c:84:3e:79:
-                    93:48:a5:98:7e:93:58:58:d5:c9:ca:60:b8:6d:0c:
-                    84:81:40:de:22:95:f1:6e:56:49:8f:02:45:ce:fe:
-                    e8:71:71:02:25:a7:47:5f:63:0e:4a:46:4d:e0:b3:
-                    73:9e:d8:91:2a:ad:51:47:80:b0:f5:4a:5e:0d:93:
-                    a6:78:93:a7:f9:1d:ad:b6:23:78:2e:23:e0:62:f6:
-                    77:f8:1c:db:31:82:c1
+                    04:58:a6:cc:26:37:62:38:1e:61:3b:d7:6b:ee:13:
+                    74:3c:a3:53:83:b6:43:50:a1:28:6b:02:3a:7d:9e:
+                    a1:7b:8f:3e:f7:d3:33:bc:0a:f7:92:8d:24:cc:55:
+                    af:e6:3c:c3:ee:88:cd:9d:80:4d:ce:2c:a7:41:b7:
+                    d0:26:41:bb:80:d6:0c:8b:23:9a:c3:5b:87:0c:eb:
+                    db:cf:86:5a:8a:17:2b:1d:f5:96:07:bc:ac:09:a2:
+                    dc:7b:ee:99:70:fc:17
                 ASN1 OID: secp384r1
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                71:4E:D7:4E:A8:0A:43:13:41:FE:F4:50:09:92:D0:56:1D:44:8A:3F
+                6F:70:17:EA:DE:B7:B8:63:CC:DA:8C:DF:5F:22:65:D4:BA:16:37:C8
             X509v3 Authority Key Identifier: 
-                keyid:39:BF:53:7E:B4:7B:97:5D:7A:E5:12:6D:FA:8B:79:C5:67:3E:1E:E4
+                keyid:44:4E:C3:7E:9D:3D:AD:EC:A9:F7:EB:5E:A4:92:86:71:2A:DC:9C:FE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -121,37 +121,37 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:53:ac:75:a8:06:52:55:48:4f:d0:a3:92:51:d4:23:06:f7:
-         98:2b:b4:15:2e:65:26:44:c0:75:64:c5:df:73:cd:dc:a3:5a:
-         7f:86:f6:e8:6b:bd:8f:3a:7e:20:6e:b9:df:4c:07:78:f5:1d:
-         b4:4c:d0:8b:0b:71:ad:74:6d:f7:48:fb:a8:45:e6:2f:87:d8:
-         89:e3:de:b4:15:fa:71:47:19:c6:88:a2:9c:66:cd:44:05:22:
-         f8:d8:0b:1f:72:4d:ef:98:76:15:7d:41:20:53:2b:ef:e1:35:
-         31:7c:b7:8e:70:c0:23:5a:ab:9a:58:5e:0b:02:d6:9c:7c:6e:
-         d0:29:ad:19:95:e2:1f:e8:18:c7:c3:25:cf:21:30:52:28:32:
-         fa:cf:07:4a:19:f2:39:bd:bb:05:96:4e:11:91:9f:b4:ae:5c:
-         9e:bc:ac:f4:4a:b8:9a:73:40:4b:88:05:6d:3c:9e:c7:7d:0a:
-         16:4f:d1:96:67:17:fa:e6:43:8c:0e:4c:26:2e:4c:51:8b:18:
-         ee:8d:e4:69:09:ca:7f:ea:8d:33:38:fa:45:e5:d7:06:74:1d:
-         bd:05:32:c7:1f:fd:84:9e:42:f7:7d:f2:24:ab:54:50:ba:69:
-         3e:84:15:fe:f9:20:5a:77:8a:20:af:f3:97:35:1e:16:ee:92:
-         ef:9d:c7:5d
+         51:54:a1:f5:c1:21:d7:7b:04:b5:c7:e9:4a:49:f7:2a:f0:66:
+         e3:f5:26:2c:1a:c2:48:bb:fc:d0:cd:3b:5f:d1:4c:ad:5c:59:
+         5d:de:98:9d:56:bc:bb:6b:54:24:b1:64:7d:92:dc:2b:9f:46:
+         b9:d4:4d:3b:15:40:2c:7d:b0:a6:4d:d7:cd:98:ef:89:3d:95:
+         c7:b4:c0:f8:ea:7d:08:3f:cd:e6:bf:44:20:1e:6c:82:db:1d:
+         53:9c:b1:3d:55:1b:5c:c4:99:35:dc:8c:ce:b3:f4:d3:e6:09:
+         e0:36:07:40:59:49:74:91:ab:37:92:aa:c5:0f:34:78:9e:1a:
+         02:52:fe:67:c6:13:ca:98:2e:6e:a6:f7:0b:84:af:43:1a:b9:
+         da:29:e9:e1:b5:7f:73:2f:f2:65:38:b2:1d:05:5f:51:1b:31:
+         8c:59:39:73:6b:14:df:72:79:31:c7:17:9c:55:37:0f:70:cf:
+         96:8d:dd:26:d8:fa:fd:e8:bf:f3:43:7a:bb:26:47:14:31:28:
+         4b:36:c2:91:24:cb:50:c3:30:51:5f:77:3f:ed:ef:40:b2:a7:
+         72:57:27:83:30:17:6c:83:5e:b8:d2:6f:0b:39:72:eb:6c:d3:
+         5b:22:9e:35:e9:fb:68:56:20:e6:35:a9:18:8d:20:99:7f:8b:
+         2a:2a:51:01
 -----BEGIN CERTIFICATE-----
 MIICvzCCAaegAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/0FfFozgdVk7SpyEPnmT
-SKWYfpNYWNXJymC4bQyEgUDeIpXxblZJjwJFzv7ocXECJadHX2MOSkZN4LNzntiR
-Kq1RR4Cw9UpeDZOmeJOn+R2ttiN4LiPgYvZ3+BzbMYLBo4HLMIHIMB0GA1UdDgQW
-BBRxTtdOqApDE0H+9FAJktBWHUSKPzAfBgNVHSMEGDAWgBQ5v1N+tHuXXXrlEm36
-i3nFZz4e5DA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwt
+ZXJtZWRpYXRlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWKbMJjdiOB5hO9dr7hN0
+PKNTg7ZDUKEoawI6fZ6he48+99MzvAr3ko0kzFWv5jzD7ojNnYBNziynQbfQJkG7
+gNYMiyOaw1uHDOvbz4ZaihcrHfWWB7ysCaLce+6ZcPwXo4HLMIHIMB0GA1UdDgQW
+BBRvcBfq3re4Y8zajN9fImXUuhY3yDAfBgNVHSMEGDAWgBRETsN+nT2t7Kn3616k
+koZxKtyc/jA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwt
 Zm9yLWFpYS9Sb290LmNlcjAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZv
 ci1jcmwvUm9vdC5jcmwwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-DQYJKoZIhvcNAQELBQADggEBANJTrHWoBlJVSE/Qo5JR1CMG95grtBUuZSZEwHVk
-xd9zzdyjWn+G9uhrvY86fiBuud9MB3j1HbRM0IsLca10bfdI+6hF5i+H2Inj3rQV
-+nFHGcaIopxmzUQFIvjYCx9yTe+YdhV9QSBTK+/hNTF8t45wwCNaq5pYXgsC1px8
-btAprRmV4h/oGMfDJc8hMFIoMvrPB0oZ8jm9uwWWThGRn7SuXJ68rPRKuJpzQEuI
-BW08nsd9ChZP0ZZnF/rmQ4wOTCYuTFGLGO6N5GkJyn/qjTM4+kXl1wZ0Hb0FMscf
-/YSeQvd98iSrVFC6aT6EFf75IFp3iiCv85c1Hhbuku+dx10=
+DQYJKoZIhvcNAQELBQADggEBAFFUofXBIdd7BLXH6UpJ9yrwZuP1Jiwawki7/NDN
+O1/RTK1cWV3emJ1WvLtrVCSxZH2S3CufRrnUTTsVQCx9sKZN182Y74k9lce0wPjq
+fQg/zea/RCAebILbHVOcsT1VG1zEmTXcjM6z9NPmCeA2B0BZSXSRqzeSqsUPNHie
+GgJS/mfGE8qYLm6m9wuEr0Maudop6eG1f3Mv8mU4sh0FX1EbMYxZOXNrFN9yeTHH
+F5xVNw9wz5aN3SbY+v3ov/NDersmRxQxKEs2wpEky1DDMFFfdz/t70Cyp3JXJ4Mw
+F2yDXrjSbws5cuts01sinjXp+2hWIOY1qRiNIJl/iyoqUQE=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -168,30 +168,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:dd:a5:d8:2e:59:ed:a6:74:62:3b:71:d5:2f:0c:
-                    b5:e6:a8:d6:d3:d2:f3:38:d5:6a:14:e4:ec:7e:d0:
-                    46:81:35:0e:27:96:4e:25:0c:9f:81:85:18:03:d2:
-                    22:1b:14:cc:54:4b:96:0e:35:0c:4c:0f:20:69:3d:
-                    ff:48:26:b4:28:6c:6a:1f:95:87:df:09:9e:ab:60:
-                    43:97:3c:3a:7b:4a:d3:c6:66:ba:1a:79:71:58:29:
-                    cb:78:38:19:de:12:c6:09:fa:f9:fd:13:a0:e1:0e:
-                    d5:e6:c2:36:d9:dc:c5:f4:ef:08:42:e8:bf:43:d1:
-                    b5:8a:c9:81:b1:9c:16:8f:8d:b2:aa:9e:61:30:ed:
-                    fc:12:f0:a6:f5:9e:6a:1e:6e:d7:7c:3f:ff:76:fa:
-                    6f:53:8b:49:08:84:9a:69:37:bc:f5:ee:e7:ba:ee:
-                    39:5b:31:28:05:5a:39:d3:75:5a:1a:b2:5a:ef:48:
-                    d4:f5:5c:ab:99:b0:41:cd:50:cd:f4:36:c3:4d:e9:
-                    42:2c:9d:2c:86:ea:a8:e4:d0:c9:1f:d0:c3:92:1b:
-                    ef:c0:2c:a2:ed:2a:23:2f:ba:c0:27:a5:13:98:1d:
-                    d3:ba:71:91:29:ae:2c:85:44:ff:bd:b5:c2:bc:e3:
-                    fc:ff:c1:78:51:57:e9:5e:ee:1e:c2:29:d1:8c:91:
-                    60:9d
+                    00:de:88:c0:64:47:79:b2:3c:ad:8a:e2:ec:86:38:
+                    86:cf:f6:c1:83:5f:68:b8:8d:28:12:8b:b1:29:d1:
+                    33:b9:d4:44:22:03:65:86:27:ea:f4:5e:fc:14:50:
+                    0b:35:36:18:c5:80:ce:b5:c2:a4:1a:10:a4:79:37:
+                    ea:1c:c1:14:08:14:1c:3a:72:ec:60:3f:72:47:ea:
+                    a5:ca:af:06:60:c7:6a:53:21:c7:f9:d6:0a:1e:58:
+                    55:37:79:e3:e1:e4:11:69:40:76:75:40:e3:51:20:
+                    c9:55:ab:67:4f:ea:ab:0f:ad:cd:0a:bf:54:cd:12:
+                    d2:a8:b8:11:79:8f:f2:94:54:6f:74:6c:b3:b7:64:
+                    5e:a7:c4:ec:bd:fe:0a:b2:dc:72:25:45:32:b9:33:
+                    02:b4:e0:6f:4f:65:a5:eb:2b:31:b3:24:58:61:5f:
+                    11:ef:83:b3:2c:98:86:d1:6d:8e:11:fa:fa:22:e4:
+                    6e:16:64:15:3a:71:7c:30:36:f5:85:51:c7:b9:aa:
+                    a4:dd:70:8b:41:fe:45:b3:42:40:fc:8d:31:6b:11:
+                    4c:20:b3:14:eb:33:f9:62:13:30:8c:ba:12:10:a2:
+                    1e:a6:18:63:80:80:6f:fe:03:01:61:a4:4e:2c:78:
+                    f0:cd:a3:db:d2:6c:99:1d:f6:4f:e2:1d:42:cd:c7:
+                    31:e1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                39:BF:53:7E:B4:7B:97:5D:7A:E5:12:6D:FA:8B:79:C5:67:3E:1E:E4
+                44:4E:C3:7E:9D:3D:AD:EC:A9:F7:EB:5E:A4:92:86:71:2A:DC:9C:FE
             X509v3 Authority Key Identifier: 
-                keyid:39:BF:53:7E:B4:7B:97:5D:7A:E5:12:6D:FA:8B:79:C5:67:3E:1E:E4
+                keyid:44:4E:C3:7E:9D:3D:AD:EC:A9:F7:EB:5E:A4:92:86:71:2A:DC:9C:FE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -206,41 +206,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         0d:d6:63:36:cb:eb:0f:98:6d:d8:0a:17:d2:6e:77:43:17:e8:
-         e6:36:c6:2a:40:2c:1e:64:f3:84:13:31:b9:fd:b7:6f:1d:b0:
-         d3:49:55:4b:76:ac:9d:6b:9c:3e:2b:fd:c6:d2:0c:df:9b:ef:
-         4a:cf:2b:9c:61:5e:6b:2a:7d:b4:08:8e:a7:2a:aa:a9:a5:0d:
-         8e:e1:0a:99:fc:f7:fa:f2:34:50:6a:aa:3b:30:ac:7c:93:b1:
-         dc:56:9e:2c:98:12:05:26:51:ff:c5:bf:06:44:24:7e:98:21:
-         aa:32:5e:f6:25:74:6d:31:f4:6b:f6:b0:70:30:87:04:b6:89:
-         3d:a0:0f:cc:a6:d4:bd:93:df:98:bc:a9:92:ca:3f:ff:ef:29:
-         4b:f1:3a:6a:c8:69:89:a6:93:01:54:49:af:20:4f:4d:4d:df:
-         8a:4e:4a:ba:4b:a8:5e:85:46:96:a2:64:6f:78:f9:d7:6b:e5:
-         db:fb:39:42:3a:18:c7:08:ce:93:41:e3:3c:78:01:64:36:8b:
-         de:78:9e:13:42:52:72:13:f6:81:df:5e:7a:45:08:4f:0d:99:
-         f8:af:1e:71:d6:55:85:3a:2c:79:17:e3:df:8e:46:8d:39:13:
-         a4:c9:e7:3d:f2:9d:ef:e7:b9:12:6e:e3:76:3f:e7:c6:5c:fe:
-         1e:af:1b:50
+         58:da:b3:6f:d4:de:ab:8c:36:f6:53:8d:23:b6:d8:7d:3d:fb:
+         b7:08:25:07:aa:cd:f4:45:4d:df:1f:52:ed:eb:ef:ce:0b:c1:
+         96:d0:4c:6a:0b:d4:99:a0:82:1a:d5:4f:0c:4c:c9:bb:e8:4c:
+         84:14:c4:4a:f4:7d:f2:1d:4c:79:8f:e4:8f:9b:94:5d:b6:69:
+         b5:7e:83:4c:78:47:cb:c0:41:21:7e:d6:41:59:1c:1a:b4:e4:
+         5c:16:10:2a:fb:1c:f8:31:76:18:42:a1:2c:20:61:0e:b2:3a:
+         f3:3b:fb:87:e3:cc:ab:57:4a:1d:e7:aa:9a:b5:21:42:f6:e8:
+         4c:2b:65:84:fc:01:02:ef:79:d1:77:7e:da:8b:6b:8e:83:fd:
+         71:a2:bd:4b:1b:3f:bd:da:30:a4:01:0a:8d:bc:6d:bb:1b:f0:
+         39:ea:51:02:7f:af:a3:bf:75:e6:93:9a:79:26:18:14:bd:9e:
+         cd:c1:8d:a1:4f:f4:df:53:4e:78:8b:ef:31:5b:75:f5:78:8a:
+         0e:2f:fd:74:cb:48:2a:8e:3f:23:9d:7e:98:63:1f:37:6c:1b:
+         2b:93:12:39:4f:31:17:2c:68:3f:e7:86:44:0d:38:e0:2f:47:
+         ae:05:a0:ec:fe:36:39:f4:2a:21:16:67:1a:4c:22:b2:35:76:
+         99:ad:17:ea
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2l2C5Z7aZ0Yjtx1S8M
-teao1tPS8zjVahTk7H7QRoE1DieWTiUMn4GFGAPSIhsUzFRLlg41DEwPIGk9/0gm
-tChsah+Vh98JnqtgQ5c8OntK08Zmuhp5cVgpy3g4Gd4Sxgn6+f0ToOEO1ebCNtnc
-xfTvCELov0PRtYrJgbGcFo+NsqqeYTDt/BLwpvWeah5u13w//3b6b1OLSQiEmmk3
-vPXu57ruOVsxKAVaOdN1WhqyWu9I1PVcq5mwQc1QzfQ2w03pQiydLIbqqOTQyR/Q
-w5Ib78Asou0qIy+6wCelE5gd07pxkSmuLIVE/721wrzj/P/BeFFX6V7uHsIp0YyR
-YJ0CAwEAAaOByzCByDAdBgNVHQ4EFgQUOb9TfrR7l1165RJt+ot5xWc+HuQwHwYD
-VR0jBBgwFoAUOb9TfrR7l1165RJt+ot5xWc+HuQwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN6IwGRHebI8rYri7IY4
+hs/2wYNfaLiNKBKLsSnRM7nURCIDZYYn6vRe/BRQCzU2GMWAzrXCpBoQpHk36hzB
+FAgUHDpy7GA/ckfqpcqvBmDHalMhx/nWCh5YVTd54+HkEWlAdnVA41EgyVWrZ0/q
+qw+tzQq/VM0S0qi4EXmP8pRUb3Rss7dkXqfE7L3+CrLcciVFMrkzArTgb09lpesr
+MbMkWGFfEe+DsyyYhtFtjhH6+iLkbhZkFTpxfDA29YVRx7mqpN1wi0H+RbNCQPyN
+MWsRTCCzFOsz+WITMIy6EhCiHqYYY4CAb/4DAWGkTix48M2j29JsmR32T+IdQs3H
+MeECAwEAAaOByzCByDAdBgNVHQ4EFgQURE7Dfp09reyp9+tepJKGcSrcnP4wHwYD
+VR0jBBgwFoAURE7Dfp09reyp9+tepJKGcSrcnP4wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAN1mM2y+sP
-mG3YChfSbndDF+jmNsYqQCweZPOEEzG5/bdvHbDTSVVLdqyda5w+K/3G0gzfm+9K
-zyucYV5rKn20CI6nKqqppQ2O4QqZ/Pf68jRQaqo7MKx8k7HcVp4smBIFJlH/xb8G
-RCR+mCGqMl72JXRtMfRr9rBwMIcEtok9oA/MptS9k9+YvKmSyj//7ylL8TpqyGmJ
-ppMBVEmvIE9NTd+KTkq6S6hehUaWomRvePnXa+Xb+zlCOhjHCM6TQeM8eAFkNove
-eJ4TQlJyE/aB3156RQhPDZn4rx5x1lWFOix5F+PfjkaNOROkyec98p3v57kSbuN2
-P+fGXP4erxtQ
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBY2rNv1N6r
+jDb2U40jtth9Pfu3CCUHqs30RU3fH1Lt6+/OC8GW0ExqC9SZoIIa1U8MTMm76EyE
+FMRK9H3yHUx5j+SPm5Rdtmm1foNMeEfLwEEhftZBWRwatORcFhAq+xz4MXYYQqEs
+IGEOsjrzO/uH48yrV0od56qatSFC9uhMK2WE/AEC73nRd37ai2uOg/1xor1LGz+9
+2jCkAQqNvG27G/A56lECf6+jv3Xmk5p5JhgUvZ7NwY2hT/TfU054i+8xW3X1eIoO
+L/10y0gqjj8jnX6YYx83bBsrkxI5TzEXLGg/54ZEDTjgL0euBaDs/jY59CohFmca
+TCKyNXaZrRfq
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -252,3 +252,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem b/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem
index c7f8254..f588590d 100644
--- a/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem
+++ b/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bc:8a:b8:3e:5c:f9:f0:cc:33:10:6f:ab:ec:81:
-                    53:1c:4f:d3:c7:e2:c6:ac:57:9b:b0:a1:37:3d:2a:
-                    b8:4f:eb:23:8b:64:6d:2f:5b:f5:02:dc:5b:d5:11:
-                    ea:29:38:4c:76:40:f4:b0:b0:47:9f:6c:8d:89:91:
-                    f4:0d:e5:cb:bb:c2:2a:cc:c1:9b:3a:56:f6:26:8e:
-                    4a:df:2c:b3:7c:35:3f:71:a9:37:49:3c:1a:40:fd:
-                    5e:6f:1b:5e:a0:61:64:d1:40:80:d7:dd:2b:d4:32:
-                    4c:80:f8:5a:8c:b2:ff:b6:ea:91:73:59:00:5e:02:
-                    a8:49:1b:2b:fa:c2:9b:35:44:79:74:7b:02:8e:68:
-                    47:76:43:8d:23:d0:d0:f9:c4:8c:a1:aa:99:cb:55:
-                    24:a1:11:1c:88:0d:8a:5c:d9:46:a6:8f:ac:3f:83:
-                    e3:4e:35:90:03:fe:0e:2d:d7:c6:9b:a3:36:d7:7f:
-                    af:32:89:83:94:40:e7:87:1b:fe:f5:1b:1e:75:ba:
-                    f2:b5:70:f3:75:f8:85:b3:58:9d:5f:56:6b:60:0f:
-                    53:12:82:dc:01:67:28:66:2c:3e:f6:df:08:fb:b9:
-                    da:ce:00:60:b3:b4:65:fd:1d:1e:14:7c:90:9b:0b:
-                    d4:ca:ff:96:12:c0:2c:cd:fb:c3:4f:62:d0:67:59:
-                    bc:71
+                    00:cf:73:ae:ac:92:70:4c:27:dc:ab:a3:09:0d:3d:
+                    8c:39:aa:5f:85:f5:1d:6d:9b:86:9f:8a:bb:a4:81:
+                    d9:6b:9a:49:8e:28:b9:d2:c2:cb:7a:4b:c2:d6:11:
+                    91:b3:d0:81:e2:aa:e0:9c:ae:65:c1:11:8b:ea:d2:
+                    fc:9b:1b:98:80:b2:1e:71:65:94:5c:fa:44:de:e7:
+                    ac:12:61:05:97:e4:3d:f3:d8:e9:dc:7a:f8:41:91:
+                    47:57:1e:c7:c1:a4:59:68:a1:a2:d6:2e:b4:5d:6c:
+                    64:34:f3:92:68:3c:3e:b5:ee:50:6e:f9:ef:39:98:
+                    0c:6b:da:f8:a8:b0:6a:82:16:13:a3:06:8a:1e:3c:
+                    d3:ba:73:f9:bd:83:55:3e:76:d0:87:3c:8e:79:b0:
+                    b6:6b:f3:da:11:6d:0f:d0:1d:2f:0b:62:48:e6:e5:
+                    33:90:1d:b0:33:ed:1e:89:34:d8:a7:45:8b:c9:e4:
+                    1f:8d:33:9e:7b:cb:c8:09:1d:21:2d:a9:f4:b1:bf:
+                    2b:40:e2:c1:61:8b:b5:fc:3a:38:59:2c:75:16:65:
+                    d9:64:be:af:45:9b:22:77:b2:27:1c:fe:47:43:da:
+                    50:e6:14:26:f1:1e:63:c9:7c:7c:a5:01:db:41:36:
+                    fb:09:c3:a1:b8:3e:a5:fc:7a:37:57:7a:07:13:ae:
+                    44:43
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                2F:67:2E:92:9E:39:55:C4:47:23:6A:10:A9:37:87:97:74:0F:55:57
+                06:54:FE:69:6A:11:82:52:60:8B:E6:B1:29:65:C1:1E:67:0E:B7:DB
             X509v3 Authority Key Identifier: 
-                keyid:A7:A7:7E:EF:32:C8:D1:7C:DF:CA:EE:F4:4F:7A:EA:67:43:53:57:CF
+                keyid:E4:28:CA:C3:E7:10:CE:D3:40:BC:EB:CE:2F:95:4A:39:B8:8F:2E:F5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: md5WithRSAEncryption
-         30:9f:40:ac:31:10:78:0f:06:4b:ed:6d:de:05:20:c6:29:64:
-         66:a8:2a:4d:ac:b3:3d:40:d5:70:80:24:08:13:00:73:0b:90:
-         32:c3:fe:35:b3:8c:77:bb:d6:79:a9:84:e3:76:89:d9:0f:19:
-         2e:68:6a:ec:09:ef:9c:57:32:ee:9f:e5:0e:5e:4c:6b:87:eb:
-         e0:7b:e9:ed:b0:db:ef:34:7a:41:aa:7b:0d:b7:37:89:17:99:
-         b8:43:db:93:19:30:91:7c:25:fe:1d:cd:69:02:b8:6d:c6:08:
-         fa:7f:d8:3c:e5:9a:9d:fd:af:13:53:5a:54:a7:5d:d1:e3:46:
-         3a:c9:8b:ac:e3:cb:e8:67:a8:e0:cf:bb:ab:45:5c:d6:d5:51:
-         d2:2a:d2:b2:f8:3f:05:d2:20:e8:95:17:7d:43:fe:af:cd:1c:
-         fa:d2:8f:8f:3b:b1:2b:3d:22:06:d8:c7:0d:00:64:8a:35:40:
-         32:6e:2c:07:be:5f:e7:9d:06:4f:b1:99:a9:fb:2e:03:80:79:
-         5e:19:60:a9:7f:e5:12:bb:ba:a8:f2:34:d7:00:29:11:ab:8d:
-         51:52:67:33:99:5c:08:de:85:a6:ea:42:9d:08:76:d1:f1:23:
-         fa:c0:4c:ff:38:5a:de:1b:7a:16:e7:79:cf:a0:d0:2f:b7:e5:
-         d4:8e:92:4f
+         92:96:10:89:32:53:f5:5c:99:56:a9:2d:f3:f6:c2:a4:29:a5:
+         a1:ee:21:e8:c2:65:ed:4d:ac:6e:c0:b4:36:8e:87:9b:96:91:
+         6f:7c:10:13:51:f4:1e:98:f1:9f:17:ce:e8:bd:e5:b0:c4:38:
+         e3:40:b9:93:6d:1a:27:fe:ba:8f:44:0f:24:04:4b:36:a4:5c:
+         30:40:bb:05:27:8f:76:9b:b8:1f:bd:4d:aa:19:ed:7c:81:0c:
+         96:9b:28:c5:f4:82:ab:cd:a8:be:4c:34:fc:71:3f:af:4d:6f:
+         55:48:ae:a9:76:fa:2e:2b:51:97:89:2f:44:b6:2b:b0:c8:bb:
+         66:a6:ea:db:c2:36:81:07:5d:fb:dc:f3:58:66:77:bd:71:21:
+         67:d6:af:da:e1:e1:c0:c5:cc:15:63:e3:06:e3:e1:a6:5d:ce:
+         aa:07:7e:a5:ed:9c:75:d8:4e:99:b4:4c:e6:54:47:1e:db:60:
+         e4:36:ab:51:31:11:a2:61:c9:e8:27:d4:9a:dd:72:6b:e7:a8:
+         cc:9c:89:cb:7d:d3:01:38:8b:59:a3:54:59:e0:ab:fa:7d:5e:
+         69:3d:1b:85:30:ee:6f:fc:a6:fe:e4:bd:ea:43:cc:a5:c0:d1:
+         27:fb:e9:cd:17:1a:e2:5a:04:bc:d9:4c:ce:2f:a5:33:af:02:
+         36:20:23:e5
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQQFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8irg+
-XPnwzDMQb6vsgVMcT9PH4sasV5uwoTc9KrhP6yOLZG0vW/UC3FvVEeopOEx2QPSw
-sEefbI2JkfQN5cu7wirMwZs6VvYmjkrfLLN8NT9xqTdJPBpA/V5vG16gYWTRQIDX
-3SvUMkyA+FqMsv+26pFzWQBeAqhJGyv6wps1RHl0ewKOaEd2Q40j0ND5xIyhqpnL
-VSShERyIDYpc2Uamj6w/g+NONZAD/g4t18abozbXf68yiYOUQOeHG/71Gx51uvK1
-cPN1+IWzWJ1fVmtgD1MSgtwBZyhmLD723wj7udrOAGCztGX9HR4UfJCbC9TK/5YS
-wCzN+8NPYtBnWbxxAgMBAAGjgekwgeYwHQYDVR0OBBYEFC9nLpKeOVXERyNqEKk3
-h5d0D1VXMB8GA1UdIwQYMBaAFKenfu8yyNF838ru9E966mdDU1fPMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPc66s
+knBMJ9yrowkNPYw5ql+F9R1tm4afirukgdlrmkmOKLnSwst6S8LWEZGz0IHiquCc
+rmXBEYvq0vybG5iAsh5xZZRc+kTe56wSYQWX5D3z2OncevhBkUdXHsfBpFlooaLW
+LrRdbGQ085JoPD617lBu+e85mAxr2viosGqCFhOjBooePNO6c/m9g1U+dtCHPI55
+sLZr89oRbQ/QHS8LYkjm5TOQHbAz7R6JNNinRYvJ5B+NM557y8gJHSEtqfSxvytA
+4sFhi7X8OjhZLHUWZdlkvq9FmyJ3sicc/kdD2lDmFCbxHmPJfHylAdtBNvsJw6G4
+PqX8ejdXegcTrkRDAgMBAAGjgekwgeYwHQYDVR0OBBYEFAZU/mlqEYJSYIvmsSll
+wR5nDrfbMB8GA1UdIwQYMBaAFOQoysPnEM7TQLzrzi+VSjm4jy71MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQQFAAOCAQEAMJ9ArDEQeA8GS+1t3gUg
-xilkZqgqTayzPUDVcIAkCBMAcwuQMsP+NbOMd7vWeamE43aJ2Q8ZLmhq7AnvnFcy
-7p/lDl5Ma4fr4Hvp7bDb7zR6Qap7Dbc3iReZuEPbkxkwkXwl/h3NaQK4bcYI+n/Y
-POWanf2vE1NaVKdd0eNGOsmLrOPL6Geo4M+7q0Vc1tVR0irSsvg/BdIg6JUXfUP+
-r80c+tKPjzuxKz0iBtjHDQBkijVAMm4sB75f550GT7GZqfsuA4B5XhlgqX/lEru6
-qPI01wApEauNUVJnM5lcCN6FpupCnQh20fEj+sBM/zha3ht6Fud5z6DQL7fl1I6S
-Tw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQQFAAOCAQEAkpYQiTJT9VyZVqkt8/bC
+pCmloe4h6MJl7U2sbsC0No6Hm5aRb3wQE1H0HpjxnxfO6L3lsMQ440C5k20aJ/66
+j0QPJARLNqRcMEC7BSePdpu4H71NqhntfIEMlpsoxfSCq82ovkw0/HE/r01vVUiu
+qXb6LitRl4kvRLYrsMi7Zqbq28I2gQdd+9zzWGZ3vXEhZ9av2uHhwMXMFWPjBuPh
+pl3Oqgd+pe2cddhOmbRM5lRHHttg5DarUTERomHJ6CfUmt1ya+eozJyJy33TATiL
+WaNUWeCr+n1eaT0bhTDub/ym/uS96kPMpcDRJ/vpzRca4loEvNlMzi+lM68CNiAj
+5Q==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b1:0a:34:0b:b1:d9:65:b5:ea:7a:ac:f5:96:11:
-                    68:ba:f0:c9:6b:57:c7:97:7e:f4:bb:5d:31:4e:43:
-                    9b:04:7f:a7:2e:fd:4c:e0:03:c7:0d:ac:70:24:0e:
-                    bc:26:a2:5d:48:71:04:9b:43:8c:97:e4:2c:df:7c:
-                    59:39:eb:a3:94:b3:5b:87:d5:11:b6:c1:4a:e9:7b:
-                    e8:f8:c5:31:3b:2c:4d:f0:47:34:75:a8:88:6d:22:
-                    a9:24:dc:00:1f:a0:36:1e:e3:a7:92:b1:00:9d:f8:
-                    ef:27:46:63:60:23:67:48:e6:5d:66:b3:3d:b6:84:
-                    04:3f:b1:1b:2f:b7:8e:71:26:28:32:ff:de:fa:b0:
-                    cb:e2:90:5a:72:9a:83:1d:de:c7:ad:b1:5d:68:11:
-                    9e:6a:ac:44:6b:06:cc:93:6c:a9:13:af:a4:72:e2:
-                    34:4d:c4:d7:8f:ee:99:f4:e4:db:d1:19:45:bf:97:
-                    76:59:7d:b9:32:63:07:a0:1c:e3:19:98:f6:aa:d8:
-                    ba:44:f6:ec:5f:eb:46:d1:63:70:56:00:a1:f1:ce:
-                    18:c3:a5:77:27:81:e6:18:65:78:9a:c4:87:f9:36:
-                    2e:b6:fc:5c:75:a9:a9:59:6a:df:99:26:07:c9:1d:
-                    1a:a8:4f:6e:b6:10:92:4f:96:c1:74:30:4a:5c:8b:
-                    bd:7b
+                    00:cd:f5:47:0a:01:75:30:e1:50:a9:cb:dd:cc:5d:
+                    b6:f5:d1:d9:cb:eb:d1:0a:51:01:38:0a:a3:22:ff:
+                    e7:05:a9:ee:dc:0f:36:2c:81:ba:04:8a:b7:ce:6e:
+                    1f:51:d8:d3:3e:65:fc:1d:d0:d6:02:d8:f0:56:0a:
+                    3e:6e:9b:cb:55:59:6f:1e:2c:2f:ce:94:c9:d8:db:
+                    e5:a9:08:d0:55:36:9e:da:68:e8:16:e2:c1:df:07:
+                    c6:99:a1:e8:0c:19:69:2f:03:fe:13:af:eb:b9:7f:
+                    16:87:4d:00:56:3a:e0:66:00:f2:50:45:a1:94:88:
+                    60:a4:95:ae:33:fa:fb:52:a5:29:29:2d:74:55:71:
+                    e3:08:11:dc:45:6b:84:e2:00:96:67:34:d9:bc:8d:
+                    f9:7c:32:9b:95:07:41:76:bb:f2:ab:47:f7:c6:03:
+                    bc:d1:eb:a7:47:53:dd:e6:2d:6f:84:df:86:9e:32:
+                    79:02:0b:9c:3a:f7:9c:dd:20:35:fa:6a:0e:23:f9:
+                    11:9a:2e:37:f9:0c:f1:d0:7e:ee:80:4c:4b:59:9a:
+                    6d:ef:ab:3d:68:9f:0d:f1:25:74:ee:b1:cb:63:92:
+                    25:83:3e:d3:e4:d7:5b:77:cd:fa:ed:3a:38:82:a3:
+                    e9:66:2b:fe:4c:53:58:68:4b:b5:16:7c:e0:3d:36:
+                    55:85
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A7:A7:7E:EF:32:C8:D1:7C:DF:CA:EE:F4:4F:7A:EA:67:43:53:57:CF
+                E4:28:CA:C3:E7:10:CE:D3:40:BC:EB:CE:2F:95:4A:39:B8:8F:2E:F5
             X509v3 Authority Key Identifier: 
-                keyid:7F:7A:CD:B2:58:B8:B5:62:1A:C2:DE:B4:6B:B5:74:E9:B8:DC:77:87
+                keyid:1E:E0:25:E8:F4:DC:28:15:B1:5A:B6:34:96:12:E4:2F:B8:E8:7C:B1
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         96:e8:cf:14:ab:83:41:2e:62:24:7e:03:ad:0e:ae:8e:6a:93:
-         ed:3d:86:68:84:b5:76:2b:88:c3:67:b6:15:b6:38:b2:27:f3:
-         2a:1b:83:42:60:11:ee:94:ba:d8:d8:35:74:92:c1:5f:b4:b3:
-         f0:fc:5e:eb:51:93:be:00:11:79:db:94:86:0f:19:26:bb:f6:
-         b1:ec:93:66:34:df:3e:7e:6e:80:17:3e:4a:9b:53:04:05:22:
-         88:de:65:e3:50:c1:81:fa:1d:fc:76:09:f6:25:89:9d:4f:d3:
-         ff:76:b0:3e:81:d3:79:8f:05:48:68:36:93:43:ac:b8:41:37:
-         98:54:bc:71:90:ed:12:c0:1f:f7:b4:a7:7b:56:34:e3:97:01:
-         41:56:9a:c6:37:3f:8e:34:9b:51:37:77:4f:67:d6:72:66:d1:
-         89:64:10:80:5f:13:15:34:03:a9:c5:6e:07:6c:77:78:99:27:
-         f4:e0:44:0e:5f:a0:67:dd:f7:4d:4a:93:b3:71:d2:8e:1b:d6:
-         29:5a:8f:f1:f7:c8:9c:33:ae:28:15:7b:10:ee:92:bd:d5:3c:
-         b3:81:5a:52:5d:96:43:ae:bd:03:83:36:e8:c5:f8:23:03:26:
-         eb:2f:70:4a:bb:d8:e1:6a:a0:7d:23:b1:4f:32:28:65:23:84:
-         02:95:8e:2d
+         7b:07:07:55:e0:50:c4:5a:26:7a:8c:ae:8f:20:a1:94:9f:0c:
+         d9:ca:0a:31:0d:fe:2e:6e:ad:72:1d:bd:e4:34:e9:71:bf:d4:
+         83:b8:59:13:d4:03:ae:8e:50:83:26:7f:a4:b9:ee:0e:0d:81:
+         22:9c:46:41:8f:51:6c:b6:e7:83:d5:66:0f:43:2a:b4:ed:27:
+         f3:bc:d1:fa:87:48:86:9e:94:6d:89:8f:08:ed:38:b5:4f:4c:
+         63:c1:82:d6:06:a7:40:7c:78:6c:bd:52:de:07:f1:56:c0:23:
+         d1:cd:6d:d5:dd:5f:93:de:cf:68:28:f5:46:8d:34:72:03:a0:
+         58:bf:7f:0e:95:f4:0d:02:ac:5e:76:e6:b3:2e:86:14:92:44:
+         4b:94:bb:16:28:fb:2a:4b:eb:29:1e:62:fc:47:4d:61:11:a2:
+         b1:84:aa:81:4a:29:b4:35:3e:08:22:80:37:d2:60:08:93:97:
+         0c:5d:ac:24:0f:dc:60:df:84:0b:55:43:7e:fd:6f:5f:e1:dc:
+         be:d4:a6:65:03:a9:72:15:18:05:3a:f3:ab:30:06:c2:53:ce:
+         63:4f:fa:09:7b:e4:b8:e2:78:14:6e:1b:45:5e:ef:8d:40:c2:
+         b0:6a:0d:35:8d:bf:31:6c:9c:8e:27:40:32:39:e8:d1:73:cc:
+         e8:0f:99:90
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsQo0C7HZ
-ZbXqeqz1lhFouvDJa1fHl370u10xTkObBH+nLv1M4APHDaxwJA68JqJdSHEEm0OM
-l+Qs33xZOeujlLNbh9URtsFK6Xvo+MUxOyxN8Ec0daiIbSKpJNwAH6A2HuOnkrEA
-nfjvJ0ZjYCNnSOZdZrM9toQEP7EbL7eOcSYoMv/e+rDL4pBacpqDHd7HrbFdaBGe
-aqxEawbMk2ypE6+kcuI0TcTXj+6Z9OTb0RlFv5d2WX25MmMHoBzjGZj2qti6RPbs
-X+tG0WNwVgCh8c4Yw6V3J4HmGGV4msSH+TYutvxcdampWWrfmSYHyR0aqE9uthCS
-T5bBdDBKXIu9ewIDAQABo4HLMIHIMB0GA1UdDgQWBBSnp37vMsjRfN/K7vRPeupn
-Q1NXzzAfBgNVHSMEGDAWgBR/es2yWLi1YhrC3rRrtXTpuNx3hzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzfVHCgF1
+MOFQqcvdzF229dHZy+vRClEBOAqjIv/nBanu3A82LIG6BIq3zm4fUdjTPmX8HdDW
+AtjwVgo+bpvLVVlvHiwvzpTJ2NvlqQjQVTae2mjoFuLB3wfGmaHoDBlpLwP+E6/r
+uX8Wh00AVjrgZgDyUEWhlIhgpJWuM/r7UqUpKS10VXHjCBHcRWuE4gCWZzTZvI35
+fDKblQdBdrvyq0f3xgO80eunR1Pd5i1vhN+GnjJ5AgucOvec3SA1+moOI/kRmi43
++Qzx0H7ugExLWZpt76s9aJ8N8SV07rHLY5Ilgz7T5Ndbd8367To4gqPpZiv+TFNY
+aEu1FnzgPTZVhQIDAQABo4HLMIHIMB0GA1UdDgQWBBTkKMrD5xDO00C8684vlUo5
+uI8u9TAfBgNVHSMEGDAWgBQe4CXo9NwoFbFatjSWEuQvuOh8sTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AJbozxSrg0EuYiR+A60Oro5qk+09hmiEtXYriMNnthW2OLIn8yobg0JgEe6UutjY
-NXSSwV+0s/D8XutRk74AEXnblIYPGSa79rHsk2Y03z5+boAXPkqbUwQFIojeZeNQ
-wYH6Hfx2CfYliZ1P0/92sD6B03mPBUhoNpNDrLhBN5hUvHGQ7RLAH/e0p3tWNOOX
-AUFWmsY3P440m1E3d09n1nJm0YlkEIBfExU0A6nFbgdsd3iZJ/TgRA5foGfd901K
-k7Nx0o4b1ilaj/H3yJwzrigVexDukr3VPLOBWlJdlkOuvQODNujF+CMDJusvcEq7
-2OFqoH0jsU8yKGUjhAKVji0=
+AHsHB1XgUMRaJnqMro8goZSfDNnKCjEN/i5urXIdveQ06XG/1IO4WRPUA66OUIMm
+f6S57g4NgSKcRkGPUWy254PVZg9DKrTtJ/O80fqHSIaelG2JjwjtOLVPTGPBgtYG
+p0B8eGy9Ut4H8VbAI9HNbdXdX5Pez2go9UaNNHIDoFi/fw6V9A0CrF525rMuhhSS
+REuUuxYo+ypL6ykeYvxHTWERorGEqoFKKbQ1PggigDfSYAiTlwxdrCQP3GDfhAtV
+Q379b1/h3L7UpmUDqXIVGAU686swBsJTzmNP+gl75LjieBRuG0Ve741AwrBqDTWN
+vzFsnI4nQDI56NFzzOgPmZA=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a7:f5:bd:ee:ad:ff:30:37:e6:5a:68:20:1a:22:
-                    b1:f5:bb:5e:24:38:bd:b7:c1:34:d4:97:8b:16:97:
-                    34:17:bc:61:df:ff:ff:6b:9c:b6:34:79:7d:5a:e7:
-                    3b:cf:07:73:b8:2d:03:59:56:68:4a:85:25:58:f4:
-                    68:01:61:84:52:99:2f:6a:7e:cb:13:61:8b:6e:3b:
-                    f5:8e:c2:48:cc:1e:50:28:4f:5f:4b:6b:32:d3:f3:
-                    76:c9:6f:a3:aa:40:1b:06:59:19:cd:42:70:f4:85:
-                    fe:86:38:ca:84:42:5f:bb:d3:a7:41:42:46:59:14:
-                    3f:11:1d:62:d9:e1:16:3f:06:a7:59:f3:ff:ba:f1:
-                    88:7b:0c:68:10:49:ac:8d:75:87:08:94:f6:ec:ce:
-                    4c:6d:e6:77:85:25:c8:8f:42:0a:1d:d3:00:cc:89:
-                    31:dc:32:07:d7:2e:62:16:73:8b:5d:c4:c9:1b:87:
-                    7c:46:64:2d:cc:e0:fb:69:d2:e1:bd:23:2b:d9:15:
-                    62:22:a4:cd:75:64:f1:78:76:cc:07:11:59:08:60:
-                    03:dd:cb:67:3e:a7:b8:12:fa:96:54:6f:6d:9f:05:
-                    11:89:71:13:50:94:bb:bb:17:7e:80:ed:40:b1:ba:
-                    f2:36:2d:45:bb:73:78:5e:b7:5e:2f:e7:f8:66:ec:
-                    1f:17
+                    00:aa:99:af:33:b7:92:98:e2:ad:0f:2b:70:46:83:
+                    a0:ea:af:9a:9a:e1:ac:18:43:3a:12:7f:d8:2e:85:
+                    3f:bc:84:77:3d:b3:60:00:fb:db:47:ec:79:b4:76:
+                    cc:1c:5a:22:1e:2d:6c:19:d6:e1:ae:4d:2d:46:72:
+                    42:18:fd:5e:05:36:45:34:1a:b1:63:7c:99:79:2f:
+                    94:81:93:b8:cb:2b:dc:5b:ca:08:80:47:20:12:7b:
+                    7e:d5:7e:3d:0b:84:28:4b:4c:7f:0d:4a:bc:59:bb:
+                    5e:4e:6a:9d:20:0a:ec:22:66:a8:f4:05:4e:d5:eb:
+                    68:6a:3a:98:00:9e:c8:52:eb:02:82:6f:42:c9:45:
+                    8f:8b:06:73:45:4b:24:f4:c6:19:d6:20:78:4a:c2:
+                    2d:ab:33:78:1e:cd:d6:6b:ed:59:72:96:da:1a:12:
+                    23:7d:ec:31:25:45:1c:34:f5:cc:d5:20:1b:c3:26:
+                    24:9f:1a:21:31:a1:ce:90:52:78:5d:9a:42:8c:d5:
+                    96:20:d2:02:a3:21:12:88:3e:30:2e:c3:1f:24:8f:
+                    26:7c:35:08:c4:71:81:bc:ca:2a:f8:1d:27:af:93:
+                    38:ed:d7:ad:7d:f9:0e:dc:6f:65:ce:7d:36:09:8d:
+                    c0:05:42:80:ee:18:74:f3:e1:89:0f:1a:b7:f0:0b:
+                    7b:21
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7F:7A:CD:B2:58:B8:B5:62:1A:C2:DE:B4:6B:B5:74:E9:B8:DC:77:87
+                1E:E0:25:E8:F4:DC:28:15:B1:5A:B6:34:96:12:E4:2F:B8:E8:7C:B1
             X509v3 Authority Key Identifier: 
-                keyid:7F:7A:CD:B2:58:B8:B5:62:1A:C2:DE:B4:6B:B5:74:E9:B8:DC:77:87
+                keyid:1E:E0:25:E8:F4:DC:28:15:B1:5A:B6:34:96:12:E4:2F:B8:E8:7C:B1
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         a6:5d:56:c1:c7:29:8f:3a:1d:86:2c:5f:1e:ff:83:7a:c0:44:
-         81:81:f7:16:9d:84:70:66:f8:1a:f4:8e:50:a7:dd:d2:1a:2e:
-         f9:6e:cc:e6:39:7c:fb:7e:29:54:24:3d:4a:82:e1:a5:d6:7e:
-         4c:c8:58:b8:d6:f7:d2:90:ca:d9:8f:e9:c8:59:bc:73:1c:37:
-         19:7c:a4:2b:ec:68:de:e9:04:fa:14:f0:07:bd:2f:3f:16:a4:
-         50:8f:e8:89:ea:c1:31:d1:ce:6e:b1:21:11:5b:69:dc:28:e7:
-         8a:33:8d:40:52:f8:86:8e:b0:a1:7a:a5:46:f2:8d:d7:d1:2e:
-         c8:2f:0f:ac:20:38:25:d6:4e:b2:72:fc:88:f3:47:93:bc:ec:
-         47:0c:1c:cf:22:65:40:04:70:15:fa:79:ec:09:a2:69:a9:09:
-         78:f7:3e:84:f3:7f:fa:a2:11:ad:45:72:5d:9d:55:58:fa:b1:
-         c6:67:4e:41:b4:bd:88:a0:e2:55:ae:26:3a:72:78:3d:e4:ab:
-         ad:f7:83:69:24:cd:22:4f:2e:23:a1:05:19:bd:57:d3:e8:b3:
-         3d:9f:bd:ed:0b:95:bf:e5:47:8f:da:dd:9d:6b:27:61:bd:49:
-         15:9c:9d:6b:40:2b:54:5f:3f:56:d5:08:29:6c:46:49:2d:3f:
-         d1:91:ff:f8
+         2d:14:c9:b5:95:04:19:aa:75:5a:11:bd:f9:41:a0:44:e0:19:
+         a8:1c:18:de:b7:a8:2f:1a:6f:82:cd:05:d4:f6:55:97:23:1a:
+         22:55:a0:c2:02:94:5b:62:88:81:67:ff:7b:e2:fc:98:90:23:
+         2b:79:3a:54:3a:da:94:b8:e9:e0:b6:cd:44:4d:a8:2d:6b:73:
+         2c:a2:81:e8:93:9f:6b:f0:92:ba:3b:eb:61:c9:c2:04:19:f5:
+         fd:86:11:30:e2:63:1f:3b:ee:10:bf:a5:ca:35:c5:10:81:05:
+         2c:8a:3f:ea:65:a4:17:69:5f:7d:24:61:77:5d:eb:70:69:38:
+         58:7e:29:61:54:ee:e1:78:9b:8e:2c:2d:f3:2f:da:db:c5:89:
+         c5:a8:46:54:ee:b0:14:e5:04:49:d2:f9:96:71:98:f9:7b:c8:
+         82:21:18:3d:1e:80:f1:20:39:b1:a8:04:24:e7:03:7f:aa:56:
+         90:9d:3c:b7:f3:4b:bd:da:6d:8c:a9:d7:b0:06:d8:77:b3:91:
+         f6:0e:85:08:51:f1:45:ff:6e:ba:04:72:35:3b:4f:fd:49:d8:
+         0c:c9:45:1c:99:68:ec:ce:d3:88:17:75:e2:20:db:42:7f:65:
+         94:40:66:c7:51:cb:19:dd:50:89:c5:41:8d:04:df:7e:2c:8d:
+         61:26:33:45
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKf1ve6t/zA35lpoIBoi
-sfW7XiQ4vbfBNNSXixaXNBe8Yd///2uctjR5fVrnO88Hc7gtA1lWaEqFJVj0aAFh
-hFKZL2p+yxNhi2479Y7CSMweUChPX0trMtPzdslvo6pAGwZZGc1CcPSF/oY4yoRC
-X7vTp0FCRlkUPxEdYtnhFj8Gp1nz/7rxiHsMaBBJrI11hwiU9uzOTG3md4UlyI9C
-Ch3TAMyJMdwyB9cuYhZzi13EyRuHfEZkLczg+2nS4b0jK9kVYiKkzXVk8Xh2zAcR
-WQhgA93LZz6nuBL6llRvbZ8FEYlxE1CUu7sXfoDtQLG68jYtRbtzeF63Xi/n+Gbs
-HxcCAwEAAaOByzCByDAdBgNVHQ4EFgQUf3rNsli4tWIawt60a7V06bjcd4cwHwYD
-VR0jBBgwFoAUf3rNsli4tWIawt60a7V06bjcd4cwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqZrzO3kpjirQ8rcEaD
+oOqvmprhrBhDOhJ/2C6FP7yEdz2zYAD720fsebR2zBxaIh4tbBnW4a5NLUZyQhj9
+XgU2RTQasWN8mXkvlIGTuMsr3FvKCIBHIBJ7ftV+PQuEKEtMfw1KvFm7Xk5qnSAK
+7CJmqPQFTtXraGo6mACeyFLrAoJvQslFj4sGc0VLJPTGGdYgeErCLaszeB7N1mvt
+WXKW2hoSI33sMSVFHDT1zNUgG8MmJJ8aITGhzpBSeF2aQozVliDSAqMhEog+MC7D
+HySPJnw1CMRxgbzKKvgdJ6+TOO3XrX35DtxvZc59NgmNwAVCgO4YdPPhiQ8at/AL
+eyECAwEAAaOByzCByDAdBgNVHQ4EFgQUHuAl6PTcKBWxWrY0lhLkL7jofLEwHwYD
+VR0jBBgwFoAUHuAl6PTcKBWxWrY0lhLkL7jofLEwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCmXVbBxymP
-Oh2GLF8e/4N6wESBgfcWnYRwZvga9I5Qp93SGi75bszmOXz7filUJD1KguGl1n5M
-yFi41vfSkMrZj+nIWbxzHDcZfKQr7Gje6QT6FPAHvS8/FqRQj+iJ6sEx0c5usSER
-W2ncKOeKM41AUviGjrCheqVG8o3X0S7ILw+sIDgl1k6ycvyI80eTvOxHDBzPImVA
-BHAV+nnsCaJpqQl49z6E83/6ohGtRXJdnVVY+rHGZ05BtL2IoOJVriY6cng95Kut
-94NpJM0iTy4joQUZvVfT6LM9n73tC5W/5UeP2t2daydhvUkVnJ1rQCtUXz9W1Qgp
-bEZJLT/Rkf/4
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAtFMm1lQQZ
+qnVaEb35QaBE4BmoHBjet6gvGm+CzQXU9lWXIxoiVaDCApRbYoiBZ/974vyYkCMr
+eTpUOtqUuOngts1ETagta3MsooHok59r8JK6O+thycIEGfX9hhEw4mMfO+4Qv6XK
+NcUQgQUsij/qZaQXaV99JGF3XetwaThYfilhVO7heJuOLC3zL9rbxYnFqEZU7rAU
+5QRJ0vmWcZj5e8iCIRg9HoDxIDmxqAQk5wN/qlaQnTy380u92m2MqdewBth3s5H2
+DoUIUfFF/266BHI1O0/9SdgMyUUcmWjsztOIF3XiINtCf2WUQGbHUcsZ3VCJxUGN
+BN9+LI1hJjNF
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,6 +281,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Unacceptable signature algorithm
 ERROR: VerifySignedData failed
diff --git a/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem b/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem
index af172e2..da99868 100644
--- a/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem
+++ b/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d5:9d:3b:85:e5:81:69:52:70:67:33:4a:2b:76:
-                    6a:e5:61:db:af:e5:32:74:85:dd:54:d2:c7:76:5a:
-                    5c:38:d8:46:fc:b4:33:f5:9d:8e:80:83:ab:31:96:
-                    41:c4:c2:52:af:8c:4d:0e:5c:69:c5:5d:cc:b4:1b:
-                    ef:de:61:58:88:e2:c4:bf:6a:cb:74:bd:f5:bd:61:
-                    57:1c:22:9f:6d:e8:38:c6:70:b8:1e:a5:2b:4f:35:
-                    9f:65:fc:c1:36:17:3e:d7:fa:33:21:70:fb:e0:ce:
-                    ab:23:41:3f:fc:7b:74:1d:6b:ba:21:b7:5b:fd:a1:
-                    77:11:1a:8d:5b:2a:be:38:2e:79:a0:b7:2d:45:5c:
-                    d7:32:fd:4c:70:f1:95:1c:38:a3:15:4f:57:f3:75:
-                    59:fe:75:14:39:ea:44:16:b9:2e:06:df:67:30:dd:
-                    5a:b1:7e:95:09:fd:12:cc:87:b1:66:fa:7e:b9:e5:
-                    b5:38:0a:46:73:53:1a:b2:aa:12:e3:6d:99:56:e8:
-                    c7:cc:eb:6b:00:9b:c1:ba:02:23:2b:32:be:9b:f8:
-                    ab:b2:b5:be:50:f6:7f:95:b6:6b:1c:e6:ad:f1:69:
-                    5a:e0:41:1e:85:64:91:37:7b:9a:28:43:a5:ee:33:
-                    25:ab:82:97:03:07:94:b8:d3:34:95:bf:33:d2:14:
-                    b1:61
+                    00:dd:69:8a:f3:e3:97:bd:3b:1b:fc:95:d2:0f:29:
+                    bb:4b:ab:e6:66:cf:66:d9:fd:68:55:d8:22:d5:d9:
+                    ce:bf:d9:fa:b0:23:0a:e8:bb:c1:fa:0b:aa:6a:18:
+                    2a:a5:5c:a3:57:c4:d5:4c:29:bb:64:ee:51:f7:41:
+                    fd:26:93:b7:e3:21:12:8e:a3:76:18:2b:f3:40:7d:
+                    bc:c7:56:52:0a:42:a6:42:dc:ea:93:b6:b0:09:44:
+                    e7:52:ce:ce:41:da:24:fa:fb:35:57:77:7a:2e:d8:
+                    72:7b:26:f7:e7:e8:17:db:52:bf:7a:83:30:15:d0:
+                    28:44:5f:87:76:7e:19:32:b3:5a:7d:ff:88:3a:d5:
+                    cd:4f:19:45:20:9d:66:73:d9:4a:70:b0:cf:0b:d6:
+                    8c:d3:4b:52:a4:ef:eb:12:47:dc:e6:18:8c:af:54:
+                    74:67:f4:54:c7:5a:65:3d:4d:a0:31:0d:d6:70:52:
+                    d4:df:e8:35:d7:60:ca:ce:0b:d7:b9:e2:01:36:36:
+                    ad:b1:8b:30:67:cb:f6:0b:ad:0e:0d:a9:c7:ee:96:
+                    5e:8d:01:44:d4:85:22:1b:94:bb:62:ca:c1:9d:c3:
+                    05:fe:87:81:cb:f7:4f:96:e9:06:cc:81:3a:3d:4d:
+                    54:b3:59:2c:fc:07:11:9c:89:0a:ad:af:15:f4:74:
+                    ce:39
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B3:FD:B6:08:AB:82:83:50:E7:F0:85:51:1C:CC:78:E5:22:50:91:60
+                83:C0:D7:EE:36:B8:BA:F9:1D:4E:73:EF:5D:E5:24:D7:9D:2D:61:F8
             X509v3 Authority Key Identifier: 
-                keyid:5B:B2:D8:DC:1B:60:39:B5:6B:10:A5:70:37:93:E7:3C:F5:52:46:C8
+                keyid:2A:B8:2E:F5:10:55:C6:E6:3E:CD:B1:E3:17:07:C7:B1:24:01:62:BD
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -59,42 +59,42 @@
             1.2.3.4: critical
                 ....
     Signature Algorithm: sha256WithRSAEncryption
-         39:19:04:31:e9:20:03:1b:e9:d3:91:25:94:68:4f:8d:07:16:
-         08:e8:7f:99:01:37:56:8d:f4:15:6b:a8:7c:e4:3d:32:ad:3d:
-         62:0f:5e:93:6f:b9:21:ba:e8:c3:48:13:e5:eb:ad:26:f0:9b:
-         4c:fe:76:8e:73:a2:be:01:b5:48:7c:11:7e:cc:47:4b:0c:0c:
-         17:65:54:ab:0e:79:6c:e5:75:67:52:ab:f7:26:97:36:3d:71:
-         6d:88:54:b9:ef:b1:00:42:56:64:88:db:0f:9c:be:25:e0:6e:
-         2b:df:c6:55:3a:89:af:92:1c:21:71:6e:22:ab:5a:b8:de:53:
-         a1:8d:84:0f:0e:55:43:08:45:0b:fd:4a:6f:fa:e4:89:55:a0:
-         8d:10:c0:3a:06:42:7c:f1:b8:7a:19:a7:61:cc:c0:b1:e2:f1:
-         14:d5:bd:ff:41:a5:50:f6:ac:a4:3f:ec:6a:6a:3e:7b:60:29:
-         f4:9d:c8:57:81:12:59:7b:0f:b2:2a:43:29:03:a5:eb:e7:e8:
-         cd:15:fe:53:07:e0:12:0a:35:29:e8:fe:7f:51:ae:19:98:d5:
-         89:9c:05:0a:ba:51:89:0f:1f:3c:8e:2a:eb:e7:93:0a:fd:c1:
-         f3:0e:ce:67:5b:f2:73:dc:e6:2e:db:2b:88:11:3b:07:d8:ff:
-         79:0c:6a:e1
+         16:87:37:58:5d:aa:0e:d8:d7:5a:cd:b0:8a:89:85:f2:2e:f3:
+         ca:04:e9:e0:df:09:0c:48:89:21:a8:72:1f:95:9d:6b:d2:65:
+         28:5f:41:9b:e2:4f:1e:19:e9:b9:a1:76:69:93:bb:a0:56:85:
+         b5:4c:b1:ff:35:66:81:fe:21:db:4d:b1:6b:ba:eb:d4:4c:7d:
+         25:64:58:bc:82:26:8b:06:1f:7f:e6:d1:44:67:7d:ff:92:bc:
+         12:13:aa:42:53:7d:08:58:e6:c9:af:02:ba:1c:d3:cc:9f:04:
+         ba:36:14:13:a5:34:de:62:10:62:70:3c:3b:3f:4b:4b:ed:cc:
+         1c:33:21:a0:05:f0:a0:06:0b:5b:1f:c9:6e:ba:00:b6:c6:b9:
+         64:6d:99:35:c9:fb:3e:12:aa:b4:67:32:d7:e2:c4:62:6d:54:
+         65:67:17:e1:70:52:10:11:14:0d:a5:6e:0b:ec:9f:68:9f:1d:
+         62:13:3b:38:4c:09:73:bb:45:3c:d6:ce:20:9d:17:96:38:e1:
+         8a:ba:14:4b:ed:35:55:d6:03:a1:6a:7f:f3:00:c3:44:7d:03:
+         64:ef:25:04:ac:66:a2:01:9f:ba:e1:d4:80:37:ac:1f:a3:7c:
+         85:be:4e:da:90:06:e9:c2:d3:6f:77:ae:43:73:b8:83:0a:e1:
+         7e:b9:e0:f9
 -----BEGIN CERTIFICATE-----
 MIIDnTCCAoWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVnTuF
-5YFpUnBnM0ordmrlYduv5TJ0hd1U0sd2Wlw42Eb8tDP1nY6Ag6sxlkHEwlKvjE0O
-XGnFXcy0G+/eYViI4sS/ast0vfW9YVccIp9t6DjGcLgepStPNZ9l/ME2Fz7X+jMh
-cPvgzqsjQT/8e3Qda7oht1v9oXcRGo1bKr44Lnmgty1FXNcy/Uxw8ZUcOKMVT1fz
-dVn+dRQ56kQWuS4G32cw3VqxfpUJ/RLMh7Fm+n655bU4CkZzUxqyqhLjbZlW6MfM
-62sAm8G6AiMrMr6b+Kuytb5Q9n+Vtmsc5q3xaVrgQR6FZJE3e5ooQ6XuMyWrgpcD
-B5S40zSVvzPSFLFhAgMBAAGjgfkwgfYwHQYDVR0OBBYEFLP9tgirgoNQ5/CFURzM
-eOUiUJFgMB8GA1UdIwQYMBaAFFuy2NwbYDm1axClcDeT5zz1UkbIMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdaYrz
+45e9Oxv8ldIPKbtLq+Zmz2bZ/WhV2CLV2c6/2fqwIwrou8H6C6pqGCqlXKNXxNVM
+Kbtk7lH3Qf0mk7fjIRKOo3YYK/NAfbzHVlIKQqZC3OqTtrAJROdSzs5B2iT6+zVX
+d3ou2HJ7Jvfn6BfbUr96gzAV0ChEX4d2fhkys1p9/4g61c1PGUUgnWZz2UpwsM8L
+1ozTS1Kk7+sSR9zmGIyvVHRn9FTHWmU9TaAxDdZwUtTf6DXXYMrOC9e54gE2Nq2x
+izBny/YLrQ4Nqcfull6NAUTUhSIblLtiysGdwwX+h4HL90+W6QbMgTo9TVSzWSz8
+BxGciQqtrxX0dM45AgMBAAGjgfkwgfYwHQYDVR0OBBYEFIPA1+42uLr5HU5z713l
+JNedLWH4MB8GA1UdIwQYMBaAFCq4LvUQVcbmPs2x4xcHx7EkAWK9MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
 BwMBBggrBgEFBQcDAjAOBgMqAwQBAf8EBAECAwQwDQYJKoZIhvcNAQELBQADggEB
-ADkZBDHpIAMb6dORJZRoT40HFgjof5kBN1aN9BVrqHzkPTKtPWIPXpNvuSG66MNI
-E+XrrSbwm0z+do5zor4BtUh8EX7MR0sMDBdlVKsOeWzldWdSq/cmlzY9cW2IVLnv
-sQBCVmSI2w+cviXgbivfxlU6ia+SHCFxbiKrWrjeU6GNhA8OVUMIRQv9Sm/65IlV
-oI0QwDoGQnzxuHoZp2HMwLHi8RTVvf9BpVD2rKQ/7GpqPntgKfSdyFeBEll7D7Iq
-QykDpevn6M0V/lMH4BIKNSno/n9RrhmY1YmcBQq6UYkPHzyOKuvnkwr9wfMOzmdb
-8nPc5i7bK4gROwfY/3kMauE=
+ABaHN1hdqg7Y11rNsIqJhfIu88oE6eDfCQxIiSGoch+VnWvSZShfQZviTx4Z6bmh
+dmmTu6BWhbVMsf81ZoH+IdtNsWu669RMfSVkWLyCJosGH3/m0URnff+SvBITqkJT
+fQhY5smvAroc08yfBLo2FBOlNN5iEGJwPDs/S0vtzBwzIaAF8KAGC1sfyW66ALbG
+uWRtmTXJ+z4SqrRnMtfixGJtVGVnF+FwUhARFA2lbgvsn2ifHWITOzhMCXO7RTzW
+ziCdF5Y44Yq6FEvtNVXWA6Fqf/MAw0R9A2TvJQSsZqIBn7rh1IA3rB+jfIW+TtqQ
+BunC0293rkNzuIMK4X654Pk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -111,30 +111,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b9:ec:7c:da:f2:c7:b4:02:ee:82:a9:58:98:60:
-                    67:07:a2:c2:9d:2c:a1:76:50:f7:4a:0a:04:80:45:
-                    7b:3d:f6:31:fe:1d:e9:45:40:76:1d:38:df:c9:e1:
-                    42:df:13:7e:16:26:2b:41:14:6b:6e:5e:f3:39:4e:
-                    61:9d:fd:5f:bf:2a:f9:b7:cf:3f:af:34:b1:17:ef:
-                    97:1f:bf:3d:4c:0a:93:91:bd:ee:11:7a:64:ee:69:
-                    22:75:60:8b:c3:10:cd:9e:91:8a:d8:54:c7:43:f4:
-                    fb:88:db:09:7a:22:5d:26:58:ab:7d:d0:41:11:47:
-                    10:62:ed:cc:e6:bb:d2:da:a4:7c:e9:0a:39:5b:9f:
-                    93:b0:06:27:50:38:ea:63:e2:6b:a0:eb:c5:d3:7f:
-                    87:71:d8:08:64:d5:87:0a:6e:59:99:d7:74:7c:da:
-                    eb:30:68:9d:f8:09:31:c7:66:5f:9a:fb:2d:9b:f1:
-                    c1:ff:cb:57:67:46:03:99:a3:4b:e0:bc:2b:17:f4:
-                    0b:7b:61:3f:5e:cf:c9:41:9b:15:ee:f9:90:46:ad:
-                    b4:a2:86:3f:87:3c:dd:7e:97:6f:97:30:88:f8:e6:
-                    88:83:15:ad:77:6a:fd:1e:f1:ae:88:a2:f5:52:6d:
-                    6e:d9:5d:5d:c1:1b:0a:49:10:f4:5a:e8:42:53:67:
-                    d1:cd
+                    00:b5:92:c1:f9:71:4d:e8:71:f3:2c:f7:fa:6c:c6:
+                    aa:34:f3:ce:ed:86:32:24:d6:51:c9:3f:e4:19:3e:
+                    06:49:6f:fc:ae:ab:9e:73:54:33:95:78:3e:f3:56:
+                    56:15:a5:1a:62:bc:97:af:41:f2:b7:fd:fd:a9:4e:
+                    b0:a5:db:18:1e:65:ee:9d:15:71:3e:45:d5:47:fe:
+                    75:d5:4e:4d:8e:72:ea:b3:bc:b7:77:6c:0b:75:72:
+                    86:d2:49:ed:4a:ea:89:da:da:35:bd:2d:8c:dd:53:
+                    29:a9:46:be:43:57:59:4f:63:34:08:c2:cf:a3:76:
+                    86:d2:79:2f:8c:01:97:12:d0:6b:b6:3f:aa:dd:e5:
+                    c9:17:9d:94:16:a1:46:ec:63:02:fd:e2:96:dc:85:
+                    ce:95:e6:64:37:f7:d0:96:5e:b1:ba:96:f0:18:11:
+                    cd:01:13:57:96:ce:a4:2a:54:93:7d:9d:c9:6a:98:
+                    6b:39:0f:cc:e6:29:0f:8d:8d:cc:ea:5e:49:74:45:
+                    89:1b:72:15:d4:7e:1f:9d:3f:e2:91:04:ec:88:55:
+                    da:62:1a:49:bf:11:71:55:94:7b:a5:15:31:60:d3:
+                    53:b7:f0:81:c1:1d:ec:11:00:d6:5a:97:e6:5b:cb:
+                    e7:9d:6c:8f:28:77:10:7d:ac:d7:e7:6f:6d:b2:e7:
+                    8e:4b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5B:B2:D8:DC:1B:60:39:B5:6B:10:A5:70:37:93:E7:3C:F5:52:46:C8
+                2A:B8:2E:F5:10:55:C6:E6:3E:CD:B1:E3:17:07:C7:B1:24:01:62:BD
             X509v3 Authority Key Identifier: 
-                keyid:50:25:07:BE:12:C8:A2:18:2F:32:21:59:CC:2B:5A:A7:4E:19:5D:55
+                keyid:46:1A:32:F4:32:C8:48:51:31:04:50:C8:62:8A:10:81:A5:C5:50:0F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -149,41 +149,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         12:72:ee:b6:62:1b:0d:70:52:a6:02:3c:13:2a:88:cf:cb:9a:
-         e2:07:5f:cf:3e:be:75:d3:f9:a6:23:47:ca:fb:88:87:bd:e1:
-         52:8e:8b:fe:e9:c1:7a:8c:30:91:c5:0c:fe:9d:31:fa:fc:c0:
-         d7:fe:7a:7a:18:6f:3c:67:50:b0:22:b2:09:48:ca:dc:d7:d3:
-         29:86:eb:f4:cf:e0:3e:6e:d1:88:fa:20:93:b3:05:4c:c6:29:
-         06:df:4a:8b:72:3e:c8:3c:2b:33:56:26:de:91:1a:11:bc:21:
-         7b:b8:b5:b6:7c:ca:0d:f7:d6:e8:b0:a8:99:e8:7a:2b:f0:c4:
-         78:e5:54:9e:3f:73:dc:85:41:97:11:36:45:73:b9:f2:49:8d:
-         d7:83:cf:b4:1a:ed:33:dc:0b:cd:7e:83:77:ce:aa:2f:0e:1f:
-         4d:e0:19:96:cd:74:79:de:18:8b:ad:9f:0c:96:20:14:63:5e:
-         e2:58:8e:4a:d8:fd:59:0d:a6:a4:02:85:ac:23:d4:43:b2:da:
-         2d:6b:87:79:9e:2e:1e:f4:d3:95:ef:3d:91:7a:f7:17:16:c7:
-         9f:1f:b7:42:7e:f4:fa:d9:81:18:26:23:03:1e:86:99:7d:28:
-         ef:a3:ac:be:bb:55:fa:38:62:3c:e6:6e:47:4b:f1:45:ef:de:
-         38:ea:c3:a3
+         a0:5d:d6:8e:13:70:92:0a:04:7b:e6:b5:5c:e2:b5:79:ed:60:
+         83:4c:60:ea:8c:d3:3c:0a:c2:cb:e7:ca:82:e2:6c:51:6e:98:
+         91:fd:99:00:36:91:a7:99:61:52:dd:a7:d2:ec:6b:c9:cc:99:
+         77:3a:8a:d0:ed:f3:4c:e7:dc:99:54:f3:d7:ba:73:13:39:f5:
+         bd:8c:8f:80:97:0e:23:8b:c1:51:e5:7d:d0:80:4f:2c:50:e1:
+         2a:d8:cb:cb:44:4f:a2:e2:8c:61:09:f0:27:44:ad:81:0b:31:
+         42:c4:4f:69:02:41:a7:e0:56:06:3f:c3:87:5e:29:d8:c4:ba:
+         32:5f:ad:2f:65:c6:34:77:77:3f:1a:99:a3:ee:27:a9:b9:bc:
+         37:9f:6a:f0:81:f5:35:06:eb:79:60:b1:8d:a8:64:e7:54:0f:
+         0c:aa:b1:bb:31:5c:03:0b:c4:1a:00:eb:dc:d4:d5:ed:fe:60:
+         10:b1:c4:ef:a4:dc:79:61:41:69:3f:eb:e0:21:57:06:b7:61:
+         de:15:f1:1c:06:b5:2a:91:fd:cb:5d:b4:e4:c2:60:0a:8f:7f:
+         0a:17:6a:ee:aa:26:76:b1:dd:60:13:df:78:d1:65:4f:0a:77:
+         cd:e5:41:8a:7b:72:d2:14:ad:c3:54:b0:64:2f:b7:5d:9a:23:
+         97:31:ad:67
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuex82vLH
-tALugqlYmGBnB6LCnSyhdlD3SgoEgEV7PfYx/h3pRUB2HTjfyeFC3xN+FiYrQRRr
-bl7zOU5hnf1fvyr5t88/rzSxF++XH789TAqTkb3uEXpk7mkidWCLwxDNnpGK2FTH
-Q/T7iNsJeiJdJlirfdBBEUcQYu3M5rvS2qR86Qo5W5+TsAYnUDjqY+JroOvF03+H
-cdgIZNWHCm5Zmdd0fNrrMGid+Akxx2Zfmvstm/HB/8tXZ0YDmaNL4LwrF/QLe2E/
-Xs/JQZsV7vmQRq20ooY/hzzdfpdvlzCI+OaIgxWtd2r9HvGuiKL1Um1u2V1dwRsK
-SRD0WuhCU2fRzQIDAQABo4HLMIHIMB0GA1UdDgQWBBRbstjcG2A5tWsQpXA3k+c8
-9VJGyDAfBgNVHSMEGDAWgBRQJQe+EsiiGC8yIVnMK1qnThldVTA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtZLB+XFN
+6HHzLPf6bMaqNPPO7YYyJNZRyT/kGT4GSW/8rquec1QzlXg+81ZWFaUaYryXr0Hy
+t/39qU6wpdsYHmXunRVxPkXVR/511U5NjnLqs7y3d2wLdXKG0kntSuqJ2to1vS2M
+3VMpqUa+Q1dZT2M0CMLPo3aG0nkvjAGXEtBrtj+q3eXJF52UFqFG7GMC/eKW3IXO
+leZkN/fQll6xupbwGBHNARNXls6kKlSTfZ3JaphrOQ/M5ikPjY3M6l5JdEWJG3IV
+1H4fnT/ikQTsiFXaYhpJvxFxVZR7pRUxYNNTt/CBwR3sEQDWWpfmW8vnnWyPKHcQ
+fazX529tsueOSwIDAQABo4HLMIHIMB0GA1UdDgQWBBQquC71EFXG5j7NseMXB8ex
+JAFivTAfBgNVHSMEGDAWgBRGGjL0MshIUTEEUMhiihCBpcVQDzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABJy7rZiGw1wUqYCPBMqiM/LmuIHX88+vnXT+aYjR8r7iIe94VKOi/7pwXqMMJHF
-DP6dMfr8wNf+enoYbzxnULAisglIytzX0ymG6/TP4D5u0Yj6IJOzBUzGKQbfSoty
-Psg8KzNWJt6RGhG8IXu4tbZ8yg331uiwqJnoeivwxHjlVJ4/c9yFQZcRNkVzufJJ
-jdeDz7Qa7TPcC81+g3fOqi8OH03gGZbNdHneGIutnwyWIBRjXuJYjkrY/VkNpqQC
-hawj1EOy2i1rh3meLh7005XvPZF69xcWx58ft0J+9PrZgRgmIwMehpl9KO+jrL67
-Vfo4YjzmbkdL8UXv3jjqw6M=
+AKBd1o4TcJIKBHvmtVzitXntYINMYOqM0zwKwsvnyoLibFFumJH9mQA2kaeZYVLd
+p9Lsa8nMmXc6itDt80zn3JlU89e6cxM59b2Mj4CXDiOLwVHlfdCATyxQ4SrYy8tE
+T6LijGEJ8CdErYELMULET2kCQafgVgY/w4deKdjEujJfrS9lxjR3dz8amaPuJ6m5
+vDefavCB9TUG63lgsY2oZOdUDwyqsbsxXAMLxBoA69zU1e3+YBCxxO+k3HlhQWk/
+6+AhVwa3Yd4V8RwGtSqR/ctdtOTCYAqPfwoXau6qJnax3WAT33jRZU8Kd83lQYp7
+ctIUrcNUsGQvt12aI5cxrWc=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -200,30 +200,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a9:09:72:27:8b:f5:e4:bb:33:ee:14:1d:da:11:
-                    7c:b1:f1:53:3a:a3:77:3f:b2:f5:1f:b6:23:a3:69:
-                    f8:9d:52:97:4c:92:af:07:46:c5:82:3f:97:a5:b2:
-                    fc:e0:b3:3e:29:53:e5:75:07:04:30:7b:bb:55:a3:
-                    af:ec:c3:bd:a0:c5:f1:58:4b:a8:5a:77:49:c7:fc:
-                    a2:13:97:5c:3a:95:58:9b:95:4c:a0:18:b3:3a:18:
-                    1d:fe:5f:c1:c7:9b:d3:9a:0d:f3:4c:a6:3d:28:21:
-                    50:9d:ae:90:ae:aa:96:23:d6:4f:9b:ec:ff:59:67:
-                    0a:ff:8a:89:df:bc:99:ff:f6:75:b5:da:c7:79:d8:
-                    54:c8:f3:96:3a:c6:e9:60:0c:ee:9e:52:e1:e9:5f:
-                    58:1e:29:a3:1a:c3:4f:91:8c:2e:85:33:87:f0:c7:
-                    c6:74:91:cc:fb:dd:ca:1e:71:6f:e2:c1:41:bc:ef:
-                    e8:7f:48:07:a9:5c:aa:21:60:43:fd:3e:98:8b:4c:
-                    8d:95:55:48:3b:35:1a:2a:f4:e3:ef:85:01:11:c4:
-                    f4:a3:15:e3:68:df:bb:94:f9:26:10:35:83:96:83:
-                    00:ce:cf:71:d4:e9:01:18:80:c2:dd:f0:9d:52:f6:
-                    fa:11:de:a1:7f:79:d9:13:a6:eb:33:3e:04:57:b6:
-                    75:b9
+                    00:d8:21:ff:fb:05:2b:4b:26:71:df:17:ad:e2:0a:
+                    91:07:9e:26:8b:20:f8:6a:92:11:14:f0:85:25:d2:
+                    30:1f:6a:9b:e5:3f:6a:c7:59:5f:b6:02:e2:f5:4f:
+                    cc:db:a6:da:db:9d:e0:76:c7:2b:a1:ad:c6:5e:ad:
+                    b6:4b:b0:01:e6:e3:7a:8e:7f:01:7f:96:4c:80:61:
+                    c3:30:42:6a:c5:85:20:17:be:4e:59:9b:73:6d:7a:
+                    2b:80:f8:8a:78:f5:de:ac:05:cd:7e:e8:bd:c6:8f:
+                    fc:9f:48:66:9a:c1:0f:41:bc:7f:e3:aa:b3:33:a1:
+                    8b:b1:cb:db:f9:04:04:14:9b:80:c2:cb:76:67:f8:
+                    21:09:84:b5:f5:43:a6:f1:50:2f:34:df:a3:bc:96:
+                    a6:23:d7:ba:83:a0:6e:c2:c7:b5:c8:8d:2a:ea:86:
+                    69:18:72:3f:1d:41:be:54:ff:25:ba:5d:42:99:ae:
+                    3a:38:50:45:7a:be:20:56:6a:03:f8:e6:d0:df:bc:
+                    05:b8:7f:3b:5b:af:71:f0:36:7d:dd:f4:f0:35:b1:
+                    1a:31:52:e4:62:a1:0a:64:cf:af:47:80:26:58:db:
+                    5f:65:79:a3:37:17:42:b7:ce:c4:d2:2c:d4:df:06:
+                    da:be:8b:73:f6:59:d2:2a:2a:90:08:24:01:40:5d:
+                    4a:f3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                50:25:07:BE:12:C8:A2:18:2F:32:21:59:CC:2B:5A:A7:4E:19:5D:55
+                46:1A:32:F4:32:C8:48:51:31:04:50:C8:62:8A:10:81:A5:C5:50:0F
             X509v3 Authority Key Identifier: 
-                keyid:50:25:07:BE:12:C8:A2:18:2F:32:21:59:CC:2B:5A:A7:4E:19:5D:55
+                keyid:46:1A:32:F4:32:C8:48:51:31:04:50:C8:62:8A:10:81:A5:C5:50:0F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -238,41 +238,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         3d:e1:85:32:4c:43:1e:f2:0d:ff:d3:ec:90:97:7d:8f:9c:16:
-         b1:6e:cb:55:f1:4f:d9:46:1c:c8:d7:3c:3e:8c:2c:8a:21:b8:
-         38:a4:a9:a8:ac:69:51:32:3c:99:57:f8:73:2a:56:4a:ba:6e:
-         6a:a8:89:f0:03:14:d2:7f:d2:22:55:84:47:e7:05:9c:3b:72:
-         5d:39:02:b0:fc:68:90:14:02:12:d8:9b:85:1c:cf:77:92:c7:
-         73:80:38:e4:f4:f9:72:b7:dd:ca:0f:3d:f2:1c:6a:82:1f:21:
-         90:d3:e3:77:e5:ee:e9:0e:23:9e:69:f6:29:38:51:4f:e9:73:
-         7d:3d:32:54:b2:96:04:9b:62:36:99:8b:ea:9c:3f:87:7f:5e:
-         e8:ed:28:c8:15:ac:59:f8:f5:d9:3b:b3:fd:d4:a9:e4:55:1b:
-         07:ee:d9:18:77:d4:68:8d:b0:ce:a3:60:fe:60:2c:ca:b4:2f:
-         08:8a:19:1a:fc:a3:6b:1b:b4:72:28:7a:63:cc:cc:cd:18:ae:
-         99:86:4d:67:12:48:a6:33:f3:19:ce:fa:5a:a5:d7:0d:4d:50:
-         c6:1f:f2:d9:e6:41:d6:29:4a:a6:3c:ff:80:4f:e6:e8:90:f5:
-         ab:cb:bf:93:3b:90:da:e6:fb:d5:59:c3:9f:ec:91:bf:3e:0a:
-         a3:23:ef:ee
+         73:94:b4:6a:84:52:2d:22:d3:93:bf:69:87:be:34:56:5f:7c:
+         21:54:08:3c:38:54:5e:90:1a:76:da:8c:9d:3f:5a:64:6a:5e:
+         96:0e:bc:a6:6c:22:13:22:7d:64:a5:12:a9:eb:15:53:70:74:
+         f6:7e:60:84:3e:60:4c:b5:04:8f:ba:36:69:87:7b:55:c6:52:
+         48:62:9a:aa:0b:c5:1e:17:6b:ca:b2:46:04:34:e7:be:71:f5:
+         50:a3:70:e9:2d:f3:d6:3d:b0:49:3e:aa:d6:3b:10:4e:95:e1:
+         a6:dc:99:b6:bc:c2:d9:d0:93:60:99:d1:82:6b:2d:88:3b:1f:
+         7c:f4:32:2a:47:02:4c:2b:18:e6:62:e4:6e:ba:cc:37:24:61:
+         2e:8a:44:17:3d:f6:22:62:ce:c1:1c:e8:98:82:3a:e5:32:9f:
+         56:69:1b:4c:cf:bd:0d:4c:cc:ed:46:2f:72:1b:cd:c9:40:94:
+         86:91:ee:ff:64:5e:79:d7:c4:32:2a:84:ff:31:ec:c4:c9:ef:
+         0e:93:23:f7:ce:e5:bb:97:c1:9f:88:c8:c2:95:3f:1b:bf:29:
+         d9:92:76:aa:5e:ed:2c:aa:d4:f7:c5:32:70:ee:2c:2d:f8:46:
+         36:ed:40:43:51:fb:18:10:bf:8f:cd:c4:d0:b2:10:66:08:78:
+         71:b0:dd:41
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkJcieL9eS7M+4UHdoR
-fLHxUzqjdz+y9R+2I6Np+J1Sl0ySrwdGxYI/l6Wy/OCzPilT5XUHBDB7u1Wjr+zD
-vaDF8VhLqFp3Scf8ohOXXDqVWJuVTKAYszoYHf5fwceb05oN80ymPSghUJ2ukK6q
-liPWT5vs/1lnCv+Kid+8mf/2dbXax3nYVMjzljrG6WAM7p5S4elfWB4poxrDT5GM
-LoUzh/DHxnSRzPvdyh5xb+LBQbzv6H9IB6lcqiFgQ/0+mItMjZVVSDs1Gir04++F
-ARHE9KMV42jfu5T5JhA1g5aDAM7PcdTpARiAwt3wnVL2+hHeoX952ROm6zM+BFe2
-dbkCAwEAAaOByzCByDAdBgNVHQ4EFgQUUCUHvhLIohgvMiFZzCtap04ZXVUwHwYD
-VR0jBBgwFoAUUCUHvhLIohgvMiFZzCtap04ZXVUwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANgh//sFK0smcd8XreIK
+kQeeJosg+GqSERTwhSXSMB9qm+U/asdZX7YC4vVPzNum2tud4HbHK6Gtxl6ttkuw
+Aebjeo5/AX+WTIBhwzBCasWFIBe+Tlmbc216K4D4inj13qwFzX7ovcaP/J9IZprB
+D0G8f+OqszOhi7HL2/kEBBSbgMLLdmf4IQmEtfVDpvFQLzTfo7yWpiPXuoOgbsLH
+tciNKuqGaRhyPx1BvlT/JbpdQpmuOjhQRXq+IFZqA/jm0N+8Bbh/O1uvcfA2fd30
+8DWxGjFS5GKhCmTPr0eAJljbX2V5ozcXQrfOxNIs1N8G2r6Lc/ZZ0ioqkAgkAUBd
+SvMCAwEAAaOByzCByDAdBgNVHQ4EFgQURhoy9DLISFExBFDIYooQgaXFUA8wHwYD
+VR0jBBgwFoAURhoy9DLISFExBFDIYooQgaXFUA8wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA94YUyTEMe
-8g3/0+yQl32PnBaxbstV8U/ZRhzI1zw+jCyKIbg4pKmorGlRMjyZV/hzKlZKum5q
-qInwAxTSf9IiVYRH5wWcO3JdOQKw/GiQFAIS2JuFHM93ksdzgDjk9Plyt93KDz3y
-HGqCHyGQ0+N35e7pDiOeafYpOFFP6XN9PTJUspYEm2I2mYvqnD+Hf17o7SjIFaxZ
-+PXZO7P91KnkVRsH7tkYd9RojbDOo2D+YCzKtC8Iihka/KNrG7RyKHpjzMzNGK6Z
-hk1nEkimM/MZzvpapdcNTVDGH/LZ5kHWKUqmPP+AT+bokPWry7+TO5Da5vvVWcOf
-7JG/PgqjI+/u
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBzlLRqhFIt
+ItOTv2mHvjRWX3whVAg8OFRekBp22oydP1pkal6WDrymbCITIn1kpRKp6xVTcHT2
+fmCEPmBMtQSPujZph3tVxlJIYpqqC8UeF2vKskYENOe+cfVQo3DpLfPWPbBJPqrW
+OxBOleGm3Jm2vMLZ0JNgmdGCay2IOx989DIqRwJMKxjmYuRuusw3JGEuikQXPfYi
+Ys7BHOiYgjrlMp9WaRtMz70NTMztRi9yG83JQJSGke7/ZF5518QyKoT/MezEye8O
+kyP3zuW7l8GfiMjClT8bvynZknaqXu0sqtT3xTJw7iwt+EY27UBDUfsYEL+PzcTQ
+shBmCHhxsN1B
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -285,6 +285,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Unconsumed critical extension
   oid: 2A0304
diff --git a/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem b/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem
index 2c6305a..e79ca30 100644
--- a/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem
+++ b/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:95:c5:73:7e:a9:8f:9f:25:a3:b1:9f:29:c6:2e:
-                    d6:b2:3d:5b:a4:10:08:53:40:f7:91:79:45:96:d0:
-                    66:85:85:ea:56:e6:db:07:fd:82:1d:e3:e6:11:f2:
-                    da:13:64:45:bf:c6:e1:a7:4c:da:29:e7:ba:2f:27:
-                    d8:cd:59:3d:69:a3:af:d6:64:4b:3e:a4:12:07:5d:
-                    d4:7d:07:85:6d:9c:9d:fe:fd:8f:ff:74:b3:c9:c9:
-                    86:64:7c:ee:ca:74:1b:2f:3f:7c:37:8b:d9:fa:05:
-                    0a:3a:9b:93:45:d0:8d:16:3e:7a:ce:0b:bb:8f:1b:
-                    cc:15:4b:a2:76:08:f5:fb:e0:98:cc:1d:a4:1a:c1:
-                    f5:23:b0:28:1c:fe:5f:a4:24:68:59:fc:1d:63:bc:
-                    60:9a:a6:16:2c:db:0d:66:9d:d7:6e:13:6a:53:8c:
-                    5b:61:a7:3f:9f:be:c8:2a:f9:ce:ea:47:d2:d2:1b:
-                    95:de:af:5d:b0:39:3d:71:f5:be:5f:80:bd:3b:3e:
-                    2e:79:e8:a2:de:9c:2b:da:e5:88:cd:4e:9c:cf:cd:
-                    bc:88:2e:cc:9e:3b:e4:52:2b:49:0f:31:90:3f:15:
-                    0d:b5:68:ea:5e:7e:6e:f9:6c:ba:57:bd:41:33:51:
-                    27:66:f9:2b:3f:ae:7c:87:07:a1:19:a5:0f:ba:bd:
-                    f8:b7
+                    00:e6:63:99:f7:24:74:3f:2a:36:c1:12:e3:e8:68:
+                    f8:aa:38:39:76:ef:ed:66:05:c3:99:d9:2d:7b:72:
+                    d0:57:a2:52:fb:77:c1:29:d7:53:14:e8:a4:74:7c:
+                    2a:21:0b:5d:20:be:18:e5:7f:75:70:73:f3:89:d4:
+                    e7:3c:54:f6:25:41:ae:59:48:88:c5:10:c8:a9:a2:
+                    75:e0:43:b5:e2:bb:55:72:89:aa:52:db:d5:4b:88:
+                    e5:7d:b6:80:4b:fb:2c:bd:57:f4:65:57:72:3a:1c:
+                    2f:93:a4:de:06:74:77:cc:e2:21:bd:0a:b3:12:c2:
+                    2c:3c:2a:84:27:ae:3f:4a:23:a3:39:3f:b1:cc:d8:
+                    e1:84:dd:b0:91:aa:ba:58:c2:ed:62:c8:8c:b4:b5:
+                    ff:82:92:93:90:5b:68:ed:7f:30:52:db:0e:88:17:
+                    8e:eb:37:21:b8:2a:37:1c:7f:13:8a:be:40:56:ac:
+                    cc:1f:a4:0d:d7:47:ab:b9:76:0f:16:c4:70:b3:e3:
+                    4f:9a:8d:80:dc:88:b1:e3:be:c1:0e:62:01:db:6b:
+                    f4:8f:d9:42:84:01:85:1a:7d:0c:c5:09:05:3e:ed:
+                    d9:0a:45:a6:0a:34:7e:a1:88:48:f3:ff:cc:85:eb:
+                    d4:c2:29:70:b7:81:31:f7:07:28:e1:fe:47:92:5b:
+                    d1:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5E:72:8E:7C:0B:A6:A7:E8:2C:3E:36:CA:37:EF:8E:4E:46:CB:97:34
+                18:BB:48:9D:7A:DD:AC:7C:1C:48:E6:9F:2F:6C:71:70:9A:AC:88:E0
             X509v3 Authority Key Identifier: 
-                keyid:DF:46:5C:25:13:E9:22:B2:C9:E4:1A:32:22:C4:97:1F:E6:0C:55:AA
+                keyid:AE:58:4F:6B:06:2B:1C:F3:4E:53:E9:9C:0B:DC:72:ED:3F:F5:55:CF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         15:7a:35:37:ba:ff:11:3b:c0:ad:82:51:d0:e9:23:50:77:06:
-         56:e0:84:94:2d:e4:76:94:d5:af:65:26:26:06:77:f2:6c:03:
-         f4:77:6c:a3:ba:92:26:c7:a0:ea:24:06:98:78:18:24:70:44:
-         08:03:d0:ef:0b:db:d9:f2:3d:35:38:17:41:69:46:62:1a:af:
-         a7:44:be:1d:27:02:b3:79:1a:30:ab:06:79:6a:bd:3f:72:21:
-         f2:34:47:07:ef:08:69:ae:40:1f:61:68:a7:a8:a8:5c:85:6e:
-         39:61:39:ad:8a:3a:a5:d8:64:94:bd:e2:dc:1f:68:45:f0:2c:
-         bf:08:d0:74:75:1c:80:30:86:87:b0:f4:eb:69:e8:16:52:45:
-         bc:c3:3b:08:c9:90:9f:f8:c9:01:9b:2f:29:2b:dc:2c:af:59:
-         cb:3e:07:8a:e7:e0:ca:64:2a:43:39:bf:a5:0e:d6:14:08:e9:
-         9a:c1:76:7d:fb:a1:39:05:a6:43:0a:ba:ed:70:5b:f5:b8:ac:
-         15:91:a4:37:24:c7:1e:d2:69:41:08:e2:2f:76:bb:e1:f8:b9:
-         0d:7a:a9:57:af:25:8c:5c:73:f2:d8:2b:a6:23:c8:42:b4:28:
-         ed:fe:79:2b:11:4a:2e:3c:ef:3f:13:e6:51:68:d8:1a:c3:3b:
-         b3:22:62:c9
+         8c:84:99:c3:fd:20:b8:c9:71:c6:9e:45:cd:e5:4f:2c:7d:6e:
+         a4:1e:c3:43:82:86:09:09:ab:a6:14:50:76:2a:31:46:70:91:
+         f0:5d:a9:88:c9:e2:d9:c5:29:05:54:f5:60:1c:f2:43:b8:b3:
+         b1:d5:ec:64:44:08:7a:d5:df:88:db:4b:bc:9f:eb:d1:02:fe:
+         98:8c:d0:a6:4d:1b:4d:5e:a0:3a:81:c2:87:79:51:5a:50:c2:
+         a8:c4:38:64:76:ec:e5:14:29:98:18:33:8a:ea:e9:2c:23:f0:
+         c3:c3:d5:f6:96:e4:e2:b5:3d:c7:0d:a5:36:32:a7:49:88:52:
+         22:6a:dc:2a:28:5c:98:67:c4:b3:e6:b3:37:e9:71:98:bf:09:
+         15:50:00:e0:f5:cb:27:b1:ce:d6:e4:9f:24:61:a0:90:48:84:
+         17:97:72:0e:07:0e:4b:37:d4:36:3a:53:78:2d:44:7b:98:bd:
+         28:fd:72:a4:6e:01:23:0e:26:06:c2:dd:72:a7:76:fe:95:61:
+         18:44:d9:95:40:d0:f2:73:61:fe:43:30:33:52:3d:04:62:4c:
+         1d:fe:48:45:0e:e6:23:c8:a3:74:b0:05:c4:94:3d:3a:e3:f4:
+         a8:53:c8:66:85:c8:69:c3:7a:37:5d:4d:fd:92:c5:b6:18:8a:
+         77:94:3e:f7
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVxXN+
-qY+fJaOxnynGLtayPVukEAhTQPeReUWW0GaFhepW5tsH/YId4+YR8toTZEW/xuGn
-TNop57ovJ9jNWT1po6/WZEs+pBIHXdR9B4VtnJ3+/Y//dLPJyYZkfO7KdBsvP3w3
-i9n6BQo6m5NF0I0WPnrOC7uPG8wVS6J2CPX74JjMHaQawfUjsCgc/l+kJGhZ/B1j
-vGCaphYs2w1mndduE2pTjFthpz+fvsgq+c7qR9LSG5Xer12wOT1x9b5fgL07Pi55
-6KLenCva5YjNTpzPzbyILsyeO+RSK0kPMZA/FQ21aOpefm75bLpXvUEzUSdm+Ss/
-rnyHB6EZpQ+6vfi3AgMBAAGjgekwgeYwHQYDVR0OBBYEFF5yjnwLpqfoLD42yjfv
-jk5Gy5c0MB8GA1UdIwQYMBaAFN9GXCUT6SKyyeQaMiLElx/mDFWqMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmY5n3
+JHQ/KjbBEuPoaPiqODl27+1mBcOZ2S17ctBXolL7d8Ep11MU6KR0fCohC10gvhjl
+f3Vwc/OJ1Oc8VPYlQa5ZSIjFEMiponXgQ7Xiu1VyiapS29VLiOV9toBL+yy9V/Rl
+V3I6HC+TpN4GdHfM4iG9CrMSwiw8KoQnrj9KI6M5P7HM2OGE3bCRqrpYwu1iyIy0
+tf+CkpOQW2jtfzBS2w6IF47rNyG4KjccfxOKvkBWrMwfpA3XR6u5dg8WxHCz40+a
+jYDciLHjvsEOYgHba/SP2UKEAYUafQzFCQU+7dkKRaYKNH6hiEjz/8yF69TCKXC3
+gTH3Byjh/keSW9FnAgMBAAGjgekwgeYwHQYDVR0OBBYEFBi7SJ163ax8HEjmny9s
+cXCarIjgMB8GA1UdIwQYMBaAFK5YT2sGKxzzTlPpnAvccu0/9VXPMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAFXo1N7r/ETvArYJR0Okj
-UHcGVuCElC3kdpTVr2UmJgZ38mwD9Hdso7qSJseg6iQGmHgYJHBECAPQ7wvb2fI9
-NTgXQWlGYhqvp0S+HScCs3kaMKsGeWq9P3Ih8jRHB+8Iaa5AH2Fop6ioXIVuOWE5
-rYo6pdhklL3i3B9oRfAsvwjQdHUcgDCGh7D062noFlJFvMM7CMmQn/jJAZsvKSvc
-LK9Zyz4HiufgymQqQzm/pQ7WFAjpmsF2ffuhOQWmQwq67XBb9bisFZGkNyTHHtJp
-QQjiL3a74fi5DXqpV68ljFxz8tgrpiPIQrQo7f55KxFKLjzvPxPmUWjYGsM7syJi
-yQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAjISZw/0guMlxxp5FzeVP
+LH1upB7DQ4KGCQmrphRQdioxRnCR8F2piMni2cUpBVT1YBzyQ7izsdXsZEQIetXf
+iNtLvJ/r0QL+mIzQpk0bTV6gOoHCh3lRWlDCqMQ4ZHbs5RQpmBgziurpLCPww8PV
+9pbk4rU9xw2lNjKnSYhSImrcKihcmGfEs+azN+lxmL8JFVAA4PXLJ7HO1uSfJGGg
+kEiEF5dyDgcOSzfUNjpTeC1Ee5i9KP1ypG4BIw4mBsLdcqd2/pVhGETZlUDQ8nNh
+/kMwM1I9BGJMHf5IRQ7mI8ijdLAFxJQ9OuP0qFPIZoXIacN6N11N/ZLFthiKd5Q+
+9w==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ba:c2:3e:70:32:82:15:bd:6f:24:c3:e0:9f:a9:
-                    af:46:01:cb:23:03:07:17:d8:73:73:d0:8d:46:88:
-                    3f:9b:40:30:ea:cb:76:d1:dc:e5:79:c6:ed:5e:94:
-                    68:49:fe:8e:be:ff:74:b4:b1:a0:fd:ec:3f:4c:f5:
-                    26:40:97:d8:b2:fd:a8:e1:9a:1e:47:48:58:8a:39:
-                    0f:a8:53:76:1d:d8:55:b7:ff:15:7a:1a:28:70:a7:
-                    50:6f:f7:2f:d8:dd:22:bf:08:32:82:66:33:fd:7d:
-                    df:55:7f:71:5b:bd:c0:c6:f4:cd:a4:52:30:a9:bd:
-                    a1:a3:61:e3:7a:93:40:a7:41:b3:10:43:0f:79:12:
-                    50:34:0a:a4:ad:07:53:e6:7a:b6:8c:a5:00:82:0c:
-                    9f:eb:c9:f8:51:68:2c:4e:3a:da:7e:7d:6d:15:b1:
-                    ff:37:dd:e6:25:cf:5e:8f:fe:b1:09:7e:f8:60:3b:
-                    20:3e:99:64:e1:9a:58:ee:01:28:71:cf:ac:dd:66:
-                    40:0d:d9:7b:85:8f:f2:35:90:2a:75:26:96:b4:3a:
-                    f2:ef:5c:06:f1:2c:ec:07:83:d6:23:a4:ab:f4:28:
-                    ad:1f:8d:cf:e2:d8:b9:1f:48:76:6f:7c:e7:8a:17:
-                    5b:b5:9b:ff:17:13:6e:f4:05:47:78:91:c7:7a:03:
-                    33:15
+                    00:c4:17:53:d2:54:6b:7a:03:d0:42:2c:6e:be:36:
+                    5d:2a:70:5e:60:ae:99:07:4f:2e:46:05:3e:c1:59:
+                    10:36:f4:30:2d:76:6d:3e:93:f1:f9:4a:c4:fe:07:
+                    5d:c5:54:0f:1f:80:ce:f2:3f:3c:d1:65:94:aa:6e:
+                    4d:f7:be:65:58:20:7d:26:c6:27:d6:26:65:15:66:
+                    8f:98:5b:e8:1e:d4:36:84:98:5d:4d:9d:42:52:cf:
+                    43:4b:bd:f9:f8:c2:b0:ff:17:1d:a5:24:73:03:16:
+                    2b:29:60:b7:66:7b:57:37:80:ab:11:9a:28:23:11:
+                    48:e5:e0:3a:d3:82:1a:22:7c:3c:60:0a:ed:e2:5a:
+                    27:7e:a7:15:76:5b:09:ad:39:5c:14:93:35:a2:da:
+                    3a:45:f7:9c:74:ac:24:64:ac:b8:5b:75:5e:5b:a8:
+                    12:f9:59:cb:73:6e:12:ac:c5:19:0b:f9:74:0b:62:
+                    e6:b5:b3:f6:9d:8a:3d:a1:a1:4b:39:f9:43:da:c7:
+                    a4:39:eb:82:89:ff:9d:d4:14:ed:54:cb:db:e1:9a:
+                    a3:40:dd:fc:85:af:c8:85:d7:95:c0:10:93:89:b0:
+                    15:e9:9f:3d:b9:e7:ff:65:5d:01:5d:1f:7b:a4:28:
+                    77:f1:0b:90:30:3c:19:63:b8:4e:b8:be:63:e0:dc:
+                    c0:47
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D0:3F:2D:C4:6A:01:B8:7A:61:4F:B0:35:18:E6:D0:F9:55:5D:7B:B7
+                75:F1:E7:70:61:AA:A2:4B:6E:22:4E:88:EF:F1:65:B6:BF:D8:6E:9F
             X509v3 Authority Key Identifier: 
-                keyid:D4:FF:80:DD:86:D2:53:18:54:65:B3:62:9A:07:67:BB:21:7D:19:77
+                keyid:24:89:38:A4:DE:99:C1:56:D1:C1:A1:22:C3:9D:DC:4D:6D:1A:CD:F3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         44:69:05:6c:d0:10:da:90:f7:62:5f:8a:80:93:39:f0:ee:6f:
-         c5:18:df:47:40:d0:b4:73:8a:d6:68:7f:99:92:e4:34:bd:ef:
-         d7:c8:8c:d9:09:b1:24:06:86:ab:9f:58:1a:d3:38:73:9b:80:
-         f3:9b:a9:8c:db:ef:0d:94:54:91:45:04:42:9b:98:3c:fc:39:
-         53:85:36:1d:06:59:c5:1e:50:7c:1e:e0:ec:ad:d8:44:98:13:
-         a2:6b:bc:10:39:3e:3e:5b:3a:30:de:2a:a0:08:05:21:cd:d1:
-         57:50:05:c2:84:c3:e8:0d:69:59:76:3d:32:aa:9a:82:0d:59:
-         c6:1a:8e:fa:08:3c:18:08:b2:8b:f2:39:05:02:0e:af:7c:28:
-         7e:16:44:d8:b2:e0:32:19:d7:c5:54:4c:e9:87:e0:1f:30:73:
-         6a:2b:ef:9f:9d:5e:31:a6:02:39:9d:5b:e1:c5:b6:d1:cd:95:
-         ba:ee:5c:3a:97:58:49:ef:26:cf:e6:eb:72:47:5b:6e:f4:cc:
-         3b:1c:08:c7:2e:89:f6:91:ef:94:e3:33:83:7c:9b:d8:10:01:
-         d7:ac:0f:4c:c6:01:c7:0d:84:48:bd:a7:e8:4d:09:40:a8:b2:
-         f3:0a:21:71:74:0f:ab:ca:23:aa:99:80:6d:0c:42:73:14:00:
-         31:1e:67:51
+         93:6f:7e:73:91:01:cb:3b:1a:0e:6d:b7:25:f5:03:5d:49:76:
+         1f:46:68:c7:40:5e:c6:37:47:c5:27:2c:9a:c3:47:5c:f3:77:
+         7d:a1:d3:f2:db:7b:93:e4:de:92:ea:3b:1b:97:c7:f0:44:a1:
+         5a:0a:24:7f:a2:44:ac:39:52:55:01:12:f8:4e:85:a3:64:dd:
+         75:c0:4a:84:21:74:60:d4:97:d7:14:99:de:ca:c2:ce:b6:f4:
+         be:3d:ca:80:e7:fb:13:4e:b7:a2:9e:ff:2c:25:70:84:af:7d:
+         31:a9:6c:54:6f:a1:5a:3b:3b:67:8d:d9:f4:ff:47:b1:2c:e4:
+         9a:ca:b6:66:d1:df:71:ac:15:90:fd:f4:70:63:02:4a:ad:ee:
+         1b:65:55:df:60:4f:d6:68:1e:44:a3:ab:99:1c:39:fc:be:c6:
+         65:6a:7d:99:44:18:88:0d:34:1f:a0:fd:70:f1:ae:d4:9c:e7:
+         28:12:a7:bc:d5:6a:d8:b2:7a:5b:f5:e9:13:a0:08:6d:b6:85:
+         b3:9a:cd:f7:48:d3:56:1a:26:32:ac:5f:c0:75:4e:93:76:a3:
+         14:d7:31:5c:55:b2:4a:c4:f8:cf:ea:d2:38:18:fd:4b:57:f2:
+         f6:4b:66:90:28:6e:4d:4b:35:3b:bb:91:36:65:9f:24:19:74:
+         7e:f5:66:8e
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAusI+cDKC
-Fb1vJMPgn6mvRgHLIwMHF9hzc9CNRog/m0Aw6st20dzlecbtXpRoSf6Ovv90tLGg
-/ew/TPUmQJfYsv2o4ZoeR0hYijkPqFN2HdhVt/8VehoocKdQb/cv2N0ivwgygmYz
-/X3fVX9xW73AxvTNpFIwqb2ho2HjepNAp0GzEEMPeRJQNAqkrQdT5nq2jKUAggyf
-68n4UWgsTjrafn1tFbH/N93mJc9ej/6xCX74YDsgPplk4ZpY7gEocc+s3WZADdl7
-hY/yNZAqdSaWtDry71wG8SzsB4PWI6Sr9CitH43P4ti5H0h2b3znihdbtZv/FxNu
-9AVHeJHHegMzFQIDAQABo4HLMIHIMB0GA1UdDgQWBBTQPy3EagG4emFPsDUY5tD5
-VV17tzAfBgNVHSMEGDAWgBTU/4DdhtJTGFRls2KaB2e7IX0ZdzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxBdT0lRr
+egPQQixuvjZdKnBeYK6ZB08uRgU+wVkQNvQwLXZtPpPx+UrE/gddxVQPH4DO8j88
+0WWUqm5N975lWCB9JsYn1iZlFWaPmFvoHtQ2hJhdTZ1CUs9DS735+MKw/xcdpSRz
+AxYrKWC3ZntXN4CrEZooIxFI5eA604IaInw8YArt4lonfqcVdlsJrTlcFJM1oto6
+RfecdKwkZKy4W3VeW6gS+VnLc24SrMUZC/l0C2LmtbP2nYo9oaFLOflD2sekOeuC
+if+d1BTtVMvb4ZqjQN38ha/IhdeVwBCTibAV6Z89uef/ZV0BXR97pCh38QuQMDwZ
+Y7hOuL5j4NzARwIDAQABo4HLMIHIMB0GA1UdDgQWBBR18edwYaqiS24iTojv8WW2
+v9hunzAfBgNVHSMEGDAWgBQkiTik3pnBVtHBoSLDndxNbRrN8zA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AERpBWzQENqQ92JfioCTOfDub8UY30dA0LRzitZof5mS5DS979fIjNkJsSQGhquf
-WBrTOHObgPObqYzb7w2UVJFFBEKbmDz8OVOFNh0GWcUeUHwe4Oyt2ESYE6JrvBA5
-Pj5bOjDeKqAIBSHN0VdQBcKEw+gNaVl2PTKqmoINWcYajvoIPBgIsovyOQUCDq98
-KH4WRNiy4DIZ18VUTOmH4B8wc2or75+dXjGmAjmdW+HFttHNlbruXDqXWEnvJs/m
-63JHW270zDscCMcuifaR75TjM4N8m9gQAdesD0zGAccNhEi9p+hNCUCosvMKIXF0
-D6vKI6qZgG0MQnMUADEeZ1E=
+AJNvfnORAcs7Gg5ttyX1A11Jdh9GaMdAXsY3R8UnLJrDR1zzd32h0/Lbe5Pk3pLq
+OxuXx/BEoVoKJH+iRKw5UlUBEvhOhaNk3XXASoQhdGDUl9cUmd7Kws629L49yoDn
++xNOt6Ke/ywlcISvfTGpbFRvoVo7O2eN2fT/R7Es5JrKtmbR33GsFZD99HBjAkqt
+7htlVd9gT9ZoHkSjq5kcOfy+xmVqfZlEGIgNNB+g/XDxrtSc5ygSp7zVatiyelv1
+6ROgCG22hbOazfdI01YaJjKsX8B1TpN2oxTXMVxVskrE+M/q0jgY/UtX8vZLZpAo
+bk1LNTu7kTZlnyQZdH71Zo4=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c8:51:b0:c3:f3:b1:5d:6e:4a:c2:41:9e:b7:88:
-                    48:d3:62:d1:49:3a:0b:ab:c9:26:f3:8a:bb:ee:1e:
-                    b8:4a:cb:9a:47:3f:8c:87:a2:81:f5:91:05:7c:47:
-                    45:d6:5f:a1:7d:e7:dd:cd:33:eb:4e:90:65:be:31:
-                    d7:2d:98:03:45:48:03:03:72:8f:0f:43:3d:3a:ad:
-                    cf:bc:f5:f5:bb:7d:1d:94:1d:d4:2c:b6:3b:4a:68:
-                    9e:30:54:c2:c1:69:10:f8:7c:d5:73:ae:2f:22:65:
-                    94:5c:17:1e:41:eb:5a:10:80:6c:eb:04:1d:09:0e:
-                    79:51:71:ce:e7:4f:90:23:4f:84:b5:4e:97:70:79:
-                    eb:28:47:0a:8c:b8:43:a6:f5:df:4d:fd:44:46:18:
-                    06:97:6c:52:65:4a:89:25:af:73:6e:43:6a:93:b0:
-                    ec:29:97:63:a4:36:95:db:71:b6:61:c3:25:0d:3f:
-                    53:2f:de:d0:b4:16:c2:b6:70:3a:34:53:02:3d:50:
-                    eb:32:4a:22:62:3c:9a:74:da:b2:60:af:37:41:4c:
-                    c1:df:90:74:5a:ae:5d:a4:48:dd:1b:86:06:0f:cb:
-                    3e:e5:4d:ec:62:86:04:1a:cb:0f:2a:04:a0:45:d5:
-                    c1:79:9e:07:df:5d:2d:c3:0c:c4:57:0a:be:7e:41:
-                    43:3d
+                    00:d1:40:a2:a7:c5:41:34:03:46:71:64:b9:5d:aa:
+                    87:a9:1e:3a:0d:b2:48:77:25:11:e3:f0:78:f6:37:
+                    94:60:2e:05:90:8d:90:49:0a:c5:c8:c2:5e:3f:5f:
+                    46:e8:cd:f9:aa:6e:ae:64:cb:ea:16:b8:79:16:16:
+                    96:7e:7f:13:2a:6e:ce:90:58:00:ff:9f:ae:ba:23:
+                    d5:b7:8b:c3:93:55:bc:cc:af:8a:ff:96:a3:ee:25:
+                    44:77:11:91:ae:b5:0e:ab:66:b4:d6:99:ea:b6:f3:
+                    05:1d:a7:eb:e0:d9:55:66:dd:ac:00:a8:ae:63:24:
+                    a5:d3:4d:24:35:89:93:fb:34:73:69:0c:33:14:3a:
+                    45:5e:17:3a:81:7c:3b:02:b9:48:87:fc:c8:e6:36:
+                    5b:2f:c7:df:d5:c8:eb:b2:82:8b:c4:2f:b1:ce:b5:
+                    f4:1f:55:a0:54:cb:2d:26:b0:92:1e:3c:55:03:9a:
+                    54:83:95:91:39:1c:f5:6b:60:7b:63:ad:44:63:9a:
+                    46:27:87:c2:9a:7a:ca:78:dc:31:af:14:ef:a5:15:
+                    58:2f:6f:ce:e6:2d:8a:4b:af:98:cc:4d:4c:52:dc:
+                    c3:0f:39:a0:39:5e:24:33:e0:58:94:79:9d:48:f4:
+                    f5:7f:bb:d4:15:32:00:5f:64:4e:62:33:29:cc:50:
+                    6e:a1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D4:FF:80:DD:86:D2:53:18:54:65:B3:62:9A:07:67:BB:21:7D:19:77
+                24:89:38:A4:DE:99:C1:56:D1:C1:A1:22:C3:9D:DC:4D:6D:1A:CD:F3
             X509v3 Authority Key Identifier: 
-                keyid:D4:FF:80:DD:86:D2:53:18:54:65:B3:62:9A:07:67:BB:21:7D:19:77
+                keyid:24:89:38:A4:DE:99:C1:56:D1:C1:A1:22:C3:9D:DC:4D:6D:1A:CD:F3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         46:ee:68:7d:1f:94:16:70:57:11:6b:6b:18:96:45:c3:d7:17:
-         50:9b:f1:e6:b1:bf:ad:97:3f:ca:3e:75:37:4e:c6:b6:d3:68:
-         57:f5:59:a6:44:b4:3f:e5:fe:a3:05:65:02:f5:7c:dc:da:8e:
-         1f:2d:fb:9c:23:f0:c0:a6:fc:f5:f3:a9:80:f9:eb:64:f0:8b:
-         2a:f1:f5:68:8d:8c:c2:37:c4:8e:d5:bb:5b:e6:fb:ec:06:f9:
-         80:28:56:c2:de:9c:16:78:3f:a8:16:15:e9:26:72:8f:45:c3:
-         e7:d4:78:84:3c:b4:a0:72:5e:5d:09:d8:d1:7f:66:ca:74:d6:
-         26:c0:72:c0:2a:89:fa:b4:5f:fe:92:4f:01:97:0e:81:88:01:
-         6b:2e:ed:af:36:30:c7:62:fd:42:63:10:3f:c4:ad:eb:ee:c5:
-         fd:bc:57:08:0f:a3:0c:e5:8c:de:ab:05:b5:b4:e9:c9:d1:c8:
-         66:e2:ea:4a:b0:33:e5:a4:47:22:67:7c:70:e9:02:e0:22:75:
-         35:4a:39:0e:2c:27:e5:29:d6:d2:f5:39:c9:03:39:7a:35:f5:
-         ff:1d:88:8d:e1:be:6b:6b:c7:4c:0c:6d:02:d4:33:7a:f5:ea:
-         29:55:a9:79:94:bc:a3:01:64:4a:99:99:fc:c6:e5:38:a2:8f:
-         18:cc:e7:1f
+         2a:e0:34:e1:7b:4b:20:9b:64:ae:3a:e8:55:16:b4:a5:38:16:
+         a8:1a:77:4e:38:75:1f:0d:c0:09:9e:6a:33:69:5b:14:84:a8:
+         8d:04:35:e9:6c:47:c3:6f:8d:a2:99:93:bc:6e:c1:53:63:2f:
+         30:18:c4:57:1d:8f:b6:bf:5e:2f:24:b2:03:cb:c0:0d:bb:ec:
+         1b:80:c8:36:59:14:48:53:98:92:fb:77:7c:d8:c6:81:b2:28:
+         92:10:de:f3:a4:9e:73:d2:7c:fa:34:7a:f6:1a:22:5b:5d:c2:
+         e4:d1:8a:97:6b:2d:0e:88:85:3b:c6:8a:0a:87:84:76:9c:f9:
+         68:fe:bd:06:13:08:f8:34:8f:af:41:c2:2e:30:3a:1f:ba:dc:
+         32:99:a5:84:e0:07:5d:1c:b6:20:90:79:a5:6e:28:06:d9:9b:
+         ee:86:c0:55:2b:a1:f4:6b:1f:ac:8c:d5:98:58:47:2a:cf:0e:
+         9e:29:62:73:c8:1c:df:cc:02:69:0c:21:0d:cb:61:54:2d:c7:
+         88:51:70:9c:67:0b:0d:64:a0:6e:e0:a9:21:5a:cf:cc:c1:53:
+         0c:f7:39:bc:4a:a6:9c:f2:dc:cc:70:b7:88:be:53:14:0d:6a:
+         0f:51:b8:63:0d:c8:57:16:2f:07:41:11:7c:b0:6a:cf:9b:ef:
+         8a:bc:ea:e6
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMhRsMPzsV1uSsJBnreI
-SNNi0Uk6C6vJJvOKu+4euErLmkc/jIeigfWRBXxHRdZfoX3n3c0z606QZb4x1y2Y
-A0VIAwNyjw9DPTqtz7z19bt9HZQd1Cy2O0ponjBUwsFpEPh81XOuLyJllFwXHkHr
-WhCAbOsEHQkOeVFxzudPkCNPhLVOl3B56yhHCoy4Q6b13039REYYBpdsUmVKiSWv
-c25DapOw7CmXY6Q2ldtxtmHDJQ0/Uy/e0LQWwrZwOjRTAj1Q6zJKImI8mnTasmCv
-N0FMwd+QdFquXaRI3RuGBg/LPuVN7GKGBBrLDyoEoEXVwXmeB99dLcMMxFcKvn5B
-Qz0CAwEAAaOByzCByDAdBgNVHQ4EFgQU1P+A3YbSUxhUZbNimgdnuyF9GXcwHwYD
-VR0jBBgwFoAU1P+A3YbSUxhUZbNimgdnuyF9GXcwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFAoqfFQTQDRnFkuV2q
+h6keOg2ySHclEePwePY3lGAuBZCNkEkKxcjCXj9fRujN+apurmTL6ha4eRYWln5/
+EypuzpBYAP+frroj1beLw5NVvMyviv+Wo+4lRHcRka61DqtmtNaZ6rbzBR2n6+DZ
+VWbdrACormMkpdNNJDWJk/s0c2kMMxQ6RV4XOoF8OwK5SIf8yOY2Wy/H39XI67KC
+i8Qvsc619B9VoFTLLSawkh48VQOaVIOVkTkc9Wtge2OtRGOaRieHwpp6ynjcMa8U
+76UVWC9vzuYtikuvmMxNTFLcww85oDleJDPgWJR5nUj09X+71BUyAF9kTmIzKcxQ
+bqECAwEAAaOByzCByDAdBgNVHQ4EFgQUJIk4pN6ZwVbRwaEiw53cTW0azfMwHwYD
+VR0jBBgwFoAUJIk4pN6ZwVbRwaEiw53cTW0azfMwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBG7mh9H5QW
-cFcRa2sYlkXD1xdQm/Hmsb+tlz/KPnU3Tsa202hX9VmmRLQ/5f6jBWUC9Xzc2o4f
-LfucI/DApvz186mA+etk8Isq8fVojYzCN8SO1btb5vvsBvmAKFbC3pwWeD+oFhXp
-JnKPRcPn1HiEPLSgcl5dCdjRf2bKdNYmwHLAKon6tF/+kk8Blw6BiAFrLu2vNjDH
-Yv1CYxA/xK3r7sX9vFcID6MM5YzeqwW1tOnJ0chm4upKsDPlpEciZ3xw6QLgInU1
-SjkOLCflKdbS9TnJAzl6NfX/HYiN4b5ra8dMDG0C1DN69eopVal5lLyjAWRKmZn8
-xuU4oo8YzOcf
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAq4DThe0sg
+m2SuOuhVFrSlOBaoGndOOHUfDcAJnmozaVsUhKiNBDXpbEfDb42imZO8bsFTYy8w
+GMRXHY+2v14vJLIDy8ANu+wbgMg2WRRIU5iS+3d82MaBsiiSEN7zpJ5z0nz6NHr2
+GiJbXcLk0YqXay0OiIU7xooKh4R2nPlo/r0GEwj4NI+vQcIuMDofutwymaWE4Add
+HLYgkHmlbigG2ZvuhsBVK6H0ax+sjNWYWEcqzw6eKWJzyBzfzAJpDCENy2FULceI
+UXCcZwsNZKBu4KkhWs/MwVMM9zm8Sqac8tzMcLeIvlMUDWoPUbhjDchXFi8HQRF8
+sGrPm++KvOrm
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Signature verification failed
 ERROR: VerifySignedData failed
diff --git a/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem b/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem
index e6fccf5..aa70aef 100644
--- a/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem
+++ b/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e2:dd:d4:9d:10:ff:0e:87:2d:ba:eb:b5:34:02:
-                    80:b9:83:16:1c:74:27:2b:f1:71:fe:5a:15:ad:26:
-                    7c:80:a6:06:a3:5c:81:30:5f:63:4b:7b:41:c4:2f:
-                    ad:6b:31:21:5f:23:1e:a3:6b:41:36:88:6e:cc:97:
-                    5d:ad:67:8e:c5:1c:8f:e4:d0:e5:2b:02:da:e6:7d:
-                    65:6b:a8:fd:90:78:aa:0a:85:31:7c:4e:92:0e:af:
-                    45:00:bb:48:20:22:0e:24:d4:a3:2a:fd:d7:3f:05:
-                    21:70:18:1e:a0:7b:24:25:d9:e5:63:20:dd:59:73:
-                    27:24:9c:a4:4e:8f:93:5d:3c:27:b2:93:7d:1d:15:
-                    09:28:59:f3:70:55:8b:7f:f8:5d:69:0e:3a:0c:a4:
-                    54:7c:32:d4:0e:d4:0b:58:c1:12:74:8a:b6:38:b0:
-                    1d:0e:b2:8e:18:29:ae:8f:75:7b:f3:48:c5:2e:aa:
-                    af:e4:0a:a0:fd:c8:8e:fb:a6:17:28:21:36:2e:5d:
-                    20:b4:21:83:a2:6d:7a:ec:7a:14:24:eb:99:90:0e:
-                    a0:af:4f:8d:f9:11:36:01:3a:8f:18:4e:15:d4:fe:
-                    12:65:f4:af:11:00:f0:4f:86:11:f3:7c:f6:5d:7b:
-                    28:5c:4f:b1:49:68:3b:de:17:2d:6a:5a:09:5e:1d:
-                    8d:29
+                    00:b9:2c:8d:95:c6:27:02:ce:a2:d2:00:96:04:7e:
+                    f5:b9:10:03:36:01:4a:9a:29:ba:7a:0d:8b:45:c8:
+                    e8:2a:11:ad:c5:05:30:37:88:5e:94:90:04:71:cd:
+                    e0:9a:f0:4d:35:36:94:81:e5:26:fa:d1:8b:90:4b:
+                    8f:95:39:7d:05:be:98:c4:08:a6:41:8b:9b:05:7a:
+                    8f:d1:a3:fe:94:de:0b:21:39:67:eb:fd:ea:49:9e:
+                    ed:07:61:1c:67:d3:7b:7b:56:5c:e3:c8:4d:04:ee:
+                    55:ee:bd:32:c7:00:47:cf:58:f2:30:07:a7:16:28:
+                    8e:42:b1:4d:60:5f:bf:bf:dc:f7:fe:c7:f5:e1:62:
+                    3c:e7:2b:03:c0:06:c4:7a:f6:cd:18:ad:77:f9:20:
+                    dc:8f:6f:d8:01:96:9f:9d:a5:4c:f7:a4:9d:e8:f2:
+                    0d:0b:65:90:b2:b6:70:d5:c7:59:79:7c:a3:9a:f4:
+                    3a:9f:6c:be:f8:80:7c:1b:f7:3e:2f:87:9a:0a:88:
+                    0c:97:18:ec:9b:b8:c2:58:7e:69:ca:3b:15:15:05:
+                    8e:53:9d:57:dc:b2:c3:a6:6d:ee:6e:ac:c6:b7:bf:
+                    90:e1:d9:a9:ba:d6:e6:cd:b7:16:7e:71:1f:cb:17:
+                    50:8d:fb:07:9d:de:a4:85:18:ad:e4:bf:5d:61:99:
+                    5b:d7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CF:A5:99:53:C2:5B:C6:BD:10:84:1E:39:95:94:A2:01:79:D4:DA:DD
+                8F:4D:BE:5B:BD:9D:C2:F2:F1:42:C8:5C:BF:6F:CE:06:D5:DD:54:53
             X509v3 Authority Key Identifier: 
-                keyid:A3:6A:AF:46:74:A6:CD:26:44:76:D1:81:2A:03:CE:B7:51:58:33:29
+                keyid:32:22:10:47:EB:DD:97:C7:8C:D2:2A:73:D0:4A:18:4D:A4:0A:B2:A6
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         1c:9c:e2:fa:bd:20:4e:a4:91:63:8d:46:7e:10:1c:d1:ce:5a:
-         c0:dc:cb:8f:c9:fa:54:69:3d:e8:4b:45:a8:34:3d:fb:1b:fe:
-         8a:08:ce:1c:d3:37:cd:d3:c6:76:41:f4:88:9d:4a:cc:72:45:
-         00:bf:5f:11:02:49:a5:e7:f4:69:17:ea:ac:8c:9d:75:cb:2e:
-         35:c7:77:2a:b5:ee:13:aa:ad:84:48:24:77:7d:8b:0b:98:22:
-         7b:2e:36:2f:41:de:ec:4c:37:96:b2:5d:ce:f1:bc:d9:62:ec:
-         5c:07:1c:10:8d:65:1a:09:74:a4:f9:d5:5e:c1:06:f7:7c:b2:
-         ae:86:74:04:8f:43:b5:7f:de:9e:9c:10:5e:78:5b:a4:05:de:
-         d8:9a:33:8d:62:23:a9:3c:e8:6a:ad:5d:d9:f1:5b:9f:34:d8:
-         4a:56:c3:76:1d:9e:d8:05:95:a8:65:00:7a:ad:bd:3d:18:94:
-         f8:07:50:cc:11:39:05:e1:13:a0:9c:8d:17:41:79:76:77:85:
-         b7:6a:c3:bd:db:ee:fe:7e:46:1b:08:e0:05:e4:c5:78:77:f2:
-         49:b1:02:2c:df:d0:f5:ce:76:f6:63:14:65:f8:df:22:2c:fc:
-         fa:9c:2b:91:32:39:92:8b:31:a7:cf:2a:23:e1:43:ea:fd:ff:
-         f2:d7:b1:f7
+         a9:e1:1a:0f:10:f0:2d:fa:8b:06:ae:a5:5e:0f:af:4d:3f:76:
+         e9:74:6b:7b:85:ff:c6:bc:ba:b0:82:15:a3:05:b1:f5:78:16:
+         c9:12:88:88:27:54:1a:f9:ee:8d:29:2b:17:86:2f:62:8b:ba:
+         8b:73:3b:fa:36:5e:71:fd:c6:9a:9a:52:85:2c:0e:4e:b5:ee:
+         79:75:6e:d0:55:79:ea:8b:72:6f:89:db:98:4a:f8:74:3a:a9:
+         b3:3a:48:d7:59:df:bc:2c:e5:08:1d:a7:1b:ae:5e:11:a4:42:
+         ec:42:c7:e7:b1:8d:52:1e:d9:d3:e5:be:e2:33:b0:df:a4:eb:
+         d4:77:bc:95:0e:ac:9b:f4:39:0c:28:e6:55:86:8a:6d:f6:c9:
+         54:97:59:63:22:d3:0e:02:fc:15:c8:94:e2:61:4f:bc:5f:2f:
+         04:fb:e6:91:5d:ed:7b:e5:29:d2:d7:56:2b:5c:2e:87:6a:3f:
+         ac:af:7e:a6:d0:f4:2d:fe:73:cd:b0:af:ce:93:8b:75:93:07:
+         d8:e9:0d:f2:34:fe:37:75:b7:c2:30:6b:20:5f:e3:5c:92:73:
+         03:8b:38:fe:6a:b8:df:20:86:54:14:0c:de:75:18:cb:87:ce:
+         64:06:10:6b:09:83:0a:8d:59:e3:9b:fb:09:51:ea:08:88:d2:
+         61:9e:c9:90
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDi3dSd
-EP8Ohy2667U0AoC5gxYcdCcr8XH+WhWtJnyApgajXIEwX2NLe0HEL61rMSFfIx6j
-a0E2iG7Ml12tZ47FHI/k0OUrAtrmfWVrqP2QeKoKhTF8TpIOr0UAu0ggIg4k1KMq
-/dc/BSFwGB6geyQl2eVjIN1ZcycknKROj5NdPCeyk30dFQkoWfNwVYt/+F1pDjoM
-pFR8MtQO1AtYwRJ0irY4sB0Oso4YKa6PdXvzSMUuqq/kCqD9yI77phcoITYuXSC0
-IYOibXrsehQk65mQDqCvT435ETYBOo8YThXU/hJl9K8RAPBPhhHzfPZdeyhcT7FJ
-aDveFy1qWgleHY0pAgMBAAGjgekwgeYwHQYDVR0OBBYEFM+lmVPCW8a9EIQeOZWU
-ogF51NrdMB8GA1UdIwQYMBaAFKNqr0Z0ps0mRHbRgSoDzrdRWDMpMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5LI2V
+xicCzqLSAJYEfvW5EAM2AUqaKbp6DYtFyOgqEa3FBTA3iF6UkARxzeCa8E01NpSB
+5Sb60YuQS4+VOX0FvpjECKZBi5sFeo/Ro/6U3gshOWfr/epJnu0HYRxn03t7Vlzj
+yE0E7lXuvTLHAEfPWPIwB6cWKI5CsU1gX7+/3Pf+x/XhYjznKwPABsR69s0YrXf5
+INyPb9gBlp+dpUz3pJ3o8g0LZZCytnDVx1l5fKOa9DqfbL74gHwb9z4vh5oKiAyX
+GOybuMJYfmnKOxUVBY5TnVfcssOmbe5urMa3v5Dh2am61ubNtxZ+cR/LF1CN+wed
+3qSFGK3kv11hmVvXAgMBAAGjgekwgeYwHQYDVR0OBBYEFI9Nvlu9ncLy8ULIXL9v
+zgbV3VRTMB8GA1UdIwQYMBaAFDIiEEfr3ZfHjNIqc9BKGE2kCrKmMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAHJzi+r0gTqSRY41GfhAc
-0c5awNzLj8n6VGk96EtFqDQ9+xv+igjOHNM3zdPGdkH0iJ1KzHJFAL9fEQJJpef0
-aRfqrIyddcsuNcd3KrXuE6qthEgkd32LC5giey42L0He7Ew3lrJdzvG82WLsXAcc
-EI1lGgl0pPnVXsEG93yyroZ0BI9DtX/enpwQXnhbpAXe2JozjWIjqTzoaq1d2fFb
-nzTYSlbDdh2e2AWVqGUAeq29PRiU+AdQzBE5BeEToJyNF0F5dneFt2rDvdvu/n5G
-GwjgBeTFeHfySbECLN/Q9c529mMUZfjfIiz8+pwrkTI5kosxp88qI+FD6v3/8tex
-9w==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAqeEaDxDwLfqLBq6lXg+v
+TT926XRre4X/xry6sIIVowWx9XgWyRKIiCdUGvnujSkrF4YvYou6i3M7+jZecf3G
+mppShSwOTrXueXVu0FV56otyb4nbmEr4dDqpszpI11nfvCzlCB2nG65eEaRC7ELH
+57GNUh7Z0+W+4jOw36Tr1He8lQ6sm/Q5DCjmVYaKbfbJVJdZYyLTDgL8FciU4mFP
+vF8vBPvmkV3te+Up0tdWK1wuh2o/rK9+ptD0Lf5zzbCvzpOLdZMH2OkN8jT+N3W3
+wjBrIF/jXJJzA4s4/mq43yCGVBQM3nUYy4fOZAYQawmDCo1Z45v7CVHqCIjSYZ7J
+kA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cc:28:1f:e1:1a:a3:da:34:65:45:b7:bb:c1:3b:
-                    c8:3b:92:22:e1:fb:0a:82:86:f8:0c:41:c4:8b:33:
-                    cd:b7:17:55:25:9c:b6:09:98:cb:ed:6d:81:99:88:
-                    76:c7:ba:11:ec:af:61:b6:73:cf:7c:5a:5c:5f:08:
-                    2e:e4:6f:d8:74:b0:8f:11:8f:6d:56:cd:03:2e:70:
-                    f7:59:59:c9:a7:0c:aa:06:d2:f3:a2:99:a1:1a:a2:
-                    56:b8:88:17:13:d5:de:ee:e8:f8:b5:82:23:15:62:
-                    18:c9:68:02:70:3d:d2:b4:90:4b:28:87:31:ad:b7:
-                    4a:9c:07:b5:ea:52:fd:66:dd:15:64:d7:88:25:e1:
-                    92:0b:77:86:af:73:d8:3b:34:aa:02:bf:8d:a5:06:
-                    50:55:2d:55:bc:bb:ca:01:1b:c3:5d:8d:62:35:b2:
-                    64:cd:4b:70:61:cc:cd:85:6f:50:4a:a2:41:d4:5a:
-                    a5:30:aa:32:3e:50:02:67:aa:99:ee:24:c7:7b:f8:
-                    fd:54:23:3a:4a:b7:67:67:2d:f7:30:4f:b4:d0:28:
-                    a7:f9:64:5b:d8:d9:20:c2:a9:75:ed:0b:ff:b6:f1:
-                    75:bc:3b:be:58:da:f6:93:6c:4d:ba:15:cd:ce:4c:
-                    de:8f:22:89:d2:ac:15:6d:60:da:b3:8b:5a:ea:e6:
-                    ba:75
+                    00:e8:a1:9b:a4:11:54:c2:c3:be:56:99:ba:f9:e9:
+                    65:30:d5:35:55:27:f8:16:41:41:e1:8f:fb:f5:d8:
+                    31:65:4e:a0:30:f0:51:d5:fb:5f:cd:6d:b5:e6:e6:
+                    2c:b5:35:1d:d4:c9:06:93:cb:85:6d:f8:f9:e2:a3:
+                    07:74:e5:97:7a:e6:49:dc:6c:26:1f:2d:67:7c:e3:
+                    77:e8:fd:3b:91:ab:64:ef:6c:8a:64:90:dd:72:c7:
+                    76:35:64:ab:66:0b:03:83:bc:23:80:a4:04:ea:8d:
+                    b7:23:f1:f6:ca:f2:46:f1:bf:da:ce:58:06:d4:08:
+                    a9:de:12:57:cc:68:99:0f:d4:0a:8b:ea:61:ce:f3:
+                    7c:6a:4e:3d:95:92:ef:9c:be:43:57:ae:a3:3c:9f:
+                    6c:a7:4a:16:c4:3e:6a:05:e2:e0:a4:b9:05:a9:ce:
+                    e5:cf:cd:d1:e5:7b:fe:e9:89:3d:49:9e:b2:85:00:
+                    18:5b:58:54:bd:4c:3e:b8:54:f0:13:27:e4:2a:e4:
+                    22:41:63:a7:4c:47:d6:e0:80:38:09:50:8d:97:b4:
+                    d6:f9:35:67:1f:e1:ee:26:12:a9:8a:77:bc:92:96:
+                    d3:71:a0:c4:eb:94:2a:9b:a2:8b:e6:08:8d:e1:58:
+                    e6:ba:48:6b:6b:d6:b5:e5:31:67:7c:1d:7b:3d:92:
+                    a2:5d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A3:6A:AF:46:74:A6:CD:26:44:76:D1:81:2A:03:CE:B7:51:58:33:29
+                32:22:10:47:EB:DD:97:C7:8C:D2:2A:73:D0:4A:18:4D:A4:0A:B2:A6
             X509v3 Authority Key Identifier: 
-                keyid:1E:88:21:E6:C7:6E:DC:76:90:45:43:56:DD:DA:B3:5F:50:3D:CA:BB
+                keyid:EE:56:5C:40:82:7C:4B:4F:83:C7:A6:2E:07:25:AB:45:D4:09:A7:B7
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         76:a9:bf:ab:a6:23:d0:73:52:0f:ac:fb:15:27:2a:ac:cb:2a:
-         99:80:f2:d7:29:ca:e7:5b:68:72:53:df:ea:c7:fb:f6:cb:c4:
-         56:af:e1:95:ec:d7:19:b1:94:42:19:d3:71:6f:8b:19:08:46:
-         0b:ac:05:e3:b2:cb:81:d5:78:37:92:0b:77:75:73:b0:78:0b:
-         2f:b0:ae:a9:39:80:fa:f1:26:62:28:73:18:c9:33:f8:db:1b:
-         90:20:54:a8:18:fd:50:4f:63:3c:4f:a7:6e:aa:11:7c:07:f4:
-         7c:ad:84:fd:a0:f2:d8:63:84:be:c9:ed:b6:c1:2d:2e:23:8f:
-         7e:5f:e3:63:46:89:1f:56:a4:ea:e4:af:85:62:77:29:d6:ce:
-         3b:27:69:7b:2f:be:ef:ec:56:59:a8:ea:cf:b9:a0:1d:07:43:
-         01:84:0e:37:fd:6b:95:39:7e:be:57:9d:33:89:ed:5d:5d:6a:
-         f8:32:3d:59:1b:9a:0c:1c:46:70:80:57:ba:30:6d:a6:b0:70:
-         de:aa:9a:33:bf:5b:ae:33:f3:ee:4d:92:b9:23:22:99:f4:81:
-         08:7f:ef:4f:8b:37:ae:27:4c:9b:6d:b5:ac:62:8d:7d:b2:7e:
-         2b:89:dc:eb:5d:14:c9:f6:64:b0:cd:5b:4b:38:f1:b3:58:b5:
-         07:5d:1a:d9
+         29:cf:6e:f8:a7:1a:6f:71:a2:fe:a7:cd:2d:41:31:73:68:df:
+         08:3e:72:3e:45:67:8b:b2:4c:4c:dd:45:3b:4e:64:78:e8:84:
+         54:ac:e7:0b:c6:87:66:ad:cf:b5:83:7d:c0:3b:7c:b7:05:8d:
+         08:23:1e:7c:a5:f9:49:6e:f5:b3:2d:1c:db:79:cc:9c:da:6a:
+         b4:dc:74:92:32:87:8b:04:6e:f2:81:87:dc:12:a3:bc:5c:1c:
+         0d:5d:3c:52:75:44:b1:fc:b0:d2:d4:0e:50:3e:41:e7:a4:0b:
+         bd:4f:f4:55:bb:56:f3:43:6d:e7:55:28:86:41:4d:aa:69:7e:
+         ea:39:1e:0e:6c:85:b3:2b:36:29:de:db:59:fd:70:19:7c:af:
+         80:20:9c:dd:d3:f0:21:f0:a9:66:5e:f0:b8:6e:9a:24:7f:17:
+         53:68:a1:24:b9:40:24:5a:c4:71:b2:a9:02:c8:c8:43:98:5f:
+         57:dd:a0:e5:de:3d:93:3d:71:76:a8:a4:09:da:7f:d2:31:49:
+         16:c5:55:f7:42:73:fd:57:1d:1f:b9:72:4c:0e:ec:8d:f2:92:
+         74:35:dd:28:a6:18:2c:b0:30:6d:5f:c7:32:7f:f4:fa:40:da:
+         e0:5a:56:f0:7e:af:ea:e3:6a:d5:1c:10:b4:1b:ed:ee:d0:6e:
+         86:ac:e7:1f
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzCgf4Rqj
-2jRlRbe7wTvIO5Ii4fsKgob4DEHEizPNtxdVJZy2CZjL7W2BmYh2x7oR7K9htnPP
-fFpcXwgu5G/YdLCPEY9tVs0DLnD3WVnJpwyqBtLzopmhGqJWuIgXE9Xe7uj4tYIj
-FWIYyWgCcD3StJBLKIcxrbdKnAe16lL9Zt0VZNeIJeGSC3eGr3PYOzSqAr+NpQZQ
-VS1VvLvKARvDXY1iNbJkzUtwYczNhW9QSqJB1FqlMKoyPlACZ6qZ7iTHe/j9VCM6
-SrdnZy33ME+00Cin+WRb2Nkgwql17Qv/tvF1vDu+WNr2k2xNuhXNzkzejyKJ0qwV
-bWDas4ta6ua6dQIDAQABo4HLMIHIMB0GA1UdDgQWBBSjaq9GdKbNJkR20YEqA863
-UVgzKTAfBgNVHSMEGDAWgBQeiCHmx27cdpBFQ1bd2rNfUD3KuzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6KGbpBFU
+wsO+Vpm6+ellMNU1VSf4FkFB4Y/79dgxZU6gMPBR1ftfzW215uYstTUd1MkGk8uF
+bfj54qMHdOWXeuZJ3GwmHy1nfON36P07katk72yKZJDdcsd2NWSrZgsDg7wjgKQE
+6o23I/H2yvJG8b/azlgG1Aip3hJXzGiZD9QKi+phzvN8ak49lZLvnL5DV66jPJ9s
+p0oWxD5qBeLgpLkFqc7lz83R5Xv+6Yk9SZ6yhQAYW1hUvUw+uFTwEyfkKuQiQWOn
+TEfW4IA4CVCNl7TW+TVnH+HuJhKpine8kpbTcaDE65Qqm6KL5giN4Vjmukhra9a1
+5TFnfB17PZKiXQIDAQABo4HLMIHIMB0GA1UdDgQWBBQyIhBH692Xx4zSKnPQShhN
+pAqypjAfBgNVHSMEGDAWgBTuVlxAgnxLT4PHpi4HJatF1AmntzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AHapv6umI9BzUg+s+xUnKqzLKpmA8tcpyudbaHJT3+rH+/bLxFav4ZXs1xmxlEIZ
-03FvixkIRgusBeOyy4HVeDeSC3d1c7B4Cy+wrqk5gPrxJmIocxjJM/jbG5AgVKgY
-/VBPYzxPp26qEXwH9HythP2g8thjhL7J7bbBLS4jj35f42NGiR9WpOrkr4VidynW
-zjsnaXsvvu/sVlmo6s+5oB0HQwGEDjf9a5U5fr5XnTOJ7V1davgyPVkbmgwcRnCA
-V7owbaawcN6qmjO/W64z8+5NkrkjIpn0gQh/70+LN64nTJtttaxijX2yfiuJ3Otd
-FMn2ZLDNW0s48bNYtQddGtk=
+ACnPbvinGm9xov6nzS1BMXNo3wg+cj5FZ4uyTEzdRTtOZHjohFSs5wvGh2atz7WD
+fcA7fLcFjQgjHnyl+Ulu9bMtHNt5zJzaarTcdJIyh4sEbvKBh9wSo7xcHA1dPFJ1
+RLH8sNLUDlA+QeekC71P9FW7VvNDbedVKIZBTappfuo5Hg5shbMrNine21n9cBl8
+r4AgnN3T8CHwqWZe8LhumiR/F1NooSS5QCRaxHGyqQLIyEOYX1fdoOXePZM9cXao
+pAnaf9IxSRbFVfdCc/1XHR+5ckwO7I3yknQ13SimGCywMG1fxzJ/9PpA2uBaVvB+
+r+rjatUcELQb7e7Qboas5x8=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d2:ee:04:1f:69:cf:1f:13:bf:0c:7f:3b:65:1c:
-                    e6:e3:c6:3d:be:86:27:a6:1a:98:44:9e:76:a7:c7:
-                    d0:fd:bc:0e:92:3e:f8:a1:6e:6a:ac:19:80:26:f8:
-                    96:2b:27:fb:c1:4f:10:24:6e:9f:53:0f:6e:52:0f:
-                    59:d1:af:cb:1f:bf:fa:92:6b:d8:bb:9d:5b:48:66:
-                    4f:8c:5b:72:98:f1:eb:62:59:23:d6:12:dc:de:2b:
-                    e2:78:61:23:2f:21:e5:f5:0b:5c:98:69:f5:15:73:
-                    3d:a6:9c:f5:c2:77:3b:a0:70:af:48:39:5c:21:ff:
-                    e2:19:34:82:a0:c4:77:6e:45:11:c6:0d:f3:74:a0:
-                    53:bc:d6:37:6e:17:62:83:43:0c:c8:6e:6a:a3:8f:
-                    83:b4:85:4f:8b:ce:12:55:f5:f1:80:7b:b3:6c:a1:
-                    3a:20:0a:7a:9d:7d:ef:35:e7:15:b4:7a:90:04:54:
-                    68:2d:7a:2d:72:88:99:e7:03:09:55:42:13:9c:55:
-                    e7:f4:3f:3c:66:ab:7c:3d:8b:50:c1:d2:2c:eb:d4:
-                    b8:f4:13:d1:a7:92:b2:97:29:76:94:a6:49:57:d2:
-                    55:17:86:f1:20:7c:a9:a5:7d:ba:48:cc:87:7e:b4:
-                    14:27:48:d1:72:c5:18:c2:f8:80:4c:ca:1b:92:94:
-                    5f:f3
+                    00:b6:17:f4:d1:20:ce:f9:54:24:bd:cd:af:13:01:
+                    3f:74:de:17:b7:c4:3f:40:1c:c9:3e:c5:df:41:ff:
+                    18:03:8f:0d:44:39:95:56:a6:07:3a:7b:8d:9d:a1:
+                    d5:d5:dc:bd:20:20:24:61:d0:22:93:bb:c0:ee:eb:
+                    09:79:8e:75:46:5d:92:32:17:32:97:90:eb:00:a0:
+                    49:da:30:00:b4:28:3e:ba:3a:60:2d:ee:78:55:e6:
+                    ed:dd:e7:2e:57:36:45:2e:fa:65:28:07:bd:bd:a4:
+                    17:4f:c5:44:4a:ea:68:2b:28:94:08:f9:7a:76:d6:
+                    51:82:f6:64:97:cf:4b:bc:a8:6c:d8:8b:ab:c7:7e:
+                    01:3c:11:f7:81:53:01:0d:65:e0:4b:68:5e:21:7b:
+                    46:c3:59:19:da:e5:fe:2c:ff:76:f9:bf:c3:99:8c:
+                    2e:d2:80:af:a5:06:2c:43:bb:c7:d1:34:0c:f5:d9:
+                    a7:7b:72:f2:d7:04:2d:8b:cc:8f:cf:3f:01:9e:89:
+                    ac:53:9b:87:e8:c3:1c:67:c5:c8:8b:26:65:51:3c:
+                    55:28:6a:77:c6:ca:60:27:81:40:5b:3d:a5:54:45:
+                    5d:cb:0e:e2:a7:21:21:97:ab:f7:ec:8d:1d:89:67:
+                    0f:cd:f4:50:18:44:66:2b:37:aa:17:11:73:23:f1:
+                    fd:61
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                1E:88:21:E6:C7:6E:DC:76:90:45:43:56:DD:DA:B3:5F:50:3D:CA:BB
+                EE:56:5C:40:82:7C:4B:4F:83:C7:A6:2E:07:25:AB:45:D4:09:A7:B7
             X509v3 Authority Key Identifier: 
-                keyid:EA:25:A5:9F:40:47:93:DB:8C:A0:6D:18:4A:47:09:4E:05:93:5F:34
+                keyid:2F:C9:20:3A:1C:39:32:BD:9D:54:DA:95:E2:B9:EA:9F:BA:2A:4B:08
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/UberRoot.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         6f:ff:d2:4d:45:07:b2:52:cf:4b:79:b4:37:b8:08:47:37:0e:
-         6d:db:82:92:14:fe:68:31:c1:cc:4a:6f:55:98:8d:8a:47:32:
-         d5:e4:08:16:eb:68:d2:44:06:55:ec:b7:8b:24:b5:91:c4:a8:
-         8d:5b:f5:b2:a3:55:a8:01:a7:ae:bc:a9:71:88:53:c9:81:93:
-         d8:73:42:4a:eb:fd:07:5a:ee:89:1f:2f:40:c7:45:24:46:1c:
-         70:58:12:48:e0:7c:8e:aa:fc:9e:4b:92:83:a0:2f:9a:7e:af:
-         18:67:38:18:16:d8:4f:69:11:2e:ee:11:30:a6:4f:41:65:a1:
-         1b:a1:0f:04:bd:ec:7a:e4:a5:d1:a3:fe:3c:6f:9a:f1:cd:85:
-         f3:f5:2d:05:20:08:ff:61:80:14:47:95:b9:00:39:df:dd:61:
-         55:2b:12:99:60:2a:d1:f4:54:c8:57:77:b3:0d:32:c3:b0:e3:
-         6b:fd:b4:12:91:bc:e7:a1:55:e3:9c:52:a5:7a:e5:a4:66:d0:
-         f9:a8:23:54:06:fd:73:53:0e:1a:3d:80:0b:6b:71:a0:da:e5:
-         c9:fc:6f:77:ca:87:c0:3b:24:0b:af:24:46:e6:5a:78:05:1b:
-         4f:c6:c2:bc:e3:b0:6f:6e:5a:7e:c3:d0:a5:7c:6d:48:66:bc:
-         69:7b:97:d2
+         52:11:69:e4:26:6d:c7:40:67:4c:58:ab:08:b3:a8:24:bc:f5:
+         f8:6e:0c:7f:b8:5d:19:18:82:48:1a:c9:7a:ae:39:04:9a:ae:
+         64:98:96:f8:d8:20:88:7b:bc:ba:fa:fe:cc:57:ce:84:9c:2e:
+         53:3c:59:af:61:94:26:a4:79:f1:4f:fe:9b:68:27:7e:f9:e3:
+         95:2a:60:f3:f2:54:47:c4:6e:20:97:f9:93:09:09:40:ed:73:
+         c1:b3:20:3b:9a:c4:85:bf:5b:08:fa:02:f6:fa:7e:fd:ef:5d:
+         24:4a:4d:24:c2:6a:25:5c:c8:5a:e1:e8:2e:5b:85:f7:f2:81:
+         85:6b:35:a7:b9:36:ce:62:4f:e9:82:5c:c0:e0:b9:1a:cc:e7:
+         6c:b0:ed:19:31:ff:de:e2:bd:d0:48:ab:d7:03:22:e4:ee:23:
+         b9:37:51:d3:9d:e6:f2:89:24:d1:07:5c:da:66:49:0b:e0:e8:
+         8d:62:ee:18:f3:01:9a:b0:a8:50:c4:2a:5d:71:56:5e:0e:3e:
+         74:24:8a:6e:19:0f:6e:f4:9a:9f:3e:f3:ee:8b:e6:28:85:f9:
+         cf:c6:b0:22:74:85:ed:64:db:a4:da:c2:ca:c9:44:13:04:7f:
+         ff:56:b4:bb:de:75:82:2e:d3:14:c3:99:32:c0:d7:c5:78:c3:
+         66:53:e4:80
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDcTCCAlmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhVYmVy
 Um9vdDAeFw0xNTAxMDExMjAwMDBaFw0xNjAxMDExMjAwMDBaMA8xDTALBgNVBAMM
-BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDS7gQfac8fE78M
-fztlHObjxj2+hiemGphEnnanx9D9vA6SPvihbmqsGYAm+JYrJ/vBTxAkbp9TD25S
-D1nRr8sfv/qSa9i7nVtIZk+MW3KY8etiWSPWEtzeK+J4YSMvIeX1C1yYafUVcz2m
-nPXCdzugcK9IOVwh/+IZNIKgxHduRRHGDfN0oFO81jduF2KDQwzIbmqjj4O0hU+L
-zhJV9fGAe7NsoTogCnqdfe815xW0epAEVGgtei1yiJnnAwlVQhOcVef0Pzxmq3w9
-i1DB0izr1Lj0E9GnkrKXKXaUpklX0lUXhvEgfKmlfbpIzId+tBQnSNFyxRjC+IBM
-yhuSlF/zAgMBAAGjgdMwgdAwHQYDVR0OBBYEFB6IIebHbtx2kEVDVt3as19QPcq7
-MB8GA1UdIwQYMBaAFOolpZ9AR5PbjKBtGEpHCU4Fk180MDsGCCsGAQUFBwEBBC8w
+BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2F/TRIM75VCS9
+za8TAT903he3xD9AHMk+xd9B/xgDjw1EOZVWpgc6e42dodXV3L0gICRh0CKTu8Du
+6wl5jnVGXZIyFzKXkOsAoEnaMAC0KD66OmAt7nhV5u3d5y5XNkUu+mUoB729pBdP
+xURK6mgrKJQI+Xp21lGC9mSXz0u8qGzYi6vHfgE8EfeBUwENZeBLaF4he0bDWRna
+5f4s/3b5v8OZjC7SgK+lBixDu8fRNAz12ad7cvLXBC2LzI/PPwGeiaxTm4fowxxn
+xciLJmVRPFUoanfGymAngUBbPaVURV3LDuKnISGXq/fsjR2JZw/N9FAYRGYrN6oX
+EXMj8f1hAgMBAAGjgdMwgdAwHQYDVR0OBBYEFO5WXECCfEtPg8emLgclq0XUCae3
+MB8GA1UdIwQYMBaAFC/JIDocOTK9nVTaleK56p+6KksIMDsGCCsGAQUFBwEBBC8w
 LTArBggrBgEFBQcwAoYfaHR0cDovL3VybC1mb3ItYWlhL1ViZXJSb290LmNlcjAw
 BgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vdXJsLWZvci1jcmwvVWJlclJvb3QuY3Js
 MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
-A4IBAQBv/9JNRQeyUs9LebQ3uAhHNw5t24KSFP5oMcHMSm9VmI2KRzLV5AgW62jS
-RAZV7LeLJLWRxKiNW/Wyo1WoAaeuvKlxiFPJgZPYc0JK6/0HWu6JHy9Ax0UkRhxw
-WBJI4HyOqvyeS5KDoC+afq8YZzgYFthPaREu7hEwpk9BZaEboQ8Evex65KXRo/48
-b5rxzYXz9S0FIAj/YYAUR5W5ADnf3WFVKxKZYCrR9FTIV3ezDTLDsONr/bQSkbzn
-oVXjnFKleuWkZtD5qCNUBv1zUw4aPYALa3Gg2uXJ/G93yofAOyQLryRG5lp4BRtP
-xsK847Bvblp+w9ClfG1IZrxpe5fS
+A4IBAQBSEWnkJm3HQGdMWKsIs6gkvPX4bgx/uF0ZGIJIGsl6rjkEmq5kmJb42CCI
+e7y6+v7MV86EnC5TPFmvYZQmpHnxT/6baCd++eOVKmDz8lRHxG4gl/mTCQlA7XPB
+syA7msSFv1sI+gL2+n79710kSk0kwmolXMha4eguW4X38oGFazWnuTbOYk/pglzA
+4LkazOdssO0ZMf/e4r3QSKvXAyLk7iO5N1HTnebyiSTRB1zaZkkL4OiNYu4Y8wGa
+sKhQxCpdcVZeDj50JIpuGQ9u9JqfPvPui+YohfnPxrAidIXtZNuk2sLKyUQTBH//
+VrS73nWCLtMUw5kywNfFeMNmU+SA
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,3 +281,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem b/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem
index 65bdb9c..8a0a8af 100644
--- a/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem
+++ b/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c8:04:f4:49:c8:99:48:ae:4b:8a:66:a6:19:29:
-                    b8:4f:52:af:29:88:34:6c:07:db:a9:a7:99:7e:09:
-                    bb:07:7a:7b:35:11:39:a5:4d:f9:54:e3:b7:8e:9c:
-                    66:37:62:bc:5f:2d:f4:1f:ba:b0:fd:4b:0b:a6:59:
-                    0c:94:d6:53:aa:7b:97:fc:bd:7f:72:e6:99:a7:04:
-                    a5:b2:02:67:3d:9f:cb:c1:2c:48:f7:a4:a3:d4:30:
-                    b6:8b:96:a9:ad:78:9c:1d:19:2a:28:ac:89:46:81:
-                    eb:32:f1:11:bc:44:32:f0:3b:70:8d:53:4b:5e:ed:
-                    9b:e2:f8:2d:a5:e0:69:cf:11:6b:0b:3e:33:02:f9:
-                    66:e8:2e:93:15:d9:42:81:04:71:17:10:c8:04:81:
-                    cb:11:6b:20:7c:f8:ef:71:8c:04:3a:51:ae:e7:69:
-                    7a:66:3b:fc:52:53:19:97:39:51:38:d3:5c:9b:93:
-                    48:09:e8:5d:18:3a:45:66:70:b1:f2:05:3d:15:ef:
-                    fd:8e:c7:b2:37:da:97:15:04:ec:02:f6:9d:40:b2:
-                    22:02:bc:09:68:70:e8:4d:85:7a:c9:dd:d0:9b:85:
-                    a8:06:2c:ce:15:e7:53:df:79:c6:ad:57:83:c4:8a:
-                    a1:eb:ef:ac:d0:b8:54:93:54:f3:24:91:41:a9:b2:
-                    92:0d
+                    00:f6:57:b7:c7:60:77:e7:d3:31:b6:9a:6f:bc:20:
+                    fa:28:9d:71:b6:65:b8:c9:01:9f:06:9e:4d:ed:a4:
+                    60:b4:1c:2e:53:f1:a0:18:c5:10:02:12:d5:72:6c:
+                    b5:a7:07:7b:dd:fa:83:b1:c0:4b:27:c8:86:c8:d7:
+                    00:e3:dd:53:58:be:82:2d:55:61:c4:aa:15:44:de:
+                    5e:ad:8f:38:a2:b5:2b:94:b9:12:3f:9d:32:5a:ed:
+                    4e:43:f4:c1:62:10:eb:ed:fe:d0:e6:25:d9:83:57:
+                    c2:01:a3:ad:80:3a:61:8e:75:61:e0:24:81:af:0c:
+                    80:64:7c:b5:e6:f5:b5:b1:85:b1:e4:d9:2a:31:f1:
+                    a7:ab:07:64:68:bc:cc:3d:c4:a3:8b:15:f6:10:bf:
+                    10:fd:cb:f1:fd:f3:f4:3c:a6:e3:9e:c8:bc:e7:f3:
+                    64:28:1f:23:89:c0:6f:ed:50:0a:92:ac:e7:63:95:
+                    51:be:a7:4b:6b:2b:98:1f:d4:9a:37:d7:4d:42:c9:
+                    b4:57:71:0a:12:3f:fd:f3:a6:67:9c:73:cd:7a:76:
+                    f7:7c:3f:1d:01:d2:e6:d5:cb:24:cc:28:16:d5:aa:
+                    82:3d:2e:78:c7:cd:60:7e:e1:a9:39:0b:25:b8:62:
+                    8e:79:af:cb:32:4e:69:47:68:d4:d5:25:9a:c0:e2:
+                    dc:25
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                58:5A:D4:08:69:E1:A6:80:04:B2:43:1E:B5:EA:25:03:CC:A6:5A:EF
+                7B:A0:85:96:01:2A:1E:EC:98:29:1C:FC:3F:FF:52:48:92:B1:8B:46
             X509v3 Authority Key Identifier: 
-                keyid:24:F8:6B:40:18:23:4E:B7:94:1D:E3:CA:38:B3:BF:9D:67:F2:7E:16
+                keyid:24:91:0A:B9:A7:1F:7D:0A:B4:1D:65:01:D2:68:05:26:C7:86:43:1E
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         8c:66:31:d0:85:64:e5:17:c7:fa:55:f9:9d:b9:1b:b2:07:b6:
-         c4:7a:ca:9b:94:12:46:af:4e:07:5a:60:26:07:e5:a8:c7:c2:
-         e1:8d:e3:cc:79:b4:f0:f5:c5:7f:6f:35:5b:be:94:6a:b0:51:
-         66:ce:b6:46:69:66:2b:f5:46:92:10:18:2d:28:8d:5b:eb:61:
-         ad:37:2e:03:b0:46:03:e0:b3:2e:28:3f:b6:c7:94:fc:a1:c4:
-         57:97:23:4c:51:39:d6:66:83:aa:1e:57:37:70:b5:89:c9:33:
-         ad:d4:be:97:95:57:89:3a:32:e3:dc:83:ef:5d:78:f8:fa:e0:
-         26:12:6e:b2:f4:00:f1:ac:af:e4:be:7c:e7:8e:60:53:b6:e2:
-         e1:99:bb:ba:35:ff:8d:08:52:a1:7d:2d:0b:46:56:4e:6b:9a:
-         9e:f4:0e:eb:95:a4:95:e7:7b:08:d3:55:3f:95:c8:76:34:12:
-         c3:27:9a:f0:bb:0d:8c:0f:c7:56:b1:2c:c9:34:94:22:b6:c6:
-         a9:df:72:57:88:9e:06:01:e6:52:45:16:e6:aa:1d:ac:93:6e:
-         c0:5c:eb:b4:91:d7:01:8e:27:8c:00:7f:17:0a:f5:84:42:12:
-         d3:54:01:b5:bd:7e:0d:29:24:ee:2a:03:07:76:86:42:10:e1:
-         5c:ac:32:9c
+         d3:07:91:f0:5f:dc:37:4e:93:3a:4f:06:b6:44:5b:d6:26:e9:
+         fa:76:68:a0:22:29:de:58:d1:3f:57:59:59:b4:30:86:36:a4:
+         9d:88:7f:2b:c5:4a:9f:b9:a5:59:2f:21:74:ba:17:0b:55:73:
+         64:f5:2c:e8:41:3a:b3:0c:dd:83:84:0b:2f:12:41:ef:f7:34:
+         fa:98:99:67:2e:9a:fe:ea:cb:a7:95:b7:9a:0d:b6:c3:a8:94:
+         d1:6e:0f:a4:98:06:c1:98:d2:fe:70:68:c7:d9:49:32:d3:ba:
+         4e:03:ee:70:e2:b4:a1:9c:b8:fe:92:b4:bc:6e:78:c8:2a:c3:
+         37:e8:c7:cd:bc:41:a6:96:21:7e:07:a1:dd:90:00:fd:0d:72:
+         e4:98:29:c5:b7:85:76:6e:1e:65:f3:eb:86:7f:40:c7:8c:98:
+         f9:10:30:79:83:11:31:31:92:f6:d6:92:20:eb:3c:64:a6:df:
+         7d:ec:a4:e8:7a:62:91:6c:a0:04:60:74:aa:76:1e:ee:e8:05:
+         fa:0f:5b:ae:50:48:c0:6d:22:5d:f0:01:44:27:df:15:99:b3:
+         19:bd:b3:28:cd:49:f9:1f:69:fc:62:81:cf:77:d4:9f:c7:3b:
+         ba:9e:a6:9f:16:c3:b1:dd:bc:9e:31:85:f8:a6:c1:7c:d2:ea:
+         e9:a7:6b:9b
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIBPRJ
-yJlIrkuKZqYZKbhPUq8piDRsB9upp5l+CbsHens1ETmlTflU47eOnGY3YrxfLfQf
-urD9SwumWQyU1lOqe5f8vX9y5pmnBKWyAmc9n8vBLEj3pKPUMLaLlqmteJwdGSoo
-rIlGgesy8RG8RDLwO3CNU0te7Zvi+C2l4GnPEWsLPjMC+WboLpMV2UKBBHEXEMgE
-gcsRayB8+O9xjAQ6Ua7naXpmO/xSUxmXOVE401ybk0gJ6F0YOkVmcLHyBT0V7/2O
-x7I32pcVBOwC9p1AsiICvAlocOhNhXrJ3dCbhagGLM4V51PfecatV4PEiqHr76zQ
-uFSTVPMkkUGpspINAgMBAAGjgekwgeYwHQYDVR0OBBYEFFha1Ahp4aaABLJDHrXq
-JQPMplrvMB8GA1UdIwQYMBaAFCT4a0AYI063lB3jyjizv51n8n4WMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD2V7fH
+YHfn0zG2mm+8IPoonXG2ZbjJAZ8Gnk3tpGC0HC5T8aAYxRACEtVybLWnB3vd+oOx
+wEsnyIbI1wDj3VNYvoItVWHEqhVE3l6tjziitSuUuRI/nTJa7U5D9MFiEOvt/tDm
+JdmDV8IBo62AOmGOdWHgJIGvDIBkfLXm9bWxhbHk2Sox8aerB2RovMw9xKOLFfYQ
+vxD9y/H98/Q8puOeyLzn82QoHyOJwG/tUAqSrOdjlVG+p0trK5gf1Jo3101CybRX
+cQoSP/3zpmecc816dvd8Px0B0ubVyyTMKBbVqoI9LnjHzWB+4ak5CyW4Yo55r8sy
+TmlHaNTVJZrA4twlAgMBAAGjgekwgeYwHQYDVR0OBBYEFHughZYBKh7smCkc/D//
+UkiSsYtGMB8GA1UdIwQYMBaAFCSRCrmnH30KtB1lAdJoBSbHhkMeMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAjGYx0IVk5RfH+lX5nbkb
-sge2xHrKm5QSRq9OB1pgJgflqMfC4Y3jzHm08PXFf281W76UarBRZs62RmlmK/VG
-khAYLSiNW+thrTcuA7BGA+CzLig/tseU/KHEV5cjTFE51maDqh5XN3C1ickzrdS+
-l5VXiToy49yD7114+PrgJhJusvQA8ayv5L58545gU7bi4Zm7ujX/jQhSoX0tC0ZW
-TmuanvQO65Wkled7CNNVP5XIdjQSwyea8LsNjA/HVrEsyTSUIrbGqd9yV4ieBgHm
-UkUW5qodrJNuwFzrtJHXAY4njAB/Fwr1hEIS01QBtb1+DSkk7ioDB3aGQhDhXKwy
-nA==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEA0weR8F/cN06TOk8GtkRb
+1ibp+nZooCIp3ljRP1dZWbQwhjaknYh/K8VKn7mlWS8hdLoXC1VzZPUs6EE6swzd
+g4QLLxJB7/c0+piZZy6a/urLp5W3mg22w6iU0W4PpJgGwZjS/nBox9lJMtO6TgPu
+cOK0oZy4/pK0vG54yCrDN+jHzbxBppYhfgeh3ZAA/Q1y5JgpxbeFdm4eZfPrhn9A
+x4yY+RAweYMRMTGS9taSIOs8ZKbffeyk6HpikWygBGB0qnYe7ugF+g9brlBIwG0i
+XfABRCffFZmzGb2zKM1J+R9p/GKBz3fUn8c7up6mnxbDsd28njGF+KbBfNLq6adr
+mw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b4:44:74:3c:31:93:a2:8c:74:39:b1:50:1d:1c:
-                    86:f8:ac:e7:45:73:11:9a:9c:8e:31:4a:84:81:0b:
-                    6a:4b:38:13:eb:63:47:85:e7:2f:81:98:d2:f9:73:
-                    a7:3b:3f:33:6e:21:51:7e:d1:36:4a:84:6f:b5:ce:
-                    26:c5:1c:b6:fd:75:77:e4:8f:73:1a:3f:f9:e5:88:
-                    d2:74:a8:6c:6e:50:f0:56:a5:58:ad:5a:69:0f:4a:
-                    d1:fd:58:53:0a:e3:86:17:ff:37:48:7a:3b:a7:6d:
-                    f5:c2:eb:f5:c7:60:17:d1:36:69:99:34:b8:a3:f7:
-                    4b:a2:02:b1:0e:b9:81:2a:80:e9:da:e4:d8:40:82:
-                    a3:e8:da:00:53:8e:89:32:e8:71:61:a0:1b:ee:a2:
-                    f2:c7:fc:bb:0c:6b:71:d6:90:dc:a7:dd:bd:6f:97:
-                    5f:5c:d5:bb:1a:d3:6f:d2:6b:30:32:6d:b0:eb:9f:
-                    92:17:6d:b9:7f:e3:20:a0:16:43:6b:a2:4c:7f:37:
-                    4e:26:04:8e:5c:1a:cc:2b:e3:37:8e:90:75:1b:b9:
-                    b7:45:e2:41:1f:b0:af:b3:d1:85:56:a2:b0:b1:ad:
-                    73:07:de:64:60:56:c4:8c:9f:48:d8:50:63:f8:c1:
-                    6b:c5:f1:f3:11:9e:5e:1d:56:55:60:12:82:9c:93:
-                    61:91
+                    00:d5:ec:2b:26:4f:75:ee:1c:3f:35:43:b5:18:42:
+                    59:f6:82:95:02:b9:f8:66:97:9c:61:ad:eb:c8:d7:
+                    06:be:2d:df:46:dc:21:be:69:f0:a1:fd:6b:e1:0e:
+                    58:ae:ca:a9:e4:f4:51:96:51:20:b3:a0:59:85:30:
+                    aa:eb:27:64:40:bf:53:83:d0:ec:3a:45:ab:3d:b5:
+                    27:b5:b1:bc:26:24:b8:b0:85:6d:a5:c2:33:f7:1c:
+                    ba:bb:77:47:90:91:46:bf:dc:65:7d:59:51:ae:15:
+                    03:71:f8:3f:3a:db:92:0e:ad:25:fd:48:d5:0e:04:
+                    73:bc:5c:9f:15:dd:da:53:dd:58:76:14:18:49:d1:
+                    75:f9:5c:11:f0:77:6d:fb:64:62:08:27:77:0b:04:
+                    d6:0c:21:23:20:f3:7c:b9:d6:52:61:0e:5e:ee:61:
+                    56:ea:36:97:98:49:5a:fc:44:5d:22:c2:2d:22:4b:
+                    95:a5:e7:f9:65:5b:00:ff:53:9f:36:d6:9b:66:83:
+                    8c:79:f2:e4:84:ad:00:2a:fd:02:21:9a:95:02:13:
+                    55:60:e8:70:c5:ad:a4:7c:d3:eb:da:31:2f:cd:5d:
+                    19:64:56:95:ce:0f:e4:b5:33:76:e3:6c:dd:8d:cb:
+                    9f:cf:f2:8c:a0:33:54:c4:ba:33:5e:62:76:47:4f:
+                    8d:fd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                24:F8:6B:40:18:23:4E:B7:94:1D:E3:CA:38:B3:BF:9D:67:F2:7E:16
+                24:91:0A:B9:A7:1F:7D:0A:B4:1D:65:01:D2:68:05:26:C7:86:43:1E
             X509v3 Authority Key Identifier: 
-                keyid:3E:6C:67:DF:AB:EE:20:0E:C6:98:F6:9A:1E:AD:BE:AF:AD:72:D8:86
+                keyid:64:05:68:4D:5B:CD:E9:FC:19:3E:62:FC:41:99:6C:86:A6:C8:90:4D
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         a2:28:e4:cb:e5:d2:31:bd:7a:6c:60:60:75:59:27:9a:3a:11:
-         52:17:37:53:82:12:4d:f6:0c:d5:bf:45:51:4d:eb:8e:8a:c7:
-         01:c3:55:3e:9f:16:48:69:84:f2:e7:ad:7a:a4:32:66:c4:19:
-         39:1e:7c:31:01:42:59:3c:92:b9:aa:59:a5:b9:40:56:e5:4d:
-         0f:49:de:79:a9:72:77:95:5b:c3:de:b0:36:84:08:60:ea:21:
-         b9:d5:b4:bc:bf:f7:f0:f7:ea:5f:5f:fe:c8:3e:dc:b0:54:0e:
-         16:dd:c0:c2:d4:9f:c4:a0:e1:b3:52:0c:ee:43:0e:e7:a0:2f:
-         5e:25:92:51:6c:e7:a1:70:f8:f1:7e:83:e3:ea:a4:5d:a9:fb:
-         3a:c0:64:43:06:b5:a5:7e:48:e8:d3:20:52:df:06:4c:15:2e:
-         bb:54:49:7e:26:e5:eb:5b:82:80:8f:27:d3:e0:d0:28:5f:e8:
-         c0:7d:40:e5:e3:81:bf:2d:83:8f:7f:c4:7c:9b:24:f1:e7:1c:
-         81:90:bf:15:5a:db:4c:e8:09:f8:9b:9a:ba:f4:ad:b0:d7:66:
-         d5:b8:af:15:02:a1:e0:84:12:8c:68:24:9e:47:3c:4d:b8:da:
-         60:44:a1:fb:1d:d1:4b:b6:3a:22:a4:b9:6c:27:65:24:a6:6e:
-         57:c6:62:b9
+         3a:c3:68:18:0f:c4:0a:a1:ef:6b:f2:e1:4f:d1:21:9c:db:b6:
+         f3:bf:34:3a:f7:5f:61:69:59:69:a7:0c:05:c2:fd:f4:d3:f2:
+         32:7c:7e:e7:44:3c:4c:82:14:70:90:19:72:ae:27:e9:96:a6:
+         e1:dd:50:db:ca:07:b9:3d:c2:67:f0:f8:d5:76:ba:2d:8c:37:
+         89:7f:e5:68:a2:22:84:75:fe:fc:df:f8:90:41:04:a9:2f:8c:
+         1a:a6:d1:36:8b:cb:83:9c:95:e0:a2:1a:a9:19:17:b8:35:3f:
+         38:c7:0d:7a:0e:e2:79:fe:00:83:9a:ca:8d:ec:a6:f0:f1:60:
+         e8:e8:3c:5c:c6:14:af:5a:ca:7a:a9:28:c1:a9:dd:bc:29:58:
+         ad:02:ff:8d:d5:d6:52:18:0a:59:57:b2:19:1a:84:3b:a4:1d:
+         75:6b:e6:9f:54:1c:40:a6:d2:8c:45:78:0b:8b:3f:43:7f:f4:
+         bf:39:87:4b:81:c2:de:77:d3:e2:9b:5b:71:52:b5:8a:b9:b5:
+         b0:9d:bb:ca:63:13:51:a2:c8:14:ce:fe:86:48:21:72:e9:44:
+         29:c9:c9:f8:e6:b4:97:3e:78:a0:ab:66:0d:9d:b2:db:47:5e:
+         a8:e6:08:b7:52:6b:52:48:34:68:bc:e0:70:65:ef:3d:5b:06:
+         32:f1:02:48
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtER0PDGT
-oox0ObFQHRyG+KznRXMRmpyOMUqEgQtqSzgT62NHhecvgZjS+XOnOz8zbiFRftE2
-SoRvtc4mxRy2/XV35I9zGj/55YjSdKhsblDwVqVYrVppD0rR/VhTCuOGF/83SHo7
-p231wuv1x2AX0TZpmTS4o/dLogKxDrmBKoDp2uTYQIKj6NoAU46JMuhxYaAb7qLy
-x/y7DGtx1pDcp929b5dfXNW7GtNv0mswMm2w65+SF225f+MgoBZDa6JMfzdOJgSO
-XBrMK+M3jpB1G7m3ReJBH7Cvs9GFVqKwsa1zB95kYFbEjJ9I2FBj+MFrxfHzEZ5e
-HVZVYBKCnJNhkQIDAQABo4HLMIHIMB0GA1UdDgQWBBQk+GtAGCNOt5Qd48o4s7+d
-Z/J+FjAfBgNVHSMEGDAWgBQ+bGffq+4gDsaY9poerb6vrXLYhjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1ewrJk91
+7hw/NUO1GEJZ9oKVArn4ZpecYa3ryNcGvi3fRtwhvmnwof1r4Q5Yrsqp5PRRllEg
+s6BZhTCq6ydkQL9Tg9DsOkWrPbUntbG8JiS4sIVtpcIz9xy6u3dHkJFGv9xlfVlR
+rhUDcfg/OtuSDq0l/UjVDgRzvFyfFd3aU91YdhQYSdF1+VwR8Hdt+2RiCCd3CwTW
+DCEjIPN8udZSYQ5e7mFW6jaXmEla/ERdIsItIkuVpef5ZVsA/1OfNtabZoOMefLk
+hK0AKv0CIZqVAhNVYOhwxa2kfNPr2jEvzV0ZZFaVzg/ktTN242zdjcufz/KMoDNU
+xLozXmJ2R0+N/QIDAQABo4HLMIHIMB0GA1UdDgQWBBQkkQq5px99CrQdZQHSaAUm
+x4ZDHjAfBgNVHSMEGDAWgBRkBWhNW83p/Bk+YvxBmWyGpsiQTTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AKIo5Mvl0jG9emxgYHVZJ5o6EVIXN1OCEk32DNW/RVFN646KxwHDVT6fFkhphPLn
-rXqkMmbEGTkefDEBQlk8krmqWaW5QFblTQ9J3nmpcneVW8PesDaECGDqIbnVtLy/
-9/D36l9f/sg+3LBUDhbdwMLUn8Sg4bNSDO5DDuegL14lklFs56Fw+PF+g+PqpF2p
-+zrAZEMGtaV+SOjTIFLfBkwVLrtUSX4m5etbgoCPJ9Pg0Chf6MB9QOXjgb8tg49/
-xHybJPHnHIGQvxVa20zoCfibmrr0rbDXZtW4rxUCoeCEEoxoJJ5HPE242mBEofsd
-0Uu2OiKkuWwnZSSmblfGYrk=
+ADrDaBgPxAqh72vy4U/RIZzbtvO/NDr3X2FpWWmnDAXC/fTT8jJ8fudEPEyCFHCQ
+GXKuJ+mWpuHdUNvKB7k9wmfw+NV2ui2MN4l/5WiiIoR1/vzf+JBBBKkvjBqm0TaL
+y4OcleCiGqkZF7g1PzjHDXoO4nn+AIOayo3spvDxYOjoPFzGFK9aynqpKMGp3bwp
+WK0C/43V1lIYCllXshkahDukHXVr5p9UHECm0oxFeAuLP0N/9L85h0uBwt530+Kb
+W3FStYq5tbCdu8pjE1GiyBTO/oZIIXLpRCnJyfjmtJc+eKCrZg2dsttHXqjmCLdS
+a1JINGi84HBl7z1bBjLxAkg=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:70:df:1f:ab:c3:a1:05:6d:4c:e7:9b:5b:c7:
-                    c7:b4:36:f5:e7:c7:00:14:94:c6:8d:6c:a9:3d:0d:
-                    bb:44:8b:d7:50:29:90:e5:58:b5:6f:71:47:54:52:
-                    85:46:7a:c6:36:9c:57:39:dc:75:d3:1b:f8:69:db:
-                    da:21:11:db:8b:c1:e7:ac:86:7b:20:10:e7:3f:6e:
-                    0b:c8:33:71:00:bb:4c:a9:7b:41:a8:54:4a:c7:48:
-                    cb:6a:aa:cd:d9:a3:dd:5d:f9:80:df:c3:6d:4b:55:
-                    4d:7c:c5:d3:de:bc:c1:c9:4e:50:fa:98:70:e0:84:
-                    4b:fc:fc:9b:eb:fa:e3:7c:4b:0a:94:e6:5f:41:0c:
-                    35:e1:d7:2c:54:27:24:22:9e:f7:c6:6d:72:d2:43:
-                    06:52:d4:fb:94:ac:79:51:0b:da:1d:83:bf:a1:bc:
-                    04:a5:a7:4c:a8:03:d0:01:7f:42:43:31:d9:7e:46:
-                    74:2b:46:5a:a4:0d:ff:7a:e0:69:d1:dd:d7:29:0d:
-                    b8:12:3d:99:ac:f5:ce:97:d7:3f:2e:15:5c:51:47:
-                    1d:d4:da:f5:ce:a3:12:46:43:74:da:70:bb:a2:83:
-                    e3:b8:ac:e1:b0:8c:88:cd:d8:d9:42:fa:e8:57:a3:
-                    5b:d8:4d:72:a8:7f:be:22:8a:d3:cf:1a:75:53:fc:
-                    32:c9
+                    00:a5:77:64:fa:4a:30:51:54:db:ed:11:09:28:66:
+                    1e:43:58:6c:17:64:8e:ae:f2:05:f0:a3:a4:b6:50:
+                    44:05:9d:59:67:6b:32:80:6f:1e:90:bf:b2:15:07:
+                    ef:61:7b:28:f6:08:3c:1a:2a:91:d0:11:42:b8:4b:
+                    a2:33:16:7c:76:d9:fb:6b:19:4c:ad:6e:d1:2f:22:
+                    39:92:fa:5f:48:6c:62:66:91:91:02:84:19:49:18:
+                    06:89:c5:39:cb:cb:05:fb:6d:ab:fd:e6:da:78:05:
+                    34:5d:1c:c8:9e:4a:78:49:ed:93:07:af:8b:70:99:
+                    cf:80:0d:7e:bd:b0:94:03:a4:11:a2:07:34:e1:b7:
+                    0e:5c:60:14:75:ff:c3:dc:60:bc:b9:03:f5:41:fd:
+                    0e:82:81:44:ff:14:5d:2a:85:16:b3:07:74:70:9f:
+                    b7:a6:93:2e:2e:75:17:5a:55:62:3f:de:af:fb:2c:
+                    0e:a7:ab:44:c2:b2:e3:cb:fd:5a:01:32:a0:c4:fe:
+                    b8:e0:32:93:1c:dc:97:cd:70:74:67:67:00:f6:aa:
+                    2c:63:9c:e7:90:5d:09:a4:89:09:49:7c:86:58:21:
+                    6c:18:c1:75:0c:4f:c5:08:7f:20:cf:96:20:a3:79:
+                    56:dd:e8:90:e2:b8:c9:bc:59:87:18:ee:26:db:50:
+                    0a:81
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                3E:6C:67:DF:AB:EE:20:0E:C6:98:F6:9A:1E:AD:BE:AF:AD:72:D8:86
+                64:05:68:4D:5B:CD:E9:FC:19:3E:62:FC:41:99:6C:86:A6:C8:90:4D
             X509v3 Authority Key Identifier: 
-                keyid:3E:6C:67:DF:AB:EE:20:0E:C6:98:F6:9A:1E:AD:BE:AF:AD:72:D8:86
+                keyid:64:05:68:4D:5B:CD:E9:FC:19:3E:62:FC:41:99:6C:86:A6:C8:90:4D
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:FALSE
     Signature Algorithm: sha256WithRSAEncryption
-         27:dc:b7:a3:09:a6:ab:07:74:62:e6:57:46:5a:75:a7:8d:c7:
-         77:47:a4:5e:9b:9b:85:69:5c:a7:92:b6:30:de:b6:c5:e5:c2:
-         57:c2:05:ec:dd:7b:76:8f:20:dc:89:75:b9:6a:6e:d8:5f:4b:
-         b9:85:f1:b1:1e:33:33:18:ff:c6:bc:1d:0a:29:ac:46:c1:77:
-         36:ae:8f:ae:81:fa:c3:5d:b9:de:4a:4f:8e:fc:b6:ed:c4:93:
-         1f:87:34:39:ba:c3:76:fa:03:38:c6:57:c4:1d:41:cb:4b:8c:
-         26:9d:60:b3:e9:0f:5a:7d:22:0f:58:4d:60:72:a4:23:77:bf:
-         58:b4:f4:8e:dc:8c:42:2e:46:f9:67:0a:b5:b9:a6:60:06:16:
-         8b:28:e2:e7:95:ff:c8:e2:d9:50:17:88:45:1e:13:20:bd:20:
-         03:f8:46:17:21:5d:ba:1a:3c:fd:ec:25:cf:04:2e:90:db:b6:
-         0f:0f:db:d5:ff:5a:8b:fd:4f:85:ab:7e:fc:a7:a3:10:b1:84:
-         6e:e4:20:11:bf:d4:b1:3c:a3:58:2a:f5:56:45:e2:86:f0:ae:
-         67:05:d9:b6:57:79:3c:e2:03:26:70:27:fb:e6:0f:96:a7:40:
-         9c:a6:cb:fa:de:bd:8b:f9:e2:ad:7d:9d:b5:ac:27:bf:83:9b:
-         10:94:f2:71
+         14:46:e0:df:45:14:f3:33:e1:72:a9:d8:ec:37:4e:ee:98:02:
+         a6:7d:33:97:c1:d7:bb:8b:bf:40:ac:1e:be:74:d8:e0:b3:aa:
+         ce:5e:f6:59:b7:0d:56:f6:45:6d:18:c9:ed:c4:0c:47:78:10:
+         2b:e5:d9:0b:cb:76:37:ab:de:9f:0b:4f:54:2d:43:3f:f2:3e:
+         e0:84:30:2a:99:47:3d:bc:89:e9:e3:46:7a:ff:7e:13:6c:ea:
+         dc:d2:59:24:b5:4a:7e:9f:3b:a9:2a:fa:d6:fc:48:0f:71:3b:
+         fd:d6:ab:4e:f7:85:9f:26:97:97:a6:60:6c:9f:1d:09:a2:f0:
+         52:73:12:bf:dc:7a:a8:71:a3:ae:27:26:78:08:ab:1d:96:3c:
+         92:1e:19:eb:8a:2d:9a:b5:1e:75:32:5f:42:80:b4:26:ed:7e:
+         5a:3f:3e:7f:dc:ff:04:33:bd:04:f4:d7:cb:da:f3:69:a7:77:
+         cc:2f:e8:0d:b1:e8:b0:d7:ba:f3:12:13:32:6f:87:c1:0a:5f:
+         b4:3d:d3:3f:a0:da:1a:f4:42:ab:5c:2d:ef:a8:dc:37:8d:75:
+         e9:ad:de:22:01:24:5a:1b:97:8d:d0:3e:ae:87:8c:8d:63:f2:
+         40:4d:09:0d:58:d8:38:1a:a1:a7:43:fe:ad:d9:f4:7a:be:2f:
+         48:bb:71:d1
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDYjCCAkqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBw3x+rw6EFbUznm1vH
-x7Q29efHABSUxo1sqT0Nu0SL11ApkOVYtW9xR1RShUZ6xjacVzncddMb+Gnb2iER
-24vB56yGeyAQ5z9uC8gzcQC7TKl7QahUSsdIy2qqzdmj3V35gN/DbUtVTXzF0968
-wclOUPqYcOCES/z8m+v643xLCpTmX0EMNeHXLFQnJCKe98ZtctJDBlLU+5SseVEL
-2h2Dv6G8BKWnTKgD0AF/QkMx2X5GdCtGWqQN/3rgadHd1ykNuBI9maz1zpfXPy4V
-XFFHHdTa9c6jEkZDdNpwu6KD47is4bCMiM3Y2UL66FejW9hNcqh/viKK088adVP8
-MskCAwEAAaOByDCBxTAdBgNVHQ4EFgQUPmxn36vuIA7GmPaaHq2+r61y2IYwHwYD
-VR0jBBgwFoAUPmxn36vuIA7GmPaaHq2+r61y2IYwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKV3ZPpKMFFU2+0RCShm
+HkNYbBdkjq7yBfCjpLZQRAWdWWdrMoBvHpC/shUH72F7KPYIPBoqkdARQrhLojMW
+fHbZ+2sZTK1u0S8iOZL6X0hsYmaRkQKEGUkYBonFOcvLBfttq/3m2ngFNF0cyJ5K
+eEntkwevi3CZz4ANfr2wlAOkEaIHNOG3DlxgFHX/w9xgvLkD9UH9DoKBRP8UXSqF
+FrMHdHCft6aTLi51F1pVYj/er/ssDqerRMKy48v9WgEyoMT+uOAykxzcl81wdGdn
+APaqLGOc55BdCaSJCUl8hlghbBjBdQxPxQh/IM+WIKN5Vt3okOK4ybxZhxjuJttQ
+CoECAwEAAaOByDCBxTAdBgNVHQ4EFgQUZAVoTVvN6fwZPmL8QZlshqbIkE0wHwYD
+VR0jBBgwFoAUZAVoTVvN6fwZPmL8QZlshqbIkE0wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAn3LejCaarB3Ri
-5ldGWnWnjcd3R6Rem5uFaVynkrYw3rbF5cJXwgXs3Xt2jyDciXW5am7YX0u5hfGx
-HjMzGP/GvB0KKaxGwXc2ro+ugfrDXbneSk+O/LbtxJMfhzQ5usN2+gM4xlfEHUHL
-S4wmnWCz6Q9afSIPWE1gcqQjd79YtPSO3IxCLkb5Zwq1uaZgBhaLKOLnlf/I4tlQ
-F4hFHhMgvSAD+EYXIV26Gjz97CXPBC6Q27YPD9vV/1qL/U+Fq378p6MQsYRu5CAR
-v9SxPKNYKvVWReKG8K5nBdm2V3k84gMmcCf75g+Wp0Ccpsv63r2L+eKtfZ21rCe/
-g5sQlPJx
+AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAURuDfRRTzM+Fy
+qdjsN07umAKmfTOXwde7i79ArB6+dNjgs6rOXvZZtw1W9kVtGMntxAxHeBAr5dkL
+y3Y3q96fC09ULUM/8j7ghDAqmUc9vInp40Z6/34TbOrc0lkktUp+nzupKvrW/EgP
+cTv91qtO94WfJpeXpmBsnx0JovBScxK/3HqocaOuJyZ4CKsdljySHhnrii2atR51
+Ml9CgLQm7X5aPz5/3P8EM70E9NfL2vNpp3fML+gNseiw17rzEhMyb4fBCl+0PdM/
+oNoa9EKrXC3vqNw3jXXprd4iASRaG5eN0D6uh4yNY/JATQkNWNg4GqGnQ/6t2fR6
+vi9Iu3HR
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem b/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem
index 24d08c5..da1f39b 100644
--- a/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem
+++ b/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bc:1b:31:ef:84:8e:64:39:4e:02:f3:81:fc:75:
-                    0b:07:af:5b:57:53:6b:df:27:87:03:1c:3d:ea:b3:
-                    6a:b5:14:e9:98:1d:13:16:fc:51:5b:04:c5:72:81:
-                    3e:26:05:54:9b:19:f8:7e:c0:ee:c8:49:eb:e2:9d:
-                    78:82:c8:e9:c5:af:eb:fc:10:85:e2:5f:e6:6a:8e:
-                    51:19:69:69:10:5e:aa:99:31:64:c4:3d:0f:3e:f0:
-                    5a:2a:cd:dd:b7:27:ff:5a:ee:91:c3:ad:92:9e:da:
-                    91:df:7d:7f:77:f1:79:d8:6e:60:48:ad:57:f1:2d:
-                    6e:67:5b:fe:20:5c:b9:56:a7:70:8d:63:80:5a:99:
-                    cf:3d:6e:14:f5:d8:29:b9:25:81:61:c7:bb:be:3b:
-                    08:38:c5:5d:40:aa:e7:15:51:8a:84:d3:78:64:f5:
-                    3b:09:7b:a9:f2:ed:a5:05:ed:3a:67:21:45:f1:78:
-                    78:e2:92:74:20:e0:41:10:f7:ab:9e:0e:fd:22:af:
-                    ad:8f:b4:81:cb:d9:28:b1:49:90:05:fa:f7:96:a8:
-                    b7:96:3d:5b:87:d9:6b:cc:82:7a:85:26:ba:e6:86:
-                    40:53:44:09:38:27:4d:8a:98:5d:ce:56:a1:93:38:
-                    08:fd:02:92:ef:9b:0c:d5:c0:9d:12:e8:21:08:9d:
-                    ba:e1
+                    00:bb:bb:40:cb:96:84:ca:5e:59:69:8d:3f:2b:c5:
+                    01:1a:7a:f1:49:0a:d7:0a:13:27:7d:42:6f:f2:b5:
+                    e6:17:51:a7:49:16:d0:c3:66:9d:de:eb:07:8a:a9:
+                    29:7b:17:9b:00:b7:45:54:48:76:84:95:84:c6:f8:
+                    e3:ad:79:08:2b:5d:02:fd:22:bf:52:b4:07:64:65:
+                    cc:8b:87:71:08:ed:78:aa:6f:87:67:12:87:db:e5:
+                    b1:9a:27:0b:09:20:16:97:4f:9d:b6:22:2b:9f:55:
+                    f6:da:0f:73:86:aa:f4:6f:bc:92:47:91:77:37:30:
+                    64:d4:e1:1c:09:bb:3b:5b:c8:47:00:5e:a2:c4:b8:
+                    29:8f:d8:47:27:fe:0b:bf:5b:02:7f:63:37:b9:34:
+                    b4:7d:c3:a4:9c:4f:7c:bc:fd:49:75:d9:fd:24:69:
+                    29:a3:ef:7a:24:ba:2d:d2:bc:27:21:3e:ac:26:91:
+                    b2:7c:c2:9b:ea:2b:2b:94:25:dd:ec:59:88:2c:ad:
+                    af:5a:d7:6e:f1:d8:c8:ab:93:1f:f2:43:f7:d9:fb:
+                    d2:f0:3c:93:2d:ba:02:df:bf:ff:66:88:8b:3b:27:
+                    78:53:7d:69:b7:e6:5b:32:5e:46:7f:4e:05:71:ba:
+                    6d:b4:b9:48:30:44:39:e4:1d:2c:79:14:56:46:5f:
+                    ed:7d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A4:68:89:3F:A2:F7:48:BC:C6:C4:9C:7E:78:B9:E6:06:A7:37:2E:A2
+                2D:E9:1E:78:5E:76:51:B5:46:65:64:61:7E:25:A3:F9:AF:B5:01:F7
             X509v3 Authority Key Identifier: 
-                keyid:A0:FF:6A:B0:DB:6D:76:3D:1F:D2:A3:83:33:02:BE:32:A2:71:34:85
+                keyid:0B:2C:E6:E6:4E:05:04:08:49:15:5D:4C:A0:1D:95:20:39:3B:56:31
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         2b:b6:4e:ac:b6:8d:bb:7c:cc:0b:6f:77:9c:54:ed:88:25:34:
-         c7:42:88:7c:35:23:74:c7:e7:7d:86:7d:fd:f0:0b:40:e2:64:
-         5b:a3:1b:a2:34:77:09:b4:7d:5e:7b:a4:85:7f:23:b5:2f:43:
-         f8:0f:33:6c:86:9c:7a:ee:0d:54:45:fb:1c:57:c8:01:91:60:
-         27:0b:bb:ac:8c:23:c4:5f:18:42:2e:df:24:cb:12:77:2c:0c:
-         6c:d1:8f:34:ee:a8:06:e3:8a:fe:34:e6:ca:bc:25:e5:33:a4:
-         23:df:00:4f:f4:e4:af:d9:7f:08:1a:78:a5:ba:80:81:49:bf:
-         8f:7c:ee:ee:27:ac:fc:d8:91:69:36:2b:dc:33:ae:d6:ad:47:
-         8d:5d:4c:c0:a5:a2:61:b8:db:b0:7b:92:79:b5:61:64:78:92:
-         02:05:68:16:2b:9f:81:66:5a:8e:e6:82:55:5b:83:87:26:e2:
-         da:d0:95:91:06:6d:f9:dc:b6:04:fe:ed:ae:f7:3e:db:a7:38:
-         31:af:a4:c5:79:f7:d0:3b:b9:2c:79:60:0a:1d:ec:68:8d:3f:
-         7b:d7:e9:1a:79:de:da:97:42:04:c7:b1:f2:fe:72:68:00:fa:
-         30:41:0e:1c:26:65:f5:eb:2e:7d:fe:19:05:99:5b:6f:3d:51:
-         4c:57:c3:cb
+         30:d4:32:a0:3c:e2:a6:37:88:a6:2d:58:f9:26:46:e7:12:ab:
+         02:f2:a1:ca:82:85:8b:23:40:10:dc:d1:6d:0b:ba:98:cf:f0:
+         d1:95:f3:88:69:62:a5:3c:e4:37:f3:93:b1:64:50:26:2b:1d:
+         c4:29:f0:e4:df:63:a7:1d:73:a7:cc:bf:63:08:2a:88:24:41:
+         d4:b0:a5:a7:c8:72:da:75:f7:18:7d:bf:29:ce:a4:b5:92:b1:
+         e9:cd:3b:a4:ba:68:8f:8e:37:85:20:73:c4:f6:3f:42:a3:d2:
+         cb:44:40:1b:f3:a6:aa:70:d6:20:71:f8:33:19:41:0e:41:35:
+         15:03:3d:d6:d6:de:1f:5d:3c:71:a4:8c:43:3b:30:80:44:df:
+         04:35:f3:7c:6b:6f:3f:2e:2f:32:93:e8:6d:36:22:dc:21:d3:
+         59:11:5c:2d:a5:0a:22:fb:9e:27:e2:72:f0:1c:92:b6:a7:10:
+         52:46:fc:f9:4b:90:df:e6:5b:0b:b6:94:8b:97:05:71:1b:b2:
+         92:a7:50:4f:6d:b9:52:09:ad:00:c8:df:05:31:57:6c:a8:53:
+         72:c9:49:9a:d5:c1:9e:70:8f:b0:15:bc:b6:88:63:57:9e:3e:
+         35:c9:27:23:9e:73:25:ed:15:d8:cc:ea:36:2c:72:98:b2:ca:
+         41:7c:4f:56
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8GzHv
-hI5kOU4C84H8dQsHr1tXU2vfJ4cDHD3qs2q1FOmYHRMW/FFbBMVygT4mBVSbGfh+
-wO7ISevinXiCyOnFr+v8EIXiX+ZqjlEZaWkQXqqZMWTEPQ8+8Foqzd23J/9a7pHD
-rZKe2pHffX938XnYbmBIrVfxLW5nW/4gXLlWp3CNY4Bamc89bhT12Cm5JYFhx7u+
-Owg4xV1AqucVUYqE03hk9TsJe6ny7aUF7TpnIUXxeHjiknQg4EEQ96ueDv0ir62P
-tIHL2SixSZAF+veWqLeWPVuH2WvMgnqFJrrmhkBTRAk4J02KmF3OVqGTOAj9ApLv
-mwzVwJ0S6CEInbrhAgMBAAGjgekwgeYwHQYDVR0OBBYEFKRoiT+i90i8xsScfni5
-5ganNy6iMB8GA1UdIwQYMBaAFKD/arDbbXY9H9KjgzMCvjKicTSFMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7u0DL
+loTKXllpjT8rxQEaevFJCtcKEyd9Qm/yteYXUadJFtDDZp3e6weKqSl7F5sAt0VU
+SHaElYTG+OOteQgrXQL9Ir9StAdkZcyLh3EI7Xiqb4dnEofb5bGaJwsJIBaXT522
+IiufVfbaD3OGqvRvvJJHkXc3MGTU4RwJuztbyEcAXqLEuCmP2Ecn/gu/WwJ/Yze5
+NLR9w6ScT3y8/Ul12f0kaSmj73okui3SvCchPqwmkbJ8wpvqKyuUJd3sWYgsra9a
+127x2Mirkx/yQ/fZ+9LwPJMtugLfv/9miIs7J3hTfWm35lsyXkZ/TgVxum20uUgw
+RDnkHSx5FFZGX+19AgMBAAGjgekwgeYwHQYDVR0OBBYEFC3pHnhedlG1RmVkYX4l
+o/mvtQH3MB8GA1UdIwQYMBaAFAss5uZOBQQISRVdTKAdlSA5O1YxMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAK7ZOrLaNu3zMC293nFTt
-iCU0x0KIfDUjdMfnfYZ9/fALQOJkW6MbojR3CbR9XnukhX8jtS9D+A8zbIaceu4N
-VEX7HFfIAZFgJwu7rIwjxF8YQi7fJMsSdywMbNGPNO6oBuOK/jTmyrwl5TOkI98A
-T/Tkr9l/CBp4pbqAgUm/j3zu7ies/NiRaTYr3DOu1q1HjV1MwKWiYbjbsHuSebVh
-ZHiSAgVoFiufgWZajuaCVVuDhybi2tCVkQZt+dy2BP7trvc+26c4Ma+kxXn30Du5
-LHlgCh3saI0/e9fpGnne2pdCBMex8v5yaAD6MEEOHCZl9esuff4ZBZlbbz1RTFfD
-yw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAMNQyoDzipjeIpi1Y+SZG
+5xKrAvKhyoKFiyNAENzRbQu6mM/w0ZXziGlipTzkN/OTsWRQJisdxCnw5N9jpx1z
+p8y/YwgqiCRB1LClp8hy2nX3GH2/Kc6ktZKx6c07pLpoj443hSBzxPY/QqPSy0RA
+G/OmqnDWIHH4MxlBDkE1FQM91tbeH108caSMQzswgETfBDXzfGtvPy4vMpPobTYi
+3CHTWRFcLaUKIvueJ+Jy8ByStqcQUkb8+UuQ3+ZbC7aUi5cFcRuykqdQT225Ugmt
+AMjfBTFXbKhTcslJmtXBnnCPsBW8tohjV54+NcknI55zJe0V2MzqNixymLLKQXxP
+Vg==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bd:4b:25:64:f8:46:3e:e8:fc:85:3a:e2:4a:dc:
-                    9a:58:70:6f:65:27:93:14:2f:5d:08:b3:ba:dc:2d:
-                    b0:8c:0e:98:f6:21:26:8d:ff:bb:59:2d:db:72:bc:
-                    07:38:8f:11:34:cc:e8:07:0f:07:ed:82:1e:60:be:
-                    d8:67:17:98:cb:81:55:40:5e:d9:a0:bd:a5:98:88:
-                    71:17:8e:65:70:3e:8a:9f:b3:23:56:9f:98:a8:db:
-                    64:6a:1b:e1:1a:2c:b1:94:6d:d3:4b:28:fd:e4:1c:
-                    d3:7d:93:91:53:5c:3d:89:67:13:04:58:21:64:c9:
-                    89:c7:12:58:91:dc:2f:0f:56:ec:a7:00:4f:60:89:
-                    0a:b9:af:52:8e:20:bc:b3:16:e8:a6:06:ca:3b:07:
-                    a5:76:59:7e:4b:17:33:b2:db:8e:d8:31:29:d8:ba:
-                    08:06:51:e1:a1:43:6d:cd:2d:61:e1:03:54:62:1d:
-                    43:28:b9:48:b6:3b:bb:24:47:d0:56:df:ce:ac:d3:
-                    ac:a9:0c:13:a5:c8:76:a3:ee:67:0c:79:35:92:5d:
-                    49:8f:a5:4f:8f:ae:79:09:6c:11:15:3f:3a:01:a3:
-                    4d:54:df:93:50:b5:fe:ed:be:53:87:be:b7:65:55:
-                    96:4c:7c:5b:a0:e3:1e:18:e8:9e:8c:95:d1:4a:ea:
-                    5a:4f
+                    00:a9:f6:c4:18:fe:58:e4:42:e8:65:0e:7f:f4:6b:
+                    db:25:fc:46:b4:7b:20:f5:96:ec:45:cc:c4:8e:08:
+                    1c:9b:dc:29:9c:86:e2:b0:cc:ae:5a:55:87:97:c9:
+                    1a:d7:18:32:6f:7c:73:bb:37:c1:6b:9f:cb:c2:43:
+                    a0:63:b5:ad:33:02:e8:4a:de:03:27:6a:33:30:83:
+                    a7:2d:c6:98:21:0b:b2:47:84:36:d5:c2:4e:8b:00:
+                    ec:02:3d:ba:b6:11:8f:83:76:94:40:76:4c:fa:e7:
+                    47:21:de:f8:47:91:8b:44:c7:c5:97:ed:cc:1e:1d:
+                    aa:5a:b1:cf:c0:b2:1e:9d:29:f8:2e:ec:26:37:12:
+                    88:43:ad:68:98:82:6a:dd:b7:2d:5a:87:0d:62:c2:
+                    57:ce:08:3f:66:9c:d1:09:2a:aa:d9:07:3e:1c:8d:
+                    9e:5d:60:38:f5:e4:a4:8c:99:53:e6:07:b6:0f:8d:
+                    04:49:08:f1:b9:dc:ab:96:5d:ad:2b:8d:b0:14:f2:
+                    b9:ec:2d:53:42:ef:5f:3d:28:c3:8a:e3:9d:4c:c5:
+                    e9:a2:63:78:79:08:4d:25:ab:b5:37:4d:3f:fe:75:
+                    3f:84:12:17:14:78:a1:a7:18:49:e6:7f:aa:be:b3:
+                    58:54:4f:fb:da:66:22:ba:a7:c9:17:ba:7b:38:d5:
+                    5f:bb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A0:FF:6A:B0:DB:6D:76:3D:1F:D2:A3:83:33:02:BE:32:A2:71:34:85
+                0B:2C:E6:E6:4E:05:04:08:49:15:5D:4C:A0:1D:95:20:39:3B:56:31
             X509v3 Authority Key Identifier: 
-                keyid:0A:E1:71:15:DF:ED:0D:98:EB:75:A8:37:BC:F1:EE:E3:65:79:AB:C2
+                keyid:DD:2F:E9:72:D4:6F:3E:22:D8:5F:B2:8E:74:9A:E3:26:84:23:28:E8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         13:0e:3c:0e:69:c2:bf:7d:aa:a4:8f:47:a6:90:69:0e:d8:b7:
-         50:2a:c7:95:78:1d:7f:71:41:51:8d:a4:a9:cf:f2:d2:c6:c0:
-         8f:dd:56:c4:53:94:34:3f:07:e3:b0:4c:71:55:5b:14:a2:de:
-         8f:1e:3b:15:73:e2:9a:49:df:c8:0e:04:dc:76:76:61:0d:c5:
-         29:35:12:c4:71:d3:2d:6d:ac:b6:62:53:75:57:44:cf:0b:d2:
-         1d:66:0a:be:01:b5:a6:58:a0:42:f5:ce:62:3c:d8:21:fd:c6:
-         c7:27:66:b1:2f:d4:04:c2:29:44:32:3a:3b:b2:3c:08:a5:66:
-         3e:4c:27:c2:36:71:c5:31:05:e7:e9:f8:47:b4:81:33:57:7d:
-         c2:ce:ac:de:c4:15:11:1a:f2:c9:59:72:cd:a4:a8:54:41:ef:
-         d5:d5:67:cf:6e:e3:a0:07:62:ba:83:f7:46:fa:4b:10:7c:91:
-         9f:ff:aa:1a:c9:46:f9:26:14:c4:01:58:9d:35:75:f0:78:0e:
-         75:4e:7f:03:e8:83:1b:87:82:99:e0:52:b3:9f:34:a7:26:34:
-         76:9c:e7:3e:69:d5:9b:e6:9a:45:06:34:19:03:05:b0:15:ca:
-         a2:59:7c:ac:fe:9c:c4:29:54:e2:c8:9c:e1:98:7e:16:7a:b9:
-         f3:9e:aa:d1
+         60:12:61:3d:32:a4:b3:2a:74:9f:e6:97:ae:cc:c6:a2:4d:aa:
+         68:c1:c9:6f:77:c2:96:69:5b:89:69:9c:a4:d6:4a:7f:f2:82:
+         60:fc:33:e4:71:0e:da:b4:7e:da:1c:e7:04:b5:0b:58:56:b2:
+         94:0d:fb:aa:38:fc:aa:59:19:44:4a:e5:08:c4:b0:52:c5:77:
+         fe:52:f4:cc:a7:4c:72:3b:7a:9d:65:66:e6:d2:5b:a7:68:2c:
+         09:79:82:fc:33:37:59:c8:4b:03:1f:29:d7:ba:4d:bc:f4:a7:
+         be:ed:ba:be:66:a7:b0:89:fc:3b:93:73:97:f5:80:b6:53:26:
+         8b:1d:58:88:4e:06:47:06:63:02:9e:be:59:aa:9d:fe:70:0b:
+         3e:44:cc:dc:74:b1:79:85:fc:94:5e:ac:53:a1:31:99:30:c8:
+         bf:47:87:6e:f2:f6:3a:95:b7:bf:3b:5c:65:0c:04:38:60:6a:
+         c2:02:8e:22:6c:6d:dc:a7:ba:f2:0e:61:3c:2f:a3:31:f7:5b:
+         36:4a:2e:ee:87:00:3f:9b:50:56:8a:e1:b8:b8:77:e7:00:fd:
+         74:65:3e:d5:9b:69:c0:58:51:8a:6a:93:18:cb:8d:57:83:c9:
+         90:6c:b4:2f:90:bd:ec:6a:69:9d:27:95:6e:25:38:0d:7e:e2:
+         12:15:7c:d6
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUslZPhG
-Puj8hTriStyaWHBvZSeTFC9dCLO63C2wjA6Y9iEmjf+7WS3bcrwHOI8RNMzoBw8H
-7YIeYL7YZxeYy4FVQF7ZoL2lmIhxF45lcD6Kn7MjVp+YqNtkahvhGiyxlG3TSyj9
-5BzTfZORU1w9iWcTBFghZMmJxxJYkdwvD1bspwBPYIkKua9SjiC8sxbopgbKOwel
-dll+SxczstuO2DEp2LoIBlHhoUNtzS1h4QNUYh1DKLlItju7JEfQVt/OrNOsqQwT
-pch2o+5nDHk1kl1Jj6VPj655CWwRFT86AaNNVN+TULX+7b5Th763ZVWWTHxboOMe
-GOiejJXRSupaTwIDAQABo4HLMIHIMB0GA1UdDgQWBBSg/2qw2212PR/So4MzAr4y
-onE0hTAfBgNVHSMEGDAWgBQK4XEV3+0NmOt1qDe88e7jZXmrwjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqfbEGP5Y
+5ELoZQ5/9GvbJfxGtHsg9ZbsRczEjggcm9wpnIbisMyuWlWHl8ka1xgyb3xzuzfB
+a5/LwkOgY7WtMwLoSt4DJ2ozMIOnLcaYIQuyR4Q21cJOiwDsAj26thGPg3aUQHZM
++udHId74R5GLRMfFl+3MHh2qWrHPwLIenSn4LuwmNxKIQ61omIJq3bctWocNYsJX
+zgg/ZpzRCSqq2Qc+HI2eXWA49eSkjJlT5ge2D40ESQjxudyrll2tK42wFPK57C1T
+Qu9fPSjDiuOdTMXpomN4eQhNJau1N00//nU/hBIXFHihpxhJ5n+qvrNYVE/72mYi
+uqfJF7p7ONVfuwIDAQABo4HLMIHIMB0GA1UdDgQWBBQLLObmTgUECEkVXUygHZUg
+OTtWMTAfBgNVHSMEGDAWgBTdL+ly1G8+Ithfso50muMmhCMo6DA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABMOPA5pwr99qqSPR6aQaQ7Yt1Aqx5V4HX9xQVGNpKnP8tLGwI/dVsRTlDQ/B+Ow
-THFVWxSi3o8eOxVz4ppJ38gOBNx2dmENxSk1EsRx0y1trLZiU3VXRM8L0h1mCr4B
-taZYoEL1zmI82CH9xscnZrEv1ATCKUQyOjuyPAilZj5MJ8I2ccUxBefp+Ee0gTNX
-fcLOrN7EFREa8slZcs2kqFRB79XVZ89u46AHYrqD90b6SxB8kZ//qhrJRvkmFMQB
-WJ01dfB4DnVOfwPogxuHgpngUrOfNKcmNHac5z5p1ZvmmkUGNBkDBbAVyqJZfKz+
-nMQpVOLInOGYfhZ6ufOeqtE=
+AGASYT0ypLMqdJ/ml67MxqJNqmjByW93wpZpW4lpnKTWSn/ygmD8M+RxDtq0ftoc
+5wS1C1hWspQN+6o4/KpZGURK5QjEsFLFd/5S9MynTHI7ep1lZubSW6doLAl5gvwz
+N1nISwMfKde6Tbz0p77tur5mp7CJ/DuTc5f1gLZTJosdWIhOBkcGYwKevlmqnf5w
+Cz5EzNx0sXmF/JRerFOhMZkwyL9Hh27y9jqVt787XGUMBDhgasICjiJsbdynuvIO
+YTwvozH3WzZKLu6HAD+bUFaK4bi4d+cA/XRlPtWbacBYUYpqkxjLjVeDyZBstC+Q
+vexqaZ0nlW4lOA1+4hIVfNY=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:99:74:ca:c8:3e:26:66:b5:bc:e5:cc:0b:41:30:
-                    7b:cb:99:a5:31:5f:e6:3f:44:81:d3:c5:16:0e:ac:
-                    db:2e:cf:5a:08:79:5a:44:c4:f1:bc:e5:74:06:42:
-                    57:35:4b:e7:90:88:ef:dd:59:b7:82:40:b5:ff:c2:
-                    03:32:1b:4d:1c:6d:ee:34:60:a8:c5:24:ab:b0:0f:
-                    a6:19:22:86:ae:e3:12:dd:3e:99:3a:36:65:6a:ea:
-                    5d:aa:b0:2d:e9:db:9a:22:83:cb:50:8b:1a:04:cb:
-                    4b:83:83:46:95:e1:45:a7:17:d3:16:ab:70:e6:62:
-                    85:79:ff:73:35:3e:7e:4d:1d:3b:6d:e1:60:0e:15:
-                    3c:12:cf:7a:d7:eb:af:04:0a:43:3b:5f:78:de:df:
-                    ba:51:60:4d:20:61:32:2c:f4:61:d3:e2:48:02:8d:
-                    a1:d5:05:ec:f4:d0:7d:3d:2e:f8:5f:3b:57:76:21:
-                    d8:55:1a:61:34:53:af:2f:de:32:ff:27:7e:12:41:
-                    96:56:0a:9d:d2:e5:3f:38:14:9e:20:50:58:4c:00:
-                    7d:16:4d:2d:b8:f3:75:c5:c4:b3:80:a7:d9:e4:60:
-                    e1:8f:b5:b8:a4:82:db:72:b2:7c:0b:a2:ef:5e:98:
-                    22:48:b2:f9:7c:4a:82:e5:59:fa:0d:93:34:34:88:
-                    93:a7
+                    00:cf:b2:a3:87:b8:35:43:42:14:5f:34:f8:0d:ce:
+                    a2:e7:e4:de:53:f5:48:43:6c:95:76:27:ea:df:29:
+                    13:0c:6d:b1:59:67:2f:60:38:51:9d:c1:c8:e6:bc:
+                    8e:fb:40:48:aa:b5:ec:5f:7b:ed:5e:29:48:70:7e:
+                    23:bd:c2:5b:8d:ec:09:f7:97:1d:be:8f:66:e4:ca:
+                    d2:0f:71:7d:a7:cf:f2:1b:43:0c:cc:12:51:fb:56:
+                    bb:22:91:c6:1f:e7:f1:8f:18:25:f9:e2:16:c5:78:
+                    5c:c6:35:9b:21:7c:84:ca:51:57:81:6c:4f:65:ce:
+                    70:59:40:f2:a4:be:38:68:89:93:39:77:42:4d:81:
+                    7a:7c:61:ce:b8:25:37:87:e1:26:62:e7:cc:47:64:
+                    6a:97:6c:af:99:ae:0c:9f:2c:08:7c:48:66:bb:20:
+                    08:3c:da:1a:eb:78:f0:0f:cf:b6:e4:03:83:55:ff:
+                    11:39:4b:2b:32:b9:d6:87:72:85:dd:6b:c7:5d:07:
+                    68:bc:41:38:f0:d7:91:6b:bc:36:5e:3d:ab:d5:83:
+                    d6:03:86:22:29:62:de:51:b8:5a:ea:08:38:79:db:
+                    95:79:b8:90:40:5d:1c:86:2f:71:cc:be:46:c8:b3:
+                    9b:79:fb:db:d0:de:af:3c:7a:62:2f:7a:2f:fd:25:
+                    39:df
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0A:E1:71:15:DF:ED:0D:98:EB:75:A8:37:BC:F1:EE:E3:65:79:AB:C2
+                DD:2F:E9:72:D4:6F:3E:22:D8:5F:B2:8E:74:9A:E3:26:84:23:28:E8
             X509v3 Authority Key Identifier: 
-                keyid:0A:E1:71:15:DF:ED:0D:98:EB:75:A8:37:BC:F1:EE:E3:65:79:AB:C2
+                keyid:DD:2F:E9:72:D4:6F:3E:22:D8:5F:B2:8E:74:9A:E3:26:84:23:28:E8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -233,40 +233,40 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-         6d:66:a8:f5:13:4c:3a:8d:26:f2:30:1a:59:72:f3:dd:7a:17:
-         cf:8d:6e:76:cf:23:db:be:a3:85:e9:78:63:1d:4c:d8:78:93:
-         9e:57:61:0d:78:2a:5a:67:c3:d8:73:d1:69:72:24:66:e6:9b:
-         b3:fb:b8:31:7e:c0:4b:8c:03:48:fb:36:b7:ac:42:39:66:94:
-         26:22:d7:fb:d3:11:67:29:d6:32:9c:c3:9e:bd:b1:43:2e:6f:
-         a1:a5:4c:ec:5d:df:5e:b6:49:0c:81:9c:2f:09:81:03:97:16:
-         80:5a:da:c1:25:d6:c8:3e:d9:11:ed:1a:1d:8d:ac:46:90:e9:
-         1c:e1:23:70:95:2d:b3:19:a5:ba:97:7b:47:4f:af:cc:ed:80:
-         4e:46:26:8e:39:86:5a:6d:f4:94:56:42:05:49:fc:ef:48:2e:
-         fa:04:78:34:0f:5a:c9:56:dc:eb:88:3a:fc:d6:8b:73:d7:81:
-         27:57:e3:27:6f:6b:74:af:6e:42:16:c9:30:a8:3d:8f:24:43:
-         55:40:9b:fc:39:43:3a:b5:50:6b:11:c3:b8:a1:06:f4:63:3e:
-         45:01:db:7c:db:b7:35:df:38:c1:eb:83:e8:4e:78:3b:99:66:
-         e9:d1:14:68:b2:f6:7e:2d:80:eb:f7:e0:87:6a:43:c1:3a:23:
-         8f:aa:05:5d
+         12:01:cf:21:e6:74:8d:36:91:f8:c1:c1:ce:71:03:26:13:7b:
+         dc:92:46:3f:b4:7b:b1:7f:51:7a:7c:b0:56:4a:fc:e0:2b:1d:
+         0e:3b:08:c8:e4:d0:cf:4a:88:04:b5:62:82:5f:87:b9:11:6b:
+         89:80:c9:1a:cf:64:81:21:e2:d2:4f:9a:aa:d7:23:a6:2a:46:
+         a8:5d:3f:bf:60:c0:4c:c1:97:cd:44:05:d2:e0:78:8f:96:9b:
+         1f:c5:a5:5d:4e:7f:ab:1e:3e:01:2e:9a:2c:76:b2:08:c5:76:
+         22:72:cc:d4:86:6f:dc:d0:9f:de:3c:83:e6:eb:2c:1a:54:9c:
+         9e:af:4a:3c:60:3e:c9:15:ef:d2:50:1a:05:a5:c2:90:45:50:
+         fc:9f:1e:71:3e:f9:ab:3d:61:b5:65:6e:c0:7d:6e:52:1a:57:
+         9e:57:71:a7:1c:09:55:65:40:52:88:b3:04:50:6f:09:ec:85:
+         2f:ca:36:79:23:a6:35:b2:ab:df:aa:3a:c3:5a:1d:e3:a0:7f:
+         72:70:22:3a:f6:6a:6e:68:da:6e:67:b5:db:f7:aa:63:83:29:
+         a4:36:35:cb:86:c4:da:79:64:81:c0:e6:ae:c0:d7:6d:34:5b:
+         4d:ab:04:25:e8:1f:ec:f8:62:91:81:63:7e:64:06:a9:40:97:
+         68:9f:0c:70
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDVDCCAjygAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJl0ysg+Jma1vOXMC0Ew
-e8uZpTFf5j9EgdPFFg6s2y7PWgh5WkTE8bzldAZCVzVL55CI791Zt4JAtf/CAzIb
-TRxt7jRgqMUkq7APphkihq7jEt0+mTo2ZWrqXaqwLenbmiKDy1CLGgTLS4ODRpXh
-RacX0xarcOZihXn/czU+fk0dO23hYA4VPBLPetfrrwQKQztfeN7fulFgTSBhMiz0
-YdPiSAKNodUF7PTQfT0u+F87V3Yh2FUaYTRTry/eMv8nfhJBllYKndLlPzgUniBQ
-WEwAfRZNLbjzdcXEs4Cn2eRg4Y+1uKSC23KyfAui716YIkiy+XxKguVZ+g2TNDSI
-k6cCAwEAAaOBujCBtzAdBgNVHQ4EFgQUCuFxFd/tDZjrdag3vPHu42V5q8IwHwYD
-VR0jBBgwFoAUCuFxFd/tDZjrdag3vPHu42V5q8IwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+yo4e4NUNCFF80+A3O
+oufk3lP1SENslXYn6t8pEwxtsVlnL2A4UZ3ByOa8jvtASKq17F977V4pSHB+I73C
+W43sCfeXHb6PZuTK0g9xfafP8htDDMwSUftWuyKRxh/n8Y8YJfniFsV4XMY1myF8
+hMpRV4FsT2XOcFlA8qS+OGiJkzl3Qk2BenxhzrglN4fhJmLnzEdkapdsr5muDJ8s
+CHxIZrsgCDzaGut48A/PtuQDg1X/ETlLKzK51odyhd1rx10HaLxBOPDXkWu8Nl49
+q9WD1gOGIili3lG4WuoIOHnblXm4kEBdHIYvccy+Rsizm3n729Derzx6Yi96L/0l
+Od8CAwEAAaOBujCBtzAdBgNVHQ4EFgQU3S/pctRvPiLYX7KOdJrjJoQjKOgwHwYD
+VR0jBBgwFoAU3S/pctRvPiLYX7KOdJrjJoQjKOgwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAbWao9RNMOo0m8jAaWXLz3XoXz41uds8j
-276jhel4Yx1M2HiTnldhDXgqWmfD2HPRaXIkZuabs/u4MX7AS4wDSPs2t6xCOWaU
-JiLX+9MRZynWMpzDnr2xQy5voaVM7F3fXrZJDIGcLwmBA5cWgFrawSXWyD7ZEe0a
-HY2sRpDpHOEjcJUtsxmlupd7R0+vzO2ATkYmjjmGWm30lFZCBUn870gu+gR4NA9a
-yVbc64g6/NaLc9eBJ1fjJ29rdK9uQhbJMKg9jyRDVUCb/DlDOrVQaxHDuKEG9GM+
-RQHbfNu3Nd84weuD6E54O5lm6dEUaLL2fi2A6/fgh2pDwTojj6oFXQ==
+AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAEgHPIeZ0jTaR+MHBznEDJhN73JJGP7R7
+sX9RenywVkr84CsdDjsIyOTQz0qIBLVigl+HuRFriYDJGs9kgSHi0k+aqtcjpipG
+qF0/v2DATMGXzUQF0uB4j5abH8WlXU5/qx4+AS6aLHayCMV2InLM1IZv3NCf3jyD
+5ussGlScnq9KPGA+yRXv0lAaBaXCkEVQ/J8ecT75qz1htWVuwH1uUhpXnldxpxwJ
+VWVAUoizBFBvCeyFL8o2eSOmNbKr36o6w1od46B/cnAiOvZqbmjabme12/eqY4Mp
+pDY1y4bE2nlkgcDmrsDXbTRbTasEJegf7PhikYFjfmQGqUCXaJ8McA==
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -278,3 +278,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem b/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem
index ac92a72c..6311951 100644
--- a/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem
+++ b/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c3:d8:cf:ca:eb:7a:63:bc:cd:53:50:a0:a5:e7:
-                    24:1c:5e:ab:ee:eb:48:d3:60:73:ab:a5:c3:b5:e0:
-                    ea:b2:71:0b:99:48:4c:0c:78:6f:67:a8:98:13:f7:
-                    99:59:a0:fc:78:d8:7e:05:cc:1c:4c:4d:ff:c0:a7:
-                    85:8f:c0:f8:c2:10:51:a2:a6:9b:38:a1:a8:7f:e3:
-                    7c:df:be:f7:8c:62:9a:83:c6:a5:ab:63:26:9e:71:
-                    25:26:7d:dc:05:09:b3:76:e8:de:90:07:6d:6d:d1:
-                    33:a5:3a:64:90:c0:50:2e:d6:a9:84:2e:f2:7c:11:
-                    49:4c:c5:e2:50:c3:b9:9c:0f:ac:8f:07:19:74:63:
-                    00:12:8a:ec:6f:4f:86:8a:9b:af:2a:c2:21:f1:98:
-                    88:eb:4a:23:2c:7d:25:9f:fd:2a:3e:b0:3d:f5:66:
-                    bf:a7:07:42:7d:04:70:62:d3:4b:88:92:af:74:6e:
-                    20:4c:55:5e:9e:de:29:a6:58:66:1a:8d:c4:af:b5:
-                    22:44:29:ee:b6:03:66:8e:4b:a6:ca:77:3d:91:08:
-                    c0:b2:e0:70:c8:e6:d1:fb:db:09:86:7c:ad:f5:20:
-                    76:10:1d:fc:bf:98:05:0b:b1:6e:47:d8:ce:4b:aa:
-                    02:7c:ec:3e:8a:b0:22:f9:3d:fc:8e:60:45:1b:cc:
-                    c9:a5
+                    00:c0:09:a1:9e:ee:82:f0:68:53:6a:73:07:41:90:
+                    99:39:c7:19:b8:07:c4:f7:45:b5:fb:f0:f5:72:6c:
+                    8c:c1:5a:27:85:70:1a:3b:9a:62:50:99:00:2e:fa:
+                    64:08:19:34:03:67:27:b6:c8:9c:81:5a:94:2a:85:
+                    1c:ce:a9:b1:79:6a:15:df:81:64:72:0e:f7:a8:72:
+                    74:13:01:e2:22:cf:c1:08:a8:e2:32:a3:30:8b:e5:
+                    74:b8:83:fe:41:34:d1:c4:04:99:22:5c:ba:1b:11:
+                    d9:fe:2a:76:b4:7c:6a:67:d7:9e:a6:b7:28:33:96:
+                    a9:45:61:c0:3f:a6:57:9e:59:ea:dd:7b:2a:fe:9a:
+                    b5:ea:2f:e1:55:30:9a:04:76:42:a1:38:a2:91:83:
+                    99:d3:f6:71:2c:06:b4:f7:9c:dd:49:91:2d:82:2f:
+                    64:1e:91:aa:bf:b2:38:6d:ab:56:39:32:63:de:bd:
+                    3c:f1:10:d0:f4:e7:51:4e:03:58:64:c4:13:33:3e:
+                    28:e7:d8:b5:23:49:e7:10:e9:88:da:c7:df:79:17:
+                    db:03:30:49:a1:8a:3c:a2:67:19:ec:f4:db:3e:48:
+                    c0:c9:a5:cd:57:53:5d:51:59:db:43:48:b3:18:cb:
+                    f2:4f:d3:41:7f:7e:92:1c:33:54:49:92:8b:1a:79:
+                    6f:a3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4C:E1:88:56:8D:23:98:7B:19:E1:6E:D8:1C:E5:06:73:6B:D5:1E:03
+                7E:03:28:0D:3F:DA:96:9C:EC:43:82:73:63:37:03:5A:62:8E:C9:6C
             X509v3 Authority Key Identifier: 
-                keyid:CB:CE:B8:91:FA:EC:E9:A4:15:CA:75:30:F1:C6:9A:B8:19:35:FA:29
+                keyid:AA:28:24:5E:DC:D0:46:7D:F0:CC:7B:98:E4:87:CC:65:73:75:10:DD
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate2.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         a6:96:6f:71:a0:4e:f8:17:93:ad:30:1f:2e:e5:6e:bc:4e:83:
-         32:07:95:9f:f6:02:e8:06:5e:a6:51:0a:23:f6:46:06:3c:3d:
-         e6:4d:cc:ac:8c:29:e8:ce:0e:a4:db:11:7d:4f:6e:b7:78:e2:
-         40:1e:0e:74:83:d5:16:7c:c5:6e:3e:41:59:be:d5:0c:ab:05:
-         9f:2f:22:8c:3b:58:ed:72:49:11:b0:0b:21:b9:5d:e0:b8:3f:
-         cd:a0:a0:95:64:c6:8e:45:7d:aa:1b:67:69:13:54:40:0d:99:
-         74:da:b1:9f:5b:9f:ba:e3:b6:aa:5b:e4:b6:d9:6c:46:d3:50:
-         1a:d9:5a:54:b9:2d:a1:da:97:00:7a:6a:71:2a:8e:45:9c:6d:
-         e8:3d:a2:cb:29:44:45:11:5c:a9:64:60:81:88:e4:93:a2:61:
-         ec:87:74:69:bc:9c:61:92:94:eb:42:33:12:29:82:5d:fe:30:
-         9b:9c:bf:47:50:a9:f6:ae:ea:d4:97:39:87:d5:02:c4:45:09:
-         a8:f3:f3:bf:e0:35:45:89:a9:bc:57:34:bf:d4:81:a0:09:4e:
-         2d:15:61:39:0c:43:53:2e:50:fb:31:ab:91:0d:ce:9c:cb:c1:
-         e2:39:e2:76:60:ab:6b:5d:33:b6:0f:a7:c8:f0:61:ed:37:81:
-         83:3a:2b:b4
+         7f:9a:b7:85:57:9c:5e:69:5b:3f:9e:97:11:c1:d6:49:7a:f8:
+         96:83:5d:81:ef:86:fa:75:7a:9e:f1:37:fc:a7:6b:d7:fa:e2:
+         92:d5:05:a8:31:83:48:c2:e1:d9:35:a9:0b:73:77:d5:c7:89:
+         78:e9:48:01:3e:d3:51:eb:34:2e:01:9b:d9:94:c2:e7:31:54:
+         56:f9:7b:2d:12:95:b8:8f:d8:d6:dd:a7:6b:02:6c:3e:9e:37:
+         63:49:8f:e1:be:05:ec:43:6c:53:ff:72:76:73:44:f9:bf:dc:
+         28:79:32:d1:87:06:e1:27:00:9c:80:49:17:4b:ad:79:ab:66:
+         a9:0e:32:34:62:f7:d5:d4:d1:e8:2a:55:c0:3b:7e:4c:c3:cb:
+         a7:67:58:51:97:85:d1:a5:04:ad:53:49:e9:7a:f2:f6:eb:a4:
+         a0:66:e7:8d:9a:83:75:14:cf:29:43:19:56:8b:15:b9:3c:ab:
+         e2:bc:ac:63:f8:6f:6b:2b:f7:26:3e:f5:6c:66:97:ff:10:04:
+         7a:70:4d:a0:af:02:e7:d8:9b:18:de:f4:85:66:3d:08:22:18:
+         4d:12:54:1c:75:9c:55:29:45:93:af:65:39:66:fb:69:74:a2:
+         e0:ab:49:c7:28:08:5e:6a:55:6e:19:51:0b:d2:5a:d9:c4:32:
+         49:e1:8f:1f
 -----BEGIN CERTIFICATE-----
 MIIDkDCCAnigAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUyMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowETEPMA0G
-A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw9jP
-yut6Y7zNU1CgpeckHF6r7utI02Bzq6XDteDqsnELmUhMDHhvZ6iYE/eZWaD8eNh+
-BcwcTE3/wKeFj8D4whBRoqabOKGof+N83773jGKag8alq2MmnnElJn3cBQmzduje
-kAdtbdEzpTpkkMBQLtaphC7yfBFJTMXiUMO5nA+sjwcZdGMAEorsb0+GipuvKsIh
-8ZiI60ojLH0ln/0qPrA99Wa/pwdCfQRwYtNLiJKvdG4gTFVent4pplhmGo3Er7Ui
-RCnutgNmjkumync9kQjAsuBwyObR+9sJhnyt9SB2EB38v5gFC7FuR9jOS6oCfOw+
-irAi+T38jmBFG8zJpQIDAQABo4HrMIHoMB0GA1UdDgQWBBRM4YhWjSOYexnhbtgc
-5QZza9UeAzAfBgNVHSMEGDAWgBTLzriR+uzppBXKdTDxxpq4GTX6KTBABggrBgEF
+A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwAmh
+nu6C8GhTanMHQZCZOccZuAfE90W1+/D1cmyMwVonhXAaO5piUJkALvpkCBk0A2cn
+tsicgVqUKoUczqmxeWoV34Fkcg73qHJ0EwHiIs/BCKjiMqMwi+V0uIP+QTTRxASZ
+Ily6GxHZ/ip2tHxqZ9eeprcoM5apRWHAP6ZXnlnq3Xsq/pq16i/hVTCaBHZCoTii
+kYOZ0/ZxLAa095zdSZEtgi9kHpGqv7I4batWOTJj3r088RDQ9OdRTgNYZMQTMz4o
+59i1I0nnEOmI2sffeRfbAzBJoYo8omcZ7PTbPkjAyaXNV1NdUVnbQ0izGMvyT9NB
+f36SHDNUSZKLGnlvowIDAQABo4HrMIHoMB0GA1UdDgQWBBR+AygNP9qWnOxDgnNj
+NwNaYo7JbDAfBgNVHSMEGDAWgBSqKCRe3NBGffDMe5jkh8xlc3UQ3TBABggrBgEF
 BQcBAQQ0MDIwMAYIKwYBBQUHMAKGJGh0dHA6Ly91cmwtZm9yLWFpYS9JbnRlcm1l
 ZGlhdGUyLmNlcjA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vdXJsLWZvci1jcmwv
 SW50ZXJtZWRpYXRlMi5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
-AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAppZvcaBO+BeTrTAf
-LuVuvE6DMgeVn/YC6AZeplEKI/ZGBjw95k3MrIwp6M4OpNsRfU9ut3jiQB4OdIPV
-FnzFbj5BWb7VDKsFny8ijDtY7XJJEbALIbld4Lg/zaCglWTGjkV9qhtnaRNUQA2Z
-dNqxn1ufuuO2qlvkttlsRtNQGtlaVLktodqXAHpqcSqORZxt6D2iyylERRFcqWRg
-gYjkk6Jh7Id0abycYZKU60IzEimCXf4wm5y/R1Cp9q7q1Jc5h9UCxEUJqPPzv+A1
-RYmpvFc0v9SBoAlOLRVhOQxDUy5Q+zGrkQ3OnMvB4jnidmCra10ztg+nyPBh7TeB
-gzortA==
+AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAf5q3hVecXmlbP56X
+EcHWSXr4loNdge+G+nV6nvE3/Kdr1/riktUFqDGDSMLh2TWpC3N31ceJeOlIAT7T
+Ues0LgGb2ZTC5zFUVvl7LRKVuI/Y1t2nawJsPp43Y0mP4b4F7ENsU/9ydnNE+b/c
+KHky0YcG4ScAnIBJF0uteatmqQ4yNGL31dTR6CpVwDt+TMPLp2dYUZeF0aUErVNJ
+6Xry9uukoGbnjZqDdRTPKUMZVosVuTyr4rysY/hvayv3Jj71bGaX/xAEenBNoK8C
+59ibGN70hWY9CCIYTRJUHHWcVSlFk69lOWb7aXSi4KtJxygIXmpVbhlRC9Ja2cQy
+SeGPHw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ad:d8:fa:e5:f4:8b:41:38:13:dc:61:ad:db:db:
-                    3d:f6:be:e2:fd:9d:63:a2:eb:4a:8d:c8:03:6b:d2:
-                    c3:18:29:e6:93:92:5f:d0:c5:b2:3c:05:cd:79:c9:
-                    25:dd:e8:fc:68:83:f1:d9:95:15:22:8f:27:eb:bf:
-                    1f:ed:78:ce:34:b7:60:66:ee:4a:40:9f:e3:95:d0:
-                    32:47:67:80:6c:37:1c:3d:3a:e8:3e:14:2d:5b:97:
-                    b3:40:85:28:a9:10:f0:fb:c9:eb:51:be:b6:c6:8a:
-                    ca:60:cd:31:b7:b0:d3:bd:eb:5c:8a:14:89:38:47:
-                    cb:18:2b:11:f7:a7:9e:9d:f3:76:82:97:c4:78:61:
-                    8c:ec:90:ac:f2:a8:2e:bf:d8:30:48:52:94:7f:48:
-                    f6:fb:4b:e6:0a:63:89:ad:8a:4d:8d:3e:dc:45:06:
-                    89:e9:94:24:5b:d4:94:50:de:05:cf:87:59:66:fb:
-                    70:62:84:3c:fe:d9:1b:02:92:30:80:cb:45:43:e4:
-                    55:47:97:2e:99:59:22:86:6f:51:3a:24:13:26:e8:
-                    10:c9:92:35:13:6f:4a:39:c5:71:d2:c3:63:a5:11:
-                    f8:6e:dc:fa:75:5c:4b:29:24:04:9f:e3:f4:f0:49:
-                    55:7e:0a:8c:6c:44:b4:a4:35:c7:b0:54:10:a4:b1:
-                    6f:95
+                    00:9f:83:f1:81:a2:07:a9:04:bd:e2:cb:3a:33:b1:
+                    6d:77:ba:76:14:81:ef:3d:9f:ec:c3:67:f4:33:65:
+                    43:4c:1a:0d:ca:d7:3c:4d:20:19:62:1c:a2:2c:61:
+                    85:84:45:b1:e0:6d:85:13:36:06:5a:78:44:b4:c9:
+                    13:ee:b6:d3:c2:0d:a9:3f:c7:4e:01:e8:85:a8:36:
+                    96:a3:76:30:e5:90:2f:32:0d:f7:53:33:80:95:84:
+                    41:23:ff:1c:3b:ea:ae:fa:89:59:fc:ed:ba:f5:e5:
+                    60:c3:e8:c3:09:62:d2:9c:b8:20:e0:fb:09:f9:d7:
+                    1f:f7:9a:a2:c4:8c:0e:2c:d1:84:eb:25:ee:63:e9:
+                    ed:20:1a:69:11:7f:25:07:05:73:92:78:11:f0:65:
+                    99:3e:dd:98:0f:b4:5b:a5:d9:8e:89:d2:80:8c:57:
+                    b9:96:cf:bc:55:93:67:37:6f:42:e9:ff:a3:18:ff:
+                    a1:5c:6c:91:53:92:f2:9b:14:74:4c:83:fd:c2:77:
+                    bc:f1:6a:1d:c6:e8:eb:78:1b:b2:78:31:b0:5f:40:
+                    d8:48:29:1e:8f:1d:f2:61:ff:8f:50:95:23:1f:bf:
+                    67:f7:2f:bb:2e:4c:bd:82:1a:c2:2f:6f:fc:e9:86:
+                    d7:a7:96:ff:af:4d:56:74:c6:6a:61:89:5d:c5:70:
+                    fa:97
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CB:CE:B8:91:FA:EC:E9:A4:15:CA:75:30:F1:C6:9A:B8:19:35:FA:29
+                AA:28:24:5E:DC:D0:46:7D:F0:CC:7B:98:E4:87:CC:65:73:75:10:DD
             X509v3 Authority Key Identifier: 
-                keyid:58:20:BB:27:E1:6D:B0:95:1A:D3:40:A1:81:79:89:63:34:21:9F:13
+                keyid:C9:4B:55:76:1D:36:AA:D3:17:AF:7B:4E:7D:9B:4A:B3:1B:CC:98:0F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate1.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:0
     Signature Algorithm: sha256WithRSAEncryption
-         5c:fb:a9:0c:98:92:b4:e2:3c:b1:57:ae:7d:4c:17:b3:44:0e:
-         df:f8:c5:96:e3:1c:10:c2:1b:cf:26:b8:b8:45:3b:e2:3a:54:
-         d9:2a:ce:2d:70:ef:7d:e7:0a:f8:c4:3e:c2:11:65:58:c2:9c:
-         57:0f:82:6f:ad:d5:c3:75:fe:7a:eb:3e:51:13:a9:04:18:37:
-         6a:e1:86:11:7f:3b:9d:5a:eb:29:ec:ef:d1:3b:df:13:f4:66:
-         87:31:2e:b7:75:b0:31:02:b6:47:98:d6:f5:3d:35:7e:18:ac:
-         53:86:4e:d2:d4:93:ac:7a:20:04:8f:58:9b:15:58:ad:7a:b3:
-         3e:a0:11:57:92:96:2a:d4:b9:16:e9:f0:8b:70:67:4b:21:58:
-         80:8e:43:21:ba:62:22:46:96:d2:f0:48:82:69:c5:51:ba:22:
-         32:a0:50:cf:48:1f:1a:35:05:41:23:4e:93:a2:43:e6:83:d9:
-         ae:32:1e:95:72:24:61:79:09:4c:62:d0:1c:42:60:c5:8c:0c:
-         6f:a1:8c:29:8c:68:e3:b8:da:44:83:f6:04:ab:e2:85:e4:6a:
-         f6:ca:ed:95:e3:a0:81:4e:79:1e:cb:46:a1:83:4b:19:23:52:
-         ae:b3:80:d7:7c:4f:05:8c:78:55:e2:fc:ec:80:74:5b:3e:7d:
-         16:e3:71:5a
+         93:36:2f:99:80:bd:df:c6:46:2e:d2:42:5b:f1:bd:08:4c:de:
+         13:db:16:29:99:58:b2:35:ea:10:35:23:29:db:45:fe:a9:bb:
+         00:16:4a:57:77:84:74:05:1f:c1:9d:6d:43:bc:09:38:52:21:
+         1a:af:8f:fa:0b:a6:02:ad:fa:0f:b5:49:bc:48:c6:20:88:73:
+         a1:0f:3f:33:c1:fa:0c:5c:80:c0:e9:c5:cd:0f:8f:20:b0:45:
+         f0:90:0d:4e:89:21:46:2a:77:a3:72:7f:0c:73:7d:44:f3:da:
+         4a:8a:68:92:33:85:94:8e:26:a7:c2:d8:33:86:48:0d:67:94:
+         dc:16:fc:5c:00:e7:9e:5a:e7:46:1d:3c:77:99:11:9f:65:fb:
+         ce:55:87:57:12:3a:f0:c3:fc:43:d0:33:58:e5:74:0d:db:bd:
+         a3:4c:f8:7e:73:16:fd:dc:87:4b:1c:21:a1:35:04:7a:ec:2b:
+         44:2f:b5:c7:22:d6:a3:c3:a8:cf:0d:72:f5:b4:3e:30:2d:6e:
+         f3:0e:77:b0:6d:7c:06:01:b1:94:b4:c8:99:84:04:17:e8:e8:
+         0a:4e:b0:c0:82:17:8c:b2:f2:b5:f5:ed:51:af:19:52:89:4b:
+         f6:76:41:b8:77:a0:42:23:21:18:87:4a:0b:21:3d:de:19:0d:
+         47:81:c6:14
 -----BEGIN CERTIFICATE-----
 MIIDjDCCAnSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUxMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQG
 A1UEAwwNSW50ZXJtZWRpYXRlMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3Y+uX0i0E4E9xhrdvbPfa+4v2dY6LrSo3IA2vSwxgp5pOSX9DFsjwFzXnJ
-Jd3o/GiD8dmVFSKPJ+u/H+14zjS3YGbuSkCf45XQMkdngGw3HD066D4ULVuXs0CF
-KKkQ8PvJ61G+tsaKymDNMbew073rXIoUiThHyxgrEfennp3zdoKXxHhhjOyQrPKo
-Lr/YMEhSlH9I9vtL5gpjia2KTY0+3EUGiemUJFvUlFDeBc+HWWb7cGKEPP7ZGwKS
-MIDLRUPkVUeXLplZIoZvUTokEyboEMmSNRNvSjnFcdLDY6UR+G7c+nVcSykkBJ/j
-9PBJVX4KjGxEtKQ1x7BUEKSxb5UCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUy864kfrs
-6aQVynUw8caauBk1+ikwHwYDVR0jBBgwFoAUWCC7J+FtsJUa00ChgXmJYzQhnxMw
+ggEBAJ+D8YGiB6kEveLLOjOxbXe6dhSB7z2f7MNn9DNlQ0waDcrXPE0gGWIcoixh
+hYRFseBthRM2Blp4RLTJE+6208INqT/HTgHohag2lqN2MOWQLzIN91MzgJWEQSP/
+HDvqrvqJWfztuvXlYMPowwli0py4IOD7CfnXH/eaosSMDizRhOsl7mPp7SAaaRF/
+JQcFc5J4EfBlmT7dmA+0W6XZjonSgIxXuZbPvFWTZzdvQun/oxj/oVxskVOS8psU
+dEyD/cJ3vPFqHcbo63gbsngxsF9A2EgpHo8d8mH/j1CVIx+/Z/cvuy5MvYIawi9v
+/OmG16eW/69NVnTGamGJXcVw+pcCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUqigkXtzQ
+Rn3wzHuY5IfMZXN1EN0wHwYDVR0jBBgwFoAUyUtVdh02qtMXr3tOfZtKsxvMmA8w
 QAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAChiRodHRwOi8vdXJsLWZvci1haWEv
 SW50ZXJtZWRpYXRlMS5jZXIwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL3VybC1m
 b3ItY3JsL0ludGVybWVkaWF0ZTEuY3JsMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB
-Af8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBCwUAA4IBAQBc+6kMmJK04jyxV659TBez
-RA7f+MWW4xwQwhvPJri4RTviOlTZKs4tcO995wr4xD7CEWVYwpxXD4JvrdXDdf56
-6z5RE6kEGDdq4YYRfzudWusp7O/RO98T9GaHMS63dbAxArZHmNb1PTV+GKxThk7S
-1JOseiAEj1ibFViterM+oBFXkpYq1LkW6fCLcGdLIViAjkMhumIiRpbS8EiCacVR
-uiIyoFDPSB8aNQVBI06TokPmg9muMh6VciRheQlMYtAcQmDFjAxvoYwpjGjjuNpE
-g/YEq+KF5Gr2yu2V46CBTnkey0ahg0sZI1Kus4DXfE8FjHhV4vzsgHRbPn0W43Fa
+Af8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBCwUAA4IBAQCTNi+ZgL3fxkYu0kJb8b0I
+TN4T2xYpmViyNeoQNSMp20X+qbsAFkpXd4R0BR/BnW1DvAk4UiEar4/6C6YCrfoP
+tUm8SMYgiHOhDz8zwfoMXIDA6cXND48gsEXwkA1OiSFGKnejcn8Mc31E89pKimiS
+M4WUjianwtgzhkgNZ5TcFvxcAOeeWudGHTx3mRGfZfvOVYdXEjrww/xD0DNY5XQN
+272jTPh+cxb93IdLHCGhNQR67CtEL7XHItajw6jPDXL1tD4wLW7zDnewbXwGAbGU
+tMiZhAQX6OgKTrDAgheMsvK19e1RrxlSiUv2dkG4d6BCIyEYh0oLIT3eGQ1HgcYU
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e6:65:53:d1:2e:4e:ad:28:ff:05:13:1b:64:08:
-                    aa:e6:b7:44:64:94:4c:0e:a4:68:80:12:7d:07:ce:
-                    6a:ec:c8:4b:cc:a1:3f:af:f4:c8:45:0e:b2:66:46:
-                    b3:fd:ef:68:5d:04:c0:95:e9:71:45:b2:26:12:16:
-                    78:b1:75:15:39:a1:da:2a:b0:d7:7c:52:11:8b:1a:
-                    b0:46:19:fb:71:d0:8f:13:3d:2e:ee:bc:75:97:4d:
-                    b1:b6:7b:d5:b6:36:44:5b:75:d1:00:b3:a3:60:9f:
-                    92:34:c1:50:52:30:89:54:35:24:fa:7d:ea:5a:32:
-                    ca:11:aa:12:1c:55:74:fd:5b:98:ad:0d:04:d3:b3:
-                    12:cd:a4:f9:7c:54:e1:1f:01:cd:ad:c6:0e:cc:ae:
-                    8c:89:d3:ff:a6:f7:2b:9f:67:d8:55:c2:a9:4a:5f:
-                    e8:d6:96:0d:14:68:79:23:84:d0:5f:59:99:f6:8e:
-                    9c:34:da:b6:d2:37:cc:de:8d:44:ba:e4:bb:f0:6f:
-                    f1:60:d2:0d:22:28:41:98:e8:9a:dd:18:b5:30:45:
-                    fd:3b:7a:27:0f:16:08:07:02:83:aa:e0:68:ba:47:
-                    44:48:84:ea:da:51:c1:ec:7b:cb:1e:25:11:3d:fd:
-                    ce:53:1a:39:0a:fc:42:82:3d:cc:a5:93:00:c6:27:
-                    62:75
+                    00:b8:f5:de:e4:4c:28:1d:c6:b4:b3:0f:0e:88:9b:
+                    b1:3b:70:28:5e:69:4d:e6:fe:cf:16:d7:84:88:bf:
+                    da:b4:85:b8:90:cc:be:bf:b4:88:7d:e9:31:b3:a1:
+                    69:fc:59:7f:8c:e2:aa:2e:94:d2:4e:4f:cf:1e:03:
+                    ac:c3:c2:de:8b:d5:20:f5:5b:13:91:f5:3f:39:c7:
+                    47:d0:4b:31:7b:bc:4e:1d:a6:ba:84:96:a0:b5:73:
+                    cb:c3:8d:9e:3e:b8:2f:70:60:bf:c4:39:f1:d6:61:
+                    68:5c:8a:38:35:14:5e:ea:fd:8b:cf:ef:6e:a3:e6:
+                    0b:bf:1f:3e:2c:4b:1e:fd:5a:56:11:19:23:05:27:
+                    cf:0b:27:b3:f6:7a:da:0a:f6:df:98:7e:b7:66:64:
+                    f8:0f:89:95:f4:c0:d9:83:45:87:3e:72:38:ce:60:
+                    cb:56:4b:07:7b:2c:9e:12:1f:19:1d:fe:c2:a8:bc:
+                    e0:1b:15:b5:9d:24:29:d9:39:c3:2d:9a:ac:0e:92:
+                    56:15:85:69:60:2b:ca:2e:f6:95:e7:65:91:a4:15:
+                    09:0c:48:8b:b1:5a:37:52:b7:0a:45:41:64:2e:27:
+                    92:96:12:69:b7:4a:c6:f0:bf:b4:65:53:17:de:1d:
+                    b2:a5:19:31:18:76:8f:84:1d:33:4a:18:e0:b6:3f:
+                    61:a7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                58:20:BB:27:E1:6D:B0:95:1A:D3:40:A1:81:79:89:63:34:21:9F:13
+                C9:4B:55:76:1D:36:AA:D3:17:AF:7B:4E:7D:9B:4A:B3:1B:CC:98:0F
             X509v3 Authority Key Identifier: 
-                keyid:7A:3D:6D:AF:22:3F:64:CA:5C:C8:B3:3D:D5:E5:3B:32:A0:02:CF:29
+                keyid:8D:B1:6D:B4:95:70:88:DA:95:8B:88:00:98:19:D5:93:E3:03:FF:04
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:0
     Signature Algorithm: sha256WithRSAEncryption
-         37:db:eb:ca:f7:4c:e8:8d:30:46:40:83:77:7b:84:85:66:06:
-         20:10:22:e9:f3:f0:5e:41:27:7d:dd:01:2a:c0:20:74:a6:f5:
-         d3:30:01:40:4a:4c:60:b0:9d:da:2f:71:90:c5:19:97:cc:af:
-         a2:e3:cc:fe:6e:e6:fa:5d:11:50:e6:ef:a9:b0:15:f8:da:26:
-         51:b9:2e:1e:82:44:ec:13:e5:8d:27:2d:b1:31:97:cd:43:04:
-         8a:70:ca:51:e3:2c:9e:93:9a:48:36:a1:46:56:08:e1:43:1c:
-         d7:96:aa:44:c2:3a:a2:e7:91:ac:91:28:fb:03:9c:e7:13:d1:
-         eb:c0:33:7b:3b:ff:c2:fc:af:68:36:54:57:f4:b8:2a:9d:de:
-         78:3c:8e:ad:0d:d8:dd:4b:e7:50:41:0a:ae:7a:08:d7:5e:3b:
-         2a:71:d5:88:ec:99:02:b3:cd:5a:31:26:41:79:e2:3a:49:55:
-         40:7f:26:7f:34:f6:7a:76:28:5e:3d:e9:20:1e:a2:f4:6b:d5:
-         e0:6d:bd:2e:30:1a:69:70:ae:03:d3:ce:b3:76:04:2f:ef:86:
-         4f:77:44:19:6f:94:6a:09:86:60:28:75:63:22:3a:13:5a:d5:
-         13:af:23:08:9c:1f:0d:dc:0f:62:b4:97:85:05:5a:ea:c5:60:
-         8a:02:4d:51
+         a7:ca:29:b4:a5:e7:44:4a:3c:eb:44:9e:9a:f6:14:80:9d:d0:
+         36:71:d3:d7:39:66:e0:65:94:fa:dc:09:14:2e:5a:13:82:66:
+         c5:cf:95:fe:76:f1:7e:18:76:b6:0f:02:13:52:e2:72:c2:cf:
+         5c:42:31:81:dc:9b:93:9e:8c:e9:ac:cf:5c:eb:ff:db:37:4a:
+         5c:39:74:51:87:3b:42:26:17:06:d2:0e:bc:ba:3a:9c:7b:3c:
+         8c:5d:d3:9e:d3:6f:5f:88:3a:2f:da:9f:ad:bb:b8:4a:5f:df:
+         94:aa:ad:4c:8f:c0:7c:d6:c8:d8:9b:93:c9:71:fd:fa:7f:20:
+         9b:f3:3a:16:54:02:8a:81:7b:b3:2f:05:55:ca:34:dc:6a:f8:
+         d9:f9:70:d4:c4:cc:44:8b:a6:e0:45:89:da:21:10:96:e8:2c:
+         84:63:47:f1:a4:7b:da:cb:10:23:f7:45:bd:45:65:6a:03:8c:
+         42:23:15:e9:bf:5b:f7:4c:df:2a:8b:c5:82:3a:7a:4c:9f:85:
+         db:a1:02:ba:60:07:2e:fc:fa:22:b5:8e:b1:db:1b:b7:cb:5e:
+         e2:f1:5b:33:88:cd:82:61:d5:dc:7e:7e:68:29:7e:b0:20:b0:
+         72:e8:f4:4b:74:26:76:cf:3e:b3:98:18:37:de:05:3d:11:d3:
+         8a:5d:4e:d1
 -----BEGIN CERTIFICATE-----
 MIIDcTCCAlmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQGA1UEAwwNSW50
-ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOZlU9Eu
-Tq0o/wUTG2QIqua3RGSUTA6kaIASfQfOauzIS8yhP6/0yEUOsmZGs/3vaF0EwJXp
-cUWyJhIWeLF1FTmh2iqw13xSEYsasEYZ+3HQjxM9Lu68dZdNsbZ71bY2RFt10QCz
-o2CfkjTBUFIwiVQ1JPp96loyyhGqEhxVdP1bmK0NBNOzEs2k+XxU4R8Bza3GDsyu
-jInT/6b3K59n2FXCqUpf6NaWDRRoeSOE0F9ZmfaOnDTattI3zN6NRLrku/Bv8WDS
-DSIoQZjomt0YtTBF/Tt6Jw8WCAcCg6rgaLpHREiE6tpRwex7yx4lET39zlMaOQr8
-QoI9zKWTAMYnYnUCAwEAAaOBzjCByzAdBgNVHQ4EFgQUWCC7J+FtsJUa00ChgXmJ
-YzQhnxMwHwYDVR0jBBgwFoAUej1tryI/ZMpcyLM91eU7MqACzykwNwYIKwYBBQUH
+ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALj13uRM
+KB3GtLMPDoibsTtwKF5pTeb+zxbXhIi/2rSFuJDMvr+0iH3pMbOhafxZf4ziqi6U
+0k5Pzx4DrMPC3ovVIPVbE5H1PznHR9BLMXu8Th2muoSWoLVzy8ONnj64L3Bgv8Q5
+8dZhaFyKODUUXur9i8/vbqPmC78fPixLHv1aVhEZIwUnzwsns/Z62gr235h+t2Zk
++A+JlfTA2YNFhz5yOM5gy1ZLB3ssnhIfGR3+wqi84BsVtZ0kKdk5wy2arA6SVhWF
+aWAryi72ledlkaQVCQxIi7FaN1K3CkVBZC4nkpYSabdKxvC/tGVTF94dsqUZMRh2
+j4QdM0oY4LY/YacCAwEAAaOBzjCByzAdBgNVHQ4EFgQUyUtVdh02qtMXr3tOfZtK
+sxvMmA8wHwYDVR0jBBgwFoAUjbFttJVwiNqVi4gAmBnVk+MD/wQwNwYIKwYBBQUH
 AQEEKzApMCcGCCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIw
 LAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4G
 A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBCwUA
-A4IBAQA32+vK90zojTBGQIN3e4SFZgYgECLp8/BeQSd93QEqwCB0pvXTMAFASkxg
-sJ3aL3GQxRmXzK+i48z+bub6XRFQ5u+psBX42iZRuS4egkTsE+WNJy2xMZfNQwSK
-cMpR4yyek5pINqFGVgjhQxzXlqpEwjqi55GskSj7A5znE9HrwDN7O//C/K9oNlRX
-9Lgqnd54PI6tDdjdS+dQQQquegjXXjsqcdWI7JkCs81aMSZBeeI6SVVAfyZ/NPZ6
-dihePekgHqL0a9Xgbb0uMBppcK4D086zdgQv74ZPd0QZb5RqCYZgKHVjIjoTWtUT
-ryMInB8N3A9itJeFBVrqxWCKAk1R
+A4IBAQCnyim0pedESjzrRJ6a9hSAndA2cdPXOWbgZZT63AkULloTgmbFz5X+dvF+
+GHa2DwITUuJyws9cQjGB3JuTnozprM9c6//bN0pcOXRRhztCJhcG0g68ujqcezyM
+XdOe029fiDov2p+tu7hKX9+Uqq1Mj8B81sjYm5PJcf36fyCb8zoWVAKKgXuzLwVV
+yjTcavjZ+XDUxMxEi6bgRYnaIRCW6CyEY0fxpHvayxAj90W9RWVqA4xCIxXpv1v3
+TN8qi8WCOnpMn4XboQK6YAcu/PoitY6x2xu3y17i8VsziM2CYdXcfn5oKX6wILBy
+6PRLdCZ2zz6zmBg33gU9EdOKXU7R
 -----END CERTIFICATE-----
 
 Certificate:
@@ -286,30 +286,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cd:87:9d:f4:66:f8:77:5c:e3:56:6d:cb:12:dc:
-                    a9:36:79:d5:1b:11:9f:92:20:8d:e6:d7:7d:41:8e:
-                    90:90:2a:a8:63:3d:59:25:a6:7a:86:73:7f:10:da:
-                    9f:c1:a5:69:4d:a3:67:61:b8:f8:9b:9b:ec:4a:3a:
-                    f1:73:f1:83:c4:ab:34:1f:0b:ed:05:f3:6d:c5:ee:
-                    64:18:34:69:5f:09:1f:48:e5:d2:2d:12:4c:17:a3:
-                    7e:74:9f:93:04:ea:00:15:e3:b9:0d:ef:c5:ed:19:
-                    97:2b:12:05:7f:5c:32:2d:c5:30:46:7c:a7:02:27:
-                    29:b2:99:e1:43:95:f6:67:1c:ee:ad:9b:8e:fb:f8:
-                    57:1a:47:13:5a:1a:2f:27:e8:d5:03:2a:e5:f9:92:
-                    53:1d:03:5f:d6:2f:18:65:ce:3a:6e:ab:bf:b6:c5:
-                    72:e1:c9:a0:d6:3c:a2:8e:4f:3e:8f:06:52:19:a8:
-                    1a:f0:06:55:d2:f9:be:23:27:0a:de:33:26:ec:a0:
-                    41:d3:6b:56:25:70:09:ac:28:45:82:33:cb:db:85:
-                    59:50:61:9c:12:e0:04:cc:c5:81:3c:77:d7:9d:8e:
-                    59:d3:70:4d:4e:47:0a:f7:ef:6c:33:54:db:61:ee:
-                    31:cb:8d:43:59:ec:a1:3d:a4:c6:06:6e:05:b2:14:
-                    d6:ad
+                    00:bd:94:f6:d9:65:c1:00:59:e4:7b:96:d6:5a:cb:
+                    f4:ea:23:2b:5d:cf:e1:4e:51:c3:20:eb:4b:90:8e:
+                    4a:e2:22:e7:68:55:51:33:a9:5a:4d:ee:cd:d2:e0:
+                    32:d7:41:7f:c8:59:78:19:1c:d1:e8:ef:58:70:11:
+                    3c:ef:1a:a9:c6:ef:33:33:ee:e1:6b:f5:e1:3c:a7:
+                    64:2b:66:8b:04:05:9d:98:63:34:03:68:50:98:6c:
+                    7d:f3:f3:92:68:08:54:61:5a:fe:bc:8b:b5:c1:35:
+                    98:32:5f:93:59:6f:40:b4:99:b9:d8:82:b9:4f:f0:
+                    72:0a:9c:55:89:40:d1:b9:35:81:1e:39:d1:fd:32:
+                    fe:1d:64:02:82:97:14:c1:ee:77:0f:2d:9b:3a:86:
+                    38:46:2c:e9:b0:0f:98:45:04:f5:10:5b:58:34:c7:
+                    a1:92:69:f4:26:cf:1a:2d:fb:78:2a:81:3c:56:90:
+                    e3:6b:44:16:a0:75:44:41:a7:ef:75:a4:19:5a:f4:
+                    d9:14:93:bc:98:a9:f7:04:e0:e6:69:67:a1:70:c0:
+                    c0:43:67:ef:dd:6c:e2:ea:8c:7d:00:b3:51:5c:9f:
+                    50:11:93:2b:cb:c5:af:f6:32:d3:47:eb:09:1b:e6:
+                    8a:12:0e:9a:6e:48:34:30:91:d4:87:a1:71:1d:1e:
+                    11:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7A:3D:6D:AF:22:3F:64:CA:5C:C8:B3:3D:D5:E5:3B:32:A0:02:CF:29
+                8D:B1:6D:B4:95:70:88:DA:95:8B:88:00:98:19:D5:93:E3:03:FF:04
             X509v3 Authority Key Identifier: 
-                keyid:7A:3D:6D:AF:22:3F:64:CA:5C:C8:B3:3D:D5:E5:3B:32:A0:02:CF:29
+                keyid:8D:B1:6D:B4:95:70:88:DA:95:8B:88:00:98:19:D5:93:E3:03:FF:04
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -324,41 +324,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         20:3e:c4:b6:78:84:bd:36:33:6b:38:8e:f2:1f:1a:46:a7:d9:
-         02:86:39:d2:3f:14:bd:a9:82:21:b0:9d:da:a9:4f:0a:e8:65:
-         0b:7f:b7:cd:d9:3c:de:7f:08:d6:d9:60:ba:b2:be:4d:8a:77:
-         e4:4d:fe:8c:5d:27:e6:8a:0c:6c:e1:3c:7b:e2:d2:4c:ac:34:
-         fe:1e:b1:28:e6:b7:49:a8:09:bf:67:80:0f:8f:02:49:d4:52:
-         6e:bf:d1:a7:b8:b4:22:90:f8:83:d5:85:7f:46:99:2d:df:cb:
-         56:31:0c:0e:92:9b:eb:28:6e:c2:7c:ba:37:5d:3f:f0:f8:b5:
-         e2:0a:02:ea:78:c3:5c:8d:24:92:95:52:bf:68:3e:2b:fc:17:
-         bc:bb:3c:7c:38:f8:6e:5f:d3:1d:9e:4c:c5:3a:47:93:4d:a6:
-         c2:00:f2:2a:7a:a1:f0:76:48:5a:ef:77:1c:47:10:40:d8:d5:
-         84:45:13:f6:5e:7c:d2:0e:bd:e3:e3:b1:3d:d5:93:e1:c4:95:
-         a1:ba:84:0d:a0:1c:b0:cd:b6:b4:a2:52:2e:37:c2:f3:30:3e:
-         91:0b:24:9d:3d:77:02:ce:83:b0:73:21:ba:3f:f6:b9:c7:5d:
-         08:5c:f0:33:8d:de:1e:56:e8:82:2f:5d:e6:8c:0c:ac:77:c7:
-         bf:91:2a:25
+         59:52:44:8b:cc:9b:f4:2f:79:36:ae:25:5c:f0:38:bf:aa:35:
+         02:ac:eb:76:02:3a:bd:5f:8f:36:d0:26:3e:c1:a4:00:79:19:
+         70:fb:97:0e:47:79:94:2b:ac:93:72:95:de:bb:a2:27:4a:f6:
+         6a:4c:af:ff:e8:df:93:7b:f6:ab:14:b5:0f:fe:b3:33:7a:73:
+         f0:29:66:01:21:b6:ea:ed:c6:d4:ae:94:41:4c:8d:07:e6:61:
+         fc:ea:88:88:d0:cc:52:7e:9a:3a:db:b9:2a:30:67:5a:00:4d:
+         a0:fa:ec:a2:a2:f2:cd:ae:a2:ca:84:c5:44:f4:26:12:17:49:
+         4b:bb:ee:cb:ca:b2:38:2d:08:54:6b:e9:9a:34:ad:d8:f3:70:
+         bc:12:88:f1:06:2b:f4:28:ca:12:e4:02:76:29:b0:8f:6e:4e:
+         7f:5b:ca:d1:a1:53:fa:7b:7b:97:a3:6d:a0:8d:48:36:7f:3b:
+         cf:e2:7a:f6:ea:86:dc:a3:6d:8f:21:81:24:32:15:23:9f:85:
+         9b:af:dc:75:19:22:28:9e:47:83:2e:04:37:f6:45:56:25:bf:
+         1b:92:9a:39:ee:06:10:80:c1:7f:61:43:bb:51:aa:fc:0e:0c:
+         50:09:2b:b8:c9:7e:ce:19:02:60:b2:65:db:84:9b:b5:4f:1b:
+         0b:b8:fe:0c
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM2HnfRm+Hdc41ZtyxLc
-qTZ51RsRn5IgjebXfUGOkJAqqGM9WSWmeoZzfxDan8GlaU2jZ2G4+Jub7Eo68XPx
-g8SrNB8L7QXzbcXuZBg0aV8JH0jl0i0STBejfnSfkwTqABXjuQ3vxe0ZlysSBX9c
-Mi3FMEZ8pwInKbKZ4UOV9mcc7q2bjvv4VxpHE1oaLyfo1QMq5fmSUx0DX9YvGGXO
-Om6rv7bFcuHJoNY8oo5PPo8GUhmoGvAGVdL5viMnCt4zJuygQdNrViVwCawoRYIz
-y9uFWVBhnBLgBMzFgTx3152OWdNwTU5HCvfvbDNU22HuMcuNQ1nsoT2kxgZuBbIU
-1q0CAwEAAaOByzCByDAdBgNVHQ4EFgQUej1tryI/ZMpcyLM91eU7MqACzykwHwYD
-VR0jBBgwFoAUej1tryI/ZMpcyLM91eU7MqACzykwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL2U9tllwQBZ5HuW1lrL
+9OojK13P4U5RwyDrS5COSuIi52hVUTOpWk3uzdLgMtdBf8hZeBkc0ejvWHARPO8a
+qcbvMzPu4Wv14TynZCtmiwQFnZhjNANoUJhsffPzkmgIVGFa/ryLtcE1mDJfk1lv
+QLSZudiCuU/wcgqcVYlA0bk1gR450f0y/h1kAoKXFMHudw8tmzqGOEYs6bAPmEUE
+9RBbWDTHoZJp9CbPGi37eCqBPFaQ42tEFqB1REGn73WkGVr02RSTvJip9wTg5mln
+oXDAwENn791s4uqMfQCzUVyfUBGTK8vFr/Yy00frCRvmihIOmm5INDCR1IehcR0e
+EakCAwEAAaOByzCByDAdBgNVHQ4EFgQUjbFttJVwiNqVi4gAmBnVk+MD/wQwHwYD
+VR0jBBgwFoAUjbFttJVwiNqVi4gAmBnVk+MD/wQwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAgPsS2eIS9
-NjNrOI7yHxpGp9kChjnSPxS9qYIhsJ3aqU8K6GULf7fN2TzefwjW2WC6sr5Ninfk
-Tf6MXSfmigxs4Tx74tJMrDT+HrEo5rdJqAm/Z4APjwJJ1FJuv9GnuLQikPiD1YV/
-Rpkt38tWMQwOkpvrKG7CfLo3XT/w+LXiCgLqeMNcjSSSlVK/aD4r/Be8uzx8OPhu
-X9MdnkzFOkeTTabCAPIqeqHwdkha73ccRxBA2NWERRP2XnzSDr3j47E91ZPhxJWh
-uoQNoBywzba0olIuN8LzMD6RCySdPXcCzoOwcyG6P/a5x10IXPAzjd4eVuiCL13m
-jAysd8e/kSol
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBZUkSLzJv0
+L3k2riVc8Di/qjUCrOt2Ajq9X4820CY+waQAeRlw+5cOR3mUK6yTcpXeu6InSvZq
+TK//6N+Te/arFLUP/rMzenPwKWYBIbbq7cbUrpRBTI0H5mH86oiI0MxSfpo627kq
+MGdaAE2g+uyiovLNrqLKhMVE9CYSF0lLu+7LyrI4LQhUa+maNK3Y83C8EojxBiv0
+KMoS5AJ2KbCPbk5/W8rRoVP6e3uXo22gjUg2fzvP4nr26obco22PIYEkMhUjn4Wb
+r9x1GSIonkeDLgQ39kVWJb8bkpo57gYQgMF/YUO7Uar8DgxQCSu4yX7OGQJgsmXb
+hJu1TxsLuP4M
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -371,6 +371,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate2) -----
 ERROR: max_path_length reached
 
diff --git a/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem b/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem
index 0e1f8e4..2b7afd4 100644
--- a/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem
+++ b/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b3:a3:d6:09:6c:d5:c4:2b:7b:c6:2d:9f:d3:91:
-                    39:f1:53:f0:93:49:96:8d:97:0c:d5:36:1d:7c:86:
-                    4f:2c:12:2c:5a:c9:32:b8:ff:21:71:f4:47:06:6f:
-                    30:08:2e:76:71:04:ec:f1:9d:f1:b0:59:36:03:64:
-                    1f:35:b0:a4:e6:ef:e6:aa:94:4e:d8:6e:aa:9f:92:
-                    63:a6:9a:42:47:fc:30:99:a5:c5:90:11:bb:b5:9d:
-                    b1:b0:ec:12:c2:1f:29:42:57:d7:90:97:78:5f:5c:
-                    28:ab:49:7f:24:f3:2a:0f:68:a2:0a:e5:2a:54:8e:
-                    90:04:71:e2:13:9e:52:2e:c7:e6:ff:35:36:e7:01:
-                    d7:2b:7f:5b:54:c0:20:e6:b3:09:16:e7:13:bb:96:
-                    3e:b7:45:3d:8d:5e:3b:6a:fe:c2:cb:5b:0d:bf:ed:
-                    92:98:74:9e:f1:7b:94:71:d0:b1:50:ec:81:06:3d:
-                    12:39:f2:00:d3:60:9c:3c:9c:5a:a1:58:cc:56:b1:
-                    4f:a7:a1:ec:c7:c5:52:70:81:99:99:a4:ef:de:f4:
-                    0d:c1:c5:ff:c6:83:c6:e8:d4:bd:f8:27:f9:86:e0:
-                    3c:d4:7b:31:17:4d:49:c8:ce:c0:27:6a:4f:0a:fb:
-                    79:75:93:47:b0:05:f8:2e:10:f4:0b:39:ce:f6:43:
-                    87:07
+                    00:d5:ba:49:72:77:98:7a:9b:08:60:5f:15:2d:03:
+                    7a:30:b5:f4:24:b6:0e:7d:31:d6:f5:49:c0:43:c6:
+                    e0:f9:31:65:fc:59:6f:79:77:57:c1:cf:96:e9:db:
+                    ee:56:9a:87:67:be:1c:8b:89:c4:3a:3f:9a:0a:c3:
+                    68:e1:8d:d3:02:be:ca:47:7d:e6:e0:95:db:1c:49:
+                    2a:ef:ad:de:90:b7:b2:20:7c:7e:94:b8:29:4d:8d:
+                    3e:5d:71:35:d2:02:ee:8e:30:ad:83:5a:dd:3f:92:
+                    bc:ba:38:a5:c0:0b:e7:aa:26:fc:b2:56:c9:f7:22:
+                    70:90:a1:3e:b1:36:9a:38:85:93:48:f4:cc:f7:41:
+                    2d:a8:8e:b9:ca:25:a6:af:cd:94:8c:c3:cd:c9:1c:
+                    ea:d7:31:57:3b:e6:01:0e:22:66:10:f0:6f:5c:f9:
+                    c5:0b:24:e3:50:af:97:84:f4:14:fd:94:b3:49:54:
+                    e6:a8:36:3b:e9:be:c6:91:da:87:af:1c:3d:f1:fe:
+                    7c:09:d9:32:95:41:6f:15:c9:9c:53:be:b4:53:78:
+                    34:fa:2e:6e:e6:e3:6a:65:89:d2:97:14:4a:01:d0:
+                    fe:95:7e:36:b4:11:ac:9a:0d:71:27:3b:48:d2:12:
+                    1c:93:e6:f5:87:83:56:cc:e1:01:07:c3:ac:91:6e:
+                    47:53
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                FD:9F:2A:24:CC:3C:CE:DA:6D:41:F0:3B:79:09:11:71:B2:29:31:17
+                A1:89:B4:92:F7:E8:5E:99:00:E0:73:95:EC:15:CF:C9:DC:EF:5A:63
             X509v3 Authority Key Identifier: 
-                keyid:4D:F0:7D:C0:A0:7D:84:3E:38:63:E2:76:18:78:25:8C:09:DD:12:36
+                keyid:F8:CA:7C:B6:29:EB:F9:FB:32:FC:E9:07:44:D0:27:BA:72:2C:E3:CB
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate2.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         2b:4d:3f:19:05:a2:6b:66:7e:85:21:18:9a:0c:f0:81:cd:f7:
-         81:71:50:38:95:f4:d0:68:d6:e2:02:9b:f3:08:1e:8c:4a:57:
-         b6:2b:e3:57:7c:ca:70:74:48:ee:d6:5f:2e:f7:b5:fc:95:75:
-         fa:c3:1d:5c:e1:aa:dc:85:cc:4c:2f:a7:05:b6:4f:38:a7:50:
-         44:8c:4a:1f:2c:fc:37:f4:96:a9:03:77:65:b0:5d:a4:36:f9:
-         29:ab:6e:1e:64:47:9b:cd:89:45:85:84:d3:4a:0f:97:87:99:
-         83:15:67:cb:42:80:69:8d:17:89:d0:1a:c5:e5:48:60:86:b3:
-         20:2e:9a:40:7b:ec:90:53:fd:b4:6e:6b:d2:82:2b:5a:5c:e4:
-         fe:ee:16:ec:15:20:f8:4d:07:b6:f0:9a:95:6c:08:d4:d0:b2:
-         09:3d:67:40:13:a6:5b:21:5f:03:4b:d7:c5:83:a9:2d:a1:1b:
-         93:c6:5b:6d:36:85:f7:4c:9c:65:33:ab:e1:8f:e1:18:c1:6b:
-         ec:4c:c7:a4:de:8a:b8:a1:66:a3:94:e3:40:5e:8c:cd:42:e5:
-         f2:8a:e0:5b:19:01:5b:ba:74:eb:11:3b:ac:56:04:6b:a7:22:
-         35:9b:ac:3e:da:12:3f:42:39:3d:7e:7d:ac:1e:3c:c6:7b:09:
-         8f:97:f2:f2
+         e3:49:d6:9b:d3:e2:57:a8:04:4b:37:e5:bc:30:8d:56:33:1c:
+         b6:2e:06:44:9c:1e:14:95:65:64:1c:35:e4:f6:9a:1c:22:c8:
+         7b:84:13:a2:e3:d9:b8:39:56:c8:ad:b1:2a:a1:fa:98:64:f9:
+         ca:c4:bf:ec:0b:eb:2d:85:03:8a:e0:a8:c3:53:88:4a:07:8d:
+         27:36:cc:de:78:51:ae:7e:eb:40:ba:f6:5a:cd:cf:72:7e:56:
+         b3:f1:4a:16:85:04:c2:11:1c:1f:13:4f:f0:93:ec:d4:50:76:
+         30:98:80:db:14:38:2c:b8:bd:ae:28:91:cf:61:ff:d9:22:a0:
+         ea:e0:e9:98:87:93:ea:b3:a0:37:6f:43:ae:dd:85:08:ff:cd:
+         2f:6c:25:71:2b:dc:60:1c:a8:51:bf:ea:a6:95:d7:7b:8c:87:
+         c8:5d:28:14:5e:40:f6:2e:25:a5:7b:e6:a2:3a:a8:58:bc:78:
+         d4:59:67:38:01:6e:2b:8a:8e:19:1c:ac:0b:3d:da:47:60:a7:
+         25:34:9a:4c:69:9a:26:a3:73:ec:04:71:e4:23:ea:08:ea:78:
+         74:80:f3:58:cb:d4:ec:af:8d:b1:a9:00:10:40:25:ed:ee:8c:
+         21:52:cd:e1:3f:f3:b0:4f:2e:4a:51:df:87:74:4e:06:3d:cb:
+         96:7c:29:58
 -----BEGIN CERTIFICATE-----
 MIIDkDCCAnigAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUyMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowETEPMA0G
-A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs6PW
-CWzVxCt7xi2f05E58VPwk0mWjZcM1TYdfIZPLBIsWskyuP8hcfRHBm8wCC52cQTs
-8Z3xsFk2A2QfNbCk5u/mqpRO2G6qn5JjpppCR/wwmaXFkBG7tZ2xsOwSwh8pQlfX
-kJd4X1woq0l/JPMqD2iiCuUqVI6QBHHiE55SLsfm/zU25wHXK39bVMAg5rMJFucT
-u5Y+t0U9jV47av7Cy1sNv+2SmHSe8XuUcdCxUOyBBj0SOfIA02CcPJxaoVjMVrFP
-p6Hsx8VScIGZmaTv3vQNwcX/xoPG6NS9+Cf5huA81HsxF01JyM7AJ2pPCvt5dZNH
-sAX4LhD0CznO9kOHBwIDAQABo4HrMIHoMB0GA1UdDgQWBBT9nyokzDzO2m1B8Dt5
-CRFxsikxFzAfBgNVHSMEGDAWgBRN8H3AoH2EPjhj4nYYeCWMCd0SNjBABggrBgEF
+A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1bpJ
+cneYepsIYF8VLQN6MLX0JLYOfTHW9UnAQ8bg+TFl/FlveXdXwc+W6dvuVpqHZ74c
+i4nEOj+aCsNo4Y3TAr7KR33m4JXbHEkq763ekLeyIHx+lLgpTY0+XXE10gLujjCt
+g1rdP5K8ujilwAvnqib8slbJ9yJwkKE+sTaaOIWTSPTM90EtqI65yiWmr82UjMPN
+yRzq1zFXO+YBDiJmEPBvXPnFCyTjUK+XhPQU/ZSzSVTmqDY76b7GkdqHrxw98f58
+CdkylUFvFcmcU760U3g0+i5u5uNqZYnSlxRKAdD+lX42tBGsmg1xJztI0hIck+b1
+h4NWzOEBB8OskW5HUwIDAQABo4HrMIHoMB0GA1UdDgQWBBShibSS9+hemQDgc5Xs
+Fc/J3O9aYzAfBgNVHSMEGDAWgBT4yny2Kev5+zL86QdE0Ce6cizjyzBABggrBgEF
 BQcBAQQ0MDIwMAYIKwYBBQUHMAKGJGh0dHA6Ly91cmwtZm9yLWFpYS9JbnRlcm1l
 ZGlhdGUyLmNlcjA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vdXJsLWZvci1jcmwv
 SW50ZXJtZWRpYXRlMi5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
-AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAK00/GQWia2Z+hSEY
-mgzwgc33gXFQOJX00GjW4gKb8wgejEpXtivjV3zKcHRI7tZfLve1/JV1+sMdXOGq
-3IXMTC+nBbZPOKdQRIxKHyz8N/SWqQN3ZbBdpDb5KatuHmRHm82JRYWE00oPl4eZ
-gxVny0KAaY0XidAaxeVIYIazIC6aQHvskFP9tG5r0oIrWlzk/u4W7BUg+E0HtvCa
-lWwI1NCyCT1nQBOmWyFfA0vXxYOpLaEbk8ZbbTaF90ycZTOr4Y/hGMFr7EzHpN6K
-uKFmo5TjQF6MzULl8orgWxkBW7p06xE7rFYEa6ciNZusPtoSP0I5PX59rB48xnsJ
-j5fy8g==
+AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEA40nWm9PiV6gESzfl
+vDCNVjMcti4GRJweFJVlZBw15PaaHCLIe4QTouPZuDlWyK2xKqH6mGT5ysS/7Avr
+LYUDiuCow1OISgeNJzbM3nhRrn7rQLr2Ws3Pcn5Ws/FKFoUEwhEcHxNP8JPs1FB2
+MJiA2xQ4LLi9riiRz2H/2SKg6uDpmIeT6rOgN29Drt2FCP/NL2wlcSvcYByoUb/q
+ppXXe4yHyF0oFF5A9i4lpXvmojqoWLx41FlnOAFuK4qOGRysCz3aR2CnJTSaTGma
+JqNz7ARx5CPqCOp4dIDzWMvU7K+NsakAEEAl7e6MIVLN4T/zsE8uSlHfh3ROBj3L
+lnwpWA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c9:f0:db:40:19:44:5e:67:d4:e7:dd:4f:67:12:
-                    71:af:2a:42:76:de:6a:c0:ce:e6:9f:78:4e:90:f9:
-                    62:6a:14:9d:5e:63:3a:55:8e:88:a4:83:34:f6:f1:
-                    35:19:d1:fe:94:61:b6:9a:c6:b0:47:81:95:69:21:
-                    ff:ca:c9:c9:79:4c:ac:ee:f6:08:ba:eb:ae:fe:96:
-                    8a:dc:97:11:c1:2f:8b:55:9f:58:cb:b1:8f:c3:2a:
-                    36:0b:4b:d2:17:36:45:0d:33:64:b0:58:27:45:a1:
-                    71:f1:db:2c:d7:de:6f:6d:f5:bc:38:62:c3:5a:9d:
-                    f5:95:58:1d:ef:c2:00:6a:e5:c2:97:84:f7:ac:cc:
-                    19:18:f0:f8:cb:1a:b0:7b:b4:63:cc:35:5d:8c:cf:
-                    f0:0c:a6:7e:fa:19:96:a9:dd:8a:26:ef:31:e9:38:
-                    44:11:62:ff:30:35:fe:86:2a:5f:52:20:93:2a:a8:
-                    5c:a9:c6:16:08:3e:c1:da:34:4e:83:28:a1:d4:6c:
-                    78:58:06:a0:ef:65:69:4c:19:65:0a:82:98:d4:cf:
-                    56:22:d2:47:b1:82:40:8f:fc:50:5d:52:c5:12:a8:
-                    0f:17:0c:18:3b:ef:9b:8c:3c:da:c4:c2:2d:63:44:
-                    59:08:8e:54:4a:5d:1d:e7:ba:2f:7a:d7:92:40:8d:
-                    f4:9f
+                    00:eb:27:bb:a7:3b:d4:cb:75:c7:da:66:38:d8:36:
+                    92:a4:64:86:f5:29:16:a7:60:e5:0e:0c:12:22:22:
+                    29:e4:84:ad:34:74:8f:29:fd:d4:55:d1:31:ee:c4:
+                    21:d2:9a:9f:e6:72:60:6a:aa:8c:5e:8e:dd:24:b7:
+                    89:59:2a:cc:ef:27:ad:7b:e4:71:47:eb:a8:ea:25:
+                    4e:30:2c:49:74:06:04:b6:0a:05:78:59:ba:34:20:
+                    52:54:1a:45:fd:e5:2c:f7:db:38:66:8b:8a:ba:6e:
+                    dc:8e:f9:e1:e4:e6:38:d1:33:ed:7c:89:52:f7:1a:
+                    5d:a5:a3:fa:2c:ac:21:36:be:3b:01:b8:c9:4c:bb:
+                    44:97:a5:3e:ed:34:de:98:d4:7c:25:40:db:d8:f8:
+                    7e:c8:9c:08:5f:c7:7c:92:c1:b3:8b:7c:4b:0c:fb:
+                    a0:18:fc:9e:95:d3:d9:23:25:94:0a:1c:27:29:95:
+                    2c:85:99:fe:e8:cc:4d:91:02:05:70:f0:6a:fe:80:
+                    3c:58:5a:c9:d2:4f:ae:54:b2:f8:28:96:1c:88:d7:
+                    eb:d5:51:1a:d4:4e:2f:46:c8:b5:11:b2:d9:33:36:
+                    84:ee:63:ac:cc:e8:52:20:e8:db:5c:d3:f5:de:ca:
+                    a8:c2:41:82:4a:02:53:ff:10:f6:ee:40:3e:90:02:
+                    2d:d1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4D:F0:7D:C0:A0:7D:84:3E:38:63:E2:76:18:78:25:8C:09:DD:12:36
+                F8:CA:7C:B6:29:EB:F9:FB:32:FC:E9:07:44:D0:27:BA:72:2C:E3:CB
             X509v3 Authority Key Identifier: 
-                keyid:C5:16:E8:6A:00:06:4F:0B:E0:6E:86:89:50:32:72:E0:22:08:AE:60
+                keyid:69:78:9C:E4:B3:1F:B8:FA:9A:A8:D8:10:CA:29:F1:C8:CF:46:98:EB
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate1.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         52:00:7b:6d:93:e0:12:f4:bd:3e:1e:67:ac:a2:a2:46:dd:68:
-         7f:41:c5:7e:a4:04:07:d2:5b:1a:d3:26:b7:9d:6a:62:9c:51:
-         a5:19:55:7d:1d:42:4d:88:12:39:21:a5:fe:59:27:94:92:7c:
-         4c:54:f6:85:f7:7d:3b:ac:23:51:63:67:05:66:b3:5e:4e:c2:
-         db:e9:33:e6:5a:7c:08:96:16:b9:33:af:83:02:15:d0:eb:2f:
-         02:98:18:5a:53:ca:f5:ee:a8:3c:95:44:bd:c7:bf:47:f4:7b:
-         22:e5:b2:df:ee:e1:e2:eb:50:89:a9:ad:72:e2:03:74:f7:82:
-         90:2a:6e:36:39:f6:06:95:81:52:56:e1:7e:35:32:43:90:78:
-         57:54:00:fc:df:39:e6:f6:92:d6:57:5d:01:ee:69:a0:fb:8c:
-         df:75:9b:8c:0e:e7:af:27:d4:11:01:c3:9d:56:7b:52:0b:06:
-         57:1f:40:13:12:76:2a:40:b1:97:47:5f:6d:c4:5a:45:99:cd:
-         96:61:ce:52:47:5f:8d:66:14:6d:a2:3c:bb:6e:0f:9c:3c:ba:
-         9e:fb:75:92:32:eb:f3:71:16:d5:c6:84:e4:7d:c5:79:3f:ce:
-         08:57:96:5b:56:c5:28:d5:96:41:f0:bc:a7:72:a1:18:6f:ab:
-         d9:e5:47:93
+         84:62:43:5c:06:b9:f3:39:ce:ab:d5:52:71:5e:c7:ea:1c:fe:
+         75:1c:e3:1a:b9:61:31:22:21:6e:40:01:50:78:bc:2d:f2:aa:
+         22:97:01:97:00:f6:34:a8:22:b4:46:29:26:ad:42:a7:80:af:
+         eb:1b:df:a0:e6:6c:00:c2:07:9e:f5:f6:f9:24:7a:d4:df:ed:
+         c7:b0:f7:19:2a:8e:4e:69:9f:8b:90:1b:05:82:e4:c3:1e:82:
+         db:98:98:26:9a:b6:77:34:b1:91:40:dc:2e:63:ce:2a:bd:d1:
+         5e:c6:ff:4d:ec:97:ad:9c:c6:a6:bb:36:2d:42:f4:37:02:a6:
+         8a:b1:c9:c6:e6:86:20:d8:30:f0:b7:34:dd:15:45:fb:35:b1:
+         05:15:c2:3e:9e:c3:6d:e6:c5:3e:3c:94:65:e9:ab:46:5b:7a:
+         dc:e8:37:31:c3:5c:96:b4:b0:88:7e:ed:3f:84:cd:63:39:a3:
+         11:06:f2:90:77:22:60:27:98:6b:0d:76:1f:c4:e5:5b:1e:72:
+         c1:9b:a3:10:9a:05:3e:21:97:0e:04:8d:de:21:db:34:ae:89:
+         33:26:e6:fc:3e:0c:72:4e:e5:56:d0:e3:58:a4:a9:ed:15:34:
+         05:8f:f7:f1:1d:ad:8e:b2:df:0c:37:61:f8:60:ec:db:9a:9d:
+         6d:8f:11:a0
 -----BEGIN CERTIFICATE-----
 MIIDiTCCAnGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUxMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQG
 A1UEAwwNSW50ZXJtZWRpYXRlMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMnw20AZRF5n1OfdT2cSca8qQnbeasDO5p94TpD5YmoUnV5jOlWOiKSDNPbx
-NRnR/pRhtprGsEeBlWkh/8rJyXlMrO72CLrrrv6WityXEcEvi1WfWMuxj8MqNgtL
-0hc2RQ0zZLBYJ0WhcfHbLNfeb231vDhiw1qd9ZVYHe/CAGrlwpeE96zMGRjw+Msa
-sHu0Y8w1XYzP8AymfvoZlqndiibvMek4RBFi/zA1/oYqX1IgkyqoXKnGFgg+wdo0
-ToMoodRseFgGoO9laUwZZQqCmNTPViLSR7GCQI/8UF1SxRKoDxcMGDvvm4w82sTC
-LWNEWQiOVEpdHee6L3rXkkCN9J8CAwEAAaOB3TCB2jAdBgNVHQ4EFgQUTfB9wKB9
-hD44Y+J2GHgljAndEjYwHwYDVR0jBBgwFoAUxRboagAGTwvgboaJUDJy4CIIrmAw
+ggEBAOsnu6c71Mt1x9pmONg2kqRkhvUpFqdg5Q4MEiIiKeSErTR0jyn91FXRMe7E
+IdKan+ZyYGqqjF6O3SS3iVkqzO8nrXvkcUfrqOolTjAsSXQGBLYKBXhZujQgUlQa
+Rf3lLPfbOGaLirpu3I754eTmONEz7XyJUvcaXaWj+iysITa+OwG4yUy7RJelPu00
+3pjUfCVA29j4fsicCF/HfJLBs4t8Swz7oBj8npXT2SMllAocJymVLIWZ/ujMTZEC
+BXDwav6APFhaydJPrlSy+CiWHIjX69VRGtROL0bItRGy2TM2hO5jrMzoUiDo21zT
+9d7KqMJBgkoCU/8Q9u5APpACLdECAwEAAaOB3TCB2jAdBgNVHQ4EFgQU+Mp8tinr
++fsy/OkHRNAnunIs48swHwYDVR0jBBgwFoAUaXic5LMfuPqaqNgQyinxyM9GmOsw
 QAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAChiRodHRwOi8vdXJsLWZvci1haWEv
 SW50ZXJtZWRpYXRlMS5jZXIwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL3VybC1m
 b3ItY3JsL0ludGVybWVkaWF0ZTEuY3JsMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
-Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBSAHttk+AS9L0+HmesoqJG3Wh/
-QcV+pAQH0lsa0ya3nWpinFGlGVV9HUJNiBI5IaX+WSeUknxMVPaF9307rCNRY2cF
-ZrNeTsLb6TPmWnwIlha5M6+DAhXQ6y8CmBhaU8r17qg8lUS9x79H9Hsi5bLf7uHi
-61CJqa1y4gN094KQKm42OfYGlYFSVuF+NTJDkHhXVAD83znm9pLWV10B7mmg+4zf
-dZuMDuevJ9QRAcOdVntSCwZXH0ATEnYqQLGXR19txFpFmc2WYc5SR1+NZhRtojy7
-bg+cPLqe+3WSMuvzcRbVxoTkfcV5P84IV5ZbVsUo1ZZB8LyncqEYb6vZ5UeT
+Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCEYkNcBrnzOc6r1VJxXsfqHP51
+HOMauWExIiFuQAFQeLwt8qoilwGXAPY0qCK0RikmrUKngK/rG9+g5mwAwgee9fb5
+JHrU3+3HsPcZKo5OaZ+LkBsFguTDHoLbmJgmmrZ3NLGRQNwuY84qvdFexv9N7Jet
+nMamuzYtQvQ3AqaKscnG5oYg2DDwtzTdFUX7NbEFFcI+nsNt5sU+PJRl6atGW3rc
+6Dcxw1yWtLCIfu0/hM1jOaMRBvKQdyJgJ5hrDXYfxOVbHnLBm6MQmgU+IZcOBI3e
+Ids0rokzJub8PgxyTuVW0ONYpKntFTQFj/fxHa2Ost8MN2H4YOzbmp1tjxGg
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e9:9a:81:41:08:cf:b0:5d:90:15:7b:33:d8:14:
-                    e0:04:05:c4:86:6c:65:6d:fa:9c:cb:68:e8:d3:3f:
-                    1f:02:00:4c:b0:8d:21:ab:fb:f4:ea:e4:d5:10:84:
-                    73:99:ed:ac:1a:d8:96:66:21:0b:8a:40:56:54:37:
-                    1e:49:b4:96:d8:be:63:8a:b2:5c:16:a1:c6:79:d0:
-                    30:3d:ee:83:da:58:e3:cf:7b:fd:37:d6:29:74:6a:
-                    69:8a:62:9f:1a:6f:22:7b:2b:68:51:b8:af:91:d3:
-                    48:7a:a1:d1:cb:ea:d7:c2:54:f7:09:55:a4:7f:cf:
-                    33:87:43:80:bb:04:2d:be:77:ea:db:e4:59:a6:4b:
-                    c4:9e:d4:6a:54:b6:45:4d:4e:28:c0:13:33:d2:0a:
-                    12:49:4a:d7:e0:60:a7:88:0b:3d:54:61:5a:e1:e5:
-                    f3:56:56:42:f0:3c:4e:65:dc:b9:c3:07:7f:56:da:
-                    4a:45:c4:e4:ba:e7:66:e2:09:e3:4d:84:5d:24:af:
-                    bc:d2:2b:24:39:e3:04:bd:7c:1d:cf:71:5b:60:64:
-                    dc:f3:75:e3:18:44:3b:8f:b1:70:72:20:ab:da:30:
-                    bb:18:0d:d1:ed:fd:e8:87:5c:58:2d:de:11:e6:e8:
-                    0a:99:66:fd:a3:c3:b9:6b:02:ac:07:0c:35:c1:90:
-                    66:2d
+                    00:d1:c2:6a:7a:d7:28:b1:49:61:5c:d1:75:a5:99:
+                    6c:ca:b6:82:d2:d3:01:03:ee:a5:83:4f:45:47:b7:
+                    b5:88:e9:c4:0d:74:04:c2:57:dc:3e:58:2d:65:3c:
+                    5c:06:f1:5b:c3:13:38:a9:28:2f:c7:b9:5b:9f:9e:
+                    fb:c1:d8:cb:12:ed:c8:1d:31:45:68:fe:48:b6:f3:
+                    65:2e:28:dc:68:26:57:de:0b:71:c6:a4:5f:27:7f:
+                    7b:30:22:70:98:1d:a2:96:85:f3:6a:0c:41:03:5e:
+                    79:91:b1:d6:1b:89:13:d1:7c:64:7d:19:43:66:eb:
+                    5d:bb:e8:f7:01:30:b9:85:4d:7a:6d:06:06:29:6a:
+                    b2:a3:45:a6:c9:d1:e3:14:4f:ec:a4:21:29:28:27:
+                    ac:3e:52:86:74:f2:b1:d5:4b:ee:f6:b2:07:32:be:
+                    a5:31:57:4e:15:c4:e0:22:d9:64:08:55:88:6e:50:
+                    4e:26:07:c7:f0:93:e4:ab:6e:b4:be:e2:76:21:46:
+                    64:44:de:ba:fa:8c:c4:0a:5d:40:e2:10:ee:f7:22:
+                    5b:6d:01:b4:a8:41:c8:ef:8f:67:b9:1a:ad:da:27:
+                    53:b6:02:0f:a4:b4:17:66:a6:4b:91:3a:37:0b:6e:
+                    f6:c1:34:23:62:9e:86:47:f3:bb:2e:ec:b4:a1:4c:
+                    87:17
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C5:16:E8:6A:00:06:4F:0B:E0:6E:86:89:50:32:72:E0:22:08:AE:60
+                69:78:9C:E4:B3:1F:B8:FA:9A:A8:D8:10:CA:29:F1:C8:CF:46:98:EB
             X509v3 Authority Key Identifier: 
-                keyid:E8:DD:B2:61:D1:FC:02:1F:CD:68:F1:34:9D:6E:55:E7:97:B5:3A:23
+                keyid:B4:BC:EB:EE:7C:D8:81:4D:B6:85:05:30:CE:A3:01:50:75:92:75:C4
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         68:ca:ff:4f:17:59:d1:14:01:ad:bd:21:09:39:d3:de:3f:9e:
-         12:71:16:9c:49:f6:e1:2d:d2:d3:4f:93:d3:60:a0:6f:9e:ac:
-         49:99:a2:2c:ad:fc:29:1a:e1:5a:6e:07:e8:83:67:67:e1:23:
-         c4:01:e2:b5:c3:c1:28:f3:71:3e:49:e7:1e:dc:ee:66:fb:eb:
-         64:3d:5c:2f:e2:1d:fd:55:f6:98:ff:fc:af:82:aa:45:d0:be:
-         89:bd:73:4b:87:fb:a8:9e:c7:03:75:77:7c:d1:8c:50:f0:03:
-         e2:7a:2e:f5:f8:dd:53:33:9f:86:d3:f3:32:83:d2:2a:70:67:
-         ca:8a:f1:df:15:b0:fd:38:bf:67:4e:22:e2:6f:73:6c:a6:b9:
-         27:c9:89:ce:a3:9e:00:7c:82:55:44:d5:e6:2a:3d:1c:80:e1:
-         ef:37:f5:ab:e0:ea:25:b4:45:4c:28:50:2d:cb:ed:bb:6b:1d:
-         06:3e:16:e4:f0:b8:15:16:6e:7a:91:cd:f3:1c:39:2c:ec:d3:
-         7e:0b:e0:de:2a:f1:d5:27:78:a6:9c:3a:3f:b8:cc:b2:f6:9c:
-         8f:f1:9b:ce:c6:67:eb:9f:f5:4b:39:87:89:ef:d2:2f:ba:73:
-         d8:af:cc:90:95:9d:95:e4:1c:a5:fb:3a:85:f6:f8:cc:69:ae:
-         2e:6a:fc:6e
+         76:48:7b:d1:f1:e7:f4:cd:ea:0a:20:a1:3d:dd:53:a1:5d:5b:
+         b8:4c:1f:a0:a1:29:8f:54:27:4f:05:94:e0:84:6c:8b:aa:23:
+         b1:55:dd:c9:2c:70:8c:8d:be:44:44:64:d4:2e:9c:ed:b2:b1:
+         5f:ab:97:83:16:ad:2e:27:21:22:cc:a3:2b:fc:a3:55:e4:58:
+         86:6d:6b:78:36:aa:a0:32:d4:4e:59:99:75:68:81:23:99:41:
+         64:28:e0:0a:bc:0b:db:56:34:c3:c8:b8:08:7f:d5:4e:1f:16:
+         d8:c0:3f:a2:17:42:64:4d:37:89:4f:06:3b:7a:1e:97:82:92:
+         7c:a3:e1:9e:4d:46:2e:a0:6a:cd:71:77:e1:77:e3:43:98:18:
+         21:c1:f3:23:f9:69:18:d5:1b:56:00:2a:97:54:e7:ca:65:97:
+         14:8b:d6:77:5c:a5:df:4b:4b:9f:75:b8:cf:79:cd:5b:10:42:
+         a2:d2:90:3e:77:79:92:46:e0:ca:34:3d:bd:4a:d2:2a:10:50:
+         79:0a:8a:78:2b:ce:ea:0c:83:ca:22:c2:9b:8f:ae:4c:67:25:
+         9b:2b:e6:09:87:c2:8f:4d:46:6b:85:7d:94:b9:00:f9:3a:55:
+         bc:2d:06:3e:27:19:49:af:c7:a5:a2:23:d0:ac:cf:62:24:4a:
+         11:90:81:37
 -----BEGIN CERTIFICATE-----
 MIIDbjCCAlagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQGA1UEAwwNSW50
-ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOmagUEI
-z7BdkBV7M9gU4AQFxIZsZW36nMto6NM/HwIATLCNIav79Ork1RCEc5ntrBrYlmYh
-C4pAVlQ3Hkm0lti+Y4qyXBahxnnQMD3ug9pY4897/TfWKXRqaYpinxpvInsraFG4
-r5HTSHqh0cvq18JU9wlVpH/PM4dDgLsELb536tvkWaZLxJ7UalS2RU1OKMATM9IK
-EklK1+Bgp4gLPVRhWuHl81ZWQvA8TmXcucMHf1baSkXE5LrnZuIJ402EXSSvvNIr
-JDnjBL18Hc9xW2Bk3PN14xhEO4+xcHIgq9owuxgN0e396IdcWC3eEeboCplm/aPD
-uWsCrAcMNcGQZi0CAwEAAaOByzCByDAdBgNVHQ4EFgQUxRboagAGTwvgboaJUDJy
-4CIIrmAwHwYDVR0jBBgwFoAU6N2yYdH8Ah/NaPE0nW5V55e1OiMwNwYIKwYBBQUH
+ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHCanrX
+KLFJYVzRdaWZbMq2gtLTAQPupYNPRUe3tYjpxA10BMJX3D5YLWU8XAbxW8MTOKko
+L8e5W5+e+8HYyxLtyB0xRWj+SLbzZS4o3GgmV94LccakXyd/ezAicJgdopaF82oM
+QQNeeZGx1huJE9F8ZH0ZQ2brXbvo9wEwuYVNem0GBilqsqNFpsnR4xRP7KQhKSgn
+rD5ShnTysdVL7vayBzK+pTFXThXE4CLZZAhViG5QTiYHx/CT5KtutL7idiFGZETe
+uvqMxApdQOIQ7vciW20BtKhByO+PZ7kardonU7YCD6S0F2amS5E6Nwtu9sE0I2Ke
+hkfzuy7stKFMhxcCAwEAAaOByzCByDAdBgNVHQ4EFgQUaXic5LMfuPqaqNgQyinx
+yM9GmOswHwYDVR0jBBgwFoAUtLzr7nzYgU22hQUwzqMBUHWSdcQwNwYIKwYBBQUH
 AQEEKzApMCcGCCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIw
 LAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4G
 A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB
-AQBoyv9PF1nRFAGtvSEJOdPeP54ScRacSfbhLdLTT5PTYKBvnqxJmaIsrfwpGuFa
-bgfog2dn4SPEAeK1w8Eo83E+Sece3O5m++tkPVwv4h39VfaY//yvgqpF0L6JvXNL
-h/uonscDdXd80YxQ8APiei71+N1TM5+G0/Myg9IqcGfKivHfFbD9OL9nTiLib3Ns
-prknyYnOo54AfIJVRNXmKj0cgOHvN/Wr4OoltEVMKFAty+27ax0GPhbk8LgVFm56
-kc3zHDks7NN+C+DeKvHVJ3imnDo/uMyy9pyP8ZvOxmfrn/VLOYeJ79IvunPYr8yQ
-lZ2V5Byl+zqF9vjMaa4uavxu
+AQB2SHvR8ef0zeoKIKE93VOhXVu4TB+goSmPVCdPBZTghGyLqiOxVd3JLHCMjb5E
+RGTULpztsrFfq5eDFq0uJyEizKMr/KNV5FiGbWt4NqqgMtROWZl1aIEjmUFkKOAK
+vAvbVjTDyLgIf9VOHxbYwD+iF0JkTTeJTwY7eh6XgpJ8o+GeTUYuoGrNcXfhd+ND
+mBghwfMj+WkY1RtWACqXVOfKZZcUi9Z3XKXfS0ufdbjPec1bEEKi0pA+d3mSRuDK
+ND29StIqEFB5Cop4K87qDIPKIsKbj65MZyWbK+YJh8KPTUZrhX2UuQD5OlW8LQY+
+JxlJr8eloiPQrM9iJEoRkIE3
 -----END CERTIFICATE-----
 
 Certificate:
@@ -286,30 +286,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ca:b8:37:0e:d3:aa:65:77:fd:8d:e5:02:89:2e:
-                    62:d3:50:7d:1b:05:5b:f1:d5:5d:b2:94:57:c2:c2:
-                    70:a5:fa:cb:02:e0:02:c0:d7:de:1b:2d:2d:b0:46:
-                    2e:d8:8e:69:7b:51:a7:cf:47:cf:bb:25:1e:ed:ed:
-                    67:ba:e8:a5:f7:85:59:d7:a2:fb:4f:55:00:22:05:
-                    84:e3:31:20:2b:e0:ff:72:9e:99:de:be:67:48:60:
-                    ac:86:35:3a:da:85:06:5b:92:29:7c:da:50:1c:e0:
-                    34:d8:5e:81:26:18:7e:de:07:20:c2:59:3b:43:f1:
-                    bd:02:29:d4:ae:29:6e:bb:dc:be:48:2c:9a:15:18:
-                    33:86:6f:c3:26:2e:88:46:35:ce:92:b1:c2:a6:96:
-                    cc:2c:e0:60:87:1f:9b:e2:a0:ce:7f:af:53:04:d8:
-                    24:cb:da:19:ca:3b:fe:02:f1:11:05:e7:40:af:2d:
-                    eb:df:c4:53:1e:64:5a:73:b5:93:42:46:64:72:a5:
-                    d9:d4:e0:70:65:f5:89:c3:07:83:17:0d:83:a8:aa:
-                    69:b5:56:57:20:1b:38:49:72:16:fb:a0:b4:d9:55:
-                    32:0a:e7:1c:1f:ec:3d:fc:7a:b9:81:02:d8:9e:57:
-                    cd:97:18:16:6e:de:36:fe:d2:63:73:b3:8a:6e:57:
-                    93:a9
+                    00:ba:0b:93:f2:44:8e:7e:00:d8:9b:6d:f4:bc:4b:
+                    e1:b9:5f:3d:fc:ad:65:9c:5d:d0:b0:0c:95:4a:69:
+                    e9:93:39:f5:67:34:44:9c:ed:de:47:6b:87:a1:5f:
+                    81:e3:fa:a7:d3:fb:d7:66:dc:32:ab:11:a3:02:eb:
+                    b9:7f:6d:60:c7:8d:8e:ae:a8:c4:22:45:7f:23:10:
+                    c7:a4:30:b1:46:5b:1a:dc:8b:14:b8:76:e9:6d:fc:
+                    0e:07:40:fb:36:8e:e0:a4:61:71:29:c8:ac:99:08:
+                    73:f1:e1:7a:55:2d:f1:95:ca:b9:17:c3:d3:8d:ac:
+                    a9:0a:8c:b4:97:36:8d:5e:b7:01:75:60:b2:8a:e5:
+                    2e:bc:25:e9:66:b5:ce:07:ea:14:51:4e:c3:5d:80:
+                    df:0c:4b:6a:29:98:78:e5:dc:27:8b:7d:8f:fe:2b:
+                    4b:95:98:b1:f9:55:5d:44:55:3f:b9:b3:75:db:e8:
+                    b9:85:1e:7e:2b:3e:36:65:d7:7f:d1:f5:6d:2f:e5:
+                    72:de:e2:ae:4d:f7:26:30:57:79:98:c7:ed:48:47:
+                    15:7c:8b:ca:6a:ea:2a:9e:8b:c1:b3:e4:9d:f4:00:
+                    9b:f7:58:ce:47:18:2e:0b:2e:2a:ef:31:bc:2a:b5:
+                    24:4b:77:52:a1:71:c3:3c:3c:fc:af:db:52:7b:0d:
+                    c1:43
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E8:DD:B2:61:D1:FC:02:1F:CD:68:F1:34:9D:6E:55:E7:97:B5:3A:23
+                B4:BC:EB:EE:7C:D8:81:4D:B6:85:05:30:CE:A3:01:50:75:92:75:C4
             X509v3 Authority Key Identifier: 
-                keyid:E8:DD:B2:61:D1:FC:02:1F:CD:68:F1:34:9D:6E:55:E7:97:B5:3A:23
+                keyid:B4:BC:EB:EE:7C:D8:81:4D:B6:85:05:30:CE:A3:01:50:75:92:75:C4
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -324,41 +324,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:1
     Signature Algorithm: sha256WithRSAEncryption
-         a5:51:20:51:70:47:97:be:a8:b8:d8:76:64:ac:f1:47:36:3c:
-         4d:c2:d1:b1:23:81:dc:2e:c0:36:d1:83:97:af:94:c3:46:fd:
-         bb:5e:9b:ca:e2:42:06:bb:ff:d4:68:f0:53:7f:96:43:cb:6f:
-         24:09:53:a0:fb:d2:79:10:0f:f9:f8:3d:04:cb:23:40:50:37:
-         5a:29:67:da:8a:b7:30:5b:62:b2:62:ce:70:43:81:29:c1:79:
-         91:c8:b6:80:76:cf:93:45:70:ee:6b:22:a1:69:29:a6:e3:62:
-         d0:3d:27:67:86:26:dc:71:49:e3:1a:98:05:63:26:d8:e5:80:
-         b7:d9:38:db:1b:97:fc:0b:97:1f:5a:59:24:ea:6c:f6:c2:f6:
-         c1:ee:b8:02:48:1a:23:97:1d:3f:24:45:9c:f4:37:6f:ee:73:
-         1b:bf:d3:c1:ed:a1:50:37:48:28:2f:ee:68:bc:d6:a8:35:a5:
-         1c:00:a1:52:29:b5:a4:2a:79:f4:f9:a0:a5:30:6f:3f:01:ca:
-         47:f0:08:8a:3f:3e:a9:bf:3e:4c:ef:e3:c3:ec:35:c5:5b:f3:
-         58:18:80:be:08:e9:c2:77:a6:17:5c:62:3c:77:fe:a6:69:0e:
-         de:ca:96:dd:ed:13:01:ef:20:85:2f:94:a2:7d:30:df:c5:4d:
-         84:e2:4d:1c
+         01:aa:4a:78:d6:dc:8b:22:9b:45:59:f4:de:57:b8:3e:91:2f:
+         68:f0:33:e9:a2:df:dd:fe:88:6a:76:9f:8e:94:36:fc:53:58:
+         0c:f5:ba:31:9e:50:d7:da:91:dd:61:0c:c2:62:8c:20:00:c7:
+         be:3e:23:6c:79:83:de:80:38:df:d8:66:c6:ef:26:08:5a:ae:
+         5d:ff:82:3f:fe:59:04:60:df:7e:13:d1:48:8e:f4:cf:7d:87:
+         12:28:c9:b4:27:28:1c:f6:58:70:00:cc:31:35:66:58:7c:3b:
+         1e:c4:f9:d0:0f:7d:bd:0f:17:c3:ff:da:06:d6:77:8e:68:77:
+         f7:35:e4:b2:23:88:e9:1f:29:90:a2:10:4e:2b:69:e9:9e:35:
+         2b:36:70:72:b9:1f:7c:2b:b3:2b:9c:87:85:92:4b:5f:d6:c2:
+         98:cf:03:2c:fa:31:c4:99:14:be:88:81:5b:ec:cc:1a:00:79:
+         f0:ba:cc:fe:aa:f5:05:1a:67:ef:ff:cf:d1:ba:32:a1:b5:f5:
+         d8:4b:71:99:52:18:95:65:d4:25:e2:15:d1:26:81:4f:67:9a:
+         07:45:20:1e:68:e5:d2:f0:aa:09:90:cf:e8:e3:87:d0:24:67:
+         b1:08:24:0b:f1:0f:be:c5:0c:50:f1:7c:d8:4f:c4:f0:ee:74:
+         c0:8e:bd:5e
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMq4Nw7TqmV3/Y3lAoku
-YtNQfRsFW/HVXbKUV8LCcKX6ywLgAsDX3hstLbBGLtiOaXtRp89Hz7slHu3tZ7ro
-pfeFWdei+09VACIFhOMxICvg/3Kemd6+Z0hgrIY1OtqFBluSKXzaUBzgNNhegSYY
-ft4HIMJZO0PxvQIp1K4pbrvcvkgsmhUYM4ZvwyYuiEY1zpKxwqaWzCzgYIcfm+Kg
-zn+vUwTYJMvaGco7/gLxEQXnQK8t69/EUx5kWnO1k0JGZHKl2dTgcGX1icMHgxcN
-g6iqabVWVyAbOElyFvugtNlVMgrnHB/sPfx6uYEC2J5XzZcYFm7eNv7SY3Ozim5X
-k6kCAwEAAaOBzjCByzAdBgNVHQ4EFgQU6N2yYdH8Ah/NaPE0nW5V55e1OiMwHwYD
-VR0jBBgwFoAU6N2yYdH8Ah/NaPE0nW5V55e1OiMwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoLk/JEjn4A2Jtt9LxL
+4blfPfytZZxd0LAMlUpp6ZM59Wc0RJzt3kdrh6FfgeP6p9P712bcMqsRowLruX9t
+YMeNjq6oxCJFfyMQx6QwsUZbGtyLFLh26W38DgdA+zaO4KRhcSnIrJkIc/HhelUt
+8ZXKuRfD042sqQqMtJc2jV63AXVgsorlLrwl6Wa1zgfqFFFOw12A3wxLaimYeOXc
+J4t9j/4rS5WYsflVXURVP7mzddvouYUefis+NmXXf9H1bS/lct7irk33JjBXeZjH
+7UhHFXyLymrqKp6LwbPknfQAm/dYzkcYLgsuKu8xvCq1JEt3UqFxwzw8/K/bUnsN
+wUMCAwEAAaOBzjCByzAdBgNVHQ4EFgQUtLzr7nzYgU22hQUwzqMBUHWSdcQwHwYD
+VR0jBBgwFoAUtLzr7nzYgU22hQUwzqMBUHWSdcQwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQClUSBR
-cEeXvqi42HZkrPFHNjxNwtGxI4HcLsA20YOXr5TDRv27XpvK4kIGu//UaPBTf5ZD
-y28kCVOg+9J5EA/5+D0EyyNAUDdaKWfaircwW2KyYs5wQ4EpwXmRyLaAds+TRXDu
-ayKhaSmm42LQPSdnhibccUnjGpgFYybY5YC32TjbG5f8C5cfWlkk6mz2wvbB7rgC
-SBojlx0/JEWc9Ddv7nMbv9PB7aFQN0goL+5ovNaoNaUcAKFSKbWkKnn0+aClMG8/
-AcpH8AiKPz6pvz5M7+PD7DXFW/NYGIC+COnCd6YXXGI8d/6maQ7eypbd7RMB7yCF
-L5SifTDfxU2E4k0c
+AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQABqkp4
+1tyLIptFWfTeV7g+kS9o8DPpot/d/ohqdp+OlDb8U1gM9boxnlDX2pHdYQzCYowg
+AMe+PiNseYPegDjf2GbG7yYIWq5d/4I//lkEYN9+E9FIjvTPfYcSKMm0Jygc9lhw
+AMwxNWZYfDsexPnQD329DxfD/9oG1neOaHf3NeSyI4jpHymQohBOK2npnjUrNnBy
+uR98K7MrnIeFkktf1sKYzwMs+jHEmRS+iIFb7MwaAHnwusz+qvUFGmfv/8/RujKh
+tfXYS3GZUhiVZdQl4hXRJoFPZ5oHRSAeaOXS8KoJkM/o44fQJGexCCQL8Q++xQxQ
+8XzYT8Tw7nTAjr1e
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -371,6 +371,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate2) -----
 ERROR: max_path_length reached
 
diff --git a/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem b/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem
index a9f4c307..e99337a6 100644
--- a/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem
+++ b/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c7:02:89:18:09:bc:9f:9c:9a:41:35:a9:5f:f7:
-                    c2:22:3e:b2:39:fe:ba:57:1d:95:2e:dd:65:23:45:
-                    ce:33:77:99:dd:f1:d7:69:0b:fb:a7:0e:89:98:02:
-                    7a:94:58:7b:61:e6:10:98:69:1a:09:2b:9f:73:3a:
-                    d8:70:18:64:e2:8a:85:87:c5:69:f3:45:1e:70:d8:
-                    c0:5e:23:6c:a6:7d:8f:77:23:8a:5d:74:a0:0b:d5:
-                    7f:a7:dd:f5:21:2d:02:c2:0f:e0:c8:f8:29:20:f5:
-                    5e:33:58:2a:38:c8:41:a6:25:66:ac:cf:c4:03:cb:
-                    03:25:db:e6:65:3d:bd:ab:da:fb:8f:b5:0e:d8:ba:
-                    3d:14:2b:9b:07:62:13:d4:1c:ea:b1:d5:7d:4d:54:
-                    04:c0:13:fb:d1:df:c2:36:e3:00:cf:fa:49:0b:44:
-                    9c:05:80:19:75:02:25:41:3d:e0:e6:cd:87:d8:63:
-                    d7:84:3d:0c:3a:c8:ec:e8:58:22:62:2f:18:e9:ad:
-                    45:ce:b8:a6:63:c2:65:29:69:1e:21:08:8d:3a:da:
-                    96:e0:89:27:09:cc:35:e9:f1:f0:d8:f3:61:c5:05:
-                    3e:b1:d0:00:3c:7e:25:4a:36:e3:1d:b4:95:37:2d:
-                    44:ac:9e:79:38:67:e7:c7:ac:0c:71:d3:d1:60:86:
-                    44:09
+                    00:a5:83:a6:86:f4:e7:3f:71:41:1a:68:61:f0:c7:
+                    b0:df:0c:2d:70:47:fd:dc:d1:60:fe:dd:3c:60:bd:
+                    bb:a0:b0:b3:bf:28:6e:46:df:30:40:73:46:92:6e:
+                    3d:6b:9d:7c:cc:24:f8:62:87:98:3d:f5:94:23:aa:
+                    67:97:e7:24:36:8f:eb:da:fc:a2:4c:4c:07:ff:3c:
+                    26:d6:fa:c6:e4:5e:02:f1:65:f7:d8:80:90:7c:fc:
+                    c2:ff:e7:75:33:76:10:0f:4b:6f:cd:87:ba:df:2b:
+                    75:3f:f2:85:12:d3:67:f5:f0:10:1a:00:d0:b6:cd:
+                    b4:04:93:62:15:0f:3d:4d:0e:2f:fa:35:aa:e5:e5:
+                    d0:78:db:10:74:fa:e6:ea:d9:e2:12:e1:95:1e:09:
+                    18:1f:c3:f4:bb:d2:0f:1e:c1:07:0f:3b:11:fd:6d:
+                    c5:dd:a4:7e:85:82:a9:fd:fb:0f:95:60:ad:12:1d:
+                    78:d1:80:b2:b8:37:da:d4:ab:22:52:b4:b6:d0:67:
+                    6d:8c:62:9d:15:48:99:11:51:e7:b6:7f:f8:c5:83:
+                    4c:c1:49:76:59:4f:f1:8a:40:f7:d3:b2:6e:1e:e7:
+                    97:fe:2a:ca:75:26:91:85:10:ab:71:86:a1:6b:e5:
+                    ad:5e:3a:95:c8:b0:7a:dd:97:ca:5d:b4:65:c1:3e:
+                    fa:75
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C6:CC:7E:B5:7C:7A:51:EC:1C:35:E1:CD:3C:A7:FC:06:31:53:CA:06
+                A1:58:30:09:2D:5A:FE:78:44:6C:F8:12:93:53:52:CF:1F:0B:CC:98
             X509v3 Authority Key Identifier: 
-                keyid:48:BF:34:63:E8:E4:FB:87:49:F2:0E:A0:23:38:D2:BE:6A:3D:45:3C
+                keyid:40:CA:3F:05:69:4A:60:4B:35:9B:F1:C0:57:88:0B:41:0F:BA:92:00
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate2.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         51:8c:f9:c8:cb:cc:14:e3:54:cd:63:1a:f0:1e:0b:a3:6e:60:
-         99:68:06:fe:e6:97:f5:68:e7:d8:7a:e1:b1:78:48:3e:03:57:
-         e4:84:5a:24:08:47:9f:fb:73:1a:7f:76:66:40:5d:ac:2f:f4:
-         f0:9e:b1:21:b0:15:5f:d1:68:4a:b6:fe:84:23:05:51:7d:d3:
-         22:95:81:d0:76:87:29:9c:24:e8:3f:e0:41:a0:bb:57:96:1d:
-         7e:92:2d:22:b3:98:67:4c:87:5e:42:f5:c9:08:fb:b9:05:25:
-         73:b8:f0:9a:45:62:96:c6:48:b6:fe:ac:6c:42:a4:9e:41:aa:
-         fd:55:86:8e:4f:85:9e:b7:26:75:e3:79:28:ed:09:8d:63:35:
-         b5:55:78:13:46:43:17:3d:e8:12:c8:c3:c6:2f:88:f9:ce:b5:
-         df:af:6d:70:6f:6b:f6:1e:ff:1a:44:84:b6:51:7a:b1:7c:4f:
-         b4:7a:19:83:4c:85:b8:d0:e7:65:2e:0e:e2:ed:92:33:c4:f9:
-         cd:35:78:96:d6:8e:06:2c:17:18:0e:bf:be:f0:c5:7f:d3:85:
-         71:62:94:83:d8:1b:51:c4:77:37:d3:6a:fd:43:b4:54:44:fe:
-         f9:da:01:3e:59:d4:7b:a4:26:32:e4:ba:9a:bf:f3:2b:6c:71:
-         d2:1e:2c:c4
+         16:c7:97:e8:62:8d:aa:ed:04:69:41:bb:c3:e1:79:77:19:47:
+         3f:31:60:53:78:51:80:1c:2b:b5:d6:9f:6d:77:3c:06:49:f6:
+         d8:44:66:cc:d6:af:10:6b:55:40:f7:0a:37:e2:58:e9:9c:ec:
+         28:11:f6:31:28:36:1b:09:61:4e:a8:72:7f:c1:0c:06:27:88:
+         70:44:1c:ef:fd:9f:e0:bb:d9:0e:87:55:ed:ba:4a:e8:fe:f7:
+         aa:48:72:d2:33:83:2c:30:3d:57:a5:d5:04:d4:05:3a:ba:28:
+         e1:cb:00:8b:0d:86:29:fa:ab:99:5c:7c:91:72:fe:af:e7:59:
+         ea:eb:9a:34:d2:41:37:5a:f1:b4:f7:83:9a:ed:c8:2a:c4:48:
+         96:58:8b:3b:4c:49:e4:e0:a1:43:d9:5e:97:34:3c:5a:ca:d1:
+         01:12:ad:94:91:59:17:76:99:63:fb:f3:51:06:26:f2:6e:1e:
+         ba:5c:0f:c9:08:e1:1f:46:23:93:27:de:ed:38:8e:e6:e8:af:
+         a2:1b:e4:55:c9:be:eb:b5:f3:aa:8e:db:43:f3:a5:9f:c3:2e:
+         dd:c2:f6:32:a1:32:1c:8e:b4:4b:95:9e:23:fe:c7:fc:49:fd:
+         ce:67:07:1a:15:5a:03:8f:a8:5b:9b:56:ae:41:67:d4:15:75:
+         e3:73:77:83
 -----BEGIN CERTIFICATE-----
 MIIDkDCCAnigAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUyMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowETEPMA0G
-A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxwKJ
-GAm8n5yaQTWpX/fCIj6yOf66Vx2VLt1lI0XOM3eZ3fHXaQv7pw6JmAJ6lFh7YeYQ
-mGkaCSufczrYcBhk4oqFh8Vp80UecNjAXiNspn2PdyOKXXSgC9V/p931IS0Cwg/g
-yPgpIPVeM1gqOMhBpiVmrM/EA8sDJdvmZT29q9r7j7UO2Lo9FCubB2IT1BzqsdV9
-TVQEwBP70d/CNuMAz/pJC0ScBYAZdQIlQT3g5s2H2GPXhD0MOsjs6FgiYi8Y6a1F
-zrimY8JlKWkeIQiNOtqW4IknCcw16fHw2PNhxQU+sdAAPH4lSjbjHbSVNy1ErJ55
-OGfnx6wMcdPRYIZECQIDAQABo4HrMIHoMB0GA1UdDgQWBBTGzH61fHpR7Bw14c08
-p/wGMVPKBjAfBgNVHSMEGDAWgBRIvzRj6OT7h0nyDqAjONK+aj1FPDBABggrBgEF
+A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApYOm
+hvTnP3FBGmhh8Mew3wwtcEf93NFg/t08YL27oLCzvyhuRt8wQHNGkm49a518zCT4
+YoeYPfWUI6pnl+ckNo/r2vyiTEwH/zwm1vrG5F4C8WX32ICQfPzC/+d1M3YQD0tv
+zYe63yt1P/KFEtNn9fAQGgDQts20BJNiFQ89TQ4v+jWq5eXQeNsQdPrm6tniEuGV
+HgkYH8P0u9IPHsEHDzsR/W3F3aR+hYKp/fsPlWCtEh140YCyuDfa1KsiUrS20Gdt
+jGKdFUiZEVHntn/4xYNMwUl2WU/xikD307JuHueX/irKdSaRhRCrcYaha+WtXjqV
+yLB63ZfKXbRlwT76dQIDAQABo4HrMIHoMB0GA1UdDgQWBBShWDAJLVr+eERs+BKT
+U1LPHwvMmDAfBgNVHSMEGDAWgBRAyj8FaUpgSzWb8cBXiAtBD7qSADBABggrBgEF
 BQcBAQQ0MDIwMAYIKwYBBQUHMAKGJGh0dHA6Ly91cmwtZm9yLWFpYS9JbnRlcm1l
 ZGlhdGUyLmNlcjA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vdXJsLWZvci1jcmwv
 SW50ZXJtZWRpYXRlMi5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
-AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAUYz5yMvMFONUzWMa
-8B4Lo25gmWgG/uaX9Wjn2HrhsXhIPgNX5IRaJAhHn/tzGn92ZkBdrC/08J6xIbAV
-X9FoSrb+hCMFUX3TIpWB0HaHKZwk6D/gQaC7V5YdfpItIrOYZ0yHXkL1yQj7uQUl
-c7jwmkVilsZItv6sbEKknkGq/VWGjk+FnrcmdeN5KO0JjWM1tVV4E0ZDFz3oEsjD
-xi+I+c61369tcG9r9h7/GkSEtlF6sXxPtHoZg0yFuNDnZS4O4u2SM8T5zTV4ltaO
-BiwXGA6/vvDFf9OFcWKUg9gbUcR3N9Nq/UO0VET++doBPlnUe6QmMuS6mr/zK2xx
-0h4sxA==
+AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAFseX6GKNqu0EaUG7
+w+F5dxlHPzFgU3hRgBwrtdafbXc8Bkn22ERmzNavEGtVQPcKN+JY6ZzsKBH2MSg2
+GwlhTqhyf8EMBieIcEQc7/2f4LvZDodV7bpK6P73qkhy0jODLDA9V6XVBNQFOroo
+4csAiw2GKfqrmVx8kXL+r+dZ6uuaNNJBN1rxtPeDmu3IKsRIlliLO0xJ5OChQ9le
+lzQ8WsrRARKtlJFZF3aZY/vzUQYm8m4eulwPyQjhH0Yjkyfe7TiO5uivohvkVcm+
+67Xzqo7bQ/Oln8Mu3cL2MqEyHI60S5WeI/7H/En9zmcHGhVaA4+oW5tWrkFn1BV1
+43N3gw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:9b:46:28:e2:70:56:b6:e1:f2:57:56:40:07:c9:
-                    66:0f:15:6f:6a:e9:b6:35:a4:f1:a7:17:4c:86:a4:
-                    8c:b7:74:55:0f:f2:cb:b0:43:11:4a:61:e0:9f:ea:
-                    8a:2b:c2:75:0f:b6:50:49:bc:ad:5c:3f:6c:92:4c:
-                    64:dc:50:2e:4d:66:65:eb:ba:9f:17:b7:d1:7e:ff:
-                    5d:d2:41:1f:9d:37:94:97:e1:f6:22:88:26:e2:8a:
-                    65:0f:0d:16:1d:b1:cc:df:e4:b1:78:87:f0:c6:f5:
-                    f0:21:c9:f6:69:34:64:4c:cd:5b:27:ad:ee:0b:3d:
-                    e3:ee:7a:6b:35:21:23:2b:6d:a4:82:c1:e0:37:f1:
-                    46:3c:16:c4:b9:20:29:16:13:14:26:05:41:c7:1e:
-                    21:e9:57:69:a4:3a:7b:b1:fe:92:c4:72:75:f7:bc:
-                    c0:ef:ba:4a:0c:73:37:c1:48:e2:4d:07:c4:14:da:
-                    ae:26:31:39:06:b8:43:6b:ec:2a:df:c8:db:02:af:
-                    24:9a:f2:af:28:98:1b:f3:0f:0d:57:2c:a5:c5:80:
-                    ef:71:41:9f:99:16:20:d1:e2:f7:1d:59:1d:84:e2:
-                    0b:2d:23:f7:2f:05:9e:51:c3:c9:65:84:ba:db:23:
-                    2e:7e:43:b4:c1:eb:12:63:f4:3c:32:2e:18:dd:4c:
-                    ad:8b
+                    00:b2:66:27:9d:a9:7e:4e:62:69:a3:dd:21:21:37:
+                    34:7d:95:a5:35:8b:c0:18:31:4c:f6:fe:2a:f9:08:
+                    e4:cf:20:97:49:f8:7c:c5:be:35:bb:6c:e9:7e:82:
+                    88:12:13:2d:72:c8:f3:57:8c:3f:4f:b7:98:12:77:
+                    c2:29:5f:cb:11:a5:e7:1c:a1:e1:68:e7:0d:36:ee:
+                    14:b2:e8:85:10:99:a2:a6:b5:37:37:6e:c4:dd:b1:
+                    c1:61:a3:62:6b:60:86:f1:e3:08:34:98:7b:ce:00:
+                    05:4f:67:eb:65:a1:c2:aa:93:1d:d0:57:dd:30:f5:
+                    31:ef:17:1f:27:9f:80:b3:bc:2e:6b:3d:a1:24:0b:
+                    ec:17:01:38:2a:75:5b:d6:d7:d6:7e:b9:6c:96:8f:
+                    12:d8:c6:09:1e:02:8e:a5:44:00:7e:d1:1c:22:20:
+                    4b:15:ab:52:2f:04:d8:36:05:86:44:db:83:9d:6a:
+                    b9:57:0a:e9:a7:07:2f:e0:df:35:af:8d:ce:7e:d6:
+                    52:ef:13:db:aa:95:76:58:de:10:e1:79:35:6a:cd:
+                    bd:c1:5c:da:69:93:57:f0:21:b6:06:0b:9f:d4:6d:
+                    0d:1d:8d:24:ba:b4:fe:5d:61:36:9b:27:ee:f9:3a:
+                    72:d5:fb:e7:d4:96:1e:87:42:b9:14:ad:42:1f:ad:
+                    cf:2b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                48:BF:34:63:E8:E4:FB:87:49:F2:0E:A0:23:38:D2:BE:6A:3D:45:3C
+                40:CA:3F:05:69:4A:60:4B:35:9B:F1:C0:57:88:0B:41:0F:BA:92:00
             X509v3 Authority Key Identifier: 
-                keyid:87:09:94:1A:5F:B2:4B:AE:02:70:24:A9:73:76:78:FD:C0:0E:DC:56
+                keyid:BB:83:13:E6:FB:7E:18:D3:D2:CD:9D:33:9A:67:B7:B5:93:B6:A2:20
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate1.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         be:14:33:c3:9f:0f:7b:fa:15:2f:1d:2c:29:52:bc:27:de:b3:
-         7a:f5:d2:e4:3a:51:38:97:8f:90:b2:ce:5d:50:88:77:5c:e8:
-         ae:35:01:68:13:3a:ca:5b:6c:ab:a2:ac:f0:e0:97:37:6f:ff:
-         15:d2:4a:f7:ff:80:7c:64:c8:6a:11:c1:02:f0:4b:0e:97:24:
-         81:7e:90:a4:38:41:af:8d:0b:eb:0b:24:2b:dc:89:4d:32:d1:
-         0b:b1:7c:67:6e:4f:43:bf:e0:63:9b:e8:f4:42:9c:3b:db:7e:
-         ec:f7:64:82:28:73:8c:a0:2e:73:d2:45:dd:3a:ad:6a:6a:5e:
-         ae:6d:f3:cd:be:4a:95:5c:d0:0d:87:54:b6:83:40:ed:14:e5:
-         d7:9d:23:e2:04:d1:6c:a0:2c:0a:ca:42:57:cc:f7:0b:66:4e:
-         35:ef:e3:93:5f:87:e9:0e:64:c7:52:c9:22:16:61:f9:ec:f7:
-         f0:4a:7a:b8:ef:d6:34:d4:6c:3d:b5:a9:6c:0b:f4:19:a8:9b:
-         04:d5:04:9f:fc:04:fe:60:7a:14:70:6f:38:92:80:be:8a:a6:
-         c4:57:a2:40:5d:bc:06:53:83:6d:f3:5f:f5:22:4a:22:10:a2:
-         82:00:87:35:77:07:f1:34:81:2f:86:0b:1a:3b:8f:3d:88:0c:
-         3a:a0:15:25
+         4a:96:55:c9:c0:d5:21:f4:ac:92:66:ba:83:a9:74:b0:c8:2b:
+         ab:be:3a:7d:85:59:0c:ca:7a:32:e6:64:e0:34:1c:1e:9a:e9:
+         f0:50:3e:ed:16:ca:a4:7a:f8:ef:b6:15:7e:7b:72:68:f1:dd:
+         63:1b:29:de:1c:ee:39:31:f5:7d:e0:7d:44:2c:8d:60:5e:cd:
+         f9:ca:d9:db:cb:b4:e5:d9:1a:e5:64:cb:01:49:20:55:db:42:
+         88:04:67:52:04:26:7d:b6:f9:23:9d:bd:ae:63:24:79:f8:20:
+         99:35:13:d0:db:84:ab:1d:ee:3a:1f:d6:cc:85:de:02:d7:c1:
+         60:c4:4a:6e:6c:a9:bc:a6:a7:e3:58:b5:f5:f1:a6:63:b6:80:
+         82:64:1e:00:38:5c:df:75:39:1d:8b:6a:48:a6:64:4f:20:b8:
+         2f:ed:4f:23:79:a8:3c:3c:ad:ca:33:6d:90:aa:f9:f4:7d:e1:
+         0c:b6:4b:8b:e9:84:4b:60:ea:2b:b1:be:ed:8f:4a:ad:36:f0:
+         cb:b2:1d:cc:e2:0e:75:e3:52:0f:bb:81:ac:7a:f1:8b:bf:4b:
+         29:60:ed:72:46:27:92:93:8e:c5:a1:24:79:34:21:a6:bd:3f:
+         fc:20:76:f4:e0:ba:84:d6:ed:e6:22:a7:03:87:e1:56:b8:7f:
+         b0:dc:b2:7e
 -----BEGIN CERTIFICATE-----
 MIIDiTCCAnGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUxMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQG
 A1UEAwwNSW50ZXJtZWRpYXRlMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAJtGKOJwVrbh8ldWQAfJZg8Vb2rptjWk8acXTIakjLd0VQ/yy7BDEUph4J/q
-iivCdQ+2UEm8rVw/bJJMZNxQLk1mZeu6nxe30X7/XdJBH503lJfh9iKIJuKKZQ8N
-Fh2xzN/ksXiH8Mb18CHJ9mk0ZEzNWyet7gs94+56azUhIyttpILB4DfxRjwWxLkg
-KRYTFCYFQcceIelXaaQ6e7H+ksRydfe8wO+6SgxzN8FI4k0HxBTariYxOQa4Q2vs
-Kt/I2wKvJJryryiYG/MPDVcspcWA73FBn5kWINHi9x1ZHYTiCy0j9y8FnlHDyWWE
-utsjLn5DtMHrEmP0PDIuGN1MrYsCAwEAAaOB3TCB2jAdBgNVHQ4EFgQUSL80Y+jk
-+4dJ8g6gIzjSvmo9RTwwHwYDVR0jBBgwFoAUhwmUGl+yS64CcCSpc3Z4/cAO3FYw
+ggEBALJmJ52pfk5iaaPdISE3NH2VpTWLwBgxTPb+KvkI5M8gl0n4fMW+Nbts6X6C
+iBITLXLI81eMP0+3mBJ3wilfyxGl5xyh4WjnDTbuFLLohRCZoqa1NzduxN2xwWGj
+YmtghvHjCDSYe84ABU9n62WhwqqTHdBX3TD1Me8XHyefgLO8Lms9oSQL7BcBOCp1
+W9bX1n65bJaPEtjGCR4CjqVEAH7RHCIgSxWrUi8E2DYFhkTbg51quVcK6acHL+Df
+Na+Nzn7WUu8T26qVdljeEOF5NWrNvcFc2mmTV/AhtgYLn9RtDR2NJLq0/l1hNpsn
+7vk6ctX759SWHodCuRStQh+tzysCAwEAAaOB3TCB2jAdBgNVHQ4EFgQUQMo/BWlK
+YEs1m/HAV4gLQQ+6kgAwHwYDVR0jBBgwFoAUu4MT5vt+GNPSzZ0zmme3tZO2oiAw
 QAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAChiRodHRwOi8vdXJsLWZvci1haWEv
 SW50ZXJtZWRpYXRlMS5jZXIwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL3VybC1m
 b3ItY3JsL0ludGVybWVkaWF0ZTEuY3JsMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
-Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC+FDPDnw97+hUvHSwpUrwn3rN6
-9dLkOlE4l4+Qss5dUIh3XOiuNQFoEzrKW2yroqzw4Jc3b/8V0kr3/4B8ZMhqEcEC
-8EsOlySBfpCkOEGvjQvrCyQr3IlNMtELsXxnbk9Dv+Bjm+j0Qpw7237s92SCKHOM
-oC5z0kXdOq1qal6ubfPNvkqVXNANh1S2g0DtFOXXnSPiBNFsoCwKykJXzPcLZk41
-7+OTX4fpDmTHUskiFmH57PfwSnq479Y01Gw9talsC/QZqJsE1QSf/AT+YHoUcG84
-koC+iqbEV6JAXbwGU4Nt81/1IkoiEKKCAIc1dwfxNIEvhgsaO489iAw6oBUl
+Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBKllXJwNUh9KySZrqDqXSwyCur
+vjp9hVkMynoy5mTgNBwemunwUD7tFsqkevjvthV+e3Jo8d1jGyneHO45MfV94H1E
+LI1gXs35ytnby7Tl2RrlZMsBSSBV20KIBGdSBCZ9tvkjnb2uYyR5+CCZNRPQ24Sr
+He46H9bMhd4C18FgxEpubKm8pqfjWLX18aZjtoCCZB4AOFzfdTkdi2pIpmRPILgv
+7U8jeag8PK3KM22Qqvn0feEMtkuL6YRLYOorsb7tj0qtNvDLsh3M4g5141IPu4Gs
+evGLv0spYO1yRieSk47FoSR5NCGmvT/8IHb04LqE1u3mIqcDh+FWuH+w3LJ+
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cc:c9:7a:84:dc:8e:0c:4b:60:fc:fb:35:ff:5c:
-                    72:00:1d:25:df:87:50:fa:65:2e:fa:40:a2:c7:9a:
-                    cb:b5:2e:b6:0d:d8:80:6c:54:ef:44:c9:2f:a4:20:
-                    60:07:c7:0a:f9:0f:62:0c:30:9e:ff:9b:3f:a7:35:
-                    6a:ab:a3:56:ca:1b:ea:62:90:0f:ef:e3:29:52:dc:
-                    88:06:a5:65:1f:29:ba:73:11:b5:98:70:dd:88:7f:
-                    83:a6:0b:4c:da:42:92:e6:08:45:da:f4:54:e0:8d:
-                    67:6c:97:0b:fd:8c:13:65:81:6a:1b:49:1b:4e:c7:
-                    de:dc:b5:68:1d:14:57:23:98:33:7b:43:a2:bf:da:
-                    bf:ef:e7:58:43:27:d3:d6:a9:45:d0:8d:e7:d7:48:
-                    b1:dc:f1:00:9b:85:8a:66:3e:20:f3:fc:e1:0f:89:
-                    9f:28:a6:2d:2c:f7:a2:44:e8:47:5a:0a:fa:cd:8e:
-                    40:2a:75:06:6d:ca:38:89:b6:9d:1f:15:d9:42:36:
-                    14:7e:2b:c4:e3:d7:03:a6:cf:4c:cb:34:c0:ce:e9:
-                    ad:05:da:8c:73:91:25:d3:23:3e:70:ab:16:e7:fe:
-                    8b:95:69:f6:4f:98:68:86:04:d6:70:bd:0f:9a:37:
-                    0b:35:b9:ad:18:27:aa:15:b7:08:d0:54:1e:94:af:
-                    ed:f9
+                    00:db:12:25:1e:c2:74:00:10:b7:40:b3:21:09:69:
+                    e4:b3:3b:09:89:40:d6:f6:84:20:b2:b5:6a:3a:c8:
+                    68:dc:b3:3a:a5:0c:2c:11:46:35:cf:dd:b3:83:9d:
+                    93:90:c7:b0:7d:fd:6a:aa:8f:b2:e5:c0:73:25:21:
+                    87:13:1b:da:8b:92:65:3f:62:10:d5:95:42:32:65:
+                    4c:0d:a9:4d:92:fc:95:72:84:bf:cc:6f:3c:dc:02:
+                    ad:28:95:b4:e2:9e:da:0b:2f:30:e2:41:bf:01:b7:
+                    c0:8b:d1:4b:56:ed:19:b8:7b:de:f4:99:00:77:24:
+                    3a:0d:45:7f:ff:0c:75:33:8c:95:e5:76:b8:94:8f:
+                    84:ad:4a:6f:44:46:e7:ee:4b:ee:71:e3:fd:20:9d:
+                    58:90:0f:e9:f0:22:74:36:ca:c4:8f:9a:60:85:12:
+                    99:c2:26:62:29:80:9b:00:d7:ce:ed:98:7a:2d:10:
+                    1f:56:b9:a3:a5:b9:63:c3:9b:1d:84:f7:40:67:eb:
+                    c8:aa:46:04:38:59:95:5b:ab:05:20:3a:88:ad:2e:
+                    d6:f8:61:22:2d:40:df:95:2f:a4:8f:5a:7a:ce:22:
+                    ba:be:d3:76:96:42:0e:5e:a6:1e:ff:02:27:04:48:
+                    b6:c7:29:6d:57:81:3f:69:3a:f0:b3:0b:35:99:94:
+                    95:81
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                87:09:94:1A:5F:B2:4B:AE:02:70:24:A9:73:76:78:FD:C0:0E:DC:56
+                BB:83:13:E6:FB:7E:18:D3:D2:CD:9D:33:9A:67:B7:B5:93:B6:A2:20
             X509v3 Authority Key Identifier: 
-                keyid:0F:0F:6A:FA:74:D2:B6:49:DD:B5:2E:25:97:97:E3:E0:51:F7:1E:2A
+                keyid:B2:3D:DA:18:1E:93:37:FC:A3:B1:31:4C:8E:C2:8C:3C:B7:57:D5:DE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         db:01:1b:5b:f9:4f:9a:03:74:cb:a6:84:16:ab:ba:bb:63:7d:
-         22:94:f5:70:03:dd:6d:fa:53:f2:23:c6:7b:a2:d2:62:96:ba:
-         5a:95:f8:c8:a0:1f:f5:37:01:ce:a5:56:ef:19:5e:da:30:3a:
-         81:ac:13:37:74:dd:5d:1b:b0:4a:cc:c0:b5:8f:d0:ce:6e:06:
-         2b:74:c0:c4:70:fa:3b:90:d1:7b:c3:10:b3:8f:e1:69:42:ec:
-         82:5c:09:ad:5b:0e:8d:4a:18:83:ec:f8:82:dc:e9:d8:5c:fa:
-         cc:f9:c9:6d:cc:b4:db:b0:d8:99:b9:fb:30:d2:28:a0:46:b8:
-         77:fc:c2:12:eb:75:52:20:81:85:da:a6:ed:71:49:db:5c:4f:
-         a5:31:0f:59:c2:73:8d:da:10:be:ec:0c:4a:f8:d4:35:c7:13:
-         5c:eb:f3:c8:42:19:d7:22:07:13:ac:71:46:9f:12:73:9e:0d:
-         2e:c6:75:2d:fc:00:b4:99:13:e4:35:be:7f:7a:2f:2c:7b:44:
-         57:3f:0f:2b:bb:06:25:45:94:2c:2d:af:c0:9f:e2:29:14:61:
-         53:9d:ac:89:d2:04:c6:b9:52:a0:21:70:6f:b1:c0:9c:c9:6d:
-         07:ab:14:d3:d3:49:05:bb:1e:4d:47:b6:62:6d:a2:35:3c:47:
-         3e:32:1c:11
+         30:2b:92:92:fd:bd:5a:2b:5a:15:05:79:b9:f1:a3:ef:bb:bf:
+         56:46:1c:9d:49:15:0d:c4:e8:00:45:38:e0:48:6d:3b:b7:75:
+         fd:e3:1d:df:7c:25:06:07:c4:fe:fc:fb:c3:e5:d2:af:1f:29:
+         89:6f:5e:55:11:90:a2:47:26:b0:61:c8:d8:f0:77:97:3a:a6:
+         74:1b:69:b4:18:c7:59:43:43:da:46:4d:56:28:cf:78:dd:f7:
+         1f:2b:52:04:e8:70:0d:9d:c6:ab:a0:4a:0e:74:57:8b:d9:b7:
+         7e:9e:15:4c:bd:81:64:41:3b:66:88:e4:10:57:a7:2a:8d:21:
+         da:30:ae:3a:c1:d7:82:2b:b6:20:26:d4:32:2e:65:a4:c9:61:
+         84:6e:a5:3b:45:da:8c:b9:3b:b6:76:b1:10:f4:fa:1f:e3:3e:
+         59:7f:91:f6:a9:74:8c:a6:5e:cb:ef:92:5d:2b:ca:93:2a:54:
+         e8:5c:d7:ce:f0:48:72:53:05:80:45:02:fa:b9:fe:f5:1d:a9:
+         a6:cf:04:cf:1e:40:9e:7a:ca:4e:52:42:f3:8f:9d:ae:83:f0:
+         92:1c:74:e0:cc:a2:72:e7:88:94:f0:f0:2f:ae:cc:31:17:58:
+         0f:0f:73:fa:c8:70:46:54:af:04:9a:43:e8:2c:6e:13:68:f8:
+         b6:b9:a5:a5
 -----BEGIN CERTIFICATE-----
 MIIDbjCCAlagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQGA1UEAwwNSW50
-ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMzJeoTc
-jgxLYPz7Nf9ccgAdJd+HUPplLvpAoseay7Uutg3YgGxU70TJL6QgYAfHCvkPYgww
-nv+bP6c1aqujVsob6mKQD+/jKVLciAalZR8punMRtZhw3Yh/g6YLTNpCkuYIRdr0
-VOCNZ2yXC/2ME2WBahtJG07H3ty1aB0UVyOYM3tDor/av+/nWEMn09apRdCN59dI
-sdzxAJuFimY+IPP84Q+JnyimLSz3okToR1oK+s2OQCp1Bm3KOIm2nR8V2UI2FH4r
-xOPXA6bPTMs0wM7prQXajHORJdMjPnCrFuf+i5Vp9k+YaIYE1nC9D5o3CzW5rRgn
-qhW3CNBUHpSv7fkCAwEAAaOByzCByDAdBgNVHQ4EFgQUhwmUGl+yS64CcCSpc3Z4
-/cAO3FYwHwYDVR0jBBgwFoAUDw9q+nTStkndtS4ll5fj4FH3HiowNwYIKwYBBQUH
+ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANsSJR7C
+dAAQt0CzIQlp5LM7CYlA1vaEILK1ajrIaNyzOqUMLBFGNc/ds4Odk5DHsH39aqqP
+suXAcyUhhxMb2ouSZT9iENWVQjJlTA2pTZL8lXKEv8xvPNwCrSiVtOKe2gsvMOJB
+vwG3wIvRS1btGbh73vSZAHckOg1Ff/8MdTOMleV2uJSPhK1Kb0RG5+5L7nHj/SCd
+WJAP6fAidDbKxI+aYIUSmcImYimAmwDXzu2Yei0QH1a5o6W5Y8ObHYT3QGfryKpG
+BDhZlVurBSA6iK0u1vhhIi1A35UvpI9aes4iur7TdpZCDl6mHv8CJwRItscpbVeB
+P2k68LMLNZmUlYECAwEAAaOByzCByDAdBgNVHQ4EFgQUu4MT5vt+GNPSzZ0zmme3
+tZO2oiAwHwYDVR0jBBgwFoAUsj3aGB6TN/yjsTFMjsKMPLdX1d4wNwYIKwYBBQUH
 AQEEKzApMCcGCCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIw
 LAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4G
 A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB
-AQDbARtb+U+aA3TLpoQWq7q7Y30ilPVwA91t+lPyI8Z7otJilrpalfjIoB/1NwHO
-pVbvGV7aMDqBrBM3dN1dG7BKzMC1j9DObgYrdMDEcPo7kNF7wxCzj+FpQuyCXAmt
-Ww6NShiD7PiC3OnYXPrM+cltzLTbsNiZufsw0iigRrh3/MIS63VSIIGF2qbtcUnb
-XE+lMQ9ZwnON2hC+7AxK+NQ1xxNc6/PIQhnXIgcTrHFGnxJzng0uxnUt/AC0mRPk
-Nb5/ei8se0RXPw8ruwYlRZQsLa/An+IpFGFTnayJ0gTGuVKgIXBvscCcyW0HqxTT
-00kFux5NR7ZibaI1PEc+MhwR
+AQAwK5KS/b1aK1oVBXm58aPvu79WRhydSRUNxOgARTjgSG07t3X94x3ffCUGB8T+
+/PvD5dKvHymJb15VEZCiRyawYcjY8HeXOqZ0G2m0GMdZQ0PaRk1WKM943fcfK1IE
+6HANncaroEoOdFeL2bd+nhVMvYFkQTtmiOQQV6cqjSHaMK46wdeCK7YgJtQyLmWk
+yWGEbqU7RdqMuTu2drEQ9Pof4z5Zf5H2qXSMpl7L75JdK8qTKlToXNfO8EhyUwWA
+RQL6uf71HammzwTPHkCeespOUkLzj52ug/CSHHTgzKJy54iU8PAvrswxF1gPD3P6
+yHBGVK8EmkPoLG4TaPi2uaWl
 -----END CERTIFICATE-----
 
 Certificate:
@@ -286,30 +286,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:f1:6d:df:8a:62:88:18:33:0e:b6:95:4d:a7:53:
-                    82:ad:ec:81:5e:c7:e1:d8:b9:38:a5:eb:3f:8e:d8:
-                    97:bb:ed:29:77:b2:d6:ac:34:96:a0:cd:a2:33:d8:
-                    88:49:88:6b:ce:aa:91:02:b9:33:51:52:d5:e7:b6:
-                    ef:55:d3:d6:6a:f3:3f:87:d9:1b:60:b2:e3:b3:78:
-                    be:e2:8c:b4:30:f3:60:75:eb:30:c5:71:51:49:90:
-                    b9:99:5c:2c:78:9e:72:0d:02:3f:16:bb:6d:f7:f7:
-                    9e:07:d2:b4:47:85:ea:b0:92:3e:b6:8a:41:71:6a:
-                    4c:f6:ba:6d:60:4f:7c:29:b3:82:1d:04:07:76:32:
-                    bc:25:38:2c:e4:be:29:2d:80:c3:20:62:a3:65:31:
-                    f2:14:93:2d:92:9d:54:8b:96:4e:4d:df:4e:f7:80:
-                    b2:e7:88:fd:06:32:30:3e:64:9d:e4:96:e0:0e:3a:
-                    ea:c3:4f:ca:df:4a:46:22:1f:df:92:bd:24:82:59:
-                    20:36:95:62:82:92:2e:d9:d7:a7:93:1e:a7:75:fb:
-                    a9:22:a6:98:4d:e6:f2:b4:12:d0:76:0c:b8:a2:fc:
-                    c3:5e:e7:df:fb:c0:b5:90:5b:a8:1a:1d:33:ae:ab:
-                    e3:25:3d:87:b5:58:c6:bc:e4:fa:db:e9:50:67:3f:
-                    ad:ad
+                    00:a2:6b:26:e4:40:38:b0:6e:2a:70:34:7b:4a:b1:
+                    09:16:cb:fb:b2:35:ba:cf:71:2a:55:c7:8c:cf:77:
+                    6e:23:05:2b:dd:cf:a6:bb:93:e7:f1:a6:47:9e:fe:
+                    9f:40:da:97:de:1a:a0:82:96:25:18:6d:f4:d9:21:
+                    73:b3:14:e2:16:c8:75:7f:be:fb:c8:0d:b5:96:12:
+                    cc:e0:6f:0e:e3:5a:95:ce:57:f1:4b:39:2e:a0:2f:
+                    a0:04:80:6b:26:25:0e:4d:01:61:d6:a6:98:ba:f3:
+                    85:e1:77:94:a8:8a:b7:19:7a:a8:c1:c4:21:ce:fd:
+                    6a:a4:6d:f7:86:b2:4f:05:4a:34:51:7a:67:dc:cc:
+                    f2:14:2a:45:a4:54:ff:e7:a1:39:47:7e:ba:65:a8:
+                    28:79:bb:19:20:ba:54:93:81:42:c5:71:43:12:7d:
+                    6a:46:db:3a:d0:8e:b9:b2:46:91:32:1f:99:83:da:
+                    2d:c4:ef:69:3e:0b:11:a5:ba:8d:b3:dd:be:3c:ce:
+                    0c:da:06:d9:9a:a6:27:57:5e:e6:ea:db:89:ea:f6:
+                    38:af:a4:9c:41:1c:84:9f:08:1b:2e:5a:7d:46:83:
+                    f6:74:f0:5a:0c:d1:02:6d:0c:65:1a:8f:a1:3c:a9:
+                    19:92:2f:fc:45:92:b4:c4:97:e8:cb:71:95:72:d3:
+                    aa:2d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0F:0F:6A:FA:74:D2:B6:49:DD:B5:2E:25:97:97:E3:E0:51:F7:1E:2A
+                B2:3D:DA:18:1E:93:37:FC:A3:B1:31:4C:8E:C2:8C:3C:B7:57:D5:DE
             X509v3 Authority Key Identifier: 
-                keyid:0F:0F:6A:FA:74:D2:B6:49:DD:B5:2E:25:97:97:E3:E0:51:F7:1E:2A
+                keyid:B2:3D:DA:18:1E:93:37:FC:A3:B1:31:4C:8E:C2:8C:3C:B7:57:D5:DE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -324,41 +324,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:1
     Signature Algorithm: sha256WithRSAEncryption
-         38:cf:2c:95:d8:1b:14:a6:43:13:ed:9b:a2:9f:54:eb:33:64:
-         2b:a6:c0:04:81:23:52:27:f1:17:12:a1:9a:f0:d2:77:dd:06:
-         95:90:a5:bb:be:e1:98:f7:f0:11:a3:fc:71:80:c7:d0:72:f3:
-         d4:dc:3f:36:51:52:66:5f:92:a8:fa:ca:4f:8f:8f:2a:3d:93:
-         12:8a:4f:94:69:99:6f:60:0b:86:81:91:00:98:cd:00:37:a7:
-         c7:60:e9:f4:07:85:5b:db:35:9b:61:bb:b6:aa:ca:a2:af:1c:
-         a4:e2:f8:0d:2b:84:2a:9f:7f:53:b6:25:31:ff:31:b8:e6:03:
-         3c:f3:a1:5c:1a:51:4b:3e:d6:82:c9:24:d2:e8:3c:06:6b:b7:
-         f9:f5:77:55:67:fd:75:93:1a:d4:07:5d:6c:7c:6a:ed:12:9c:
-         b5:d6:f2:df:0c:39:a9:05:b9:11:b9:ca:21:31:26:5c:63:ac:
-         c3:bb:a7:e7:87:82:80:10:3a:32:fb:3a:9a:a8:0d:cf:af:94:
-         a4:a2:8a:0e:1c:1d:89:05:82:53:b6:86:1d:80:b4:00:de:31:
-         f1:20:4e:77:65:16:28:70:95:78:6b:d3:2e:e5:30:40:32:d2:
-         f6:b6:5c:30:de:07:70:5f:87:6b:51:31:85:4b:cf:8c:d9:0e:
-         01:9a:12:6c
+         5d:99:4c:1c:89:4d:3b:8a:05:20:3f:73:69:a1:6c:a2:db:89:
+         9e:f7:0d:96:e6:36:fd:17:b0:9c:ad:3d:4a:8a:6b:3f:45:7b:
+         0a:13:67:67:97:cf:a2:25:87:ed:4f:e7:4a:68:e6:a0:83:82:
+         c6:c0:bd:74:65:30:ef:e0:33:3d:78:bd:2c:8c:67:90:8a:06:
+         56:b8:f2:e1:d2:4d:2a:92:37:14:47:b9:23:0d:bc:72:77:e3:
+         d4:fe:6c:fb:f7:0d:f3:eb:4f:32:53:d6:0a:8d:af:56:cf:b3:
+         2c:a5:ac:e9:42:8e:93:e7:7d:52:02:a4:95:bd:ae:8a:cb:8f:
+         d6:d6:03:82:a7:fd:d2:aa:be:ca:2f:ca:4e:fe:87:65:a5:a4:
+         c3:13:04:89:72:22:21:2f:28:7d:37:1d:13:76:d8:bb:ed:f0:
+         86:e6:0a:8e:37:79:7b:d1:1f:b8:de:76:e6:a1:bf:d4:72:c2:
+         d4:85:70:23:03:53:bb:f9:92:ee:ee:e5:39:16:78:d4:79:ea:
+         85:5e:b0:42:ab:74:2b:7a:f8:45:89:e4:5f:b6:4b:05:4b:f9:
+         72:ce:e1:63:10:7b:7d:8d:c4:0e:a5:ca:3f:7a:53:19:63:da:
+         32:d8:5b:c6:c1:ff:71:01:60:65:a9:95:06:af:85:4e:01:bb:
+         37:1d:b4:2f
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPFt34piiBgzDraVTadT
-gq3sgV7H4di5OKXrP47Yl7vtKXey1qw0lqDNojPYiEmIa86qkQK5M1FS1ee271XT
-1mrzP4fZG2Cy47N4vuKMtDDzYHXrMMVxUUmQuZlcLHiecg0CPxa7bff3ngfStEeF
-6rCSPraKQXFqTPa6bWBPfCmzgh0EB3YyvCU4LOS+KS2AwyBio2Ux8hSTLZKdVIuW
-Tk3fTveAsueI/QYyMD5kneSW4A466sNPyt9KRiIf35K9JIJZIDaVYoKSLtnXp5Me
-p3X7qSKmmE3m8rQS0HYMuKL8w17n3/vAtZBbqBodM66r4yU9h7VYxrzk+tvpUGc/
-ra0CAwEAAaOBzjCByzAdBgNVHQ4EFgQUDw9q+nTStkndtS4ll5fj4FH3HiowHwYD
-VR0jBBgwFoAUDw9q+nTStkndtS4ll5fj4FH3HiowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKJrJuRAOLBuKnA0e0qx
+CRbL+7I1us9xKlXHjM93biMFK93PpruT5/GmR57+n0Dal94aoIKWJRht9Nkhc7MU
+4hbIdX+++8gNtZYSzOBvDuNalc5X8Us5LqAvoASAayYlDk0BYdammLrzheF3lKiK
+txl6qMHEIc79aqRt94ayTwVKNFF6Z9zM8hQqRaRU/+ehOUd+umWoKHm7GSC6VJOB
+QsVxQxJ9akbbOtCOubJGkTIfmYPaLcTvaT4LEaW6jbPdvjzODNoG2ZqmJ1de5urb
+ier2OK+knEEchJ8IGy5afUaD9nTwWgzRAm0MZRqPoTypGZIv/EWStMSX6MtxlXLT
+qi0CAwEAAaOBzjCByzAdBgNVHQ4EFgQUsj3aGB6TN/yjsTFMjsKMPLdX1d4wHwYD
+VR0jBBgwFoAUsj3aGB6TN/yjsTFMjsKMPLdX1d4wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQA4zyyV
-2BsUpkMT7Zuin1TrM2QrpsAEgSNSJ/EXEqGa8NJ33QaVkKW7vuGY9/ARo/xxgMfQ
-cvPU3D82UVJmX5Ko+spPj48qPZMSik+UaZlvYAuGgZEAmM0AN6fHYOn0B4Vb2zWb
-Ybu2qsqirxyk4vgNK4Qqn39TtiUx/zG45gM886FcGlFLPtaCySTS6DwGa7f59XdV
-Z/11kxrUB11sfGrtEpy11vLfDDmpBbkRucohMSZcY6zDu6fnh4KAEDoy+zqaqA3P
-r5SkoooOHB2JBYJTtoYdgLQA3jHxIE53ZRYocJV4a9Mu5TBAMtL2tlww3gdwX4dr
-UTGFS8+M2Q4BmhJs
+AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQBdmUwc
+iU07igUgP3NpoWyi24me9w2W5jb9F7CcrT1Kims/RXsKE2dnl8+iJYftT+dKaOag
+g4LGwL10ZTDv4DM9eL0sjGeQigZWuPLh0k0qkjcUR7kjDbxyd+PU/mz79w3z608y
+U9YKja9Wz7MspazpQo6T531SAqSVva6Ky4/W1gOCp/3Sqr7KL8pO/odlpaTDEwSJ
+ciIhLyh9Nx0Tdti77fCG5gqON3l70R+43nbmob/UcsLUhXAjA1O7+ZLu7uU5FnjU
+eeqFXrBCq3QrevhFieRftksFS/lyzuFjEHt9jcQOpco/elMZY9oy2FvGwf9xAWBl
+qZUGr4VOAbs3HbQv
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -370,3 +370,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc
index 2e222f98..022e746 100644
--- a/net/http/http_network_session.cc
+++ b/net/http/http_network_session.cc
@@ -126,6 +126,7 @@
       enable_http2_alternative_service_with_different_host(false),
       enable_quic_alternative_service_with_different_host(true),
       enable_quic(false),
+      mark_quic_broken_when_network_blackholes(false),
       quic_always_require_handshake_confirmation(false),
       quic_disable_connection_pooling(false),
       quic_load_server_info_timeout_srtt_multiplier(0.25f),
@@ -209,6 +210,7 @@
           params.quic_delay_tcp_race,
           params.quic_max_server_configs_stored_in_properties,
           params.quic_close_sessions_on_ip_change,
+          params.mark_quic_broken_when_network_blackholes,
           params.quic_idle_connection_timeout_seconds,
           params.quic_reduced_ping_timeout_seconds,
           params.quic_packet_reader_yield_after_duration_milliseconds,
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h
index 67329fd2..ca0a761f 100644
--- a/net/http/http_network_session.h
+++ b/net/http/http_network_session.h
@@ -119,6 +119,9 @@
 
     // Enables QUIC support.
     bool enable_quic;
+    // Marks a QUIC server broken when a connection blackholes after the
+    // handshake is confirmed.
+    bool mark_quic_broken_when_network_blackholes;
     // Disables QUIC's 0-RTT behavior.
     bool quic_always_require_handshake_confirmation;
     // Disables QUIC connection pooling.
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index 19a70d9..4a669e2 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -1548,6 +1548,13 @@
         error = OK;
       }
       break;
+    case ERR_QUIC_BROKEN_ERROR:
+      DCHECK(GetResponseHeaders() == nullptr);
+      net_log_.AddEventWithNetErrorCode(
+          NetLogEventType::HTTP_TRANSACTION_RESTART_AFTER_ERROR, error);
+      ResetConnectionAndRequestForResend();
+      error = OK;
+      break;
     case ERR_SPDY_PING_FAILED:
     case ERR_SPDY_SERVER_REFUSED_STREAM:
     case ERR_QUIC_HANDSHAKE_FAILED:
diff --git a/net/http/http_server_properties.h b/net/http/http_server_properties.h
index 6b86ffc..eef795be 100644
--- a/net/http/http_server_properties.h
+++ b/net/http/http_server_properties.h
@@ -59,6 +59,7 @@
   BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_STREAM_FACTORY = 1,
   BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_ALT = 2,
   BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_MAIN = 3,
+  BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_HTTP_STREAM = 4,
   BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX,
 };
 
diff --git a/net/log/net_log_event_type_list.h b/net/log/net_log_event_type_list.h
index 5e8fe84a..c73eefa 100644
--- a/net/log/net_log_event_type_list.h
+++ b/net/log/net_log_event_type_list.h
@@ -1094,6 +1094,15 @@
 //   }
 EVENT_TYPE(HTTP_STREAM_REQUEST_BOUND_TO_JOB)
 
+// Identifies the NetLogSource() for the QuicStreamFactory::Job that the
+// HttpStreamFactoryImpl::Job was attached to.
+// The event parameters are:
+//  {
+//      "source_dependency": <Source identifier for the QuicStreamFactory::Job
+//                            to which we were attached>,
+//  }
+EVENT_TYPE(HTTP_STREAM_JOB_BOUND_TO_QUIC_STREAM_FACTORY_JOB)
+
 // Identifies the NetLogSource() for the Request that the Job was attached to.
 // The event parameters are:
 //   {
@@ -1632,6 +1641,27 @@
 //   }
 
 // ------------------------------------------------------------------------
+// QuicStreamFactory::Job
+// ------------------------------------------------------------------------
+
+// Measures the time taken to execute the QuicStreamFactory::Job.
+// The event parameters are:
+//   {
+//     "server_id": <The QuicServerId that the Job serves>,
+//   }
+EVENT_TYPE(QUIC_STREAM_FACTORY_JOB)
+
+// Identifies the NetLogSource() for the HttpStreamFactoryImpl::Job that the
+// Job was attached to.
+// The event parameters are:
+//  {
+//     "source_dependency": <Source identifier for the
+//                           HttpStreamFactoryImpl::Job to which we were
+//                           attached>,
+//  }
+EVENT_TYPE(QUIC_STREAM_FACTORY_JOB_BOUND_TO_HTTP_STREAM_JOB)
+
+// ------------------------------------------------------------------------
 // QuicSession
 // ------------------------------------------------------------------------
 
diff --git a/net/log/net_log_source_type_list.h b/net/log/net_log_source_type_list.h
index 120245d..47b5b97 100644
--- a/net/log/net_log_source_type_list.h
+++ b/net/log/net_log_source_type_list.h
@@ -40,3 +40,4 @@
 SOURCE_TYPE(HTTP_STREAM_JOB_CONTROLLER)
 SOURCE_TYPE(CT_TREE_STATE_TRACKER)
 SOURCE_TYPE(SERVER_PUSH_LOOKUP_TRANSACTION)
+SOURCE_TYPE(QUIC_STREAM_FACTORY_JOB)
diff --git a/net/quic/chromium/quic_chromium_client_session.cc b/net/quic/chromium/quic_chromium_client_session.cc
index f58bd05..ba6c37c 100644
--- a/net/quic/chromium/quic_chromium_client_session.cc
+++ b/net/quic/chromium/quic_chromium_client_session.cc
@@ -962,10 +962,6 @@
     UMA_HISTOGRAM_COUNTS(
         "Net.QuicSession.ConnectionClose.NumOpenStreams.TimedOut",
         GetNumOpenOutgoingStreams());
-    // Notify the factory the connection timed out with open streams.
-    if (GetNumOpenOutgoingStreams() > 0 && stream_factory_) {
-      stream_factory_->OnTimeoutWithOpenStreams();
-    }
     if (IsCryptoHandshakeConfirmed()) {
       if (GetNumOpenOutgoingStreams() > 0) {
         UMA_HISTOGRAM_BOOLEAN(
@@ -991,7 +987,18 @@
     }
   }
 
-  if (!IsCryptoHandshakeConfirmed()) {
+  if (IsCryptoHandshakeConfirmed()) {
+    // QUIC connections should not timeout while there are open streams,
+    // since PING frames are sent to prevent timeouts. If, however, the
+    // connection timed out with open streams then QUIC traffic has become
+    // blackholed. Alternatively, if too many retransmission timeouts occur
+    // then QUIC traffic has become blackholed.
+    if (stream_factory_ &&
+        (error == QUIC_TOO_MANY_RTOS || (error == QUIC_NETWORK_IDLE_TIMEOUT &&
+                                         GetNumOpenOutgoingStreams() > 0))) {
+      stream_factory_->OnBlackholeAfterHandshakeConfirmed(this);
+    }
+  } else {
     if (error == QUIC_PUBLIC_RESET) {
       RecordHandshakeFailureReason(HANDSHAKE_FAILURE_PUBLIC_RESET);
     } else if (connection()->GetStats().packets_received == 0) {
diff --git a/net/quic/chromium/quic_http_stream.cc b/net/quic/chromium/quic_http_stream.cc
index 4debbec0..f52e00e 100644
--- a/net/quic/chromium/quic_http_stream.cc
+++ b/net/quic/chromium/quic_http_stream.cc
@@ -50,6 +50,7 @@
     : MultiplexedHttpStream(MultiplexedSessionHandle(session)),
       next_state_(STATE_NONE),
       session_(session),
+      server_id_(session->server_id()),
       http_server_properties_(http_server_properties),
       quic_version_(session->GetQuicVersion()),
       session_error_(ERR_UNEXPECTED),
@@ -322,7 +323,6 @@
 
   if (stream_ == nullptr)
     return GetResponseStatus();
-
   // Check if we already have the response headers. If so, return synchronously.
   if (response_headers_received_)
     return OK;
@@ -364,6 +364,7 @@
 }
 
 void QuicHttpStream::Close(bool /*not_reusable*/) {
+  session_error_ = ERR_ABORTED;
   SaveResponseStatus();
   // Note: the not_reusable flag has no meaning for QUIC streams.
   if (stream_) {
@@ -859,8 +860,8 @@
 int QuicHttpStream::ComputeResponseStatus() const {
   DCHECK(!has_response_status_);
 
-  // If the handshake has failed this will be handled by the
-  // QuicStreamFactory and HttpStreamFactory to mark QUIC as broken.
+  // If the handshake has failed this will be handled by the QuicStreamFactory
+  // and HttpStreamFactory to mark QUIC as broken if TCP is actually working.
   if (!was_handshake_confirmed_)
     return ERR_QUIC_HANDSHAKE_FAILED;
 
@@ -874,6 +875,23 @@
   if (!response_info_)
     return ERR_CONNECTION_CLOSED;
 
+  // Explicit stream error are always fatal.
+  if (quic_stream_error_ != QUIC_STREAM_NO_ERROR &&
+      quic_stream_error_ != QUIC_STREAM_CONNECTION_ERROR) {
+    return ERR_QUIC_PROTOCOL_ERROR;
+  }
+
+  DCHECK_NE(QUIC_HANDSHAKE_TIMEOUT, quic_connection_error_);
+
+  // If the headers have not been received and QUIC is now broken, return
+  // ERR_QUIC_BROKEN_ERROR to permit HttpNetworkTransaction to retry the request
+  // over TCP.
+  if (!response_headers_received_ &&
+      http_server_properties_->IsAlternativeServiceBroken(AlternativeService(
+          kProtoQUIC, server_id_.host(), server_id_.port()))) {
+    return ERR_QUIC_BROKEN_ERROR;
+  }
+
   return ERR_QUIC_PROTOCOL_ERROR;
 }
 
diff --git a/net/quic/chromium/quic_http_stream.h b/net/quic/chromium/quic_http_stream.h
index 2ca5bbc..01d83955 100644
--- a/net/quic/chromium/quic_http_stream.h
+++ b/net/quic/chromium/quic_http_stream.h
@@ -150,8 +150,9 @@
   State next_state_;
 
   base::WeakPtr<QuicChromiumClientSession> session_;
+  const QuicServerId server_id_;  // The ID of the QUIC server for this stream.
 
-  HttpServerProperties* http_server_properties_;
+  HttpServerProperties* http_server_properties_;  // Unowned.
 
   QuicVersion quic_version_;
   int session_error_;             // Error code from the connection shutdown.
diff --git a/net/quic/chromium/quic_network_transaction_unittest.cc b/net/quic/chromium/quic_network_transaction_unittest.cc
index b346728a6..61edf02 100644
--- a/net/quic/chromium/quic_network_transaction_unittest.cc
+++ b/net/quic/chromium/quic_network_transaction_unittest.cc
@@ -41,8 +41,11 @@
 #include "net/quic/chromium/mock_crypto_client_stream_factory.h"
 #include "net/quic/chromium/mock_network_change_notifier.h"
 #include "net/quic/chromium/mock_quic_data.h"
+#include "net/quic/chromium/quic_chromium_alarm_factory.h"
 #include "net/quic/chromium/quic_http_utils.h"
+#include "net/quic/chromium/quic_stream_factory_peer.h"
 #include "net/quic/chromium/quic_test_packet_maker.h"
+#include "net/quic/chromium/test_task_runner.h"
 #include "net/quic/core/crypto/quic_decrypter.h"
 #include "net/quic/core/crypto/quic_encrypter.h"
 #include "net/quic/core/quic_framer.h"
@@ -293,6 +296,16 @@
   }
 
   std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket(
+      QuicPacketNumber packet_number,
+      QuicPacketNumber largest_received,
+      QuicPacketNumber least_unacked,
+      QuicTime::Delta ack_delay_time) {
+    return client_maker_.MakeAckPacket(packet_number, largest_received,
+                                       least_unacked, least_unacked, true,
+                                       ack_delay_time);
+  }
+
+  std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket(
       QuicPacketNumber largest_received,
       QuicPacketNumber least_unacked) {
     return client_maker_.MakeAckPacket(2, largest_received, least_unacked,
@@ -649,6 +662,8 @@
         http_server_properties_.GetAlternativeServices(server);
     EXPECT_EQ(1u, alternative_service_vector.size());
     EXPECT_EQ(kProtoQUIC, alternative_service_vector[0].protocol);
+    EXPECT_FALSE(http_server_properties_.IsAlternativeServiceBroken(
+        alternative_service_vector[0]));
   }
 
   void AddHangingNonAlternateProtocolSocketData() {
@@ -1427,6 +1442,768 @@
   EXPECT_TRUE(details.quic_port_migration_detected);
 }
 
+// Verify that if a QUIC connection times out, the QuicHttpStream will
+// return QUIC_PROTOCOL_ERROR.
+TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmed) {
+  params_.quic_idle_connection_timeout_seconds = 5;
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      4, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      6, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      10, kHeadersStreamId, true, false, settings_offset, settings_data));
+
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+
+  ExpectQuicAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+  EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR));
+}
+
+// Verify that if a QUIC connection RTOs, the QuicHttpStream will
+// return QUIC_PROTOCOL_ERROR.
+TEST_P(QuicNetworkTransactionTest, TooManyRtosAfterHandshakeConfirmed) {
+  params_.quic_connection_options.push_back(k5RTO);
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      4, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      6, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      10, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 4
+  quic_data.AddWrite(client_maker_.MakeDataPacket(11, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      12, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 5
+  quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket(
+      13, true, QuicTime::Delta::Infinite(), 0, 1, QUIC_TOO_MANY_RTOS,
+      "5 consecutive retransmission timeouts"));
+
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+
+  ExpectQuicAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+  EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR));
+}
+
+// Verify that if a QUIC connection RTOs, while there are no active streams
+// QUIC will not be marked as broken.
+TEST_P(QuicNetworkTransactionTest,
+       TooManyRtosAfterHandshakeConfirmedAndStreamReset) {
+  params_.quic_connection_options.push_back(k5RTO);
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+
+  quic_data.AddWrite(client_maker_.MakeRstPacket(3, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      5, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeRstPacket(6, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  quic_data.AddWrite(client_maker_.MakeRstPacket(9, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      11, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 4
+  quic_data.AddWrite(client_maker_.MakeRstPacket(12, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // RTO 5
+  quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket(
+      14, true, QuicTime::Delta::Infinite(), 0, 1, QUIC_TOO_MANY_RTOS,
+      "5 consecutive retransmission timeouts"));
+
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  auto trans = base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY,
+                                                        session_.get());
+  TestCompletionCallback callback;
+  int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Now cancel the request.
+  trans.reset();
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+
+  ExpectQuicAlternateProtocolMapping();
+
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
+// Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC
+// connection times out, then QUIC will be marked as broken and the request
+// retried over TCP.
+TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmedThenBroken) {
+  params_.mark_quic_broken_when_network_blackholes = true;
+  params_.quic_idle_connection_timeout_seconds = 5;
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      4, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      6, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      10, kHeadersStreamId, true, false, settings_offset, settings_data));
+
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // After that fails, it will be resent via TCP.
+  MockWrite http_writes[] = {
+      MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
+      MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
+      MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")};
+
+  MockRead http_reads[] = {
+      MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
+      MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader),
+      MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
+  SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes,
+                                arraysize(http_writes));
+  socket_factory_.AddSocketDataProvider(&http_data);
+  socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+
+  // Let the transaction proceed which will result in QUIC being marked
+  // as broken and the request falling back to TCP.
+  EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+  ExpectBrokenAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+  ASSERT_FALSE(http_data.AllReadDataConsumed());
+
+  // Read the response body over TCP.
+  CheckResponseData(&trans, "hello world");
+  ASSERT_TRUE(http_data.AllWriteDataConsumed());
+  ASSERT_TRUE(http_data.AllReadDataConsumed());
+}
+
+// Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC
+// connection times out, then QUIC will be marked as broken but the request
+// will not be retried over TCP.
+TEST_P(QuicNetworkTransactionTest,
+       TimeoutAfterHandshakeConfirmedAndHeadersThenBrokenNotRetried) {
+  params_.mark_quic_broken_when_network_blackholes = true;
+  params_.quic_idle_connection_timeout_seconds = 5;
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+
+  quic_data.AddRead(ConstructServerResponseHeadersPacket(
+      1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
+  // quic_data.AddWrite(ConstructClientAckPacket(3, 1, 1));
+  quic_data.AddWrite(
+      ConstructClientAckPacket(3, 1, 1, QuicTime::Delta::FromMilliseconds(25)));
+
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, false,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      5, kHeadersStreamId, false, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(6, kHeadersStreamId, false,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      7, kHeadersStreamId, false, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(8, kHeadersStreamId, false,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      9, kHeadersStreamId, false, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, false,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      11, kHeadersStreamId, false, false, settings_offset, settings_data));
+
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+
+  // Let the transaction proceed which will result in QUIC being marked
+  // as broken and the request falling back to TCP.
+  EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+  ExpectBrokenAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+
+  std::string response_data;
+  ASSERT_THAT(ReadTransaction(&trans, &response_data),
+              IsError(ERR_QUIC_PROTOCOL_ERROR));
+}
+
+// Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC
+// connection RTOs, then QUIC will be marked as broken and the request retried
+// over TCP.
+TEST_P(QuicNetworkTransactionTest,
+       TooManyRtosAfterHandshakeConfirmedThenBroken) {
+  params_.mark_quic_broken_when_network_blackholes = true;
+  params_.quic_connection_options.push_back(k5RTO);
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      4, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      6, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      10, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 4
+  quic_data.AddWrite(client_maker_.MakeDataPacket(11, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      12, kHeadersStreamId, true, false, settings_offset, settings_data));
+
+  quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket(
+      13, true, QuicTime::Delta::Infinite(), 0, 1, QUIC_TOO_MANY_RTOS,
+      "5 consecutive retransmission timeouts"));
+
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // After that fails, it will be resent via TCP.
+  MockWrite http_writes[] = {
+      MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
+      MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
+      MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")};
+
+  MockRead http_reads[] = {
+      MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
+      MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader),
+      MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
+  SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes,
+                                arraysize(http_writes));
+  socket_factory_.AddSocketDataProvider(&http_data);
+  socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+
+  // Let the transaction proceed which will result in QUIC being marked
+  // as broken and the request falling back to TCP.
+  EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+  ExpectBrokenAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+  ASSERT_FALSE(http_data.AllReadDataConsumed());
+
+  // Read the response body over TCP.
+  CheckResponseData(&trans, "hello world");
+  ASSERT_TRUE(http_data.AllWriteDataConsumed());
+  ASSERT_TRUE(http_data.AllReadDataConsumed());
+}
+
+// Verify that if a QUIC connection RTOs, while there are no active streams
+// QUIC will be marked as broken.
+TEST_P(QuicNetworkTransactionTest,
+       TooManyRtosAfterHandshakeConfirmedAndStreamResetThenBroken) {
+  params_.mark_quic_broken_when_network_blackholes = true;
+  params_.quic_connection_options.push_back(k5RTO);
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+
+  quic_data.AddWrite(client_maker_.MakeRstPacket(3, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      5, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeRstPacket(6, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  quic_data.AddWrite(client_maker_.MakeRstPacket(9, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      11, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 4
+  quic_data.AddWrite(client_maker_.MakeRstPacket(12, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // RTO 5
+  quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket(
+      14, true, QuicTime::Delta::Infinite(), 0, 1, QUIC_TOO_MANY_RTOS,
+      "5 consecutive retransmission timeouts"));
+
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  auto trans = base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY,
+                                                        session_.get());
+  TestCompletionCallback callback;
+  int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Now cancel the request.
+  trans.reset();
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+
+  ExpectBrokenAlternateProtocolMapping();
+
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
 TEST_P(QuicNetworkTransactionTest,
        DoNotUseAlternativeServiceQuicUnsupportedVersion) {
   std::string altsvc_header = base::StringPrintf(
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc
index 0f855f0a..4c5cb3e 100644
--- a/net/quic/chromium/quic_stream_factory.cc
+++ b/net/quic/chromium/quic_stream_factory.cc
@@ -92,6 +92,14 @@
 // Set the maximum number of undecryptable packets the connection will store.
 const int32_t kMaxUndecryptablePackets = 100;
 
+std::unique_ptr<base::Value> NetLogQuicStreamFactoryJobCallback(
+    const QuicServerId* server_id,
+    NetLogCaptureMode capture_mode) {
+  std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
+  dict->SetString("server_id", server_id->ToString());
+  return std::move(dict);
+}
+
 std::unique_ptr<base::Value> NetLogQuicConnectionMigrationTriggerCallback(
     std::string trigger,
     NetLogCaptureMode capture_mode) {
@@ -386,12 +394,26 @@
           was_alternative_service_recently_broken),
       server_info_(std::move(server_info)),
       started_another_job_(false),
-      net_log_(net_log),
+      net_log_(
+          NetLogWithSource::Make(net_log.net_log(),
+                                 NetLogSourceType::QUIC_STREAM_FACTORY_JOB)),
       num_sent_client_hellos_(0),
       session_(nullptr),
-      weak_factory_(this) {}
+      weak_factory_(this) {
+  net_log_.BeginEvent(
+      NetLogEventType::QUIC_STREAM_FACTORY_JOB,
+      base::Bind(&NetLogQuicStreamFactoryJobCallback, &key_.server_id()));
+  // Associate |net_log_| with |net_log|.
+  net_log_.AddEvent(
+      NetLogEventType::QUIC_STREAM_FACTORY_JOB_BOUND_TO_HTTP_STREAM_JOB,
+      net_log.source().ToEventParametersCallback());
+  net_log.AddEvent(
+      NetLogEventType::HTTP_STREAM_JOB_BOUND_TO_QUIC_STREAM_FACTORY_JOB,
+      net_log_.source().ToEventParametersCallback());
+}
 
 QuicStreamFactory::Job::~Job() {
+  net_log_.EndEvent(NetLogEventType::QUIC_STREAM_FACTORY_JOB);
   DCHECK(callback_.is_null());
 
   // If disk cache has a pending WaitForDataReadyCallback, cancel that callback.
@@ -724,6 +746,7 @@
     bool delay_tcp_race,
     int max_server_configs_stored_in_properties,
     bool close_sessions_on_ip_change,
+    bool mark_quic_broken_when_network_blackholes,
     int idle_connection_timeout_seconds,
     int reduced_ping_timeout_seconds,
     int packet_reader_yield_after_duration_milliseconds,
@@ -768,6 +791,8 @@
       enable_non_blocking_io_(enable_non_blocking_io),
       disable_disk_cache_(disable_disk_cache),
       prefer_aes_(prefer_aes),
+      mark_quic_broken_when_network_blackholes_(
+          mark_quic_broken_when_network_blackholes),
       socket_receive_buffer_size_(socket_receive_buffer_size),
       delay_tcp_race_(delay_tcp_race),
       ping_timeout_(QuicTime::Delta::FromSeconds(kPingTimeoutSecs)),
@@ -1152,8 +1177,8 @@
 
 std::unique_ptr<QuicHttpStream> QuicStreamFactory::CreateFromSession(
     QuicChromiumClientSession* session) {
-  return std::unique_ptr<QuicHttpStream>(
-      new QuicHttpStream(session->GetWeakPtr(), http_server_properties_));
+  return base::MakeUnique<QuicHttpStream>(session->GetWeakPtr(),
+                                          http_server_properties_);
 }
 
 void QuicStreamFactory::OnIdleSession(QuicChromiumClientSession* session) {}
@@ -1192,10 +1217,15 @@
   all_sessions_.erase(session);
 }
 
-void QuicStreamFactory::OnTimeoutWithOpenStreams() {
-  // Reduce PING timeout when connection times out with open stream.
-  if (ping_timeout_ > reduced_ping_timeout_) {
+void QuicStreamFactory::OnBlackholeAfterHandshakeConfirmed(
+    QuicChromiumClientSession* session) {
+  // Reduce PING timeout when connection blackholes after the handshake.
+  if (ping_timeout_ > reduced_ping_timeout_)
     ping_timeout_ = reduced_ping_timeout_;
+
+  if (mark_quic_broken_when_network_blackholes_) {
+    http_server_properties_->MarkAlternativeServiceBroken(
+        AlternativeService(kProtoQUIC, session->server_id().host_port_pair()));
   }
 }
 
@@ -1858,6 +1888,10 @@
                                                server_id.host_port_pair());
   url::SchemeHostPort server("https", server_id.host_port_pair().host(),
                              server_id.host_port_pair().port());
+  // Do nothing if QUIC is currently marked as broken.
+  if (http_server_properties_->IsAlternativeServiceBroken(alternative_service))
+    return;
+
   if (session->IsCryptoHandshakeConfirmed()) {
     http_server_properties_->ConfirmAlternativeService(alternative_service);
     ServerNetworkStats network_stats;
diff --git a/net/quic/chromium/quic_stream_factory.h b/net/quic/chromium/quic_stream_factory.h
index 89a6760..7edae1300f 100644
--- a/net/quic/chromium/quic_stream_factory.h
+++ b/net/quic/chromium/quic_stream_factory.h
@@ -61,7 +61,7 @@
 class NetLog;
 class ProxyDelegate;
 class QuicClock;
-class QuicChromiumAlarmFactory;
+class QuicAlarmFactory;
 class QuicChromiumConnectionHelper;
 class QuicCryptoClientStreamFactory;
 class QuicRandom;
@@ -219,6 +219,7 @@
       bool delay_tcp_race,
       int max_server_configs_stored_in_properties,
       bool close_sessions_on_ip_change,
+      bool mark_quic_broken_when_network_blackholes,
       int idle_connection_timeout_seconds,
       int reduced_ping_timeout_seconds,
       int packet_reader_yield_after_duration_milliseconds,
@@ -270,8 +271,8 @@
   // Called by a session after it shuts down.
   void OnSessionClosed(QuicChromiumClientSession* session);
 
-  // Called by a session when it times out with open streams.
-  void OnTimeoutWithOpenStreams();
+  // Called by a session when it blackholes after the handshake is confirmed.
+  void OnBlackholeAfterHandshakeConfirmed(QuicChromiumClientSession* session);
 
   // Cancels a pending request.
   void CancelRequest(QuicStreamRequest* request);
@@ -372,7 +373,7 @@
 
   QuicChromiumConnectionHelper* helper() { return helper_.get(); }
 
-  QuicChromiumAlarmFactory* alarm_factory() { return alarm_factory_.get(); }
+  QuicAlarmFactory* alarm_factory() { return alarm_factory_.get(); }
 
   bool has_quic_server_info_factory() const {
     return quic_server_info_factory_.get() != nullptr;
@@ -402,6 +403,10 @@
     return migrate_sessions_on_network_change_;
   }
 
+  bool mark_quic_broken_when_network_blackholes() const {
+    return mark_quic_broken_when_network_blackholes_;
+  }
+
   // Dumps memory allocation stats. |parent_dump_absolute_name| is the name
   // used by the parent MemoryAllocatorDump in the memory dump hierarchy.
   void DumpMemoryStats(base::trace_event::ProcessMemoryDump* pmd,
@@ -535,7 +540,7 @@
   std::unique_ptr<QuicChromiumConnectionHelper> helper_;
 
   // The alarm factory used for all connections.
-  std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_;
+  std::unique_ptr<QuicAlarmFactory> alarm_factory_;
 
   // Contains owning pointers to all sessions that currently exist.
   SessionIdMap all_sessions_;
@@ -590,6 +595,10 @@
   // Set if AES-GCM should be preferred, even if there is no hardware support.
   bool prefer_aes_;
 
+  // True if QUIC should be marked as broken when a connection blackholes after
+  // the handshake is confirmed.
+  bool mark_quic_broken_when_network_blackholes_;
+
   // Size of the UDP receive buffer.
   int socket_receive_buffer_size_;
 
diff --git a/net/quic/chromium/quic_stream_factory_peer.cc b/net/quic/chromium/quic_stream_factory_peer.cc
index 955fd58..6352df9 100644
--- a/net/quic/chromium/quic_stream_factory_peer.cc
+++ b/net/quic/chromium/quic_stream_factory_peer.cc
@@ -199,5 +199,11 @@
   return factory->num_push_streams_created_;
 }
 
+void QuicStreamFactoryPeer::SetAlarmFactory(
+    QuicStreamFactory* factory,
+    std::unique_ptr<QuicAlarmFactory> alarm_factory) {
+  factory->alarm_factory_ = std::move(alarm_factory);
+}
+
 }  // namespace test
 }  // namespace net
diff --git a/net/quic/chromium/quic_stream_factory_peer.h b/net/quic/chromium/quic_stream_factory_peer.h
index 79247de..822b78f 100644
--- a/net/quic/chromium/quic_stream_factory_peer.h
+++ b/net/quic/chromium/quic_stream_factory_peer.h
@@ -19,12 +19,13 @@
 namespace net {
 
 class NetLogWithSource;
+class QuicAlarmFactory;
+class QuicChromiumClientSession;
+class QuicClientPushPromiseIndex;
 class QuicConfig;
 class QuicCryptoClientConfig;
 class QuicHttpStream;
 class QuicStreamFactory;
-class QuicChromiumClientSession;
-class QuicClientPushPromiseIndex;
 
 namespace test {
 
@@ -101,6 +102,9 @@
 
   static int GetNumPushStreamsCreated(QuicStreamFactory* factory);
 
+  static void SetAlarmFactory(QuicStreamFactory* factory,
+                              std::unique_ptr<QuicAlarmFactory> alarm_factory);
+
  private:
   DISALLOW_COPY_AND_ASSIGN(QuicStreamFactoryPeer);
 };
diff --git a/net/quic/chromium/quic_stream_factory_test.cc b/net/quic/chromium/quic_stream_factory_test.cc
index a7d40cf..c3a1927ed 100644
--- a/net/quic/chromium/quic_stream_factory_test.cc
+++ b/net/quic/chromium/quic_stream_factory_test.cc
@@ -284,6 +284,7 @@
         receive_buffer_size_, delay_tcp_race_,
         /*max_server_configs_stored_in_properties*/ 0,
         close_sessions_on_ip_change_,
+        /*mark_quic_broken_when_network_blackholes*/ false,
         idle_connection_timeout_seconds_, reduced_ping_timeout_seconds_,
         packet_reader_yield_after_duration_milliseconds_,
         migrate_sessions_on_network_change_, migrate_sessions_early_,
diff --git a/net/quic/chromium/quic_test_packet_maker.cc b/net/quic/chromium/quic_test_packet_maker.cc
index f5e2de1..9980a408 100644
--- a/net/quic/chromium/quic_test_packet_maker.cc
+++ b/net/quic/chromium/quic_test_packet_maker.cc
@@ -228,6 +228,18 @@
     QuicPacketNumber ack_least_unacked,
     QuicPacketNumber stop_least_unacked,
     bool send_feedback) {
+  return MakeAckPacket(packet_number, largest_received, ack_least_unacked,
+                       stop_least_unacked, send_feedback,
+                       QuicTime::Delta::Zero());
+}
+
+std::unique_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeAckPacket(
+    QuicPacketNumber packet_number,
+    QuicPacketNumber largest_received,
+    QuicPacketNumber ack_least_unacked,
+    QuicPacketNumber stop_least_unacked,
+    bool send_feedback,
+    QuicTime::Delta ack_delay_time) {
   QuicPacketHeader header;
   header.public_header.connection_id = connection_id_;
   header.public_header.reset_flag = false;
@@ -236,7 +248,7 @@
   header.packet_number = packet_number;
 
   QuicAckFrame ack(MakeAckFrame(largest_received));
-  ack.ack_delay_time = QuicTime::Delta::Zero();
+  ack.ack_delay_time = ack_delay_time;
   for (QuicPacketNumber i = ack_least_unacked; i <= largest_received; ++i) {
     ack.received_packet_times.push_back(std::make_pair(i, clock_->Now()));
   }
diff --git a/net/quic/chromium/quic_test_packet_maker.h b/net/quic/chromium/quic_test_packet_maker.h
index 093eb11..e23e725e 100644
--- a/net/quic/chromium/quic_test_packet_maker.h
+++ b/net/quic/chromium/quic_test_packet_maker.h
@@ -84,6 +84,13 @@
       QuicPacketNumber ack_least_unacked,
       QuicPacketNumber stop_least_unacked,
       bool send_feedback);
+  std::unique_ptr<QuicReceivedPacket> MakeAckPacket(
+      QuicPacketNumber packet_number,
+      QuicPacketNumber largest_received,
+      QuicPacketNumber ack_least_unacked,
+      QuicPacketNumber stop_least_unacked,
+      bool send_feedback,
+      QuicTime::Delta ack_delay_time);
   std::unique_ptr<QuicReceivedPacket> MakeDataPacket(
       QuicPacketNumber packet_number,
       QuicStreamId stream_id,
diff --git a/net/quic/chromium/test_task_runner.cc b/net/quic/chromium/test_task_runner.cc
index 6ff86e5..6907ac0 100644
--- a/net/quic/chromium/test_task_runner.cc
+++ b/net/quic/chromium/test_task_runner.cc
@@ -35,8 +35,6 @@
 }
 
 void TestTaskRunner::RunNextTask() {
-  // Find the next task to run, advance the time to the correct time
-  // and then run the task.
   std::vector<PostedTask>::iterator next = FindNextTask();
   DCHECK(next != tasks_.end());
   clock_->AdvanceTime(QuicTime::Delta::FromMicroseconds(
@@ -46,6 +44,10 @@
   std::move(task.task).Run();
 }
 
+void TestTaskRunner::RunUntilIdle() {
+  while (!tasks_.empty())
+    RunNextTask();
+}
 namespace {
 
 struct ShouldRunBeforeLessThan {
diff --git a/net/quic/chromium/test_task_runner.h b/net/quic/chromium/test_task_runner.h
index 0c6478e1..aafec640 100644
--- a/net/quic/chromium/test_task_runner.h
+++ b/net/quic/chromium/test_task_runner.h
@@ -34,8 +34,14 @@
 
   const std::vector<PostedTask>& GetPostedTasks() const;
 
+  // Finds the next task to run, advances the time to the correct time
+  // and then runs the task.
   void RunNextTask();
 
+  // While there are posted tasks, finds the next task to run, advances the
+  // time to the correct time and then runs the task.
+  void RunUntilIdle();
+
  protected:
   ~TestTaskRunner() override;
 
diff --git a/net/reporting/reporting_browsing_data_remover.cc b/net/reporting/reporting_browsing_data_remover.cc
new file mode 100644
index 0000000..5041a47
--- /dev/null
+++ b/net/reporting/reporting_browsing_data_remover.cc
@@ -0,0 +1,59 @@
+// 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 "net/reporting/reporting_browsing_data_remover.h"
+
+#include <vector>
+
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_report.h"
+
+namespace net {
+
+// static
+void ReportingBrowsingDataRemover::RemoveBrowsingData(
+    ReportingContext* context,
+    int data_type_mask,
+    base::Callback<bool(const GURL&)> origin_filter) {
+  ReportingCache* cache = context->cache();
+  bool remove_reports = (data_type_mask & DATA_TYPE_REPORTS) != 0;
+  bool remove_clients = (data_type_mask & DATA_TYPE_CLIENTS) != 0;
+
+  if (origin_filter.is_null()) {
+    if (remove_reports)
+      cache->RemoveAllReports();
+    if (remove_clients)
+      cache->RemoveAllClients();
+    return;
+  }
+
+  if (remove_reports) {
+    std::vector<const ReportingReport*> all_reports;
+    cache->GetReports(&all_reports);
+
+    std::vector<const ReportingReport*> reports_to_remove;
+    for (const ReportingReport* report : all_reports) {
+      if (origin_filter.Run(report->url))
+        reports_to_remove.push_back(report);
+    }
+
+    cache->RemoveReports(reports_to_remove);
+  }
+
+  if (remove_clients) {
+    std::vector<const ReportingClient*> all_clients;
+    cache->GetClients(&all_clients);
+
+    std::vector<const ReportingClient*> clients_to_remove;
+    for (const ReportingClient* client : all_clients) {
+      if (origin_filter.Run(client->origin.GetURL()))
+        clients_to_remove.push_back(client);
+    }
+
+    cache->RemoveClients(clients_to_remove);
+  }
+}
+
+}  // namespace net
diff --git a/net/reporting/reporting_browsing_data_remover.h b/net/reporting/reporting_browsing_data_remover.h
new file mode 100644
index 0000000..db2bfb6d
--- /dev/null
+++ b/net/reporting/reporting_browsing_data_remover.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef NET_REPORTING_REPORTING_BROWSING_DATA_REMOVER_H_
+#define NET_REPORTING_REPORTING_BROWSING_DATA_REMOVER_H_
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "net/base/net_export.h"
+#include "url/gurl.h"
+
+namespace net {
+
+class ReportingContext;
+
+// Clears browsing data (reports and clients) from the Reporting system.
+class NET_EXPORT ReportingBrowsingDataRemover {
+ public:
+  enum DataType {
+    DATA_TYPE_REPORTS = 0x1,
+    DATA_TYPE_CLIENTS = 0x2,
+  };
+
+  static void RemoveBrowsingData(
+      ReportingContext* context,
+      int data_type_mask,
+      base::Callback<bool(const GURL&)> origin_filter);
+
+ private:
+  DISALLOW_IMPLICIT_CONSTRUCTORS(ReportingBrowsingDataRemover);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_BROWSING_DATA_REMOVER_H_
diff --git a/net/reporting/reporting_browsing_data_remover_unittest.cc b/net/reporting/reporting_browsing_data_remover_unittest.cc
new file mode 100644
index 0000000..349c5d53
--- /dev/null
+++ b/net/reporting/reporting_browsing_data_remover_unittest.cc
@@ -0,0 +1,193 @@
+// 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 "net/reporting/reporting_browsing_data_remover.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/memory/ptr_util.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_report.h"
+#include "net/reporting/reporting_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+namespace {
+
+class ReportingBrowsingDataRemoverTest : public ReportingTestBase {
+ protected:
+  void RemoveBrowsingData(bool remove_reports,
+                          bool remove_clients,
+                          std::string host) {
+    int data_type_mask = 0;
+    if (remove_reports)
+      data_type_mask |= ReportingBrowsingDataRemover::DATA_TYPE_REPORTS;
+    if (remove_clients)
+      data_type_mask |= ReportingBrowsingDataRemover::DATA_TYPE_CLIENTS;
+
+    base::Callback<bool(const GURL&)> origin_filter;
+    if (!host.empty()) {
+      origin_filter =
+          base::Bind(&ReportingBrowsingDataRemoverTest::HostIs, host);
+    }
+
+    ReportingBrowsingDataRemover::RemoveBrowsingData(context(), data_type_mask,
+                                                     origin_filter);
+  }
+
+  static bool HostIs(std::string host, const GURL& url) {
+    return url.host() == host;
+  }
+
+  size_t report_count() {
+    std::vector<const ReportingReport*> reports;
+    cache()->GetReports(&reports);
+    return reports.size();
+  }
+
+  size_t client_count() {
+    std::vector<const ReportingClient*> clients;
+    cache()->GetClients(&clients);
+    return clients.size();
+  }
+
+  const GURL kUrl1_ = GURL("https://origin1/path");
+  const GURL kUrl2_ = GURL("https://origin2/path");
+  const url::Origin kOrigin1_ = url::Origin(kUrl1_);
+  const url::Origin kOrigin2_ = url::Origin(kUrl2_);
+  const GURL kEndpoint_ = GURL("https://endpoint/");
+  const std::string kGroup_ = "group";
+  const std::string kType_ = "default";
+};
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveNothing) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ false,
+                     /* host= */ "");
+  EXPECT_EQ(2u, report_count());
+  EXPECT_EQ(2u, client_count());
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllReports) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ false,
+                     /* host= */ "");
+  EXPECT_EQ(0u, report_count());
+  EXPECT_EQ(2u, client_count());
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllClients) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ true,
+                     /* host= */ "");
+  EXPECT_EQ(2u, report_count());
+  EXPECT_EQ(0u, client_count());
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllReportsAndClients) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ true,
+                     /* host= */ "");
+  EXPECT_EQ(0u, report_count());
+  EXPECT_EQ(0u, client_count());
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveSomeReports) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ false,
+                     /* host= */ kUrl1_.host());
+  EXPECT_EQ(2u, client_count());
+
+  std::vector<const ReportingReport*> reports;
+  cache()->GetReports(&reports);
+  ASSERT_EQ(1u, reports.size());
+  EXPECT_EQ(kUrl2_, reports[0]->url);
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveSomeClients) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ true,
+                     /* host= */ kUrl1_.host());
+  EXPECT_EQ(2u, report_count());
+  EXPECT_FALSE(FindClientInCache(cache(), kOrigin1_, kEndpoint_) != nullptr);
+  EXPECT_TRUE(FindClientInCache(cache(), kOrigin2_, kEndpoint_) != nullptr);
+}
+
+}  // namespace
+}  // namespace net
diff --git a/net/reporting/reporting_cache.cc b/net/reporting/reporting_cache.cc
index aaa3953..9e43153 100644
--- a/net/reporting/reporting_cache.cc
+++ b/net/reporting/reporting_cache.cc
@@ -14,12 +14,15 @@
 #include "base/stl_util.h"
 #include "base/time/time.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_context.h"
 #include "net/reporting/reporting_report.h"
 #include "url/gurl.h"
 
 namespace net {
 
-ReportingCache::ReportingCache() {}
+ReportingCache::ReportingCache(ReportingContext* context) : context_(context) {
+  DCHECK(context_);
+}
 
 ReportingCache::~ReportingCache() {}
 
@@ -35,6 +38,8 @@
   auto inserted =
       reports_.insert(std::make_pair(report.get(), std::move(report)));
   DCHECK(inserted.second);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::GetReports(
@@ -76,6 +81,8 @@
     DCHECK(base::ContainsKey(reports_, report));
     reports_[report]->attempts++;
   }
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveReports(
@@ -89,6 +96,8 @@
       reports_.erase(report);
     }
   }
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveAllReports() {
@@ -105,6 +114,8 @@
 
   for (auto& it : reports_to_remove)
     reports_.erase(it);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::GetClients(
@@ -140,6 +151,8 @@
 
   clients_[origin][endpoint] = base::MakeUnique<ReportingClient>(
       origin, endpoint, subdomains, group, expires);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveClients(
@@ -149,6 +162,8 @@
     DCHECK(clients_[client->origin][client->endpoint].get() == client);
     clients_[client->origin].erase(client->endpoint);
   }
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveClientForOriginAndEndpoint(const url::Origin& origin,
@@ -156,15 +171,21 @@
   DCHECK(base::ContainsKey(clients_, origin));
   DCHECK(base::ContainsKey(clients_[origin], endpoint));
   clients_[origin].erase(endpoint);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveClientsForEndpoint(const GURL& endpoint) {
   for (auto& it : clients_)
     it.second.erase(endpoint);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveAllClients() {
   clients_.clear();
+
+  context_->NotifyCacheUpdated();
 }
 
 }  // namespace net
diff --git a/net/reporting/reporting_cache.h b/net/reporting/reporting_cache.h
index fdd19c2..8d04279 100644
--- a/net/reporting/reporting_cache.h
+++ b/net/reporting/reporting_cache.h
@@ -7,6 +7,7 @@
 
 #include <map>
 #include <memory>
+#include <set>
 #include <string>
 #include <unordered_map>
 #include <unordered_set>
@@ -23,6 +24,7 @@
 
 namespace net {
 
+class ReportingContext;
 struct ReportingReport;
 
 // The cache holds undelivered reports and clients (per-origin endpoint
@@ -38,7 +40,8 @@
 // "doomed", which will cause it to be deallocated once it is no longer pending.
 class NET_EXPORT ReportingCache {
  public:
-  ReportingCache();
+  // |context| must outlive the ReportingCache.
+  ReportingCache(ReportingContext* context);
 
   ~ReportingCache();
 
@@ -145,6 +148,8 @@
   }
 
  private:
+  ReportingContext* context_;
+
   // Owns all clients, keyed by origin, then endpoint URL.
   // (These would be unordered_map, but neither url::Origin nor GURL has a hash
   // function implemented.)
@@ -155,11 +160,11 @@
   std::unordered_map<const ReportingReport*, std::unique_ptr<ReportingReport>>
       reports_;
 
-  // Reports that have been marked "pending" (in use elsewhere and should not be
+  // Reports that have been marked pending (in use elsewhere and should not be
   // deleted until no longer pending).
   std::unordered_set<const ReportingReport*> pending_reports_;
 
-  // Reports that have been marked "doomed" (would have been deleted, but were
+  // Reports that have been marked doomed (would have been deleted, but were
   // pending when the deletion was requested).
   std::unordered_set<const ReportingReport*> doomed_reports_;
 
diff --git a/net/reporting/reporting_cache_unittest.cc b/net/reporting/reporting_cache_unittest.cc
index be55cbb..08cd273 100644
--- a/net/reporting/reporting_cache_unittest.cc
+++ b/net/reporting/reporting_cache_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/time/time.h"
 #include "base/values.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_observer.h"
 #include "net/reporting/reporting_report.h"
 #include "net/reporting/reporting_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -19,32 +20,54 @@
 namespace net {
 namespace {
 
-class ReportingCacheTest : public ::testing::Test {
+class TestReportingObserver : public ReportingObserver {
+ public:
+  TestReportingObserver() : cache_update_count_(0) {}
+
+  void OnCacheUpdated() override { ++cache_update_count_; }
+
+  int cache_update_count() const { return cache_update_count_; }
+
+ private:
+  int cache_update_count_;
+};
+
+class ReportingCacheTest : public ReportingTestBase {
  protected:
+  ReportingCacheTest() : ReportingTestBase() {
+    context()->AddObserver(&observer_);
+  }
+
+  ~ReportingCacheTest() override { context()->RemoveObserver(&observer_); }
+
+  TestReportingObserver* observer() { return &observer_; }
+
   const GURL kUrl1_ = GURL("https://origin1/path");
   const url::Origin kOrigin1_ = url::Origin(GURL("https://origin1/"));
   const url::Origin kOrigin2_ = url::Origin(GURL("https://origin2/"));
   const GURL kEndpoint1_ = GURL("https://endpoint1/");
   const GURL kEndpoint2_ = GURL("https://endpoint2/");
   const std::string kGroup1_ = "group1";
-  const std::string kGroup2_ = "group2";
+  const std::string kGroup2 = "group2";
   const std::string kType_ = "default";
   const base::TimeTicks kNow_ = base::TimeTicks::Now();
   const base::TimeTicks kExpires1_ = kNow_ + base::TimeDelta::FromDays(7);
   const base::TimeTicks kExpires2_ = kExpires1_ + base::TimeDelta::FromDays(7);
 
-  ReportingCache cache_;
+ private:
+  TestReportingObserver observer_;
 };
 
 TEST_F(ReportingCacheTest, Reports) {
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
 
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  EXPECT_EQ(1, observer()->cache_update_count());
 
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
   const ReportingReport* report = reports[0];
   ASSERT_TRUE(report);
@@ -54,103 +77,113 @@
   // TODO(juliatuttle): Check body?
   EXPECT_EQ(kNow_, report->queued);
   EXPECT_EQ(0, report->attempts);
-  EXPECT_FALSE(cache_.IsReportPendingForTesting(report));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(report));
+  EXPECT_FALSE(cache()->IsReportPendingForTesting(report));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(report));
 
-  cache_.IncrementReportsAttempts(reports);
+  cache()->IncrementReportsAttempts(reports);
+  EXPECT_EQ(2, observer()->cache_update_count());
 
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
   report = reports[0];
   ASSERT_TRUE(report);
   EXPECT_EQ(1, report->attempts);
 
-  cache_.RemoveReports(reports);
+  cache()->RemoveReports(reports);
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
 }
 
 TEST_F(ReportingCacheTest, RemoveAllReports) {
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  EXPECT_EQ(2, observer()->cache_update_count());
 
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_EQ(2u, reports.size());
 
-  cache_.RemoveAllReports();
+  cache()->RemoveAllReports();
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
 }
 
 TEST_F(ReportingCacheTest, RemovePendingReports) {
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  EXPECT_EQ(1, observer()->cache_update_count());
 
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
-  EXPECT_FALSE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(reports[0]));
 
-  cache_.SetReportsPending(reports);
-  EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0]));
+  cache()->SetReportsPending(reports);
+  EXPECT_TRUE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(reports[0]));
 
-  cache_.RemoveReports(reports);
-  EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_TRUE(cache_.IsReportDoomedForTesting(reports[0]));
+  cache()->RemoveReports(reports);
+  EXPECT_TRUE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_TRUE(cache()->IsReportDoomedForTesting(reports[0]));
+  EXPECT_EQ(2, observer()->cache_update_count());
 
   // After removing report, future calls to GetReports should not return it.
   std::vector<const ReportingReport*> visible_reports;
-  cache_.GetReports(&visible_reports);
+  cache()->GetReports(&visible_reports);
   EXPECT_TRUE(visible_reports.empty());
-  EXPECT_EQ(1u, cache_.GetFullReportCountForTesting());
+  EXPECT_EQ(1u, cache()->GetFullReportCountForTesting());
 
   // After clearing pending flag, report should be deleted.
-  cache_.ClearReportsPending(reports);
-  EXPECT_EQ(0u, cache_.GetFullReportCountForTesting());
+  cache()->ClearReportsPending(reports);
+  EXPECT_EQ(0u, cache()->GetFullReportCountForTesting());
 }
 
 TEST_F(ReportingCacheTest, RemoveAllPendingReports) {
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  EXPECT_EQ(1, observer()->cache_update_count());
 
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
-  EXPECT_FALSE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(reports[0]));
 
-  cache_.SetReportsPending(reports);
-  EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0]));
+  cache()->SetReportsPending(reports);
+  EXPECT_TRUE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(reports[0]));
 
-  cache_.RemoveAllReports();
-  EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_TRUE(cache_.IsReportDoomedForTesting(reports[0]));
+  cache()->RemoveAllReports();
+  EXPECT_TRUE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_TRUE(cache()->IsReportDoomedForTesting(reports[0]));
+  EXPECT_EQ(2, observer()->cache_update_count());
 
   // After removing report, future calls to GetReports should not return it.
   std::vector<const ReportingReport*> visible_reports;
-  cache_.GetReports(&visible_reports);
+  cache()->GetReports(&visible_reports);
   EXPECT_TRUE(visible_reports.empty());
-  EXPECT_EQ(1u, cache_.GetFullReportCountForTesting());
+  EXPECT_EQ(1u, cache()->GetFullReportCountForTesting());
 
   // After clearing pending flag, report should be deleted.
-  cache_.ClearReportsPending(reports);
-  EXPECT_EQ(0u, cache_.GetFullReportCountForTesting());
+  cache()->ClearReportsPending(reports);
+  EXPECT_EQ(0u, cache()->GetFullReportCountForTesting());
 }
 
 TEST_F(ReportingCacheTest, Endpoints) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  EXPECT_EQ(1, observer()->cache_update_count());
 
   const ReportingClient* client =
-      FindClientInCache(&cache_, kOrigin1_, kEndpoint1_);
+      FindClientInCache(cache(), kOrigin1_, kEndpoint1_);
   ASSERT_TRUE(client);
   EXPECT_EQ(kOrigin1_, client->origin);
   EXPECT_EQ(kEndpoint1_, client->endpoint);
@@ -158,35 +191,37 @@
   EXPECT_EQ(kGroup1_, client->group);
   EXPECT_EQ(kExpires1_, client->expires);
 
-  // Replaces original configuration with new Subdomains, group, and expires
-  // values.
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::INCLUDE,
-                   kGroup2_, kExpires2_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::INCLUDE, kGroup2, kExpires2_);
+  EXPECT_EQ(2, observer()->cache_update_count());
 
-  client = FindClientInCache(&cache_, kOrigin1_, kEndpoint1_);
+  client = FindClientInCache(cache(), kOrigin1_, kEndpoint1_);
   ASSERT_TRUE(client);
   EXPECT_EQ(kOrigin1_, client->origin);
   EXPECT_EQ(kEndpoint1_, client->endpoint);
   EXPECT_EQ(ReportingClient::Subdomains::INCLUDE, client->subdomains);
-  EXPECT_EQ(kGroup2_, client->group);
+  EXPECT_EQ(kGroup2, client->group);
   EXPECT_EQ(kExpires2_, client->expires);
 
-  cache_.RemoveClients(std::vector<const ReportingClient*>{client});
+  cache()->RemoveClients(std::vector<const ReportingClient*>{client});
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  client = FindClientInCache(&cache_, kOrigin1_, kEndpoint1_);
+  client = FindClientInCache(cache(), kOrigin1_, kEndpoint1_);
   EXPECT_FALSE(client);
 }
 
 TEST_F(ReportingCacheTest, GetClientsForOriginAndGroup) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
-  cache_.SetClient(kOrigin1_, kEndpoint2_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup2_, kExpires1_);
-  cache_.SetClient(kOrigin2_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint2_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup2, kExpires1_);
+  cache()->SetClient(kOrigin2_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
 
   std::vector<const ReportingClient*> clients;
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
   ASSERT_EQ(1u, clients.size());
   const ReportingClient* client = clients[0];
   ASSERT_TRUE(client);
@@ -195,57 +230,69 @@
 }
 
 TEST_F(ReportingCacheTest, RemoveClientForOriginAndEndpoint) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
-  cache_.SetClient(kOrigin1_, kEndpoint2_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup2_, kExpires1_);
-  cache_.SetClient(kOrigin2_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint2_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup2, kExpires1_);
+  cache()->SetClient(kOrigin2_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  cache_.RemoveClientForOriginAndEndpoint(kOrigin1_, kEndpoint1_);
+  cache()->RemoveClientForOriginAndEndpoint(kOrigin1_, kEndpoint1_);
+  EXPECT_EQ(4, observer()->cache_update_count());
 
   std::vector<const ReportingClient*> clients;
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
   EXPECT_TRUE(clients.empty());
 
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup2_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup2, &clients);
   EXPECT_EQ(1u, clients.size());
 
-  cache_.GetClientsForOriginAndGroup(kOrigin2_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin2_, kGroup1_, &clients);
   EXPECT_EQ(1u, clients.size());
 }
 
 TEST_F(ReportingCacheTest, RemoveClientsForEndpoint) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
-  cache_.SetClient(kOrigin1_, kEndpoint2_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup2_, kExpires1_);
-  cache_.SetClient(kOrigin2_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint2_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup2, kExpires1_);
+  cache()->SetClient(kOrigin2_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  cache_.RemoveClientsForEndpoint(kEndpoint1_);
+  cache()->RemoveClientsForEndpoint(kEndpoint1_);
+  EXPECT_EQ(4, observer()->cache_update_count());
 
   std::vector<const ReportingClient*> clients;
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
   EXPECT_TRUE(clients.empty());
 
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup2_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup2, &clients);
   EXPECT_EQ(1u, clients.size());
 
-  cache_.GetClientsForOriginAndGroup(kOrigin2_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin2_, kGroup1_, &clients);
   EXPECT_TRUE(clients.empty());
 }
 
 TEST_F(ReportingCacheTest, RemoveAllClients) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
-  cache_.SetClient(kOrigin2_, kEndpoint2_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  cache()->SetClient(kOrigin2_, kEndpoint2_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  EXPECT_EQ(2, observer()->cache_update_count());
 
-  cache_.RemoveAllClients();
+  cache()->RemoveAllClients();
+  EXPECT_EQ(3, observer()->cache_update_count());
 
   std::vector<const ReportingClient*> clients;
-  cache_.GetClients(&clients);
+  cache()->GetClients(&clients);
   EXPECT_TRUE(clients.empty());
 }
 
diff --git a/net/reporting/reporting_context.cc b/net/reporting/reporting_context.cc
new file mode 100644
index 0000000..cc50dc7
--- /dev/null
+++ b/net/reporting/reporting_context.cc
@@ -0,0 +1,84 @@
+// 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 "net/reporting/reporting_context.h"
+
+#include <memory>
+
+#include "base/memory/ptr_util.h"
+#include "base/observer_list.h"
+#include "base/time/clock.h"
+#include "base/time/default_clock.h"
+#include "base/time/default_tick_clock.h"
+#include "base/time/tick_clock.h"
+#include "base/time/time.h"
+#include "net/base/backoff_entry.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_delivery_agent.h"
+#include "net/reporting/reporting_endpoint_manager.h"
+#include "net/reporting/reporting_observer.h"
+#include "net/reporting/reporting_policy.h"
+
+namespace net {
+
+class URLRequestContext;
+
+namespace {
+
+class ReportingContextImpl : public ReportingContext {
+ public:
+  ReportingContextImpl(const ReportingPolicy& policy,
+                       std::unique_ptr<ReportingDelegate> delegate,
+                       URLRequestContext* request_context)
+      : ReportingContext(policy,
+                         std::move(delegate),
+                         base::MakeUnique<base::DefaultClock>(),
+                         base::MakeUnique<base::DefaultTickClock>(),
+                         ReportingUploader::Create(request_context)) {}
+};
+
+}  // namespace
+
+// static
+std::unique_ptr<ReportingContext> ReportingContext::Create(
+    const ReportingPolicy& policy,
+    std::unique_ptr<ReportingDelegate> delegate,
+    URLRequestContext* request_context) {
+  return base::MakeUnique<ReportingContextImpl>(policy, std::move(delegate),
+                                                request_context);
+}
+
+ReportingContext::~ReportingContext() {}
+
+void ReportingContext::AddObserver(ReportingObserver* observer) {
+  DCHECK(!observers_.HasObserver(observer));
+  observers_.AddObserver(observer);
+}
+
+void ReportingContext::RemoveObserver(ReportingObserver* observer) {
+  DCHECK(observers_.HasObserver(observer));
+  observers_.RemoveObserver(observer);
+}
+
+void ReportingContext::NotifyCacheUpdated() {
+  for (auto& observer : observers_)
+    observer.OnCacheUpdated();
+}
+
+ReportingContext::ReportingContext(const ReportingPolicy& policy,
+                                   std::unique_ptr<ReportingDelegate> delegate,
+                                   std::unique_ptr<base::Clock> clock,
+                                   std::unique_ptr<base::TickClock> tick_clock,
+                                   std::unique_ptr<ReportingUploader> uploader)
+    : policy_(policy),
+      delegate_(std::move(delegate)),
+      clock_(std::move(clock)),
+      tick_clock_(std::move(tick_clock)),
+      uploader_(std::move(uploader)),
+      cache_(base::MakeUnique<ReportingCache>(this)),
+      endpoint_manager_(base::MakeUnique<ReportingEndpointManager>(this)),
+      delivery_agent_(base::MakeUnique<ReportingDeliveryAgent>(this)) {}
+
+}  // namespace net
diff --git a/net/reporting/reporting_context.h b/net/reporting/reporting_context.h
new file mode 100644
index 0000000..0242561
--- /dev/null
+++ b/net/reporting/reporting_context.h
@@ -0,0 +1,91 @@
+// 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.
+
+#ifndef NET_REPORTING_REPORTING_CONTEXT_H_
+#define NET_REPORTING_REPORTING_CONTEXT_H_
+
+#include <memory>
+
+#include "base/observer_list.h"
+#include "base/time/time.h"
+#include "net/base/backoff_entry.h"
+#include "net/base/net_export.h"
+#include "net/reporting/reporting_policy.h"
+
+namespace base {
+class Clock;
+class TickClock;
+}  // namespace base
+
+namespace net {
+
+class ReportingCache;
+class ReportingDelegate;
+class ReportingDeliveryAgent;
+class ReportingEndpointManager;
+class ReportingObserver;
+class ReportingUploader;
+class URLRequestContext;
+
+// Contains the various internal classes that make up the Reporting system.
+// Wrapped by ReportingService, which provides the external interface.
+class NET_EXPORT ReportingContext {
+ public:
+  static std::unique_ptr<ReportingContext> Create(
+      const ReportingPolicy& policy,
+      std::unique_ptr<ReportingDelegate> delegate,
+      URLRequestContext* request_context);
+
+  ~ReportingContext();
+
+  const ReportingPolicy& policy() { return policy_; }
+  ReportingDelegate* delegate() { return delegate_.get(); }
+
+  base::Clock* clock() { return clock_.get(); }
+  base::TickClock* tick_clock() { return tick_clock_.get(); }
+  ReportingUploader* uploader() { return uploader_.get(); }
+
+  ReportingCache* cache() { return cache_.get(); }
+  ReportingEndpointManager* endpoint_manager() {
+    return endpoint_manager_.get();
+  }
+  ReportingDeliveryAgent* delivery_agent() { return delivery_agent_.get(); }
+
+  void AddObserver(ReportingObserver* observer);
+  void RemoveObserver(ReportingObserver* observer);
+
+  void NotifyCacheUpdated();
+
+ protected:
+  ReportingContext(const ReportingPolicy& policy,
+                   std::unique_ptr<ReportingDelegate> delegate,
+                   std::unique_ptr<base::Clock> clock,
+                   std::unique_ptr<base::TickClock> tick_clock,
+                   std::unique_ptr<ReportingUploader> uploader);
+
+ private:
+  ReportingPolicy policy_;
+  std::unique_ptr<ReportingDelegate> delegate_;
+
+  std::unique_ptr<base::Clock> clock_;
+  std::unique_ptr<base::TickClock> tick_clock_;
+  std::unique_ptr<ReportingUploader> uploader_;
+
+  base::ObserverList<ReportingObserver, /* check_empty= */ true> observers_;
+
+  std::unique_ptr<ReportingCache> cache_;
+
+  // |endpoint_manager_| must come after |tick_clock_| and |cache_|.
+  std::unique_ptr<ReportingEndpointManager> endpoint_manager_;
+
+  // |delivery_agent_| must come after |tick_clock_|, |uploader_|, |cache_|,
+  // and |endpoint_manager_|.
+  std::unique_ptr<ReportingDeliveryAgent> delivery_agent_;
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingContext);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_CONTEXT_H_
diff --git a/net/reporting/reporting_delegate.cc b/net/reporting/reporting_delegate.cc
new file mode 100644
index 0000000..cef5baf
--- /dev/null
+++ b/net/reporting/reporting_delegate.cc
@@ -0,0 +1,13 @@
+// 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 "net/reporting/reporting_delegate.h"
+
+namespace net {
+
+ReportingDelegate::~ReportingDelegate() {}
+
+ReportingDelegate::ReportingDelegate() {}
+
+}  // namespace net
diff --git a/net/reporting/reporting_delegate.h b/net/reporting/reporting_delegate.h
new file mode 100644
index 0000000..57d01ab
--- /dev/null
+++ b/net/reporting/reporting_delegate.h
@@ -0,0 +1,45 @@
+// 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.
+
+#ifndef NET_REPORTING_REPORTING_DELEGATE_H_
+#define NET_REPORTING_REPORTING_DELEGATE_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "net/base/net_export.h"
+
+namespace base {
+class Value;
+}  // namespace base
+
+namespace net {
+
+// Delegate for things that the Reporting system can't do by itself, like
+// persisting data across embedder restarts.
+class NET_EXPORT ReportingDelegate {
+ public:
+  virtual ~ReportingDelegate();
+
+  // Gets previously persisted data, if any is available. Returns a null pointer
+  // if no data is available. Can be called any number of times.
+  virtual std::unique_ptr<const base::Value> GetPersistedData() = 0;
+
+  // Sets data to be persisted across embedder restarts. Ideally, this data will
+  // be returned by any future calls to GetPersistedData() in this or future
+  // sessions (until newer data is persisted), but no guarantee is made, since
+  // the underlying persistence mechanism may or may not be reliable.
+  virtual void PersistData(
+      std::unique_ptr<const base::Value> persisted_data) = 0;
+
+ protected:
+  ReportingDelegate();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ReportingDelegate);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_DELEGATE_H_
diff --git a/net/reporting/reporting_delivery_agent.cc b/net/reporting/reporting_delivery_agent.cc
index b0d54dd..f39dde9 100644
--- a/net/reporting/reporting_delivery_agent.cc
+++ b/net/reporting/reporting_delivery_agent.cc
@@ -48,16 +48,8 @@
 
 }  // namespace
 
-ReportingDeliveryAgent::ReportingDeliveryAgent(
-    base::TickClock* clock,
-    ReportingCache* cache,
-    ReportingUploader* uploader,
-    const BackoffEntry::Policy* endpoint_backoff_policy)
-    : clock_(clock),
-      cache_(cache),
-      uploader_(uploader),
-      endpoint_manager_(clock, cache, endpoint_backoff_policy),
-      weak_factory_(this) {}
+ReportingDeliveryAgent::ReportingDeliveryAgent(ReportingContext* context)
+    : context_(context), weak_factory_(this) {}
 ReportingDeliveryAgent::~ReportingDeliveryAgent() {}
 
 class ReportingDeliveryAgent::Delivery {
@@ -74,7 +66,7 @@
 
 void ReportingDeliveryAgent::SendReports() {
   std::vector<const ReportingReport*> reports;
-  cache_->GetReports(&reports);
+  cache()->GetReports(&reports);
 
   // Sort reports into (origin, group) buckets.
   std::map<OriginGroup, std::vector<const ReportingReport*>>
@@ -95,7 +87,7 @@
       continue;
 
     GURL endpoint_url;
-    if (!endpoint_manager_.FindEndpointForOriginAndGroup(
+    if (!endpoint_manager()->FindEndpointForOriginAndGroup(
             origin_group.first, origin_group.second, &endpoint_url)) {
       continue;
     }
@@ -110,13 +102,13 @@
     const GURL& endpoint = it.first;
     const std::vector<const ReportingReport*>& reports = it.second;
 
-    endpoint_manager_.SetEndpointPending(endpoint);
-    cache_->SetReportsPending(reports);
+    endpoint_manager()->SetEndpointPending(endpoint);
+    cache()->SetReportsPending(reports);
 
     std::string json;
-    SerializeReports(reports, clock_->NowTicks(), &json);
+    SerializeReports(reports, tick_clock()->NowTicks(), &json);
 
-    uploader_->StartUpload(
+    uploader()->StartUpload(
         endpoint, json,
         base::Bind(&ReportingDeliveryAgent::OnUploadComplete,
                    weak_factory_.GetWeakPtr(),
@@ -128,23 +120,23 @@
     const std::unique_ptr<Delivery>& delivery,
     ReportingUploader::Outcome outcome) {
   if (outcome == ReportingUploader::Outcome::SUCCESS) {
-    cache_->RemoveReports(delivery->reports);
-    endpoint_manager_.InformOfEndpointRequest(delivery->endpoint, true);
+    cache()->RemoveReports(delivery->reports);
+    endpoint_manager()->InformOfEndpointRequest(delivery->endpoint, true);
   } else {
-    cache_->IncrementReportsAttempts(delivery->reports);
-    endpoint_manager_.InformOfEndpointRequest(delivery->endpoint, false);
+    cache()->IncrementReportsAttempts(delivery->reports);
+    endpoint_manager()->InformOfEndpointRequest(delivery->endpoint, false);
   }
 
   if (outcome == ReportingUploader::Outcome::REMOVE_ENDPOINT)
-    cache_->RemoveClientsForEndpoint(delivery->endpoint);
+    cache()->RemoveClientsForEndpoint(delivery->endpoint);
 
   for (const ReportingReport* report : delivery->reports) {
     pending_origin_groups_.erase(
         OriginGroup(url::Origin(report->url), report->group));
   }
 
-  cache_->ClearReportsPending(delivery->reports);
-  endpoint_manager_.ClearEndpointPending(delivery->endpoint);
+  endpoint_manager()->ClearEndpointPending(delivery->endpoint);
+  cache()->ClearReportsPending(delivery->reports);
 }
 
 }  // namespace net
diff --git a/net/reporting/reporting_delivery_agent.h b/net/reporting/reporting_delivery_agent.h
index f6cda81..eaae8a3 100644
--- a/net/reporting/reporting_delivery_agent.h
+++ b/net/reporting/reporting_delivery_agent.h
@@ -14,7 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "net/base/backoff_entry.h"
 #include "net/base/net_export.h"
-#include "net/reporting/reporting_endpoint_manager.h"
+#include "net/reporting/reporting_context.h"
 #include "net/reporting/reporting_uploader.h"
 #include "url/gurl.h"
 #include "url/origin.h"
@@ -26,6 +26,7 @@
 namespace net {
 
 class ReportingCache;
+class ReportingEndpointManager;
 
 // Takes reports from the ReportingCache, assembles reports into deliveries to
 // endpoints, and sends those deliveries using ReportingUploader.
@@ -58,12 +59,8 @@
 // delivery attempt.
 class NET_EXPORT ReportingDeliveryAgent {
  public:
-  // |clock|, |cache|, |uploader|, and |endpoint_backoff_policy| must all
-  // outlive the ReportingDeliveryAgent.
-  ReportingDeliveryAgent(base::TickClock* clock,
-                         ReportingCache* cache,
-                         ReportingUploader* uploader,
-                         const BackoffEntry::Policy* endpoint_backoff_policy);
+  // |context| must outlive the ReportingDeliveryAgent.
+  ReportingDeliveryAgent(ReportingContext* context);
   ~ReportingDeliveryAgent();
 
   // Tries to deliver all of the reports in the cache. Reports that are already
@@ -79,11 +76,14 @@
   void OnUploadComplete(const std::unique_ptr<Delivery>& delivery,
                         ReportingUploader::Outcome outcome);
 
-  base::TickClock* clock_;
-  ReportingCache* cache_;
-  ReportingUploader* uploader_;
+  base::TickClock* tick_clock() { return context_->tick_clock(); }
+  ReportingCache* cache() { return context_->cache(); }
+  ReportingUploader* uploader() { return context_->uploader(); }
+  ReportingEndpointManager* endpoint_manager() {
+    return context_->endpoint_manager();
+  }
 
-  ReportingEndpointManager endpoint_manager_;
+  ReportingContext* context_;
 
   // Tracks OriginGroup tuples for which there is a pending delivery running.
   // (Would be an unordered_set, but there's no hash on pair.)
diff --git a/net/reporting/reporting_delivery_agent_unittest.cc b/net/reporting/reporting_delivery_agent_unittest.cc
index b2d8fbfd..d62f97c 100644
--- a/net/reporting/reporting_delivery_agent_unittest.cc
+++ b/net/reporting/reporting_delivery_agent_unittest.cc
@@ -24,88 +24,27 @@
 namespace net {
 namespace {
 
-class MockUploader : public ReportingUploader {
- public:
-  class PendingUpload {
-   public:
-    PendingUpload(MockUploader* uploader,
-                  const GURL& url,
-                  const std::string& json,
-                  const Callback& callback)
-        : uploader_(uploader), url_(url), json_(json), callback_(callback) {
-      DCHECK(uploader_);
-    }
-
-    ~PendingUpload() {}
-
-    void Complete(Outcome outcome) {
-      callback_.Run(outcome);
-      // Deletes |this|.
-      uploader_->OnUploadComplete(this);
-    }
-
-    const GURL& url() const { return url_; }
-    const std::string& json() const { return json_; }
-
-    std::unique_ptr<base::Value> GetValue() const {
-      return base::JSONReader::Read(json_);
-    }
-
-   private:
-    MockUploader* uploader_;
-    GURL url_;
-    std::string json_;
-    Callback callback_;
-  };
-
-  MockUploader() {}
-  ~MockUploader() override {}
-
-  void StartUpload(const GURL& url,
-                   const std::string& json,
-                   const Callback& callback) override {
-    uploads_.push_back(
-        base::MakeUnique<PendingUpload>(this, url, json, callback));
-  }
-
-  const std::vector<std::unique_ptr<PendingUpload>>& pending_uploads() const {
-    return uploads_;
-  }
-
-  void OnUploadComplete(PendingUpload* upload) {
-    for (auto it = uploads_.begin(); it != uploads_.end(); ++it) {
-      if (it->get() == upload) {
-        uploads_.erase(it);
-        return;
-      }
-    }
-    NOTREACHED();
-  }
-
- private:
-  std::vector<std::unique_ptr<PendingUpload>> uploads_;
-};
-
-class ReportingDeliveryAgentTest : public ::testing::Test {
+class ReportingDeliveryAgentTest : public ReportingTestBase {
  protected:
-  ReportingDeliveryAgentTest()
-      : agent_(&clock_, &cache_, &uploader_, &backoff_policy_) {
-    backoff_policy_.num_errors_to_ignore = 0;
-    backoff_policy_.initial_delay_ms = 60000;
-    backoff_policy_.multiply_factor = 2.0;
-    backoff_policy_.jitter_factor = 0.0;
-    backoff_policy_.maximum_backoff_ms = -1;
-    backoff_policy_.entry_lifetime_ms = 0;
-    backoff_policy_.always_use_initial_delay = false;
+  ReportingDeliveryAgentTest() {
+    ReportingPolicy policy;
+    policy.endpoint_backoff_policy.num_errors_to_ignore = 0;
+    policy.endpoint_backoff_policy.initial_delay_ms = 60000;
+    policy.endpoint_backoff_policy.multiply_factor = 2.0;
+    policy.endpoint_backoff_policy.jitter_factor = 0.0;
+    policy.endpoint_backoff_policy.maximum_backoff_ms = -1;
+    policy.endpoint_backoff_policy.entry_lifetime_ms = 0;
+    policy.endpoint_backoff_policy.always_use_initial_delay = false;
+    UsePolicy(policy);
   }
 
   base::TimeTicks tomorrow() {
-    return clock_.NowTicks() + base::TimeDelta::FromDays(1);
+    return tick_clock()->NowTicks() + base::TimeDelta::FromDays(1);
   }
 
-  const std::vector<std::unique_ptr<MockUploader::PendingUpload>>&
-  pending_uploads() const {
-    return uploader_.pending_uploads();
+  const std::vector<std::unique_ptr<TestReportingUploader::PendingUpload>>&
+  pending_uploads() {
+    return uploader()->pending_uploads();
   }
 
   const GURL kUrl_ = GURL("https://origin/path");
@@ -113,12 +52,6 @@
   const GURL kEndpoint_ = GURL("https://endpoint/");
   const std::string kGroup_ = "group";
   const std::string kType_ = "type";
-
-  base::SimpleTestTickClock clock_;
-  ReportingCache cache_;
-  MockUploader uploader_;
-  BackoffEntry::Policy backoff_policy_;
-  ReportingDeliveryAgent agent_;
 };
 
 TEST_F(ReportingDeliveryAgentTest, SuccessfulUpload) {
@@ -127,14 +60,14 @@
   base::DictionaryValue body;
   body.SetString("key", "value");
 
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.AddReport(kUrl_, kGroup_, kType_, body.CreateDeepCopy(),
-                   clock_.NowTicks(), 0);
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->AddReport(kUrl_, kGroup_, kType_, body.CreateDeepCopy(),
+                     tick_clock()->NowTicks(), 0);
 
-  clock_.Advance(base::TimeDelta::FromMilliseconds(kAgeMillis));
+  tick_clock()->Advance(base::TimeDelta::FromMilliseconds(kAgeMillis));
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
 
   ASSERT_EQ(1u, pending_uploads().size());
   EXPECT_EQ(kEndpoint_, pending_uploads()[0]->url());
@@ -158,52 +91,52 @@
 
   // Successful upload should remove delivered reports.
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
 
   // TODO(juliatuttle): Check that BackoffEntry was informed of success.
 }
 
 TEST_F(ReportingDeliveryAgentTest, FailedUpload) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.AddReport(kUrl_, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
 
   ASSERT_EQ(1u, pending_uploads().size());
   pending_uploads()[0]->Complete(ReportingUploader::Outcome::FAILURE);
 
   // Failed upload should increment reports' attempts.
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
   EXPECT_EQ(1, reports[0]->attempts);
 
   // Since endpoint is now failing, an upload won't be started despite a pending
   // report.
   ASSERT_TRUE(pending_uploads().empty());
-  agent_.SendReports();
+  delivery_agent()->SendReports();
   EXPECT_TRUE(pending_uploads().empty());
 }
 
 TEST_F(ReportingDeliveryAgentTest, RemoveEndpointUpload) {
   static const url::Origin kDifferentOrigin(GURL("https://origin2/"));
 
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.SetClient(kDifferentOrigin, kEndpoint_,
-                   ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
-  ASSERT_TRUE(FindClientInCache(&cache_, kOrigin_, kEndpoint_));
-  ASSERT_TRUE(FindClientInCache(&cache_, kDifferentOrigin, kEndpoint_));
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kDifferentOrigin, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+  ASSERT_TRUE(FindClientInCache(cache(), kOrigin_, kEndpoint_));
+  ASSERT_TRUE(FindClientInCache(cache(), kDifferentOrigin, kEndpoint_));
 
-  cache_.AddReport(kUrl_, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
 
   ASSERT_EQ(1u, pending_uploads().size());
   pending_uploads()[0]->Complete(ReportingUploader::Outcome::REMOVE_ENDPOINT);
@@ -211,50 +144,50 @@
   // "Remove endpoint" upload should remove endpoint from *all* origins and
   // increment reports' attempts.
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
   EXPECT_EQ(1, reports[0]->attempts);
 
-  EXPECT_FALSE(FindClientInCache(&cache_, kOrigin_, kEndpoint_));
-  EXPECT_FALSE(FindClientInCache(&cache_, kDifferentOrigin, kEndpoint_));
+  EXPECT_FALSE(FindClientInCache(cache(), kOrigin_, kEndpoint_));
+  EXPECT_FALSE(FindClientInCache(cache(), kDifferentOrigin, kEndpoint_));
 
   // Since endpoint is now failing, an upload won't be started despite a pending
   // report.
-  agent_.SendReports();
+  delivery_agent()->SendReports();
   EXPECT_TRUE(pending_uploads().empty());
 }
 
 TEST_F(ReportingDeliveryAgentTest, ConcurrentRemove) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.AddReport(kUrl_, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
   ASSERT_EQ(1u, pending_uploads().size());
 
   // Remove the report while the upload is running.
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_EQ(1u, reports.size());
 
   const ReportingReport* report = reports[0];
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(report));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(report));
 
   // Report should appear removed, even though the cache has doomed it.
-  cache_.RemoveReports(reports);
-  cache_.GetReports(&reports);
+  cache()->RemoveReports(reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
-  EXPECT_TRUE(cache_.IsReportDoomedForTesting(report));
+  EXPECT_TRUE(cache()->IsReportDoomedForTesting(report));
 
   // Completing upload shouldn't crash, and report should still be gone.
   pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
   // This is slightly sketchy since |report| has been freed, but it nonetheless
   // should not be in the set of doomed reports.
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(report));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(report));
 }
 
 // Test that the agent will combine reports destined for the same endpoint, even
@@ -264,19 +197,19 @@
   static const GURL kDifferentUrl("https://origin2/path");
   static const url::Origin kDifferentOrigin(kDifferentUrl);
 
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.SetClient(kDifferentOrigin, kEndpoint_,
-                   ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kDifferentOrigin, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
 
-  cache_.AddReport(kUrl_, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
-  cache_.AddReport(kDifferentUrl, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kDifferentUrl, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
   ASSERT_EQ(1u, pending_uploads().size());
 
   pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
@@ -290,29 +223,29 @@
   static const GURL kDifferentUrl("https://origin2/path");
   static const url::Origin kDifferentOrigin(kDifferentUrl);
 
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.SetClient(kDifferentOrigin, kEndpoint_,
-                   ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kDifferentOrigin, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
 
-  cache_.AddReport(kUrl_, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
   EXPECT_EQ(1u, pending_uploads().size());
 
-  cache_.AddReport(kDifferentUrl, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->AddReport(kDifferentUrl, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
   ASSERT_EQ(1u, pending_uploads().size());
 
   pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
   EXPECT_EQ(0u, pending_uploads().size());
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
   ASSERT_EQ(1u, pending_uploads().size());
 
   pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
@@ -325,30 +258,33 @@
 TEST_F(ReportingDeliveryAgentTest, SerializeUploadsToGroup) {
   static const GURL kDifferentEndpoint("https://endpoint2/");
 
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.SetClient(kOrigin_, kDifferentEndpoint,
-                   ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kDifferentEndpoint,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
 
-  cache_.AddReport(kUrl_, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
+  delivery_agent()->SendReports();
   EXPECT_EQ(1u, pending_uploads().size());
 
-  cache_.AddReport(kUrl_, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
-  EXPECT_EQ(1u, pending_uploads().size());
+  delivery_agent()->SendReports();
+  ASSERT_EQ(1u, pending_uploads().size());
 
   pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
   EXPECT_EQ(0u, pending_uploads().size());
 
-  agent_.SendReports();
-  EXPECT_EQ(1u, pending_uploads().size());
+  delivery_agent()->SendReports();
+  ASSERT_EQ(1u, pending_uploads().size());
+
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+  EXPECT_EQ(0u, pending_uploads().size());
 }
 
 // Tests that the agent will start parallel uploads to different groups within
@@ -357,21 +293,21 @@
   static const GURL kDifferentEndpoint("https://endpoint2/");
   static const std::string kDifferentGroup("group2");
 
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.SetClient(kOrigin_, kDifferentEndpoint,
-                   ReportingClient::Subdomains::EXCLUDE, kDifferentGroup,
-                   tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kDifferentEndpoint,
+                     ReportingClient::Subdomains::EXCLUDE, kDifferentGroup,
+                     tomorrow());
 
-  cache_.AddReport(kUrl_, kGroup_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
-  cache_.AddReport(kUrl_, kDifferentGroup, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), clock_.NowTicks(),
-                   0);
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl_, kDifferentGroup, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
 
-  agent_.SendReports();
-  EXPECT_EQ(2u, pending_uploads().size());
+  delivery_agent()->SendReports();
+  ASSERT_EQ(2u, pending_uploads().size());
 
   pending_uploads()[1]->Complete(ReportingUploader::Outcome::SUCCESS);
   pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
diff --git a/net/reporting/reporting_endpoint_manager.cc b/net/reporting/reporting_endpoint_manager.cc
index 6333a9a..3d533da 100644
--- a/net/reporting/reporting_endpoint_manager.cc
+++ b/net/reporting/reporting_endpoint_manager.cc
@@ -15,16 +15,14 @@
 #include "net/base/backoff_entry.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_policy.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
 namespace net {
 
-ReportingEndpointManager::ReportingEndpointManager(
-    base::TickClock* clock,
-    const ReportingCache* cache,
-    const BackoffEntry::Policy* backoff_policy)
-    : clock_(clock), cache_(cache), backoff_policy_(backoff_policy) {}
+ReportingEndpointManager::ReportingEndpointManager(ReportingContext* context)
+    : context_(context) {}
 
 ReportingEndpointManager::~ReportingEndpointManager() {}
 
@@ -33,11 +31,11 @@
     const std::string& group,
     GURL* endpoint_url_out) {
   std::vector<const ReportingClient*> clients;
-  cache_->GetClientsForOriginAndGroup(origin, group, &clients);
+  cache()->GetClientsForOriginAndGroup(origin, group, &clients);
 
   // Filter out expired, pending, and backed-off endpoints.
   std::vector<const ReportingClient*> available_clients;
-  base::TimeTicks now = clock_->NowTicks();
+  base::TimeTicks now = tick_clock()->NowTicks();
   for (const ReportingClient* client : clients) {
     if (client->expires < now)
       continue;
@@ -73,8 +71,8 @@
 void ReportingEndpointManager::InformOfEndpointRequest(const GURL& endpoint,
                                                        bool succeeded) {
   if (!base::ContainsKey(endpoint_backoff_, endpoint)) {
-    endpoint_backoff_[endpoint] =
-        base::MakeUnique<BackoffEntry>(backoff_policy_, clock_);
+    endpoint_backoff_[endpoint] = base::MakeUnique<BackoffEntry>(
+        &policy().endpoint_backoff_policy, tick_clock());
   }
   endpoint_backoff_[endpoint]->InformOfRequest(succeeded);
 }
diff --git a/net/reporting/reporting_endpoint_manager.h b/net/reporting/reporting_endpoint_manager.h
index c550d5e..e3cc827 100644
--- a/net/reporting/reporting_endpoint_manager.h
+++ b/net/reporting/reporting_endpoint_manager.h
@@ -11,8 +11,10 @@
 #include <string>
 
 #include "base/macros.h"
+#include "base/time/tick_clock.h"
 #include "net/base/backoff_entry.h"
 #include "net/base/net_export.h"
+#include "net/reporting/reporting_context.h"
 
 class GURL;
 
@@ -27,16 +29,15 @@
 namespace net {
 
 class ReportingCache;
+struct ReportingPolicy;
 
 // Keeps track of which endpoints are pending (have active delivery attempts to
 // them) or in exponential backoff after one or more failures, and chooses an
 // endpoint from an endpoint group to receive reports for an origin.
 class NET_EXPORT ReportingEndpointManager {
  public:
-  // Note: All three parameters must outlive the endpoint manager.
-  ReportingEndpointManager(base::TickClock* clock,
-                           const ReportingCache* cache,
-                           const BackoffEntry::Policy* backoff_policy);
+  // |context| must outlive the ReportingEndpointManager.
+  ReportingEndpointManager(ReportingContext* context);
   ~ReportingEndpointManager();
 
   // Finds an endpoint configured by |origin| in group |group| that is not
@@ -64,9 +65,11 @@
   void InformOfEndpointRequest(const GURL& endpoint, bool succeeded);
 
  private:
-  base::TickClock* clock_;
-  const ReportingCache* cache_;
-  const BackoffEntry::Policy* backoff_policy_;
+  const ReportingPolicy& policy() { return context_->policy(); }
+  base::TickClock* tick_clock() { return context_->tick_clock(); }
+  ReportingCache* cache() { return context_->cache(); }
+
+  ReportingContext* context_;
 
   std::set<GURL> pending_endpoints_;
   std::map<GURL, std::unique_ptr<net::BackoffEntry>> endpoint_backoff_;
diff --git a/net/reporting/reporting_endpoint_manager_unittest.cc b/net/reporting/reporting_endpoint_manager_unittest.cc
index f1d5003..113128db 100644
--- a/net/reporting/reporting_endpoint_manager_unittest.cc
+++ b/net/reporting/reporting_endpoint_manager_unittest.cc
@@ -11,6 +11,7 @@
 #include "net/base/backoff_entry.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_policy.h"
 #include "net/reporting/reporting_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -19,175 +20,150 @@
 namespace net {
 namespace {
 
-class ReportingEndpointManagerTest : public ::testing::Test {
+class ReportingEndpointManagerTest : public ReportingTestBase {
  protected:
-  ReportingEndpointManagerTest()
-      : manager_(&clock_, &cache_, &backoff_policy_) {
-    backoff_policy_.num_errors_to_ignore = 0;
-    backoff_policy_.initial_delay_ms = 60000;
-    backoff_policy_.multiply_factor = 2.0;
-    backoff_policy_.jitter_factor = 0.0;
-    backoff_policy_.maximum_backoff_ms = -1;
-    backoff_policy_.entry_lifetime_ms = 0;
-    backoff_policy_.always_use_initial_delay = false;
-  }
-
-  base::TimeTicks yesterday() {
-    return clock_.NowTicks() - base::TimeDelta::FromDays(1);
-  }
-
-  base::TimeTicks tomorrow() {
-    return clock_.NowTicks() + base::TimeDelta::FromDays(1);
-  }
-
   const url::Origin kOrigin_ = url::Origin(GURL("https://origin/"));
   const GURL kEndpoint_ = GURL("https://endpoint/");
   const std::string kGroup_ = "group";
-
-  base::SimpleTestTickClock clock_;
-  ReportingCache cache_;
-  BackoffEntry::Policy backoff_policy_;
-  ReportingEndpointManager manager_;
 };
 
 TEST_F(ReportingEndpointManagerTest, NoEndpoint) {
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 }
 
 TEST_F(ReportingEndpointManagerTest, Endpoint) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
 
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
   EXPECT_EQ(kEndpoint_, endpoint_url);
 }
 
 TEST_F(ReportingEndpointManagerTest, ExpiredEndpoint) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, yesterday());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, yesterday());
 
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 }
 
 TEST_F(ReportingEndpointManagerTest, PendingEndpoint) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
 
-  manager_.SetEndpointPending(kEndpoint_);
+  endpoint_manager()->SetEndpointPending(kEndpoint_);
 
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
-  manager_.ClearEndpointPending(kEndpoint_);
+  endpoint_manager()->ClearEndpointPending(kEndpoint_);
 
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
   EXPECT_EQ(kEndpoint_, endpoint_url);
 }
 
 TEST_F(ReportingEndpointManagerTest, BackedOffEndpoint) {
-  ASSERT_EQ(2.0, backoff_policy_.multiply_factor);
+  ASSERT_EQ(2.0, policy().endpoint_backoff_policy.multiply_factor);
 
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
+  base::TimeDelta initial_delay = base::TimeDelta::FromMilliseconds(
+      policy().endpoint_backoff_policy.initial_delay_ms);
 
-  manager_.InformOfEndpointRequest(kEndpoint_, false);
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
 
   // After one failure, endpoint is in exponential backoff.
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
   // After initial delay, endpoint is usable again.
-  clock_.Advance(
-      base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
+  tick_clock()->Advance(initial_delay);
 
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
   EXPECT_EQ(kEndpoint_, endpoint_url);
 
-  manager_.InformOfEndpointRequest(kEndpoint_, false);
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
 
   // After a second failure, endpoint is backed off again.
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
-  clock_.Advance(
-      base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
+  tick_clock()->Advance(initial_delay);
 
   // Next backoff is longer -- 2x the first -- so endpoint isn't usable yet.
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
-  clock_.Advance(
-      base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
+  tick_clock()->Advance(initial_delay);
 
   // After 2x the initial delay, the endpoint is usable again.
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
   EXPECT_EQ(kEndpoint_, endpoint_url);
 
-  manager_.InformOfEndpointRequest(kEndpoint_, true);
-  manager_.InformOfEndpointRequest(kEndpoint_, true);
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, true);
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, true);
 
   // Two more successful requests should reset the backoff to the initial delay
   // again.
-  manager_.InformOfEndpointRequest(kEndpoint_, false);
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
 
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
-  clock_.Advance(
-      base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
+  tick_clock()->Advance(initial_delay);
 
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
 }
 
 // Make sure that multiple endpoints will all be returned at some point, to
 // avoid accidentally or intentionally implementing any priority ordering.
 TEST_F(ReportingEndpointManagerTest, RandomEndpoint) {
-  static const GURL kEndpoint1("https://endpoint1/");
-  static const GURL kEndpoint2("https://endpoint2/");
+  static const GURL kEndpoint_1("https://endpoint1/");
+  static const GURL kEndpoint_2("https://endpoint2/");
   static const int kMaxAttempts = 20;
 
-  cache_.SetClient(kOrigin_, kEndpoint1, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.SetClient(kOrigin_, kEndpoint2, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_1,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_2,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
 
   bool endpoint1_seen = false;
   bool endpoint2_seen = false;
 
   for (int i = 0; i < kMaxAttempts; i++) {
     GURL endpoint_url;
-    bool found_endpoint = manager_.FindEndpointForOriginAndGroup(
+    bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
         kOrigin_, kGroup_, &endpoint_url);
     ASSERT_TRUE(found_endpoint);
-    ASSERT_TRUE(endpoint_url == kEndpoint1 || endpoint_url == kEndpoint2);
+    ASSERT_TRUE(endpoint_url == kEndpoint_1 || endpoint_url == kEndpoint_2);
 
-    if (endpoint_url == kEndpoint1)
+    if (endpoint_url == kEndpoint_1)
       endpoint1_seen = true;
-    else if (endpoint_url == kEndpoint2)
+    else if (endpoint_url == kEndpoint_2)
       endpoint2_seen = true;
 
     if (endpoint1_seen && endpoint2_seen)
diff --git a/net/reporting/reporting_header_parser.cc b/net/reporting/reporting_header_parser.cc
index 2bf6ddc3..8dbcb8e 100644
--- a/net/reporting/reporting_header_parser.cc
+++ b/net/reporting/reporting_header_parser.cc
@@ -8,11 +8,11 @@
 
 #include "base/json/json_reader.h"
 #include "base/logging.h"
+#include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "net/reporting/reporting_cache.h"
-#include "url/gurl.h"
-#include "url/origin.h"
+#include "net/reporting/reporting_context.h"
 
 namespace net {
 
@@ -27,8 +27,7 @@
 }  // namespace
 
 // static
-void ReportingHeaderParser::ParseHeader(ReportingCache* cache,
-                                        base::TimeTicks now,
+void ReportingHeaderParser::ParseHeader(ReportingContext* context,
                                         const GURL& url,
                                         const std::string& json_value) {
   DCHECK(url.SchemeIsCryptographic());
@@ -42,6 +41,8 @@
   bool is_list = value->GetAsList(&list);
   DCHECK(is_list);
 
+  ReportingCache* cache = context->cache();
+  base::TimeTicks now = context->tick_clock()->NowTicks();
   for (size_t i = 0; i < list->GetSize(); i++) {
     const base::Value* endpoint = nullptr;
     bool got_endpoint = list->Get(i, &endpoint);
diff --git a/net/reporting/reporting_header_parser.h b/net/reporting/reporting_header_parser.h
index 22fe4f3..2d7ac6ee 100644
--- a/net/reporting/reporting_header_parser.h
+++ b/net/reporting/reporting_header_parser.h
@@ -20,16 +20,11 @@
 namespace net {
 
 class ReportingCache;
+class ReportingContext;
 
-// Parses Report-To headers and writes the endpoint configurations to the
-// ReportingCache.
 class NET_EXPORT ReportingHeaderParser {
  public:
-  // Parses the normalized Report-To header value |json_value| sent in response
-  // to a request for |url| at |now|, and applies the endpoint configurations
-  // to |cache|.
-  static void ParseHeader(ReportingCache* cache,
-                          base::TimeTicks now,
+  static void ParseHeader(ReportingContext* context,
                           const GURL& url,
                           const std::string& json_value);
 
diff --git a/net/reporting/reporting_header_parser_unittest.cc b/net/reporting/reporting_header_parser_unittest.cc
index a4f70e2..69210f2 100644
--- a/net/reporting/reporting_header_parser_unittest.cc
+++ b/net/reporting/reporting_header_parser_unittest.cc
@@ -21,21 +21,13 @@
 namespace net {
 namespace {
 
-class ReportingHeaderParserTest : public ::testing::Test {
+class ReportingHeaderParserTest : public ReportingTestBase {
  protected:
-  void ParseHeader(const GURL& url, const std::string& header_value) {
-    ReportingHeaderParser::ParseHeader(&cache_, clock_.NowTicks(), url,
-                                       header_value);
-  }
-
   const GURL kUrl_ = GURL("https://origin/path");
   const url::Origin kOrigin_ = url::Origin(GURL("https://origin/"));
   const GURL kEndpoint_ = GURL("https://endpoint/");
   const std::string kGroup_ = "group";
   const std::string kType_ = "type";
-
-  base::SimpleTestTickClock clock_;
-  ReportingCache cache_;
 };
 
 TEST_F(ReportingHeaderParserTest, Invalid) {
@@ -64,10 +56,11 @@
 
   for (size_t i = 0; i < arraysize(kInvalidHeaderTestCases); ++i) {
     auto& test_case = kInvalidHeaderTestCases[i];
-    ParseHeader(kUrl_, test_case.header_value);
+    ReportingHeaderParser::ParseHeader(context(), kUrl_,
+                                       test_case.header_value);
 
     std::vector<const ReportingClient*> clients;
-    cache_.GetClients(&clients);
+    cache()->GetClients(&clients);
     EXPECT_TRUE(clients.empty())
         << "Invalid Report-To header (" << test_case.description << ": \""
         << test_case.header_value << "\") parsed as valid.";
@@ -75,36 +68,41 @@
 }
 
 TEST_F(ReportingHeaderParserTest, Valid) {
-  ParseHeader(kUrl_,
-              "{\"url\":\"" + kEndpoint_.spec() + "\",\"max-age\":86400}");
+  ReportingHeaderParser::ParseHeader(
+      context(), kUrl_,
+      "{\"url\":\"" + kEndpoint_.spec() + "\",\"max-age\":86400}");
 
   const ReportingClient* client =
-      FindClientInCache(&cache_, kOrigin_, kEndpoint_);
+      FindClientInCache(cache(), kOrigin_, kEndpoint_);
   ASSERT_TRUE(client);
   EXPECT_EQ(kOrigin_, client->origin);
   EXPECT_EQ(kEndpoint_, client->endpoint);
   EXPECT_EQ(ReportingClient::Subdomains::EXCLUDE, client->subdomains);
-  EXPECT_EQ(86400, (client->expires - clock_.NowTicks()).InSeconds());
+  EXPECT_EQ(86400, (client->expires - tick_clock()->NowTicks()).InSeconds());
 }
 
 TEST_F(ReportingHeaderParserTest, Subdomains) {
-  ParseHeader(kUrl_, "{\"url\":\"" + kEndpoint_.spec() +
-                         "\",\"max-age\":86400,"
-                         "\"includeSubdomains\":true}");
+  ReportingHeaderParser::ParseHeader(context(), kUrl_,
+                                     "{\"url\":\"" + kEndpoint_.spec() +
+                                         "\",\"max-age\":86400,"
+                                         "\"includeSubdomains\":true}");
 
   const ReportingClient* client =
-      FindClientInCache(&cache_, kOrigin_, kEndpoint_);
+      FindClientInCache(cache(), kOrigin_, kEndpoint_);
   ASSERT_TRUE(client);
   EXPECT_EQ(ReportingClient::Subdomains::INCLUDE, client->subdomains);
 }
 
 TEST_F(ReportingHeaderParserTest, ZeroMaxAge) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, clock_.NowTicks() + base::TimeDelta::FromDays(1));
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(1));
 
-  ParseHeader(kUrl_, "{\"url\":\"" + kEndpoint_.spec() + "\",\"max-age\":0}");
+  ReportingHeaderParser::ParseHeader(
+      context(), kUrl_,
+      "{\"url\":\"" + kEndpoint_.spec() + "\",\"max-age\":0}");
 
-  EXPECT_EQ(nullptr, FindClientInCache(&cache_, kOrigin_, kEndpoint_));
+  EXPECT_EQ(nullptr, FindClientInCache(cache(), kOrigin_, kEndpoint_));
 }
 
 }  // namespace
diff --git a/net/reporting/reporting_observer.cc b/net/reporting/reporting_observer.cc
new file mode 100644
index 0000000..5e8d778
--- /dev/null
+++ b/net/reporting/reporting_observer.cc
@@ -0,0 +1,15 @@
+// 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 "net/reporting/reporting_observer.h"
+
+namespace net {
+
+void ReportingObserver::OnCacheUpdated() {}
+
+ReportingObserver::ReportingObserver() {}
+
+ReportingObserver::~ReportingObserver() {}
+
+}  // namespace net
diff --git a/net/reporting/reporting_observer.h b/net/reporting/reporting_observer.h
new file mode 100644
index 0000000..fe2ab5c
--- /dev/null
+++ b/net/reporting/reporting_observer.h
@@ -0,0 +1,27 @@
+// 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.
+
+#ifndef NET_REPORTING_REPORTING_OBSERVER_H_
+#define NET_REPORTING_REPORTING_OBSERVER_H_
+
+#include "base/macros.h"
+#include "net/base/net_export.h"
+
+namespace net {
+
+class NET_EXPORT ReportingObserver {
+ public:
+  virtual void OnCacheUpdated();
+
+ protected:
+  ReportingObserver();
+
+  ~ReportingObserver();
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingObserver);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_OBSERVER_H_
diff --git a/net/reporting/reporting_policy.cc b/net/reporting/reporting_policy.cc
new file mode 100644
index 0000000..6d36f84
--- /dev/null
+++ b/net/reporting/reporting_policy.cc
@@ -0,0 +1,24 @@
+// 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 "net/reporting/reporting_policy.h"
+
+namespace net {
+
+ReportingPolicy::ReportingPolicy() {
+  endpoint_backoff_policy.num_errors_to_ignore = 0;
+  endpoint_backoff_policy.initial_delay_ms = 60 * 1000;  // 1 minute
+  endpoint_backoff_policy.multiply_factor = 2.0;
+  endpoint_backoff_policy.jitter_factor = 0.1;
+  endpoint_backoff_policy.maximum_backoff_ms = -1;  // 1 hour
+  endpoint_backoff_policy.entry_lifetime_ms = -1;   // infinite
+  endpoint_backoff_policy.always_use_initial_delay = false;
+}
+
+ReportingPolicy::ReportingPolicy(const ReportingPolicy& other)
+    : endpoint_backoff_policy(other.endpoint_backoff_policy) {}
+
+ReportingPolicy::~ReportingPolicy() {}
+
+}  // namespace net
diff --git a/net/reporting/reporting_policy.h b/net/reporting/reporting_policy.h
new file mode 100644
index 0000000..5f472d7f
--- /dev/null
+++ b/net/reporting/reporting_policy.h
@@ -0,0 +1,27 @@
+// 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.
+
+#ifndef NET_REPORTING_REPORTING_POLICY_H_
+#define NET_REPORTING_REPORTING_POLICY_H_
+
+#include "base/time/time.h"
+#include "net/base/backoff_entry.h"
+#include "net/base/net_export.h"
+
+namespace net {
+
+// Various policy knobs for the Reporting system.
+struct NET_EXPORT ReportingPolicy {
+  // Provides a reasonable default for use in a browser embedder.
+  ReportingPolicy();
+  ReportingPolicy(const ReportingPolicy& other);
+  ~ReportingPolicy();
+
+  // Backoff policy for failing endpoints.
+  BackoffEntry::Policy endpoint_backoff_policy;
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_POLICY_H_
diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_service.cc
new file mode 100644
index 0000000..128c510
--- /dev/null
+++ b/net/reporting/reporting_service.cc
@@ -0,0 +1,70 @@
+// 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 "net/reporting/reporting_service.h"
+
+#include <memory>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/memory/ptr_util.h"
+#include "base/time/tick_clock.h"
+#include "base/time/time.h"
+#include "base/values.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_header_parser.h"
+#include "url/gurl.h"
+
+namespace net {
+
+namespace {
+
+class ReportingServiceImpl : public ReportingService {
+ public:
+  ReportingServiceImpl(std::unique_ptr<ReportingContext> context)
+      : context_(std::move(context)) {}
+
+  ~ReportingServiceImpl() override {}
+
+  void QueueReport(const GURL& url,
+                   const std::string& group,
+                   const std::string& type,
+                   std::unique_ptr<const base::Value> body) override {
+    context_->cache()->AddReport(url, group, type, std::move(body),
+                                 context_->tick_clock()->NowTicks(), 0);
+  }
+
+  void ProcessHeader(const GURL& url,
+                     const std::string& header_value) override {
+    ReportingHeaderParser::ParseHeader(context_.get(), url, header_value);
+  }
+
+ private:
+  std::unique_ptr<ReportingContext> context_;
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingServiceImpl);
+};
+
+}  // namespace
+
+ReportingService::~ReportingService() {}
+
+// static
+std::unique_ptr<ReportingService> ReportingService::Create(
+    const ReportingPolicy& policy,
+    URLRequestContext* request_context,
+    std::unique_ptr<ReportingDelegate> delegate) {
+  return base::MakeUnique<ReportingServiceImpl>(
+      ReportingContext::Create(policy, std::move(delegate), request_context));
+}
+
+// static
+std::unique_ptr<ReportingService> ReportingService::CreateForTesting(
+    std::unique_ptr<ReportingContext> reporting_context) {
+  return base::MakeUnique<ReportingServiceImpl>(std::move(reporting_context));
+}
+
+}  // namespace net
diff --git a/net/reporting/reporting_service.h b/net/reporting/reporting_service.h
new file mode 100644
index 0000000..c305410
--- /dev/null
+++ b/net/reporting/reporting_service.h
@@ -0,0 +1,74 @@
+// 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.
+
+#ifndef NET_REPORTING_REPORTING_SERVICE_H_
+#define NET_REPORTING_REPORTING_SERVICE_H_
+
+#include <memory>
+#include <string>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "net/base/net_export.h"
+
+class GURL;
+
+namespace base {
+class Value;
+}  // namespace
+
+namespace net {
+
+class ReportingContext;
+class ReportingDelegate;
+struct ReportingPolicy;
+class URLRequestContext;
+
+// The external interface to the Reporting system, used by the embedder of //net
+// and also other parts of //net.
+class NET_EXPORT ReportingService {
+ public:
+  virtual ~ReportingService();
+
+  // Creates a ReportingService. |policy| will be copied. |request_context| must
+  // outlive the ReportingService. The ReportingService will take ownership of
+  // |delegate| and destroy it when the service is destroyed.
+  static std::unique_ptr<ReportingService> Create(
+      const ReportingPolicy& policy,
+      URLRequestContext* request_context,
+      std::unique_ptr<ReportingDelegate> delegate);
+
+  // Creates a ReportingService for testing purposes using an
+  // already-constructed ReportingContext. The ReportingService will take
+  // ownership of |reporting_context| and destroy it when the service is
+  // destroyed.
+  static std::unique_ptr<ReportingService> CreateForTesting(
+      std::unique_ptr<ReportingContext> reporting_context);
+
+  // Queues a report for delivery. |url| is the URL that originated the report.
+  // |group| is the endpoint group to which the report should be delivered.
+  // |type| is the type of the report. |body| is the body of the report.
+  //
+  // The Reporting system will take ownership of |body|; all other parameters
+  // will be copied.
+  virtual void QueueReport(const GURL& url,
+                           const std::string& group,
+                           const std::string& type,
+                           std::unique_ptr<const base::Value> body) = 0;
+
+  // Processes a Report-To header. |url| is the URL that originated the header;
+  // |header_value| is the normalized value of the Report-To header.
+  virtual void ProcessHeader(const GURL& url,
+                             const std::string& header_value) = 0;
+
+ protected:
+  ReportingService() {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ReportingService);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_SERVICE_H_
diff --git a/net/reporting/reporting_service_unittest.cc b/net/reporting/reporting_service_unittest.cc
new file mode 100644
index 0000000..20c8656
--- /dev/null
+++ b/net/reporting/reporting_service_unittest.cc
@@ -0,0 +1,78 @@
+// 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 "net/reporting/reporting_service.h"
+
+#include <memory>
+#include <string>
+
+#include "base/memory/ptr_util.h"
+#include "base/time/tick_clock.h"
+#include "base/values.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_policy.h"
+#include "net/reporting/reporting_report.h"
+#include "net/reporting/reporting_service.h"
+#include "net/reporting/reporting_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+namespace {
+
+class ReportingServiceTest : public ::testing::Test {
+ protected:
+  const GURL kUrl_ = GURL("https://origin/path");
+  const url::Origin kOrigin_ = url::Origin(kUrl_);
+  const GURL kEndpoint_ = GURL("https://endpoint/");
+  const std::string kGroup_ = "group";
+  const std::string kType_ = "type";
+
+  ReportingServiceTest()
+      : context_(new TestReportingContext(ReportingPolicy())),
+        service_(
+            ReportingService::CreateForTesting(base::WrapUnique(context_))) {}
+
+  TestReportingContext* context() { return context_; }
+  ReportingService* service() { return service_.get(); }
+
+ private:
+  TestReportingContext* context_;
+  std::unique_ptr<ReportingService> service_;
+};
+
+TEST_F(ReportingServiceTest, QueueReport) {
+  service()->QueueReport(kUrl_, kGroup_, kType_,
+                         base::MakeUnique<base::DictionaryValue>());
+
+  std::vector<const ReportingReport*> reports;
+  context()->cache()->GetReports(&reports);
+  ASSERT_EQ(1u, reports.size());
+  EXPECT_EQ(kUrl_, reports[0]->url);
+  EXPECT_EQ(kGroup_, reports[0]->group);
+  EXPECT_EQ(kType_, reports[0]->type);
+}
+
+TEST_F(ReportingServiceTest, ProcessHeader) {
+  service()->ProcessHeader(kUrl_, "{\"url\":\"" + kEndpoint_.spec() +
+                                      "\","
+                                      "\"group\":\"" +
+                                      kGroup_ +
+                                      "\","
+                                      "\"max-age\":86400}");
+
+  const ReportingClient* client =
+      FindClientInCache(context()->cache(), kOrigin_, kEndpoint_);
+  ASSERT_TRUE(client != nullptr);
+  EXPECT_EQ(kOrigin_, client->origin);
+  EXPECT_EQ(kEndpoint_, client->endpoint);
+  EXPECT_EQ(ReportingClient::Subdomains::EXCLUDE, client->subdomains);
+  EXPECT_EQ(kGroup_, client->group);
+  EXPECT_EQ(context()->tick_clock()->NowTicks() + base::TimeDelta::FromDays(1),
+            client->expires);
+}
+
+}  // namespace
+}  // namespace net
diff --git a/net/reporting/reporting_test_util.cc b/net/reporting/reporting_test_util.cc
index 5f59c449..946e1e0 100644
--- a/net/reporting/reporting_test_util.cc
+++ b/net/reporting/reporting_test_util.cc
@@ -4,15 +4,77 @@
 
 #include "net/reporting/reporting_test_util.h"
 
+#include <memory>
+#include <string>
 #include <vector>
 
+#include "base/bind.h"
+#include "base/json/json_reader.h"
+#include "base/memory/ptr_util.h"
+#include "base/test/simple_test_clock.h"
+#include "base/test/simple_test_tick_clock.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_policy.h"
+#include "net/reporting/reporting_uploader.h"
+#include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
 namespace net {
 
+namespace {
+
+class PendingUploadImpl : public TestReportingUploader::PendingUpload {
+ public:
+  PendingUploadImpl(
+      const GURL& url,
+      const std::string& json,
+      const ReportingUploader::Callback& callback,
+      const base::Callback<void(PendingUpload*)>& complete_callback)
+      : url_(url),
+        json_(json),
+        callback_(callback),
+        complete_callback_(complete_callback) {}
+
+  ~PendingUploadImpl() override {}
+
+  // PendingUpload implementationP:
+  const GURL& url() const override { return url_; }
+  const std::string& json() const override { return json_; }
+  std::unique_ptr<base::Value> GetValue() const override {
+    return base::JSONReader::Read(json_);
+  }
+
+  void Complete(ReportingUploader::Outcome outcome) override {
+    callback_.Run(outcome);
+    // Deletes |this|.
+    complete_callback_.Run(this);
+  }
+
+ private:
+  GURL url_;
+  std::string json_;
+  ReportingUploader::Callback callback_;
+  base::Callback<void(PendingUpload*)> complete_callback_;
+};
+
+void ErasePendingUpload(
+    std::vector<std::unique_ptr<TestReportingUploader::PendingUpload>>* uploads,
+    TestReportingUploader::PendingUpload* upload) {
+  for (auto it = uploads->begin(); it != uploads->end(); ++it) {
+    if (it->get() == upload) {
+      uploads->erase(it);
+      return;
+    }
+  }
+  NOTREACHED();
+}
+
+}  // namespace
+
 const ReportingClient* FindClientInCache(const ReportingCache* cache,
                                          const url::Origin& origin,
                                          const GURL& endpoint) {
@@ -25,4 +87,61 @@
   return nullptr;
 }
 
+TestReportingDelegate::TestReportingDelegate() {}
+TestReportingDelegate::~TestReportingDelegate() {}
+
+void TestReportingDelegate::PersistData(
+    std::unique_ptr<const base::Value> persisted_data) {
+  persisted_data_ = std::move(persisted_data);
+}
+
+std::unique_ptr<const base::Value> TestReportingDelegate::GetPersistedData() {
+  if (!persisted_data_)
+    return std::unique_ptr<const base::Value>();
+  return persisted_data_->CreateDeepCopy();
+}
+
+TestReportingUploader::PendingUpload::~PendingUpload() {}
+TestReportingUploader::PendingUpload::PendingUpload() {}
+
+TestReportingUploader::TestReportingUploader() {}
+TestReportingUploader::~TestReportingUploader() {}
+
+void TestReportingUploader::StartUpload(const GURL& url,
+                                        const std::string& json,
+                                        const Callback& callback) {
+  pending_uploads_.push_back(base::MakeUnique<PendingUploadImpl>(
+      url, json, callback, base::Bind(&ErasePendingUpload, &pending_uploads_)));
+}
+
+TestReportingContext::TestReportingContext(const ReportingPolicy& policy)
+    : ReportingContext(policy,
+                       base::MakeUnique<TestReportingDelegate>(),
+                       base::MakeUnique<base::SimpleTestClock>(),
+                       base::MakeUnique<base::SimpleTestTickClock>(),
+                       base::MakeUnique<TestReportingUploader>()) {}
+
+TestReportingContext::~TestReportingContext() {}
+
+ReportingTestBase::ReportingTestBase() {
+  // For tests, disable jitter.
+  ReportingPolicy policy;
+  policy.endpoint_backoff_policy.jitter_factor = 0.0;
+  UsePolicy(policy);
+}
+
+ReportingTestBase::~ReportingTestBase() {}
+
+void ReportingTestBase::UsePolicy(const ReportingPolicy& policy) {
+  context_ = base::MakeUnique<TestReportingContext>(policy);
+}
+
+base::TimeTicks ReportingTestBase::yesterday() {
+  return tick_clock()->NowTicks() - base::TimeDelta::FromDays(1);
+}
+
+base::TimeTicks ReportingTestBase::tomorrow() {
+  return tick_clock()->NowTicks() + base::TimeDelta::FromDays(1);
+}
+
 }  // namespace net
diff --git a/net/reporting/reporting_test_util.h b/net/reporting/reporting_test_util.h
index bb279ebc..9aeaa2e 100644
--- a/net/reporting/reporting_test_util.h
+++ b/net/reporting/reporting_test_util.h
@@ -5,8 +5,24 @@
 #ifndef NET_REPORTING_REPORTING_TEST_UTIL_H_
 #define NET_REPORTING_REPORTING_TEST_UTIL_H_
 
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_uploader.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
 class GURL;
 
+namespace base {
+class SimpleTestClock;
+class SimpleTestTickClock;
+class Value;
+}  // namespace base
+
 namespace url {
 class Origin;
 }  // namespace url
@@ -22,6 +38,122 @@
                                          const url::Origin& origin,
                                          const GURL& endpoint);
 
+// A simple implementation of ReportingDelegate that only persists data in RAM.
+class TestReportingDelegate : public ReportingDelegate {
+ public:
+  TestReportingDelegate();
+
+  ~TestReportingDelegate() override;
+
+  // ReportingDelegate implementation:
+  std::unique_ptr<const base::Value> GetPersistedData() override;
+
+  void PersistData(std::unique_ptr<const base::Value> persisted_data) override;
+
+ private:
+  std::unique_ptr<const base::Value> persisted_data_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestReportingDelegate);
+};
+
+// A test implementation of ReportingUploader that holds uploads for tests to
+// examine and complete with a specified outcome.
+class TestReportingUploader : public ReportingUploader {
+ public:
+  class PendingUpload {
+   public:
+    virtual ~PendingUpload();
+
+    virtual const GURL& url() const = 0;
+    virtual const std::string& json() const = 0;
+    virtual std::unique_ptr<base::Value> GetValue() const = 0;
+
+    virtual void Complete(Outcome outcome) = 0;
+
+   protected:
+    PendingUpload();
+  };
+
+  TestReportingUploader();
+  ~TestReportingUploader() override;
+
+  const std::vector<std::unique_ptr<PendingUpload>>& pending_uploads() const {
+    return pending_uploads_;
+  }
+
+  // ReportingUploader implementation:
+  void StartUpload(const GURL& url,
+                   const std::string& json,
+                   const Callback& callback) override;
+
+ private:
+  std::vector<std::unique_ptr<PendingUpload>> pending_uploads_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestReportingUploader);
+};
+
+// A test implementation of ReportingContext that uses test versions of
+// ReportingDelegate, Clock, TickClock, and ReportingUploader.
+class TestReportingContext : public ReportingContext {
+ public:
+  TestReportingContext(const ReportingPolicy& policy);
+  ~TestReportingContext();
+
+  TestReportingDelegate* test_delegate() {
+    return reinterpret_cast<TestReportingDelegate*>(delegate());
+  }
+  base::SimpleTestClock* test_clock() {
+    return reinterpret_cast<base::SimpleTestClock*>(clock());
+  }
+  base::SimpleTestTickClock* test_tick_clock() {
+    return reinterpret_cast<base::SimpleTestTickClock*>(tick_clock());
+  }
+  TestReportingUploader* test_uploader() {
+    return reinterpret_cast<TestReportingUploader*>(uploader());
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TestReportingContext);
+};
+
+// A unit test base class that provides a TestReportingContext and shorthand
+// getters.
+class ReportingTestBase : public ::testing::Test {
+ protected:
+  ReportingTestBase();
+  ~ReportingTestBase() override;
+
+  void UsePolicy(const ReportingPolicy& policy);
+
+  TestReportingContext* context() { return context_.get(); }
+
+  const ReportingPolicy& policy() { return context_->policy(); }
+
+  TestReportingDelegate* delegate() { return context_->test_delegate(); }
+  base::SimpleTestClock* clock() { return context_->test_clock(); }
+  base::SimpleTestTickClock* tick_clock() {
+    return context_->test_tick_clock();
+  }
+  TestReportingUploader* uploader() { return context_->test_uploader(); }
+
+  ReportingCache* cache() { return context_->cache(); }
+  ReportingEndpointManager* endpoint_manager() {
+    return context_->endpoint_manager();
+  }
+  ReportingDeliveryAgent* delivery_agent() {
+    return context_->delivery_agent();
+  }
+
+  base::TimeTicks yesterday();
+
+  base::TimeTicks tomorrow();
+
+ private:
+  std::unique_ptr<TestReportingContext> context_;
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingTestBase);
+};
+
 }  // namespace net
 
 #endif  // NET_REPORING_REPORTING_TEST_UTIL_H_
diff --git a/ppapi/api/dev/ppb_audio_output_dev.idl b/ppapi/api/dev/ppb_audio_output_dev.idl
new file mode 100644
index 0000000..edd8679c
--- /dev/null
+++ b/ppapi/api/dev/ppb_audio_output_dev.idl
@@ -0,0 +1,229 @@
+/* Copyright (c) 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.
+ */
+
+/**
+ * This file defines the <code>PPB_AudioOutput_dev</code> interface, which
+ * provides realtime stereo audio streaming capabilities.
+ */
+
+[generate_thunk]
+
+label Chrome {
+  M59 = 0.1
+};
+
+/**
+ * <code>PPB_AudioOutput_Callback</code> defines the type of an audio callback
+ * function used to fill the audio buffer with data. Please see the
+ * Create() function in the <code>PPB_AudioOutput</code> interface for
+ * more details on this callback.
+ *
+ * @param[out] sample_buffer A buffer to fill with audio data.
+ * @param[in] buffer_size_in_bytes The size of the buffer in bytes.
+ * @param[in] latency How long before the audio data is to be presented.
+ * @param[inout] user_data An opaque pointer that was passed into
+ * <code>PPB_AudioOutput.Create()</code>.
+ */
+typedef void PPB_AudioOutput_Callback([out] mem_t sample_buffer,
+                                      [in] uint32_t buffer_size_in_bytes,
+                                      [in] PP_TimeDelta latency,
+                                      [inout] mem_t user_data);
+
+/**
+ * The <code>PPB_AudioOutput</code> interface contains pointers to several
+ * functions for handling audio resources.
+ * Please see descriptions for each <code>PPB_AudioOutput</code> and
+ * <code>PPB_AudioConfig</code> function for more details. A C example using
+ * <code>PPB_AudioOutput</code> and <code>PPB_AudioConfig</code> follows.
+ *
+ * <strong>Example: </strong>
+ * 
+ * @code
+ * void audio_output_callback(void* sample_buffer,
+ *                            uint32_t buffer_size_in_bytes,
+ *                            PP_TimeDelta latency,
+ *                            void* user_data) {
+ *   ... quickly fill in the buffer with samples and return to caller ...
+ *  }
+ *
+ * ...Assume the application has cached the audio configuration interface in
+ * audio_config_interface and the audio interface in
+ * audio_output_interface...
+ *
+ * uint32_t count = audio_config_interface->RecommendSampleFrameCount(
+ *     PP_AUDIOSAMPLERATE_44100, 4096);
+ * PP_Resource pp_audio_config = audio_config_interface->CreateStereo16Bit(
+ *     pp_instance, PP_AUDIOSAMPLERATE_44100, count);
+ * PP_Resource pp_audio_output = audio_interface->Create(pp_instance,
+ *     pp_audio_config, audio_callback, NULL);
+ * audio_interface->EnumerateDevices(pp_audio_output, output_device_list,
+ *     callback);
+ * audio_interface->Open(pp_audio_output, device_ref, pp_audio_config,
+ *     audio_output_callback, user_data, callback);
+ * audio_output_interface->StartPlayback(pp_audio_output);
+ *
+ * ...audio_output_callback() will now be periodically invoked on a separate
+ * thread...
+ * @endcode
+ */
+
+[macro="PPB_AUDIO_OUTPUT_DEV_INTERFACE"]
+interface PPB_AudioOutput_Dev {
+  /**
+   * Creates an audio output resource.
+   *
+   * @param[in] instance A <code>PP_Instance</code> identifying one instance of
+   * a module.
+   *
+   * @return A <code>PP_Resource</code> corresponding to an audio output resource
+   * if successful, 0 if failed.
+   */
+  PP_Resource Create(
+      [in] PP_Instance instance);
+
+  /**
+   * Determines if the given resource is an audio output resource.
+   *
+   * @param[in] resource A <code>PP_Resource</code> containing a resource.
+   *
+   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if the given
+   * resource is an audio output resource, otherwise <code>PP_FALSE</code>.
+   */
+  PP_Bool IsAudioOutput(
+      [in] PP_Resource resource);
+
+  /**
+   * Enumerates audio output devices.
+   *
+   * @param[in] audio_output A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   * @param[in] output An output array which will receive
+   * <code>PPB_DeviceRef_Dev</code> resources on success. Please note that the
+   * ref count of those resources has already been increased by 1 for the
+   * caller.
+   * @param[in] callback A <code>PP_CompletionCallback</code> to run on
+   * completion.
+   *
+   * @return An error code from <code>pp_errors.h</code>.
+   */
+  int32_t EnumerateDevices(
+      [in] PP_Resource audio_output,
+      [in] PP_ArrayOutput output,
+      [in] PP_CompletionCallback callback);
+
+  /**
+   * Requests device change notifications.
+   *
+   * @param[in] audio_output A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   * @param[in] callback The callback to receive notifications. If not NULL, it
+   * will be called once for the currently available devices, and then every
+   * time the list of available devices changes. All calls will happen on the
+   * same thread as the one on which MonitorDeviceChange() is called. It will
+   * receive notifications until <code>audio_output</code> is destroyed or
+   * <code>MonitorDeviceChange()</code> is called to set a new callback for
+   * <code>audio_output</code>. You can pass NULL to cancel sending
+   * notifications.
+   * @param[inout] user_data An opaque pointer that will be passed to
+   * <code>callback</code>.
+   *
+   * @return An error code from <code>pp_errors.h</code>.
+   */
+  int32_t MonitorDeviceChange(
+      [in] PP_Resource audio_output,
+      [in] PP_MonitorDeviceChangeCallback callback,
+      [inout] mem_t user_data);
+
+  /**
+   * Open() opens an audio output device. No sound will be heard until
+   * StartPlayback() is called. The callback is called with the buffer address
+   * and given user data whenever the buffer needs to be filled. From within the
+   * callback, you should not call <code>PPB_AudioOutput</code> functions. The
+   * callback will be called on a different thread than the one which created
+   * the interface. For performance-critical applications (i.e. low-latency
+   * audio), the callback should avoid blocking or calling functions that can
+   * obtain locks, such as malloc. The layout and the size of the buffer passed
+   * to the audio callback will be determined by the device configuration and is
+   * specified in the <code>AudioConfig</code> documentation.
+   *
+   * @param[in] audio_output A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   * @param[in] device_ref Identifies an audio output device. It could be one of
+   * the resource in the array returned by EnumerateDevices(), or 0 which means
+   * the default device.
+   * @param[in] config A <code>PPB_AudioConfig</code> audio configuration
+   * resource.
+   * @param[in] audio_output_callback A <code>PPB_AudioOutput_Callback</code>
+   * function that will be called when audio buffer needs to be filled.
+   * @param[inout] user_data An opaque pointer that will be passed into
+   * <code>audio_output_callback</code>.
+   * @param[in] callback A <code>PP_CompletionCallback</code> to run when this
+   * open operation is completed.
+   *
+   * @return An error code from <code>pp_errors.h</code>.
+   */
+  int32_t Open(
+      [in] PP_Resource audio_output,
+      [in] PP_Resource device_ref,
+      [in] PP_Resource config,
+      [in] PPB_AudioOutput_Callback audio_output_callback,
+      [inout] mem_t user_data,
+      [in] PP_CompletionCallback callback);
+
+  /**
+   * GetCurrrentConfig() returns an audio config resource for the given audio
+   * output resource.
+   *
+   * @param[in] config A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   *
+   * @return A <code>PP_Resource</code> containing the audio config resource if
+   * successful.
+   */
+  PP_Resource GetCurrentConfig(
+      [in] PP_Resource audio_output);
+
+  /**
+   * StartPlayback() starts the playback of the audio output resource and begins
+   * periodically calling the callback.
+   *
+   * @param[in] config A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   *
+   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if
+   * successful, otherwise <code>PP_FALSE</code>. Also returns
+   * <code>PP_TRUE</code> (and be a no-op) if called while playback is already
+   * in progress.
+   */
+  PP_Bool StartPlayback(
+      [in] PP_Resource audio_output);
+
+  /**
+   * StopPlayback() stops the playback of the audio resource.
+   *
+   * @param[in] config A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   *
+   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if
+   * successful, otherwise <code>PP_FALSE</code>. Also returns
+   * <code>PP_TRUE</code> (and is a no-op) if called while playback is already
+   * stopped. If a callback is in progress, StopPlayback() will block until the
+   * callback completes.
+   */
+  PP_Bool StopPlayback(
+      [in] PP_Resource audio_output);
+
+  /**
+   * Close() closes the audio output device, and stops playback if necessary. It is
+   * not valid to call Open() again after a call to this method.
+   * If an audio output resource is destroyed while a device is still open, then
+   * it will be implicitly closed, so you are not required to call this method.
+   *
+   * @param[in] audio_output A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   */
+  void Close(
+      [in] PP_Resource audio_output);
+};
diff --git a/ppapi/api/dev/ppb_device_ref_dev.idl b/ppapi/api/dev/ppb_device_ref_dev.idl
index 98d1272..b613584 100644
--- a/ppapi/api/dev/ppb_device_ref_dev.idl
+++ b/ppapi/api/dev/ppb_device_ref_dev.idl
@@ -36,7 +36,8 @@
 enum PP_DeviceType_Dev {
   PP_DEVICETYPE_DEV_INVALID = 0,
   PP_DEVICETYPE_DEV_AUDIOCAPTURE = 1,
-  PP_DEVICETYPE_DEV_VIDEOCAPTURE = 2
+  PP_DEVICETYPE_DEV_VIDEOCAPTURE = 2,
+  PP_DEVICETYPE_DEV_AUDIOOUTPUT = 3
 };
 
 interface PPB_DeviceRef_Dev {
diff --git a/ppapi/c/BUILD.gn b/ppapi/c/BUILD.gn
index 9894dd9..cd3fda9d 100644
--- a/ppapi/c/BUILD.gn
+++ b/ppapi/c/BUILD.gn
@@ -87,6 +87,7 @@
     "dev/pp_video_capture_dev.h",
     "dev/pp_video_dev.h",
     "dev/ppb_audio_input_dev.h",
+    "dev/ppb_audio_output_dev.h",
     "dev/ppb_buffer_dev.h",
     "dev/ppb_char_set_dev.h",
     "dev/ppb_crypto_dev.h",
diff --git a/ppapi/c/dev/ppb_audio_output_dev.h b/ppapi/c/dev/ppb_audio_output_dev.h
new file mode 100644
index 0000000..7edfc42
--- /dev/null
+++ b/ppapi/c/dev/ppb_audio_output_dev.h
@@ -0,0 +1,249 @@
+/* Copyright (c) 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.
+ */
+
+/* From dev/ppb_audio_output_dev.idl modified Fri Apr  7 07:07:59 2017. */
+
+#ifndef PPAPI_C_DEV_PPB_AUDIO_OUTPUT_DEV_H_
+#define PPAPI_C_DEV_PPB_AUDIO_OUTPUT_DEV_H_
+
+#include "ppapi/c/dev/ppb_device_ref_dev.h"
+#include "ppapi/c/pp_array_output.h"
+#include "ppapi/c/pp_bool.h"
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_instance.h"
+#include "ppapi/c/pp_macros.h"
+#include "ppapi/c/pp_resource.h"
+#include "ppapi/c/pp_stdint.h"
+#include "ppapi/c/pp_time.h"
+
+#define PPB_AUDIO_OUTPUT_DEV_INTERFACE_0_1 "PPB_AudioOutput(Dev);0.1"
+#define PPB_AUDIO_OUTPUT_DEV_INTERFACE PPB_AUDIO_OUTPUT_DEV_INTERFACE_0_1
+
+/**
+ * @file
+ * This file defines the <code>PPB_AudioOutput_dev</code> interface, which
+ * provides realtime stereo audio streaming capabilities.
+ */
+
+
+/**
+ * @addtogroup Typedefs
+ * @{
+ */
+/**
+ * <code>PPB_AudioOutput_Callback</code> defines the type of an audio callback
+ * function used to fill the audio buffer with data. Please see the
+ * Create() function in the <code>PPB_AudioOutput</code> interface for
+ * more details on this callback.
+ *
+ * @param[out] sample_buffer A buffer to fill with audio data.
+ * @param[in] buffer_size_in_bytes The size of the buffer in bytes.
+ * @param[in] latency How long before the audio data is to be presented.
+ * @param[inout] user_data An opaque pointer that was passed into
+ * <code>PPB_AudioOutput.Create()</code>.
+ */
+typedef void (*PPB_AudioOutput_Callback)(void* sample_buffer,
+                                         uint32_t buffer_size_in_bytes,
+                                         PP_TimeDelta latency,
+                                         void* user_data);
+/**
+ * @}
+ */
+
+/**
+ * @addtogroup Interfaces
+ * @{
+ */
+/**
+ * The <code>PPB_AudioOutput</code> interface contains pointers to several
+ * functions for handling audio resources.
+ * Please see descriptions for each <code>PPB_AudioOutput</code> and
+ * <code>PPB_AudioConfig</code> function for more details. A C example using
+ * <code>PPB_AudioOutput</code> and <code>PPB_AudioConfig</code> follows.
+ *
+ * <strong>Example: </strong>
+ *
+ * @code
+ * void audio_output_callback(void* sample_buffer,
+ *                            uint32_t buffer_size_in_bytes,
+ *                            PP_TimeDelta latency,
+ *                            void* user_data) {
+ *   ... quickly fill in the buffer with samples and return to caller ...
+ *  }
+ *
+ * ...Assume the application has cached the audio configuration interface in
+ * audio_config_interface and the audio interface in
+ * audio_output_interface...
+ *
+ * uint32_t count = audio_config_interface->RecommendSampleFrameCount(
+ *     PP_AUDIOSAMPLERATE_44100, 4096);
+ * PP_Resource pp_audio_config = audio_config_interface->CreateStereo16Bit(
+ *     pp_instance, PP_AUDIOSAMPLERATE_44100, count);
+ * PP_Resource pp_audio_output = audio_interface->Create(pp_instance,
+ *     pp_audio_config, audio_callback, NULL);
+ * audio_interface->EnumerateDevices(pp_audio_output, output_device_list,
+ *     callback);
+ * audio_interface->Open(pp_audio_output, device_ref, pp_audio_config,
+ *     audio_output_callback, user_data, callback);
+ * audio_output_interface->StartPlayback(pp_audio_output);
+ *
+ * ...audio_output_callback() will now be periodically invoked on a separate
+ * thread...
+ * @endcode
+ */
+struct PPB_AudioOutput_Dev_0_1 {
+  /**
+   * Creates an audio output resource.
+   *
+   * @param[in] instance A <code>PP_Instance</code> identifying one instance of
+   * a module.
+   *
+   * @return A <code>PP_Resource</code> corresponding to an audio output
+    resource
+   * if successful, 0 if failed.
+   */
+  PP_Resource (*Create)(PP_Instance instance);
+  /**
+   * Determines if the given resource is an audio output resource.
+   *
+   * @param[in] resource A <code>PP_Resource</code> containing a resource.
+   *
+   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if the given
+   * resource is an audio output resource, otherwise <code>PP_FALSE</code>.
+   */
+  PP_Bool (*IsAudioOutput)(PP_Resource resource);
+  /**
+   * Enumerates audio output devices.
+   *
+   * @param[in] audio_output A <code>PP_Resource</code> corresponding to an
+    audio
+   * output resource.
+   * @param[in] output An output array which will receive
+   * <code>PPB_DeviceRef_Dev</code> resources on success. Please note that the
+   * ref count of those resources has already been increased by 1 for the
+   * caller.
+   * @param[in] callback A <code>PP_CompletionCallback</code> to run on
+   * completion.
+   *
+   * @return An error code from <code>pp_errors.h</code>.
+   */
+  int32_t (*EnumerateDevices)(PP_Resource audio_output,
+                              struct PP_ArrayOutput output,
+                              struct PP_CompletionCallback callback);
+  /**
+   * Requests device change notifications.
+   *
+   * @param[in] audio_output A <code>PP_Resource</code> corresponding to an
+    audio
+   * output resource.
+   * @param[in] callback The callback to receive notifications. If not NULL, it
+   * will be called once for the currently available devices, and then every
+   * time the list of available devices changes. All calls will happen on the
+   * same thread as the one on which MonitorDeviceChange() is called. It will
+   * receive notifications until <code>audio_output</code> is destroyed or
+   * <code>MonitorDeviceChange()</code> is called to set a new callback for
+   * <code>audio_output</code>. You can pass NULL to cancel sending
+   * notifications.
+   * @param[inout] user_data An opaque pointer that will be passed to
+   * <code>callback</code>.
+   *
+   * @return An error code from <code>pp_errors.h</code>.
+   */
+  int32_t (*MonitorDeviceChange)(PP_Resource audio_output,
+                                 PP_MonitorDeviceChangeCallback callback,
+                                 void* user_data);
+  /**
+   * Open() opens an audio output device. No sound will be heard until
+   * StartPlayback() is called. The callback is called with the buffer address
+   * and given user data whenever the buffer needs to be filled. From within the
+   * callback, you should not call <code>PPB_AudioOutput</code> functions. The
+   * callback will be called on a different thread than the one which created
+   * the interface. For performance-critical applications (i.e. low-latency
+   * audio), the callback should avoid blocking or calling functions that can
+   * obtain locks, such as malloc. The layout and the size of the buffer passed
+   * to the audio callback will be determined by the device configuration and is
+   * specified in the <code>AudioConfig</code> documentation.
+   *
+   * @param[in] audio_output A <code>PP_Resource</code> corresponding to an
+    audio
+   * output resource.
+   * @param[in] device_ref Identifies an audio output device. It could be one of
+   * the resource in the array returned by EnumerateDevices(), or 0 which means
+   * the default device.
+   * @param[in] config A <code>PPB_AudioConfig</code> audio configuration
+   * resource.
+   * @param[in] audio_output_callback A <code>PPB_AudioOutput_Callback</code>
+   * function that will be called when audio buffer needs to be filled.
+   * @param[inout] user_data An opaque pointer that will be passed into
+   * <code>audio_output_callback</code>.
+   * @param[in] callback A <code>PP_CompletionCallback</code> to run when this
+   * open operation is completed.
+   *
+   * @return An error code from <code>pp_errors.h</code>.
+   */
+  int32_t (*Open)(PP_Resource audio_output,
+                  PP_Resource device_ref,
+                  PP_Resource config,
+                  PPB_AudioOutput_Callback audio_output_callback,
+                  void* user_data,
+                  struct PP_CompletionCallback callback);
+  /**
+   * GetCurrrentConfig() returns an audio config resource for the given audio
+   * output resource.
+   *
+   * @param[in] config A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   *
+   * @return A <code>PP_Resource</code> containing the audio config resource if
+   * successful.
+   */
+  PP_Resource (*GetCurrentConfig)(PP_Resource audio_output);
+  /**
+   * StartPlayback() starts the playback of the audio output resource and begins
+   * periodically calling the callback.
+   *
+   * @param[in] config A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   *
+   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if
+   * successful, otherwise <code>PP_FALSE</code>. Also returns
+   * <code>PP_TRUE</code> (and be a no-op) if called while playback is already
+   * in progress.
+   */
+  PP_Bool (*StartPlayback)(PP_Resource audio_output);
+  /**
+   * StopPlayback() stops the playback of the audio resource.
+   *
+   * @param[in] config A <code>PP_Resource</code> corresponding to an audio
+   * output resource.
+   *
+   * @return A <code>PP_Bool</code> containing <code>PP_TRUE</code> if
+   * successful, otherwise <code>PP_FALSE</code>. Also returns
+   * <code>PP_TRUE</code> (and is a no-op) if called while playback is already
+   * stopped. If a callback is in progress, StopPlayback() will block until the
+   * callback completes.
+   */
+  PP_Bool (*StopPlayback)(PP_Resource audio_output);
+  /**
+   * Close() closes the audio output device,
+           and stops playback if necessary. It is
+   * not valid to call Open() again after a call to this method.
+   * If an audio output resource is destroyed while a device is still open, then
+   * it will be implicitly closed, so you are not required to call this method.
+   *
+   * @param[in] audio_output A <code>PP_Resource</code> corresponding to an
+    audio
+   * output resource.
+   */
+  void (*Close)(PP_Resource audio_output);
+};
+
+typedef struct PPB_AudioOutput_Dev_0_1 PPB_AudioOutput_Dev;
+/**
+ * @}
+ */
+
+#endif  /* PPAPI_C_DEV_PPB_AUDIO_OUTPUT_DEV_H_ */
+
diff --git a/ppapi/c/dev/ppb_device_ref_dev.h b/ppapi/c/dev/ppb_device_ref_dev.h
index 62d75a6..2b8b18d 100644
--- a/ppapi/c/dev/ppb_device_ref_dev.h
+++ b/ppapi/c/dev/ppb_device_ref_dev.h
@@ -3,7 +3,7 @@
  * found in the LICENSE file.
  */
 
-/* From dev/ppb_device_ref_dev.idl modified Wed Nov 07 13:28:37 2012. */
+/* From dev/ppb_device_ref_dev.idl modified Mon Jan 09 12:04:09 2017. */
 
 #ifndef PPAPI_C_DEV_PPB_DEVICE_REF_DEV_H_
 #define PPAPI_C_DEV_PPB_DEVICE_REF_DEV_H_
@@ -55,7 +55,8 @@
 typedef enum {
   PP_DEVICETYPE_DEV_INVALID = 0,
   PP_DEVICETYPE_DEV_AUDIOCAPTURE = 1,
-  PP_DEVICETYPE_DEV_VIDEOCAPTURE = 2
+  PP_DEVICETYPE_DEV_VIDEOCAPTURE = 2,
+  PP_DEVICETYPE_DEV_AUDIOOUTPUT = 3
 } PP_DeviceType_Dev;
 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_DeviceType_Dev, 4);
 /**
diff --git a/ppapi/c/pp_macros.h b/ppapi/c/pp_macros.h
index 16dc079..291d2d6 100644
--- a/ppapi/c/pp_macros.h
+++ b/ppapi/c/pp_macros.h
@@ -3,13 +3,13 @@
  * found in the LICENSE file.
  */
 
-/* From pp_macros.idl modified Thu Oct 15 10:46:35 2015. */
+/* From pp_macros.idl modified Sat Dec  6 22:11:47 2014. */
 
 #ifndef PPAPI_C_PP_MACROS_H_
 #define PPAPI_C_PP_MACROS_H_
 
 
-#define PPAPI_RELEASE 55
+#define PPAPI_RELEASE 59
 
 /**
  * @file
diff --git a/ppapi/cpp/BUILD.gn b/ppapi/cpp/BUILD.gn
index 586ca71..1252d7af 100644
--- a/ppapi/cpp/BUILD.gn
+++ b/ppapi/cpp/BUILD.gn
@@ -161,6 +161,8 @@
     # Dev interfaces.
     "dev/audio_input_dev.cc",
     "dev/audio_input_dev.h",
+    "dev/audio_output_dev.cc",
+    "dev/audio_output_dev.h",
     "dev/buffer_dev.cc",
     "dev/buffer_dev.h",
     "dev/crypto_dev.cc",
diff --git a/ppapi/cpp/dev/audio_output_dev.cc b/ppapi/cpp/dev/audio_output_dev.cc
new file mode 100644
index 0000000..56e55b0
--- /dev/null
+++ b/ppapi/cpp/dev/audio_output_dev.cc
@@ -0,0 +1,98 @@
+// Copyright (c) 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 "ppapi/cpp/dev/audio_output_dev.h"
+
+#include "ppapi/c/pp_bool.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/cpp/instance_handle.h"
+#include "ppapi/cpp/module_impl.h"
+
+namespace pp {
+
+namespace {
+
+template <>
+const char* interface_name<PPB_AudioOutput_Dev_0_1>() {
+  return PPB_AUDIO_OUTPUT_DEV_INTERFACE_0_1;
+}
+
+}  // namespace
+
+AudioOutput_Dev::AudioOutput_Dev() {}
+
+AudioOutput_Dev::AudioOutput_Dev(const InstanceHandle& instance) {
+  if (has_interface<PPB_AudioOutput_Dev_0_1>()) {
+    PassRefFromConstructor(get_interface<PPB_AudioOutput_Dev_0_1>()->Create(
+        instance.pp_instance()));
+  }
+}
+
+AudioOutput_Dev::~AudioOutput_Dev() {}
+
+// static
+bool AudioOutput_Dev::IsAvailable() {
+  return has_interface<PPB_AudioOutput_Dev_0_1>();
+}
+
+int32_t AudioOutput_Dev::EnumerateDevices(
+    const CompletionCallbackWithOutput<std::vector<DeviceRef_Dev> >& callback) {
+  if (has_interface<PPB_AudioOutput_Dev_0_1>()) {
+    return get_interface<PPB_AudioOutput_Dev_0_1>()->EnumerateDevices(
+        pp_resource(), callback.output(), callback.pp_completion_callback());
+  }
+
+  return callback.MayForce(PP_ERROR_NOINTERFACE);
+}
+
+int32_t AudioOutput_Dev::MonitorDeviceChange(
+    PP_MonitorDeviceChangeCallback callback,
+    void* user_data) {
+  if (has_interface<PPB_AudioOutput_Dev_0_1>()) {
+    return get_interface<PPB_AudioOutput_Dev_0_1>()->MonitorDeviceChange(
+        pp_resource(), callback, user_data);
+  }
+
+  return PP_ERROR_NOINTERFACE;
+}
+
+int32_t AudioOutput_Dev::Open(const DeviceRef_Dev& device_ref,
+                              const AudioConfig& config,
+                              PPB_AudioOutput_Callback audio_output_callback,
+                              void* user_data,
+                              const CompletionCallback& callback) {
+  if (has_interface<PPB_AudioOutput_Dev_0_1>()) {
+    return get_interface<PPB_AudioOutput_Dev_0_1>()->Open(
+        pp_resource(), device_ref.pp_resource(), config.pp_resource(),
+        audio_output_callback, user_data, callback.pp_completion_callback());
+  }
+
+  return callback.MayForce(PP_ERROR_NOINTERFACE);
+}
+
+bool AudioOutput_Dev::StartPlayback() {
+  if (has_interface<PPB_AudioOutput_Dev_0_1>()) {
+    return PP_ToBool(
+        get_interface<PPB_AudioOutput_Dev_0_1>()->StartPlayback(pp_resource()));
+  }
+
+  return false;
+}
+
+bool AudioOutput_Dev::StopPlayback() {
+  if (has_interface<PPB_AudioOutput_Dev_0_1>()) {
+    return PP_ToBool(
+        get_interface<PPB_AudioOutput_Dev_0_1>()->StopPlayback(pp_resource()));
+  }
+
+  return false;
+}
+
+void AudioOutput_Dev::Close() {
+  if (has_interface<PPB_AudioOutput_Dev_0_1>()) {
+    get_interface<PPB_AudioOutput_Dev_0_1>()->Close(pp_resource());
+  }
+}
+
+}  // namespace pp
diff --git a/ppapi/cpp/dev/audio_output_dev.h b/ppapi/cpp/dev/audio_output_dev.h
new file mode 100644
index 0000000..ebe2fb50
--- /dev/null
+++ b/ppapi/cpp/dev/audio_output_dev.h
@@ -0,0 +1,84 @@
+// Copyright (c) 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.
+
+#ifndef PPAPI_CPP_DEV_AUDIO_OUTPUT_DEV_H_
+#define PPAPI_CPP_DEV_AUDIO_OUTPUT_DEV_H_
+
+#include <stdint.h>
+
+#include <vector>
+
+#include "ppapi/c/dev/ppb_audio_output_dev.h"
+#include "ppapi/cpp/audio_config.h"
+#include "ppapi/cpp/completion_callback.h"
+#include "ppapi/cpp/dev/device_ref_dev.h"
+#include "ppapi/cpp/resource.h"
+
+namespace pp {
+
+class InstanceHandle;
+
+class AudioOutput_Dev : public Resource {
+ public:
+  // An empty constructor for an AudioOutput resource.
+  AudioOutput_Dev();
+
+  // Constructor to create an audio output resource.
+  explicit AudioOutput_Dev(const InstanceHandle& instance);
+
+  virtual ~AudioOutput_Dev();
+
+  // Static function for determining whether the browser supports the required
+  // AudioOutput interface.
+  //
+  // @return true if the interface is available, false otherwise.
+  static bool IsAvailable();
+
+  int32_t EnumerateDevices(
+      const CompletionCallbackWithOutput<std::vector<DeviceRef_Dev> >& cb);
+
+  int32_t MonitorDeviceChange(PP_MonitorDeviceChangeCallback callback,
+                              void* user_data);
+
+  // If |device_ref| is null (i.e., is_null() returns true), the default device
+  // will be used.
+  int32_t Open(const DeviceRef_Dev& device_ref,
+               const AudioConfig& config,
+               PPB_AudioOutput_Callback audio_output_callback,
+               void* user_data,
+               const CompletionCallback& callback);
+
+  // Getter function for returning the internal <code>PPB_AudioConfig</code>
+  // struct.
+  //
+  // @return A mutable reference to the PPB_AudioConfig struct.
+  AudioConfig& config() { return config_; }
+
+  // Getter function for returning the internal <code>PPB_AudioConfig</code>
+  // struct.
+  //
+  // @return A const reference to the internal <code>PPB_AudioConfig</code>
+  // struct.
+  const AudioConfig& config() const { return config_; }
+
+  // StartPlayback() starts playback of audio.
+  //
+  // @return true if successful, otherwise false.
+  bool StartPlayback();
+
+  // StopPlayback stops playback of audio.
+  //
+  // @return true if successful, otherwise false.
+  bool StopPlayback();
+
+  // Close closes the audio output device.
+  void Close();
+
+ private:
+  AudioConfig config_;
+};
+
+}  // namespace pp
+
+#endif  // PPAPI_CPP_DEV_AUDIO_OUTPUT_DEV_H_
diff --git a/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c b/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
index 56b190b..6e8a8aa 100644
--- a/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
+++ b/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016 The Chromium Authors. All rights reserved.
+/* Copyright (c) 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.
  */
@@ -8,6 +8,7 @@
 
 #include "ppapi/c/ppb.h"
 #include "ppapi/c/dev/ppb_audio_input_dev.h"
+#include "ppapi/c/dev/ppb_audio_output_dev.h"
 #include "ppapi/c/dev/ppb_device_ref_dev.h"
 #include "ppapi/c/dev/ppb_file_chooser_dev.h"
 #include "ppapi/c/dev/ppb_ime_input_event_dev.h"
@@ -156,6 +157,7 @@
 static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPP_Messaging_1_0;
 static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_AudioInput_Dev_0_3;
 static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_AudioInput_Dev_0_4;
+static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1;
 static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_DeviceRef_Dev_0_1;
 static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_FileChooser_Dev_0_5;
 static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_FileChooser_Dev_0_6;
@@ -2751,6 +2753,55 @@
 
 /* End wrapper methods for PPB_AudioInput_Dev_0_4 */
 
+/* Begin wrapper methods for PPB_AudioOutput_Dev_0_1 */
+
+static PP_Resource Pnacl_M59_PPB_AudioOutput_Dev_Create(PP_Instance instance) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  return iface->Create(instance);
+}
+
+static PP_Bool Pnacl_M59_PPB_AudioOutput_Dev_IsAudioOutput(PP_Resource resource) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  return iface->IsAudioOutput(resource);
+}
+
+static int32_t Pnacl_M59_PPB_AudioOutput_Dev_EnumerateDevices(PP_Resource audio_output, struct PP_ArrayOutput* output, struct PP_CompletionCallback* callback) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  return iface->EnumerateDevices(audio_output, *output, *callback);
+}
+
+static int32_t Pnacl_M59_PPB_AudioOutput_Dev_MonitorDeviceChange(PP_Resource audio_output, PP_MonitorDeviceChangeCallback callback, void* user_data) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  return iface->MonitorDeviceChange(audio_output, callback, user_data);
+}
+
+static int32_t Pnacl_M59_PPB_AudioOutput_Dev_Open(PP_Resource audio_output, PP_Resource device_ref, PP_Resource config, PPB_AudioOutput_Callback audio_output_callback, void* user_data, struct PP_CompletionCallback* callback) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  return iface->Open(audio_output, device_ref, config, audio_output_callback, user_data, *callback);
+}
+
+static PP_Resource Pnacl_M59_PPB_AudioOutput_Dev_GetCurrentConfig(PP_Resource audio_output) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  return iface->GetCurrentConfig(audio_output);
+}
+
+static PP_Bool Pnacl_M59_PPB_AudioOutput_Dev_StartPlayback(PP_Resource audio_output) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  return iface->StartPlayback(audio_output);
+}
+
+static PP_Bool Pnacl_M59_PPB_AudioOutput_Dev_StopPlayback(PP_Resource audio_output) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  return iface->StopPlayback(audio_output);
+}
+
+static void Pnacl_M59_PPB_AudioOutput_Dev_Close(PP_Resource audio_output) {
+  const struct PPB_AudioOutput_Dev_0_1 *iface = Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1.real_iface;
+  iface->Close(audio_output);
+}
+
+/* End wrapper methods for PPB_AudioOutput_Dev_0_1 */
+
 /* Not generating wrapper methods for PPB_Buffer_Dev_0_4 */
 
 /* Not generating wrapper methods for PPB_Crypto_Dev_0_1 */
@@ -5408,6 +5459,18 @@
     .Close = (void (*)(PP_Resource audio_input))&Pnacl_M30_PPB_AudioInput_Dev_Close
 };
 
+static const struct PPB_AudioOutput_Dev_0_1 Pnacl_Wrappers_PPB_AudioOutput_Dev_0_1 = {
+    .Create = (PP_Resource (*)(PP_Instance instance))&Pnacl_M59_PPB_AudioOutput_Dev_Create,
+    .IsAudioOutput = (PP_Bool (*)(PP_Resource resource))&Pnacl_M59_PPB_AudioOutput_Dev_IsAudioOutput,
+    .EnumerateDevices = (int32_t (*)(PP_Resource audio_output, struct PP_ArrayOutput output, struct PP_CompletionCallback callback))&Pnacl_M59_PPB_AudioOutput_Dev_EnumerateDevices,
+    .MonitorDeviceChange = (int32_t (*)(PP_Resource audio_output, PP_MonitorDeviceChangeCallback callback, void* user_data))&Pnacl_M59_PPB_AudioOutput_Dev_MonitorDeviceChange,
+    .Open = (int32_t (*)(PP_Resource audio_output, PP_Resource device_ref, PP_Resource config, PPB_AudioOutput_Callback audio_output_callback, void* user_data, struct PP_CompletionCallback callback))&Pnacl_M59_PPB_AudioOutput_Dev_Open,
+    .GetCurrentConfig = (PP_Resource (*)(PP_Resource audio_output))&Pnacl_M59_PPB_AudioOutput_Dev_GetCurrentConfig,
+    .StartPlayback = (PP_Bool (*)(PP_Resource audio_output))&Pnacl_M59_PPB_AudioOutput_Dev_StartPlayback,
+    .StopPlayback = (PP_Bool (*)(PP_Resource audio_output))&Pnacl_M59_PPB_AudioOutput_Dev_StopPlayback,
+    .Close = (void (*)(PP_Resource audio_output))&Pnacl_M59_PPB_AudioOutput_Dev_Close
+};
+
 /* Not generating wrapper interface for PPB_Buffer_Dev_0_4 */
 
 /* Not generating wrapper interface for PPB_Crypto_Dev_0_1 */
@@ -6322,6 +6385,12 @@
   .real_iface = NULL
 };
 
+static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1 = {
+  .iface_macro = PPB_AUDIO_OUTPUT_DEV_INTERFACE_0_1,
+  .wrapped_iface = (const void *) &Pnacl_Wrappers_PPB_AudioOutput_Dev_0_1,
+  .real_iface = NULL
+};
+
 static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_DeviceRef_Dev_0_1 = {
   .iface_macro = PPB_DEVICEREF_DEV_INTERFACE_0_1,
   .wrapped_iface = (const void *) &Pnacl_Wrappers_PPB_DeviceRef_Dev_0_1,
@@ -6690,6 +6759,7 @@
   &Pnacl_WrapperInfo_PPB_WebSocket_1_0,
   &Pnacl_WrapperInfo_PPB_AudioInput_Dev_0_3,
   &Pnacl_WrapperInfo_PPB_AudioInput_Dev_0_4,
+  &Pnacl_WrapperInfo_PPB_AudioOutput_Dev_0_1,
   &Pnacl_WrapperInfo_PPB_DeviceRef_Dev_0_1,
   &Pnacl_WrapperInfo_PPB_FileChooser_Dev_0_5,
   &Pnacl_WrapperInfo_PPB_FileChooser_Dev_0_6,
diff --git a/ppapi/proxy/BUILD.gn b/ppapi/proxy/BUILD.gn
index da070f8..b572778 100644
--- a/ppapi/proxy/BUILD.gn
+++ b/ppapi/proxy/BUILD.gn
@@ -219,6 +219,8 @@
     sources += [
       "audio_input_resource.cc",
       "audio_input_resource.h",
+      "audio_output_resource.cc",
+      "audio_output_resource.h",
       "broker_dispatcher.cc",
       "broker_dispatcher.h",
       "browser_font_singleton_resource.cc",
diff --git a/ppapi/proxy/audio_output_resource.cc b/ppapi/proxy/audio_output_resource.cc
new file mode 100644
index 0000000..6eeb0f0
--- /dev/null
+++ b/ppapi/proxy/audio_output_resource.cc
@@ -0,0 +1,318 @@
+// Copyright (c) 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 "ppapi/proxy/audio_output_resource.h"
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
+#include "ipc/ipc_platform_file.h"
+#include "media/base/audio_bus.h"
+#include "media/base/audio_parameters.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/proxy/resource_message_params.h"
+#include "ppapi/proxy/serialized_handle.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/ppb_audio_config_shared.h"
+#include "ppapi/shared_impl/resource_tracker.h"
+#include "ppapi/shared_impl/tracked_callback.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_audio_config_api.h"
+
+namespace ppapi {
+namespace proxy {
+
+AudioOutputResource::AudioOutputResource(Connection connection,
+                                         PP_Instance instance)
+    : PluginResource(connection, instance),
+      open_state_(BEFORE_OPEN),
+      playing_(false),
+      shared_memory_size_(0),
+      audio_output_callback_(NULL),
+      user_data_(NULL),
+      enumeration_helper_(this),
+      bytes_per_second_(0),
+      sample_frame_count_(0),
+      client_buffer_size_bytes_(0) {
+  SendCreate(RENDERER, PpapiHostMsg_AudioOutput_Create());
+}
+
+AudioOutputResource::~AudioOutputResource() {
+  Close();
+}
+
+thunk::PPB_AudioOutput_API* AudioOutputResource::AsPPB_AudioOutput_API() {
+  return this;
+}
+
+void AudioOutputResource::OnReplyReceived(
+    const ResourceMessageReplyParams& params,
+    const IPC::Message& msg) {
+  if (!enumeration_helper_.HandleReply(params, msg))
+    PluginResource::OnReplyReceived(params, msg);
+}
+
+int32_t AudioOutputResource::EnumerateDevices(
+    const PP_ArrayOutput& output,
+    scoped_refptr<TrackedCallback> callback) {
+  return enumeration_helper_.EnumerateDevices(output, callback);
+}
+
+int32_t AudioOutputResource::MonitorDeviceChange(
+    PP_MonitorDeviceChangeCallback callback,
+    void* user_data) {
+  return enumeration_helper_.MonitorDeviceChange(callback, user_data);
+}
+
+int32_t AudioOutputResource::Open(
+    PP_Resource device_ref,
+    PP_Resource config,
+    PPB_AudioOutput_Callback audio_output_callback,
+    void* user_data,
+    scoped_refptr<TrackedCallback> callback) {
+  return CommonOpen(device_ref, config, audio_output_callback, user_data,
+                    callback);
+}
+
+PP_Resource AudioOutputResource::GetCurrentConfig() {
+  // AddRef for the caller.
+  if (config_.get())
+    PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(config_);
+  return config_;
+}
+
+PP_Bool AudioOutputResource::StartPlayback() {
+  if (open_state_ == CLOSED || (open_state_ == BEFORE_OPEN &&
+                                !TrackedCallback::IsPending(open_callback_))) {
+    return PP_FALSE;
+  }
+  if (playing_)
+    return PP_TRUE;
+
+  playing_ = true;
+
+  StartThread();
+
+  Post(RENDERER, PpapiHostMsg_AudioOutput_StartOrStop(true));
+  return PP_TRUE;
+}
+
+PP_Bool AudioOutputResource::StopPlayback() {
+  if (open_state_ == CLOSED)
+    return PP_FALSE;
+  if (!playing_)
+    return PP_TRUE;
+
+  // If the audio output device hasn't been opened, set |playing_| to false and
+  // return directly.
+  if (open_state_ == BEFORE_OPEN) {
+    playing_ = false;
+    return PP_TRUE;
+  }
+
+  Post(RENDERER, PpapiHostMsg_AudioOutput_StartOrStop(false));
+
+  StopThread();
+  playing_ = false;
+
+  return PP_TRUE;
+}
+
+void AudioOutputResource::Close() {
+  if (open_state_ == CLOSED)
+    return;
+
+  open_state_ = CLOSED;
+  Post(RENDERER, PpapiHostMsg_AudioOutput_Close());
+  StopThread();
+
+  if (TrackedCallback::IsPending(open_callback_))
+    open_callback_->PostAbort();
+}
+
+void AudioOutputResource::LastPluginRefWasDeleted() {
+  enumeration_helper_.LastPluginRefWasDeleted();
+}
+
+void AudioOutputResource::OnPluginMsgOpenReply(
+    const ResourceMessageReplyParams& params) {
+  if (open_state_ == BEFORE_OPEN && params.result() == PP_OK) {
+    IPC::PlatformFileForTransit socket_handle_for_transit =
+        IPC::InvalidPlatformFileForTransit();
+    params.TakeSocketHandleAtIndex(0, &socket_handle_for_transit);
+    base::SyncSocket::Handle socket_handle =
+        IPC::PlatformFileForTransitToPlatformFile(socket_handle_for_transit);
+    CHECK(socket_handle != base::SyncSocket::kInvalidHandle);
+
+    SerializedHandle serialized_shared_memory_handle =
+        params.TakeHandleOfTypeAtIndex(1, SerializedHandle::SHARED_MEMORY);
+    CHECK(serialized_shared_memory_handle.IsHandleValid());
+
+    open_state_ = OPENED;
+    SetStreamInfo(serialized_shared_memory_handle.shmem(),
+                  serialized_shared_memory_handle.size(), socket_handle);
+  } else {
+    playing_ = false;
+  }
+
+  // The callback may have been aborted by Close().
+  if (TrackedCallback::IsPending(open_callback_))
+    open_callback_->Run(params.result());
+}
+
+void AudioOutputResource::SetStreamInfo(
+    base::SharedMemoryHandle shared_memory_handle,
+    size_t shared_memory_size,
+    base::SyncSocket::Handle socket_handle) {
+  socket_.reset(new base::CancelableSyncSocket(socket_handle));
+  shared_memory_.reset(new base::SharedMemory(shared_memory_handle, false));
+  shared_memory_size_ = shared_memory_size;
+  DCHECK(!shared_memory_->memory());
+
+  // If we fail to map the shared memory into the caller's address space we
+  // might as well fail here since nothing will work if this is the case.
+  CHECK(shared_memory_->Map(shared_memory_size_));
+
+  // Create a new audio bus and wrap the audio data section in shared memory.
+  media::AudioOutputBuffer* buffer =
+      static_cast<media::AudioOutputBuffer*>(shared_memory_->memory());
+  audio_bus_ = media::AudioBus::WrapMemory(kAudioOutputChannels,
+                                           sample_frame_count_, buffer->audio);
+
+  // Ensure that the size of the created audio bus matches the allocated
+  // size in shared memory.
+  // Example: DCHECK_EQ(8208 - 16, 8192) for |sample_frame_count_| = 2048.
+  const uint32_t audio_bus_size_bytes = media::AudioBus::CalculateMemorySize(
+      audio_bus_->channels(), audio_bus_->frames());
+  DCHECK_EQ(shared_memory_size_ - sizeof(media::AudioOutputBufferParameters),
+            audio_bus_size_bytes);
+
+  // Setup integer audio buffer for user audio data
+  client_buffer_size_bytes_ = audio_bus_->frames() * audio_bus_->channels() *
+                              kBitsPerAudioOutputSample / 8;
+  client_buffer_.reset(new uint8_t[client_buffer_size_bytes_]);
+}
+
+void AudioOutputResource::StartThread() {
+  // Don't start the thread unless all our state is set up correctly.
+  if (!audio_output_callback_ || !socket_.get() || !shared_memory_->memory() ||
+      !audio_bus_.get() || !client_buffer_.get() || bytes_per_second_ == 0)
+    return;
+
+  // Clear contents of shm buffer before starting audio thread. This will
+  // prevent a burst of static if for some reason the audio thread doesn't
+  // start up quickly enough.
+  memset(shared_memory_->memory(), 0, shared_memory_size_);
+  memset(client_buffer_.get(), 0, client_buffer_size_bytes_);
+
+  DCHECK(!audio_output_thread_.get());
+  audio_output_thread_.reset(
+      new base::DelegateSimpleThread(this, "plugin_audio_output_thread"));
+  audio_output_thread_->Start();
+}
+
+void AudioOutputResource::StopThread() {
+  // Shut down the socket to escape any hanging |Receive|s.
+  if (socket_.get())
+    socket_->Shutdown();
+  if (audio_output_thread_.get()) {
+    audio_output_thread_->Join();
+    audio_output_thread_.reset();
+  }
+}
+
+void AudioOutputResource::Run() {
+  // The shared memory represents AudioOutputBufferParameters and the actual
+  // data buffer stored as an audio bus.
+  media::AudioOutputBuffer* buffer =
+      static_cast<media::AudioOutputBuffer*>(shared_memory_->memory());
+
+  // This is a constantly increasing counter that is used to verify on the
+  // browser side that buffers are in sync.
+  uint32_t buffer_index = 0;
+
+  while (true) {
+    int pending_data = 0;
+    size_t bytes_read = socket_->Receive(&pending_data, sizeof(pending_data));
+    if (bytes_read != sizeof(pending_data)) {
+      DCHECK_EQ(bytes_read, 0U);
+      break;
+    }
+    if (pending_data < 0)
+      break;
+
+    {
+      base::TimeDelta delay =
+          base::TimeDelta::FromMicroseconds(buffer->params.delay);
+
+      audio_output_callback_(client_buffer_.get(), client_buffer_size_bytes_,
+                             delay.InSecondsF(), user_data_);
+    }
+
+    // Deinterleave the audio data into the shared memory as floats.
+    audio_bus_->FromInterleaved(client_buffer_.get(), audio_bus_->frames(),
+                                kBitsPerAudioOutputSample / 8);
+
+    // Inform other side that we have read the data from the shared memory.
+    // Let the other end know which buffer we just filled.  The buffer index is
+    // used to ensure the other end is getting the buffer it expects.  For more
+    // details on how this works see AudioSyncReader::WaitUntilDataIsReady().
+    ++buffer_index;
+    size_t bytes_sent = socket_->Send(&buffer_index, sizeof(buffer_index));
+    if (bytes_sent != sizeof(buffer_index)) {
+      DCHECK_EQ(bytes_sent, 0U);
+      break;
+    }
+  }
+}
+
+int32_t AudioOutputResource::CommonOpen(
+    PP_Resource device_ref,
+    PP_Resource config,
+    PPB_AudioOutput_Callback audio_output_callback,
+    void* user_data,
+    scoped_refptr<TrackedCallback> callback) {
+  std::string device_id;
+  // |device_id| remains empty if |device_ref| is 0, which means the default
+  // device.
+  if (device_ref != 0) {
+    thunk::EnterResourceNoLock<thunk::PPB_DeviceRef_API> enter_device_ref(
+        device_ref, true);
+    if (enter_device_ref.failed())
+      return PP_ERROR_BADRESOURCE;
+    device_id = enter_device_ref.object()->GetDeviceRefData().id;
+  }
+
+  if (TrackedCallback::IsPending(open_callback_))
+    return PP_ERROR_INPROGRESS;
+  if (open_state_ != BEFORE_OPEN)
+    return PP_ERROR_FAILED;
+
+  if (!audio_output_callback)
+    return PP_ERROR_BADARGUMENT;
+  thunk::EnterResourceNoLock<thunk::PPB_AudioConfig_API> enter_config(config,
+                                                                      true);
+  if (enter_config.failed())
+    return PP_ERROR_BADARGUMENT;
+
+  config_ = config;
+  audio_output_callback_ = audio_output_callback;
+  user_data_ = user_data;
+  open_callback_ = callback;
+  bytes_per_second_ = kAudioOutputChannels * (kBitsPerAudioOutputSample / 8) *
+                      enter_config.object()->GetSampleRate();
+  sample_frame_count_ = enter_config.object()->GetSampleFrameCount();
+
+  PpapiHostMsg_AudioOutput_Open msg(
+      device_id, enter_config.object()->GetSampleRate(),
+      enter_config.object()->GetSampleFrameCount());
+  Call<PpapiPluginMsg_AudioOutput_OpenReply>(
+      RENDERER, msg,
+      base::Bind(&AudioOutputResource::OnPluginMsgOpenReply,
+                 base::Unretained(this)));
+  return PP_OK_COMPLETIONPENDING;
+}
+}  // namespace proxy
+}  // namespace ppapi
diff --git a/ppapi/proxy/audio_output_resource.h b/ppapi/proxy/audio_output_resource.h
new file mode 100644
index 0000000..ee654e1
--- /dev/null
+++ b/ppapi/proxy/audio_output_resource.h
@@ -0,0 +1,149 @@
+// Copyright (c) 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.
+
+#ifndef PPAPI_PROXY_AUDIO_OUTPUT_RESOURCE_H_
+#define PPAPI_PROXY_AUDIO_OUTPUT_RESOURCE_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <memory>
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/shared_memory.h"
+#include "base/sync_socket.h"
+#include "base/threading/simple_thread.h"
+#include "ppapi/c/ppb_audio_config.h"
+#include "ppapi/proxy/device_enumeration_resource_helper.h"
+#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/shared_impl/scoped_pp_resource.h"
+#include "ppapi/thunk/ppb_audio_output_api.h"
+
+namespace media {
+class AudioBus;
+}
+
+namespace ppapi {
+namespace proxy {
+
+class ResourceMessageReplyParams;
+
+class AudioOutputResource : public PluginResource,
+                            public thunk::PPB_AudioOutput_API,
+                            public base::DelegateSimpleThread::Delegate {
+ public:
+  AudioOutputResource(Connection connection, PP_Instance instance);
+  ~AudioOutputResource() override;
+
+  // Resource overrides.
+  thunk::PPB_AudioOutput_API* AsPPB_AudioOutput_API() override;
+  void OnReplyReceived(const ResourceMessageReplyParams& params,
+                       const IPC::Message& msg) override;
+
+  // PPB_AudioOutput_API implementation.
+  int32_t EnumerateDevices(const PP_ArrayOutput& output,
+                           scoped_refptr<TrackedCallback> callback) override;
+  int32_t MonitorDeviceChange(PP_MonitorDeviceChangeCallback callback,
+                              void* user_data) override;
+  int32_t Open(PP_Resource device_ref,
+               PP_Resource config,
+               PPB_AudioOutput_Callback audio_output_callback,
+               void* user_data,
+               scoped_refptr<TrackedCallback> callback) override;
+
+  PP_Resource GetCurrentConfig() override;
+
+  bool playing() const { return playing_; }
+
+  PP_Bool StartPlayback() override;
+  PP_Bool StopPlayback() override;
+  void Close() override;
+
+ protected:
+  // Resource override.
+  void LastPluginRefWasDeleted() override;
+
+ private:
+  enum OpenState { BEFORE_OPEN, OPENED, CLOSED };
+
+  void OnPluginMsgOpenReply(const ResourceMessageReplyParams& params);
+
+  // Sets the shared memory and socket handles.
+  void SetStreamInfo(base::SharedMemoryHandle shared_memory_handle,
+                     size_t shared_memory_size,
+                     base::SyncSocket::Handle socket_handle);
+
+  // Starts execution of the audio output thread.
+  void StartThread();
+
+  // Stops execution of the audio output thread.
+  void StopThread();
+
+  // DelegateSimpleThread::Delegate implementation.
+  // Run on the audio output thread.
+  void Run() override;
+
+  int32_t CommonOpen(PP_Resource device_ref,
+                     PP_Resource config,
+                     PPB_AudioOutput_Callback audio_output_callback,
+                     void* user_data,
+                     scoped_refptr<TrackedCallback> callback);
+
+  OpenState open_state_;
+
+  // True if playing the stream.
+  bool playing_;
+
+  // Socket used to notify us when new samples are available. This pointer is
+  // created in SetStreamInfo().
+  std::unique_ptr<base::CancelableSyncSocket> socket_;
+
+  // Sample buffer in shared memory. This pointer is created in
+  // SetStreamInfo(). The memory is only mapped when the audio thread is
+  // created.
+  std::unique_ptr<base::SharedMemory> shared_memory_;
+
+  // The size of the sample buffer in bytes.
+  size_t shared_memory_size_;
+
+  // When the callback is set, this thread is spawned for calling it.
+  std::unique_ptr<base::DelegateSimpleThread> audio_output_thread_;
+
+  // Callback to call when new samples are available.
+  PPB_AudioOutput_Callback audio_output_callback_;
+
+  // User data pointer passed verbatim to the callback function.
+  void* user_data_;
+
+  // The callback is not directly passed to OnPluginMsgOpenReply() because we
+  // would like to be able to cancel it early in Close().
+  scoped_refptr<TrackedCallback> open_callback_;
+
+  // Owning reference to the current config object. This isn't actually used,
+  // we just dish it out as requested by the plugin.
+  ScopedPPResource config_;
+
+  DeviceEnumerationResourceHelper enumeration_helper_;
+
+  // The data size (in bytes) of one second of audio output. Used to calculate
+  // latency.
+  size_t bytes_per_second_;
+
+  // AudioBus for shuttling data across the shared memory.
+  std::unique_ptr<media::AudioBus> audio_bus_;
+  int sample_frame_count_;
+
+  // Internal buffer for client's integer audio data.
+  int client_buffer_size_bytes_;
+  std::unique_ptr<uint8_t[]> client_buffer_;
+
+  DISALLOW_COPY_AND_ASSIGN(AudioOutputResource);
+};
+
+}  // namespace proxy
+}  // namespace ppapi
+
+#endif  // PPAPI_PROXY_AUDIO_OUTPUT_RESOURCE_H_
diff --git a/ppapi/proxy/interface_list.cc b/ppapi/proxy/interface_list.cc
index 4984753..d14a931 100644
--- a/ppapi/proxy/interface_list.cc
+++ b/ppapi/proxy/interface_list.cc
@@ -12,6 +12,7 @@
 #include "base/memory/singleton.h"
 #include "build/build_config.h"
 #include "ppapi/c/dev/ppb_audio_input_dev.h"
+#include "ppapi/c/dev/ppb_audio_output_dev.h"
 #include "ppapi/c/dev/ppb_buffer_dev.h"
 #include "ppapi/c/dev/ppb_char_set_dev.h"
 #include "ppapi/c/dev/ppb_crypto_dev.h"
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h
index c99a276..39bcec7 100644
--- a/ppapi/proxy/ppapi_messages.h
+++ b/ppapi/proxy/ppapi_messages.h
@@ -2246,6 +2246,18 @@
 IPC_MESSAGE_CONTROL1(PpapiHostMsg_AudioInput_StartOrStop, bool /* capture */)
 IPC_MESSAGE_CONTROL0(PpapiHostMsg_AudioInput_Close)
 
+// Audio output.
+IPC_MESSAGE_CONTROL0(PpapiHostMsg_AudioOutput_Create)
+IPC_MESSAGE_CONTROL3(PpapiHostMsg_AudioOutput_Open,
+                     std::string /* device_id */,
+                     PP_AudioSampleRate /* sample_rate */,
+                     uint32_t /* sample_frame_count */)
+// Reply to an Open call. This supplies a socket handle and a shared memory
+// handle. Both handles are passed in the ReplyParams struct.
+IPC_MESSAGE_CONTROL0(PpapiPluginMsg_AudioOutput_OpenReply)
+IPC_MESSAGE_CONTROL1(PpapiHostMsg_AudioOutput_StartOrStop, bool /* playback */)
+IPC_MESSAGE_CONTROL0(PpapiHostMsg_AudioOutput_Close)
+
 // BrowserFont -----------------------------------------------------------------
 
 IPC_MESSAGE_CONTROL0(PpapiHostMsg_BrowserFontSingleton_Create)
diff --git a/ppapi/proxy/resource_creation_proxy.cc b/ppapi/proxy/resource_creation_proxy.cc
index 1c79bc5c..0e414285 100644
--- a/ppapi/proxy/resource_creation_proxy.cc
+++ b/ppapi/proxy/resource_creation_proxy.cc
@@ -9,6 +9,7 @@
 #include "ppapi/c/pp_size.h"
 #include "ppapi/proxy/audio_encoder_resource.h"
 #include "ppapi/proxy/audio_input_resource.h"
+#include "ppapi/proxy/audio_output_resource.h"
 #include "ppapi/proxy/camera_device_resource.h"
 #include "ppapi/proxy/compositor_resource.h"
 #include "ppapi/proxy/connection.h"
@@ -429,6 +430,10 @@
   return (new AudioInputResource(GetConnection(), instance))->GetReference();
 }
 
+PP_Resource ResourceCreationProxy::CreateAudioOutput(PP_Instance instance) {
+  return (new AudioOutputResource(GetConnection(), instance))->GetReference();
+}
+
 PP_Resource ResourceCreationProxy::CreateBroker(PP_Instance instance) {
   return PPB_Broker_Proxy::CreateProxyResource(instance);
 }
diff --git a/ppapi/proxy/resource_creation_proxy.h b/ppapi/proxy/resource_creation_proxy.h
index b7b0c3138..f83c53d 100644
--- a/ppapi/proxy/resource_creation_proxy.h
+++ b/ppapi/proxy/resource_creation_proxy.h
@@ -163,6 +163,7 @@
   PP_Resource CreateX509CertificatePrivate(PP_Instance instance) override;
 #if !defined(OS_NACL)
   PP_Resource CreateAudioInput(PP_Instance instance) override;
+  PP_Resource CreateAudioOutput(PP_Instance instance) override;
   PP_Resource CreateBroker(PP_Instance instance) override;
   PP_Resource CreateBrowserFont(
       PP_Instance instance,
diff --git a/ppapi/shared_impl/api_id.h b/ppapi/shared_impl/api_id.h
index a049948..ff8511d 100644
--- a/ppapi/shared_impl/api_id.h
+++ b/ppapi/shared_impl/api_id.h
@@ -15,6 +15,7 @@
   API_ID_PPB_AUDIO = 1,
   API_ID_PPB_AUDIO_CONFIG,
   API_ID_PPB_AUDIO_INPUT_DEV,
+  API_ID_PPB_AUDIO_OUTPUT_DEV,
   API_ID_PPB_BROKER,
   API_ID_PPB_BUFFER,
   API_ID_PPB_CONTEXT_3D,
diff --git a/ppapi/shared_impl/resource.h b/ppapi/shared_impl/resource.h
index 8d30ed4..687f961 100644
--- a/ppapi/shared_impl/resource.h
+++ b/ppapi/shared_impl/resource.h
@@ -24,6 +24,7 @@
   F(PPB_AudioConfig_API)                \
   F(PPB_AudioEncoder_API)               \
   F(PPB_AudioInput_API)                 \
+  F(PPB_AudioOutput_API)                \
   F(PPB_AudioTrusted_API)               \
   F(PPB_Broker_API)                     \
   F(PPB_Broker_Instance_API)            \
diff --git a/ppapi/thunk/BUILD.gn b/ppapi/thunk/BUILD.gn
index 913748f..44ef7d05 100644
--- a/ppapi/thunk/BUILD.gn
+++ b/ppapi/thunk/BUILD.gn
@@ -30,6 +30,7 @@
     "ppb_audio_encoder_api.h",
     "ppb_audio_encoder_thunk.cc",
     "ppb_audio_input_api.h",
+    "ppb_audio_output_api.h",
     "ppb_audio_thunk.cc",
     "ppb_broker_api.h",
     "ppb_browser_font_singleton_api.h",
@@ -163,6 +164,7 @@
   if (!is_nacl) {
     sources += [
       "ppb_audio_input_dev_thunk.cc",
+      "ppb_audio_output_dev_thunk.cc",
       "ppb_broker_thunk.cc",
       "ppb_browser_font_trusted_thunk.cc",
       "ppb_buffer_thunk.cc",
diff --git a/ppapi/thunk/interfaces_ppb_public_dev.h b/ppapi/thunk/interfaces_ppb_public_dev.h
index ca28d014..5c69935a 100644
--- a/ppapi/thunk/interfaces_ppb_public_dev.h
+++ b/ppapi/thunk/interfaces_ppb_public_dev.h
@@ -26,6 +26,7 @@
 
 PROXIED_IFACE(PPB_AUDIO_INPUT_DEV_INTERFACE_0_3, PPB_AudioInput_Dev_0_3)
 PROXIED_IFACE(PPB_AUDIO_INPUT_DEV_INTERFACE_0_4, PPB_AudioInput_Dev_0_4)
+PROXIED_IFACE(PPB_AUDIO_OUTPUT_DEV_INTERFACE_0_1, PPB_AudioOutput_Dev_0_1)
 PROXIED_IFACE(PPB_BUFFER_DEV_INTERFACE_0_4, PPB_Buffer_Dev_0_4)
 PROXIED_IFACE(PPB_CHAR_SET_DEV_INTERFACE_0_4, PPB_CharSet_Dev_0_4)
 PROXIED_IFACE(PPB_CRYPTO_DEV_INTERFACE_0_1, PPB_Crypto_Dev_0_1)
diff --git a/ppapi/thunk/ppb_audio_output_api.h b/ppapi/thunk/ppb_audio_output_api.h
new file mode 100644
index 0000000..4fceee75
--- /dev/null
+++ b/ppapi/thunk/ppb_audio_output_api.h
@@ -0,0 +1,43 @@
+// Copyright (c) 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.
+
+#ifndef PPAPI_THUNK_AUDIO_OUTPUT_API_H_
+#define PPAPI_THUNK_AUDIO_OUTPUT_API_H_
+
+#include <stdint.h>
+
+#include <string>
+
+#include "base/memory/ref_counted.h"
+#include "ppapi/c/dev/ppb_audio_output_dev.h"
+
+namespace ppapi {
+
+class TrackedCallback;
+
+namespace thunk {
+
+class PPB_AudioOutput_API {
+ public:
+  virtual ~PPB_AudioOutput_API() {}
+
+  virtual int32_t EnumerateDevices(const PP_ArrayOutput& output,
+                                   scoped_refptr<TrackedCallback> callback) = 0;
+  virtual int32_t MonitorDeviceChange(PP_MonitorDeviceChangeCallback callback,
+                                      void* user_data) = 0;
+  virtual int32_t Open(PP_Resource device_ref,
+                       PP_Resource config,
+                       PPB_AudioOutput_Callback audio_output_callback,
+                       void* user_data,
+                       scoped_refptr<TrackedCallback> callback) = 0;
+  virtual PP_Resource GetCurrentConfig() = 0;
+  virtual PP_Bool StartPlayback() = 0;
+  virtual PP_Bool StopPlayback() = 0;
+  virtual void Close() = 0;
+};
+
+}  // namespace thunk
+}  // namespace ppapi
+
+#endif  // PPAPI_THUNK_AUDIO_OUTPUT_API_H_
diff --git a/ppapi/thunk/ppb_audio_output_dev_thunk.cc b/ppapi/thunk/ppb_audio_output_dev_thunk.cc
new file mode 100644
index 0000000..a5f5b12
--- /dev/null
+++ b/ppapi/thunk/ppb_audio_output_dev_thunk.cc
@@ -0,0 +1,116 @@
+// Copyright (c) 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.
+
+// From dev/ppb_audio_output_dev.idl modified Fri Mar 31 08:08:16 2017.
+
+#include <stdint.h>
+
+#include "ppapi/c/dev/ppb_audio_output_dev.h"
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/shared_impl/tracked_callback.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppapi_thunk_export.h"
+#include "ppapi/thunk/ppb_audio_output_api.h"
+
+namespace ppapi {
+namespace thunk {
+
+namespace {
+
+PP_Resource Create(PP_Instance instance) {
+  VLOG(4) << "PPB_AudioOutput_Dev::Create()";
+  EnterResourceCreation enter(instance);
+  if (enter.failed())
+    return 0;
+  return enter.functions()->CreateAudioOutput(instance);
+}
+
+PP_Bool IsAudioOutput(PP_Resource resource) {
+  VLOG(4) << "PPB_AudioOutput_Dev::IsAudioOutput()";
+  EnterResource<PPB_AudioOutput_API> enter(resource, false);
+  return PP_FromBool(enter.succeeded());
+}
+
+int32_t EnumerateDevices(PP_Resource audio_output,
+                         struct PP_ArrayOutput output,
+                         struct PP_CompletionCallback callback) {
+  VLOG(4) << "PPB_AudioOutput_Dev::EnumerateDevices()";
+  EnterResource<PPB_AudioOutput_API> enter(audio_output, callback, true);
+  if (enter.failed())
+    return enter.retval();
+  return enter.SetResult(
+      enter.object()->EnumerateDevices(output, enter.callback()));
+}
+
+int32_t MonitorDeviceChange(PP_Resource audio_output,
+                            PP_MonitorDeviceChangeCallback callback,
+                            void* user_data) {
+  VLOG(4) << "PPB_AudioOutput_Dev::MonitorDeviceChange()";
+  EnterResource<PPB_AudioOutput_API> enter(audio_output, true);
+  if (enter.failed())
+    return enter.retval();
+  return enter.object()->MonitorDeviceChange(callback, user_data);
+}
+
+int32_t Open(PP_Resource audio_output,
+             PP_Resource device_ref,
+             PP_Resource config,
+             PPB_AudioOutput_Callback audio_output_callback,
+             void* user_data,
+             struct PP_CompletionCallback callback) {
+  VLOG(4) << "PPB_AudioOutput_Dev::Open()";
+  EnterResource<PPB_AudioOutput_API> enter(audio_output, callback, true);
+  if (enter.failed())
+    return enter.retval();
+  return enter.SetResult(enter.object()->Open(
+      device_ref, config, audio_output_callback, user_data, enter.callback()));
+}
+
+PP_Resource GetCurrentConfig(PP_Resource audio_output) {
+  VLOG(4) << "PPB_AudioOutput_Dev::GetCurrentConfig()";
+  EnterResource<PPB_AudioOutput_API> enter(audio_output, true);
+  if (enter.failed())
+    return 0;
+  return enter.object()->GetCurrentConfig();
+}
+
+PP_Bool StartPlayback(PP_Resource audio_output) {
+  VLOG(4) << "PPB_AudioOutput_Dev::StartPlayback()";
+  EnterResource<PPB_AudioOutput_API> enter(audio_output, true);
+  if (enter.failed())
+    return PP_FALSE;
+  return enter.object()->StartPlayback();
+}
+
+PP_Bool StopPlayback(PP_Resource audio_output) {
+  VLOG(4) << "PPB_AudioOutput_Dev::StopPlayback()";
+  EnterResource<PPB_AudioOutput_API> enter(audio_output, true);
+  if (enter.failed())
+    return PP_FALSE;
+  return enter.object()->StopPlayback();
+}
+
+void Close(PP_Resource audio_output) {
+  VLOG(4) << "PPB_AudioOutput_Dev::Close()";
+  EnterResource<PPB_AudioOutput_API> enter(audio_output, true);
+  if (enter.failed())
+    return;
+  enter.object()->Close();
+}
+
+const PPB_AudioOutput_Dev_0_1 g_ppb_audiooutput_dev_thunk_0_1 = {
+    &Create, &IsAudioOutput,    &EnumerateDevices, &MonitorDeviceChange,
+    &Open,   &GetCurrentConfig, &StartPlayback,    &StopPlayback,
+    &Close};
+
+}  // namespace
+
+PPAPI_THUNK_EXPORT const PPB_AudioOutput_Dev_0_1*
+GetPPB_AudioOutput_Dev_0_1_Thunk() {
+  return &g_ppb_audiooutput_dev_thunk_0_1;
+}
+
+}  // namespace thunk
+}  // namespace ppapi
diff --git a/ppapi/thunk/resource_creation_api.h b/ppapi/thunk/resource_creation_api.h
index aba7f8b..682f680 100644
--- a/ppapi/thunk/resource_creation_api.h
+++ b/ppapi/thunk/resource_creation_api.h
@@ -185,6 +185,7 @@
   virtual PP_Resource CreateX509CertificatePrivate(PP_Instance instance) = 0;
 #if !defined(OS_NACL)
   virtual PP_Resource CreateAudioInput(PP_Instance instance) = 0;
+  virtual PP_Resource CreateAudioOutput(PP_Instance instance) = 0;
   virtual PP_Resource CreateBroker(PP_Instance instance) = 0;
   virtual PP_Resource CreateBrowserFont(
       PP_Instance instance,
diff --git a/rlz/chromeos/lib/rlz_value_store_chromeos.cc b/rlz/chromeos/lib/rlz_value_store_chromeos.cc
index 6c72bff..347f7e5b 100644
--- a/rlz/chromeos/lib/rlz_value_store_chromeos.cc
+++ b/rlz/chromeos/lib/rlz_value_store_chromeos.cc
@@ -9,6 +9,7 @@
 #include "base/files/important_file_writer.h"
 #include "base/json/json_file_value_serializer.h"
 #include "base/json/json_string_value_serializer.h"
+#include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/path_service.h"
@@ -41,24 +42,25 @@
     FILE_PATH_LITERAL("RLZ Data.lock");
 
 // RLZ store path for testing.
-base::FilePath g_testing_rlz_store_path_;
+base::LazyInstance<base::FilePath>::Leaky g_testing_rlz_store_path =
+    LAZY_INSTANCE_INITIALIZER;
+
+base::FilePath GetRlzStorePathCommon() {
+  base::FilePath homedir;
+  PathService::Get(base::DIR_HOME, &homedir);
+  return g_testing_rlz_store_path.Get().empty()
+             ? homedir
+             : g_testing_rlz_store_path.Get();
+}
 
 // Returns file path of the RLZ storage.
 base::FilePath GetRlzStorePath() {
-  base::FilePath homedir;
-  PathService::Get(base::DIR_HOME, &homedir);
-  return g_testing_rlz_store_path_.empty() ?
-      homedir.Append(kRLZDataFileName) :
-      g_testing_rlz_store_path_.Append(kRLZDataFileName);
+  return GetRlzStorePathCommon().Append(kRLZDataFileName);
 }
 
 // Returns file path of the RLZ storage lock file.
 base::FilePath GetRlzStoreLockPath() {
-  base::FilePath homedir;
-  PathService::Get(base::DIR_HOME, &homedir);
-  return g_testing_rlz_store_path_.empty() ?
-      homedir.Append(kRLZLockFileName) :
-      g_testing_rlz_store_path_.Append(kRLZLockFileName);
+  return GetRlzStorePathCommon().Append(kRLZLockFileName);
 }
 
 // Returns the dictionary key for storing access point-related prefs.
@@ -155,7 +157,7 @@
     Product product,
     std::vector<std::string>* events) {
   DCHECK(CalledOnValidThread());
-  base::ListValue* events_list = NULL; ;
+  base::ListValue* events_list = nullptr;
   if (!rlz_store_->GetList(GetKeyName(kProductEventKey, product), &events_list))
     return false;
   events->clear();
@@ -311,7 +313,7 @@
 
 ScopedRlzValueStoreLock::~ScopedRlzValueStoreLock() {
   --g_lock_depth;
-  DCHECK(g_lock_depth >= 0);
+  DCHECK_GE(g_lock_depth, 0);
 
   if (g_lock_depth > 0) {
     // Other locks are still using store_, so don't free it yet.
@@ -331,7 +333,7 @@
 namespace testing {
 
 void SetRlzStoreDirectory(const base::FilePath& directory) {
-  g_testing_rlz_store_path_ = directory;
+  g_testing_rlz_store_path.Get() = directory;
 }
 
 std::string RlzStoreFilenameStr() {
diff --git a/rlz/chromeos/lib/rlz_value_store_chromeos.h b/rlz/chromeos/lib/rlz_value_store_chromeos.h
index ec26248..cae01ba 100644
--- a/rlz/chromeos/lib/rlz_value_store_chromeos.h
+++ b/rlz/chromeos/lib/rlz_value_store_chromeos.h
@@ -13,11 +13,10 @@
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/threading/non_thread_safe.h"
-#include "base/values.h"
 #include "rlz/lib/rlz_value_store.h"
 
 namespace base {
-class SequencedTaskRunner;
+class DictionaryValue;
 class Value;
 }
 
@@ -27,12 +26,8 @@
 class RlzValueStoreChromeOS : public RlzValueStore,
                               public base::NonThreadSafe {
  public:
-  // // Sets the task runner that will be used by ImportantFileWriter for write
-  // // operations.
-  // static void SetFileTaskRunner(base::SequencedTaskRunner* file_task_runner);
-
   // Creates new instance and synchronously reads data from file.
-  RlzValueStoreChromeOS(const base::FilePath& store_path);
+  explicit RlzValueStoreChromeOS(const base::FilePath& store_path);
   ~RlzValueStoreChromeOS() override;
 
   // RlzValueStore overrides:
diff --git a/services/catalog/catalog.cc b/services/catalog/catalog.cc
index bdcb40af..b062eb4 100644
--- a/services/catalog/catalog.cc
+++ b/services/catalog/catalog.cc
@@ -24,8 +24,8 @@
 #include "services/catalog/constants.h"
 #include "services/catalog/entry_cache.h"
 #include "services/catalog/instance.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/connection.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 
 namespace catalog {
@@ -112,20 +112,24 @@
 
 class Catalog::ServiceImpl : public service_manager::Service {
  public:
-  explicit ServiceImpl(Catalog* catalog) : catalog_(catalog) {}
+  explicit ServiceImpl(Catalog* catalog) : catalog_(catalog) {
+    registry_.AddInterface<mojom::Catalog>(catalog_);
+    registry_.AddInterface<filesystem::mojom::Directory>(catalog_);
+    registry_.AddInterface<service_manager::mojom::Resolver>(catalog_);
+  }
   ~ServiceImpl() override {}
 
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface<mojom::Catalog>(catalog_);
-    registry->AddInterface<filesystem::mojom::Directory>(catalog_);
-    registry->AddInterface<service_manager::mojom::Resolver>(catalog_);
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
  private:
   Catalog* const catalog_;
+  service_manager::BinderRegistry registry_;
 
   DISALLOW_COPY_AND_ASSIGN(ServiceImpl);
 };
diff --git a/services/data_decoder/data_decoder_service.cc b/services/data_decoder/data_decoder_service.cc
index 17c9e424..cf79391 100644
--- a/services/data_decoder/data_decoder_service.cc
+++ b/services/data_decoder/data_decoder_service.cc
@@ -11,18 +11,12 @@
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "services/data_decoder/image_decoder_impl.h"
 #include "services/data_decoder/public/interfaces/image_decoder.mojom.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 
 namespace data_decoder {
 
 namespace {
 
-void OnConnectionLost(std::unique_ptr<service_manager::ServiceContextRef> ref) {
-  // No-op. This merely takes ownership of |ref| so it can be destroyed when
-  // this function is invoked.
-}
-
 void OnImageDecoderRequest(
     service_manager::ServiceContextRefFactory* ref_factory,
     mojom::ImageDecoderRequest request) {
@@ -45,20 +39,16 @@
 void DataDecoderService::OnStart() {
   ref_factory_.reset(new service_manager::ServiceContextRefFactory(base::Bind(
       &DataDecoderService::MaybeRequestQuitDelayed, base::Unretained(this))));
+  registry_.AddInterface(
+      base::Bind(&OnImageDecoderRequest, ref_factory_.get()));
 }
 
-bool DataDecoderService::OnConnect(
-    const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
-  // Add a reference to the service and tie it to the lifetime of the
-  // InterfaceRegistry's connection.
-  std::unique_ptr<service_manager::ServiceContextRef> connection_ref =
-      ref_factory_->CreateRef();
-  registry->AddConnectionLostClosure(
-      base::Bind(&OnConnectionLost, base::Passed(&connection_ref)));
-  registry->AddInterface(
-      base::Bind(&OnImageDecoderRequest, ref_factory_.get()));
-  return true;
+void DataDecoderService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void DataDecoderService::MaybeRequestQuitDelayed() {
diff --git a/services/data_decoder/data_decoder_service.h b/services/data_decoder/data_decoder_service.h
index b1c0b516..0de223d 100644
--- a/services/data_decoder/data_decoder_service.h
+++ b/services/data_decoder/data_decoder_service.h
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_context_ref.h"
 
@@ -25,14 +26,16 @@
 
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
  private:
   void MaybeRequestQuitDelayed();
   void MaybeRequestQuit();
 
   std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_;
+  service_manager::BinderRegistry registry_;
   base::WeakPtrFactory<DataDecoderService> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(DataDecoderService);
diff --git a/services/device/device_service.cc b/services/device/device_service.cc
index a0aae54d..7cb98e0d 100644
--- a/services/device/device_service.cc
+++ b/services/device/device_service.cc
@@ -83,32 +83,35 @@
 #endif
 }
 
-void DeviceService::OnStart() {}
-
-bool DeviceService::OnConnect(const service_manager::ServiceInfo& remote_info,
-                              service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::Fingerprint>(this);
-  registry->AddInterface<mojom::LightSensor>(this);
-  registry->AddInterface<mojom::MotionSensor>(this);
-  registry->AddInterface<mojom::OrientationSensor>(this);
-  registry->AddInterface<mojom::OrientationAbsoluteSensor>(this);
-  registry->AddInterface<mojom::PowerMonitor>(this);
-  registry->AddInterface<mojom::ScreenOrientationListener>(this);
-  registry->AddInterface<mojom::TimeZoneMonitor>(this);
-  registry->AddInterface<mojom::WakeLockContextProvider>(this);
+void DeviceService::OnStart() {
+  registry_.AddInterface<mojom::Fingerprint>(this);
+  registry_.AddInterface<mojom::LightSensor>(this);
+  registry_.AddInterface<mojom::MotionSensor>(this);
+  registry_.AddInterface<mojom::OrientationSensor>(this);
+  registry_.AddInterface<mojom::OrientationAbsoluteSensor>(this);
+  registry_.AddInterface<mojom::PowerMonitor>(this);
+  registry_.AddInterface<mojom::ScreenOrientationListener>(this);
+  registry_.AddInterface<mojom::TimeZoneMonitor>(this);
+  registry_.AddInterface<mojom::WakeLockContextProvider>(this);
 
 #if defined(OS_ANDROID)
-  registry->AddInterface(
+  registry_.AddInterface(
       GetJavaInterfaceProvider()->CreateInterfaceFactory<BatteryMonitor>());
-  registry->AddInterface(
+  registry_.AddInterface(
       GetJavaInterfaceProvider()
           ->CreateInterfaceFactory<mojom::VibrationManager>());
 #else
-  registry->AddInterface<BatteryMonitor>(this);
-  registry->AddInterface<mojom::VibrationManager>(this);
+  registry_.AddInterface<BatteryMonitor>(this);
+  registry_.AddInterface<mojom::VibrationManager>(this);
 #endif
+}
 
-  return true;
+void DeviceService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 #if !defined(OS_ANDROID)
diff --git a/services/device/device_service.h b/services/device/device_service.h
index c4ed1276..4291e7f 100644
--- a/services/device/device_service.h
+++ b/services/device/device_service.h
@@ -18,6 +18,7 @@
 #include "services/device/public/interfaces/fingerprint.mojom.h"
 #include "services/device/public/interfaces/power_monitor.mojom.h"
 #include "services/device/public/interfaces/time_zone_monitor.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 #include "services/service_manager/public/cpp/service.h"
@@ -75,8 +76,9 @@
  private:
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // InterfaceFactory<mojom::Fingerprint>:
   void Create(const service_manager::Identity& remote_identity,
@@ -142,6 +144,8 @@
 
   WakeLockContextCallback wake_lock_context_callback_;
 
+  service_manager::BinderRegistry registry_;
+
   DISALLOW_COPY_AND_ASSIGN(DeviceService);
 };
 
diff --git a/services/file/file_service.cc b/services/file/file_service.cc
index a8b7eee7..d10ed4dc 100644
--- a/services/file/file_service.cc
+++ b/services/file/file_service.cc
@@ -13,7 +13,6 @@
 #include "services/file/file_system.h"
 #include "services/file/user_id_map.h"
 #include "services/service_manager/public/cpp/connection.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 
 namespace file {
@@ -85,7 +84,10 @@
     scoped_refptr<base::SingleThreadTaskRunner> file_service_runner,
     scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner)
     : file_service_runner_(std::move(file_service_runner)),
-      leveldb_service_runner_(std::move(leveldb_service_runner)) {}
+      leveldb_service_runner_(std::move(leveldb_service_runner)) {
+  registry_.AddInterface<leveldb::mojom::LevelDBService>(this);
+  registry_.AddInterface<mojom::FileSystem>(this);
+}
 
 FileService::~FileService() {
   file_service_runner_->DeleteSoon(FROM_HERE, file_system_objects_.release());
@@ -99,11 +101,12 @@
       new FileService::LevelDBServiceObjects(file_service_runner_));
 }
 
-bool FileService::OnConnect(const service_manager::ServiceInfo& remote_info,
-                            service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<leveldb::mojom::LevelDBService>(this);
-  registry->AddInterface<mojom::FileSystem>(this);
-  return true;
+void FileService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void FileService::Create(const service_manager::Identity& remote_identity,
diff --git a/services/file/file_service.h b/services/file/file_service.h
index 357aa88..c91490a 100644
--- a/services/file/file_service.h
+++ b/services/file/file_service.h
@@ -11,6 +11,7 @@
 #include "components/leveldb/public/interfaces/leveldb.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/file/public/interfaces/file_system.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 
@@ -33,8 +34,9 @@
  private:
   // |Service| override:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // |InterfaceFactory<mojom::FileSystem>| implementation:
   void Create(const service_manager::Identity& remote_identity,
@@ -57,6 +59,8 @@
   class LevelDBServiceObjects;
   std::unique_ptr<LevelDBServiceObjects> leveldb_objects_;
 
+  service_manager::BinderRegistry registry_;
+
   DISALLOW_COPY_AND_ASSIGN(FileService);
 };
 
diff --git a/services/identity/identity_service.cc b/services/identity/identity_service.cc
index 1e780b4..1cb95dc 100644
--- a/services/identity/identity_service.cc
+++ b/services/identity/identity_service.cc
@@ -6,22 +6,25 @@
 
 #include "services/identity/identity_manager.h"
 #include "services/service_manager/public/cpp/connection.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 
 namespace identity {
 
 IdentityService::IdentityService(SigninManagerBase* signin_manager)
-    : signin_manager_(signin_manager) {}
+    : signin_manager_(signin_manager) {
+  registry_.AddInterface<mojom::IdentityManager>(this);
+}
 
 IdentityService::~IdentityService() {}
 
 void IdentityService::OnStart() {}
 
-bool IdentityService::OnConnect(const service_manager::ServiceInfo& remote_info,
-                                service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::IdentityManager>(this);
-  return true;
+void IdentityService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void IdentityService::Create(const service_manager::Identity& remote_identity,
diff --git a/services/identity/identity_service.h b/services/identity/identity_service.h
index b2fd9c7..4d1192f 100644
--- a/services/identity/identity_service.h
+++ b/services/identity/identity_service.h
@@ -6,6 +6,7 @@
 #define SERVICES_IDENTITY_IDENTITY_SERVICE_H_
 
 #include "services/identity/public/interfaces/identity_manager.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 
@@ -23,8 +24,9 @@
  private:
   // |Service| override:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // InterfaceFactory<mojom::IdentityManager>:
   void Create(const service_manager::Identity& remote_identity,
@@ -32,6 +34,8 @@
 
   SigninManagerBase* signin_manager_;
 
+  service_manager::BinderRegistry registry_;
+
   DISALLOW_COPY_AND_ASSIGN(IdentityService);
 };
 
diff --git a/services/navigation/navigation.cc b/services/navigation/navigation.cc
index 5f929cd5..0e92309 100644
--- a/services/navigation/navigation.cc
+++ b/services/navigation/navigation.cc
@@ -38,26 +38,26 @@
 
 Navigation::Navigation()
     : view_task_runner_(base::ThreadTaskRunnerHandle::Get()),
-      ref_factory_(base::MessageLoop::QuitWhenIdleClosure()),
-      weak_factory_(this) {
+      ref_factory_(base::MessageLoop::QuitWhenIdleClosure()) {
   bindings_.set_connection_error_handler(
       base::Bind(&Navigation::ViewFactoryLost, base::Unretained(this)));
+  registry_.AddInterface<mojom::ViewFactory>(this);
 }
 Navigation::~Navigation() {}
 
-bool Navigation::OnConnect(const service_manager::ServiceInfo& remote_info,
-                           service_manager::InterfaceRegistry* registry) {
-  std::string remote_user_id = remote_info.identity.user_id();
+void Navigation::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  std::string remote_user_id = source_info.identity.user_id();
   if (!client_user_id_.empty() && client_user_id_ != remote_user_id) {
     LOG(ERROR) << "Must have a separate Navigation service instance for "
                << "different BrowserContexts.";
-    return false;
+    return;
   }
   client_user_id_ = remote_user_id;
-
-  registry->AddInterface(
-      base::Bind(&Navigation::CreateViewFactory, weak_factory_.GetWeakPtr()));
-  return true;
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void Navigation::CreateView(mojom::ViewClientPtr client,
@@ -73,7 +73,8 @@
                  base::Passed(&context_ref)));
 }
 
-void Navigation::CreateViewFactory(mojom::ViewFactoryRequest request) {
+void Navigation::Create(const service_manager::Identity& remote_identity,
+                        mojom::ViewFactoryRequest request) {
   bindings_.AddBinding(this, std::move(request));
   refs_.insert(ref_factory_.CreateRef());
 }
diff --git a/services/navigation/navigation.h b/services/navigation/navigation.h
index af242e3..181b73f2 100644
--- a/services/navigation/navigation.h
+++ b/services/navigation/navigation.h
@@ -6,11 +6,11 @@
 #define SERVICES_NAVIGATION_NAVIGATION_H_
 
 #include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
 #include "base/sequenced_task_runner.h"
 #include "content/public/common/connection_filter.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/navigation/public/interfaces/view.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_context_ref.h"
@@ -19,21 +19,27 @@
 
 std::unique_ptr<service_manager::Service> CreateNavigationService();
 
-class Navigation : public service_manager::Service, public mojom::ViewFactory {
+class Navigation
+    : public service_manager::Service,
+      public mojom::ViewFactory,
+      public service_manager::InterfaceFactory<mojom::ViewFactory> {
  public:
   Navigation();
   ~Navigation() override;
 
  private:
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // mojom::ViewFactory:
   void CreateView(mojom::ViewClientPtr client,
                   mojom::ViewRequest request) override;
 
-  void CreateViewFactory(mojom::ViewFactoryRequest request);
+  void Create(const service_manager::Identity& remote_identity,
+              mojom::ViewFactoryRequest request) override;
+
   void ViewFactoryLost();
 
   scoped_refptr<base::SequencedTaskRunner> view_task_runner_;
@@ -43,10 +49,9 @@
   service_manager::ServiceContextRefFactory ref_factory_;
   std::set<std::unique_ptr<service_manager::ServiceContextRef>> refs_;
 
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::ViewFactory> bindings_;
 
-  base::WeakPtrFactory<Navigation> weak_factory_;
-
   DISALLOW_COPY_AND_ASSIGN(Navigation);
 };
 
diff --git a/services/preferences/pref_service_factory_unittest.cc b/services/preferences/pref_service_factory_unittest.cc
index a2a34dd2..21094e8 100644
--- a/services/preferences/pref_service_factory_unittest.cc
+++ b/services/preferences/pref_service_factory_unittest.cc
@@ -17,8 +17,8 @@
 #include "services/preferences/public/cpp/pref_service_main.h"
 #include "services/preferences/public/cpp/pref_store_impl.h"
 #include "services/preferences/public/interfaces/preferences.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/service_manager/public/cpp/service_test.h"
 #include "services/service_manager/public/interfaces/service_factory.mojom.h"
@@ -34,13 +34,16 @@
   ServiceTestClient(service_manager::test::ServiceTest* test,
                     scoped_refptr<base::SequencedWorkerPool> worker_pool)
       : service_manager::test::ServiceTestClient(test),
-        worker_pool_(std::move(worker_pool)) {}
+        worker_pool_(std::move(worker_pool)) {
+    registry_.AddInterface<service_manager::mojom::ServiceFactory>(this);
+  }
 
  protected:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface<service_manager::mojom::ServiceFactory>(this);
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
   void CreateService(service_manager::mojom::ServiceRequest request,
@@ -63,6 +66,7 @@
 
  private:
   scoped_refptr<base::SequencedWorkerPool> worker_pool_;
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<service_manager::mojom::ServiceFactory>
       service_factory_bindings_;
   std::unique_ptr<service_manager::ServiceContext> pref_service_context_;
diff --git a/services/preferences/pref_store_manager_impl.cc b/services/preferences/pref_store_manager_impl.cc
index 027134c..f418792 100644
--- a/services/preferences/pref_store_manager_impl.cc
+++ b/services/preferences/pref_store_manager_impl.cc
@@ -16,7 +16,7 @@
 #include "services/preferences/persistent_pref_store_factory.h"
 #include "services/preferences/persistent_pref_store_impl.h"
 #include "services/preferences/public/cpp/pref_store_impl.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/service_info.h"
 
 namespace prefs {
 namespace {
@@ -124,6 +124,9 @@
   // The user store is not actually connected to in the implementation, but
   // accessed directly.
   expected_pref_stores_.erase(PrefValueStore::USER_STORE);
+  registry_.AddInterface<prefs::mojom::PrefStoreConnector>(this);
+  registry_.AddInterface<prefs::mojom::PrefStoreRegistry>(this);
+  registry_.AddInterface<prefs::mojom::PrefServiceControl>(this);
 }
 
 PrefStoreManagerImpl::~PrefStoreManagerImpl() = default;
@@ -208,13 +211,12 @@
 
 void PrefStoreManagerImpl::OnStart() {}
 
-bool PrefStoreManagerImpl::OnConnect(
-    const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<prefs::mojom::PrefStoreConnector>(this);
-  registry->AddInterface<prefs::mojom::PrefStoreRegistry>(this);
-  registry->AddInterface<prefs::mojom::PrefServiceControl>(this);
-  return true;
+void PrefStoreManagerImpl::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void PrefStoreManagerImpl::OnPrefStoreDisconnect(
diff --git a/services/preferences/pref_store_manager_impl.h b/services/preferences/pref_store_manager_impl.h
index d24eca9..bc7eb1e6 100644
--- a/services/preferences/pref_store_manager_impl.h
+++ b/services/preferences/pref_store_manager_impl.h
@@ -16,6 +16,7 @@
 #include "components/prefs/pref_value_store.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/preferences/public/interfaces/preferences.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 
@@ -84,8 +85,9 @@
 
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // Called when a PrefStore previously registered using |Register| disconnects.
   void OnPrefStoreDisconnect(PrefValueStore::PrefStoreType type);
@@ -124,6 +126,8 @@
 
   const scoped_refptr<base::SequencedWorkerPool> worker_pool_;
 
+  service_manager::BinderRegistry registry_;
+
   DISALLOW_COPY_AND_ASSIGN(PrefStoreManagerImpl);
 };
 
diff --git a/services/service_manager/service_manager.cc b/services/service_manager/service_manager.cc
index e353253..2a01504 100644
--- a/services/service_manager/service_manager.cc
+++ b/services/service_manager/service_manager.cc
@@ -107,7 +107,6 @@
     : public mojom::Connector,
       public mojom::PIDReceiver,
       public Service,
-      public InterfaceFactory<mojom::ServiceManager>,
       public mojom::ServiceManager,
       public mojom::ServiceControl {
  public:
@@ -279,17 +278,19 @@
   uint32_t id() const { return id_; }
 
   // Service:
-  bool OnConnect(const ServiceInfo& remote_info,
-                 InterfaceRegistry* registry) override {
+  void OnBindInterface(const ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
     Instance* source =
-        service_manager_->GetExistingInstance(remote_info.identity);
+        service_manager_->GetExistingInstance(source_info.identity);
     DCHECK(source);
-    if (HasCapability(source->GetConnectionSpec(),
+    if (interface_name == mojom::ServiceManager::Name_ &&
+        HasCapability(source->GetConnectionSpec(),
                       kCapability_ServiceManager)) {
-      registry->AddInterface<mojom::ServiceManager>(this);
-      return true;
+      mojom::ServiceManagerRequest request =
+          mojo::MakeRequest<mojom::ServiceManager>(std::move(interface_pipe));
+      service_manager_bindings_.AddBinding(this, std::move(request));
     }
-    return false;
   }
 
  private:
@@ -376,12 +377,6 @@
     PIDAvailable(pid);
   }
 
-  // InterfaceFactory<mojom::ServiceManager>:
-  void Create(const Identity& remote_identity,
-              mojom::ServiceManagerRequest request) override {
-    service_manager_bindings_.AddBinding(this, std::move(request));
-  }
-
   // mojom::ServiceManager implementation:
   void AddListener(mojom::ServiceManagerListenerPtr listener) override {
     // TODO(beng): this should only track the instances matching this user, and
@@ -580,22 +575,24 @@
   ~ServiceImpl() override {}
 
   // Service:
-  bool OnConnect(const ServiceInfo& remote_info,
-                 InterfaceRegistry* registry) override {
+  void OnBindInterface(const ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
     // The only interface ServiceManager exposes is mojom::ServiceManager, and
     // access to this interface is brokered by a policy specific to each caller,
     // managed by the caller's instance. Here we look to see who's calling,
     // and forward to the caller's instance to continue.
     Instance* instance = nullptr;
     for (const auto& entry : service_manager_->identity_to_instance_) {
-      if (entry.first == remote_info.identity) {
+      if (entry.first == source_info.identity) {
         instance = entry.second;
         break;
       }
     }
 
     DCHECK(instance);
-    return instance->OnConnect(remote_info, registry);
+    instance->OnBindInterface(source_info, interface_name,
+                              std::move(interface_pipe));
   }
 
  private:
diff --git a/services/service_manager/service_manager.h b/services/service_manager/service_manager.h
index 94c79e43..ecba992 100644
--- a/services/service_manager/service_manager.h
+++ b/services/service_manager/service_manager.h
@@ -15,7 +15,6 @@
 #include "mojo/public/cpp/bindings/interface_ptr_set.h"
 #include "services/service_manager/connect_params.h"
 #include "services/service_manager/public/cpp/identity.h"
-#include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/interface_provider_spec.h"
 #include "services/service_manager/public/interfaces/connector.mojom.h"
 #include "services/service_manager/public/interfaces/interface_provider.mojom.h"
diff --git a/services/service_manager/tests/connect/connect_test_exe.cc b/services/service_manager/tests/connect/connect_test_exe.cc
index 128eacd..bfede0fe2 100644
--- a/services/service_manager/tests/connect/connect_test_exe.cc
+++ b/services/service_manager/tests/connect/connect_test_exe.cc
@@ -8,8 +8,8 @@
 #include "base/memory/ptr_util.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/service_manager/public/c/main.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/service_manager/public/cpp/service_runner.h"
@@ -24,15 +24,16 @@
                public service_manager::InterfaceFactory<ConnectTestService>,
                public ConnectTestService {
  public:
-  Target() {}
+  Target() { registry_.AddInterface<ConnectTestService>(this); }
   ~Target() override {}
 
  private:
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface<ConnectTestService>(this);
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
   // service_manager::InterfaceFactory<ConnectTestService>:
@@ -50,6 +51,7 @@
     callback.Run(context()->identity().instance());
   }
 
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<ConnectTestService> bindings_;
 
   DISALLOW_COPY_AND_ASSIGN(Target);
diff --git a/services/service_manager/tests/lifecycle/package.cc b/services/service_manager/tests/lifecycle/package.cc
index 5dc4edce..c3d75d8 100644
--- a/services/service_manager/tests/lifecycle/package.cc
+++ b/services/service_manager/tests/lifecycle/package.cc
@@ -10,8 +10,8 @@
 #include "base/memory/ptr_util.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/service_manager/public/c/main.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/service_manager/public/cpp/service_runner.h"
 #include "services/service_manager/public/interfaces/service_factory.mojom.h"
@@ -34,17 +34,19 @@
         destruct_callback_(destruct_callback) {
     bindings_.set_connection_error_handler(base::Bind(&PackagedApp::BindingLost,
                                                       base::Unretained(this)));
+    registry_.AddInterface<service_manager::test::mojom::LifecycleControl>(
+        this);
   }
 
   ~PackagedApp() override {}
 
  private:
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface<service_manager::test::mojom::LifecycleControl>(
-        this);
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
   // service_manager::InterfaceFactory<LifecycleControl>
@@ -87,6 +89,7 @@
     }
   }
 
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<service_manager::test::mojom::LifecycleControl> bindings_;
 
   // Run when this object's connection to the service manager is closed.
@@ -102,15 +105,23 @@
                     service_manager::mojom::ServiceFactory>,
                 public service_manager::mojom::ServiceFactory {
  public:
-  Package() : ForwardingService(&app_client_) {}
+  Package() : ForwardingService(&app_client_) {
+    registry_.AddInterface<service_manager::mojom::ServiceFactory>(this);
+  }
   ~Package() override {}
 
  private:
   // ForwardingService:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface<service_manager::mojom::ServiceFactory>(this);
-    return ForwardingService::OnConnect(remote_info, registry);
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    if (registry_.CanBindInterface(interface_name)) {
+      registry_.BindInterface(source_info.identity, interface_name,
+                              std::move(interface_pipe));
+    } else {
+      ForwardingService::OnBindInterface(source_info, interface_name,
+                                         std::move(interface_pipe));
+    }
   }
 
   // service_manager::InterfaceFactory<service_manager::mojom::ServiceFactory>:
@@ -156,6 +167,7 @@
 
   service_manager::test::AppClient app_client_;
   int service_manager_connection_refcount_ = 0;
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<service_manager::mojom::ServiceFactory> bindings_;
 
   using ServiceContextMap =
diff --git a/services/service_manager/tests/lifecycle/parent.cc b/services/service_manager/tests/lifecycle/parent.cc
index fdc1b69..17f64ee 100644
--- a/services/service_manager/tests/lifecycle/parent.cc
+++ b/services/service_manager/tests/lifecycle/parent.cc
@@ -9,9 +9,9 @@
 #include "base/run_loop.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/service_manager/public/c/main.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/connector.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/service_manager/public/cpp/service_runner.h"
@@ -28,18 +28,20 @@
                    service_manager::test::mojom::Parent>,
                public service_manager::test::mojom::Parent {
  public:
-  Parent() {}
+  Parent() {
+    registry_.AddInterface<service_manager::test::mojom::Parent>(this);
+  }
   ~Parent() override {
-    child_connection_.reset();
     parent_bindings_.CloseAllBindings();
   }
 
  private:
   // Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface<service_manager::test::mojom::Parent>(this);
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
   // InterfaceFactory<service_manager::test::mojom::Parent>:
@@ -50,10 +52,8 @@
 
   // service_manager::test::mojom::Parent:
   void ConnectToChild(const ConnectToChildCallback& callback) override {
-    child_connection_ =
-        context()->connector()->Connect("lifecycle_unittest_app");
     service_manager::test::mojom::LifecycleControlPtr lifecycle;
-    child_connection_->GetInterface(&lifecycle);
+    context()->connector()->BindInterface("lifecycle_unittest_app", &lifecycle);
     {
       base::RunLoop loop;
       lifecycle->Ping(base::Bind(&QuitLoop, &loop));
@@ -67,7 +67,7 @@
     base::MessageLoop::current()->QuitWhenIdle();
   }
 
-  std::unique_ptr<service_manager::Connection> child_connection_;
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<service_manager::test::mojom::Parent> parent_bindings_;
 
   DISALLOW_COPY_AND_ASSIGN(Parent);
diff --git a/services/service_manager/tests/service_manager/embedder.cc b/services/service_manager/tests/service_manager/embedder.cc
index dceb8f3..26e7eb7 100644
--- a/services/service_manager/tests/service_manager/embedder.cc
+++ b/services/service_manager/tests/service_manager/embedder.cc
@@ -11,8 +11,8 @@
 #include "base/message_loop/message_loop.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/service_manager/public/c/main.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/service_manager/public/cpp/service_runner.h"
@@ -28,10 +28,9 @@
 
  private:
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    return false;
-  }
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {}
 
   DISALLOW_COPY_AND_ASSIGN(Singleton);
 };
@@ -41,15 +40,18 @@
                      service_manager::mojom::ServiceFactory>,
                  public service_manager::mojom::ServiceFactory {
  public:
-  Embedder() {}
+  Embedder() {
+    registry_.AddInterface<service_manager::mojom::ServiceFactory>(this);
+  }
   ~Embedder() override {}
 
  private:
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface<service_manager::mojom::ServiceFactory>(this);
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
   bool OnServiceManagerConnectionLost() override {
@@ -73,6 +75,7 @@
   }
 
   std::unique_ptr<service_manager::ServiceContext> context_;
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<service_manager::mojom::ServiceFactory>
       service_factory_bindings_;
 
diff --git a/services/service_manager/tests/service_manager/target.cc b/services/service_manager/tests/service_manager/target.cc
index a381813..bbfd5e7 100644
--- a/services/service_manager/tests/service_manager/target.cc
+++ b/services/service_manager/tests/service_manager/target.cc
@@ -31,11 +31,9 @@
                                           &service);
     service->SetTargetIdentity(context()->identity());
   }
-
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    return false;
-  }
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {}
 
   DISALLOW_COPY_AND_ASSIGN(Target);
 };
diff --git a/services/shape_detection/OWNERS b/services/shape_detection/OWNERS
new file mode 100644
index 0000000..26e1bed
--- /dev/null
+++ b/services/shape_detection/OWNERS
@@ -0,0 +1,5 @@
+mcasas@chromium.org
+reillyg@chromium.org
+
+# COMPONENT: Blink>ImageCapture
+# TEAM: device-dev@chromium.org
diff --git a/services/shape_detection/shape_detection_service.cc b/services/shape_detection/shape_detection_service.cc
index 9d4000b..6891d4a 100644
--- a/services/shape_detection/shape_detection_service.cc
+++ b/services/shape_detection/shape_detection_service.cc
@@ -5,7 +5,6 @@
 #include "services/shape_detection/shape_detection_service.h"
 
 #include "base/macros.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/shape_detection/barcode_detection_impl.h"
 #include "services/shape_detection/face_detection_provider_impl.h"
@@ -13,14 +12,6 @@
 
 namespace shape_detection {
 
-namespace {
-
-void OnConnectionLost(std::unique_ptr<service_manager::ServiceContextRef> ref) {
-  // No-op. This merely takes ownership of |ref| so it can be destroyed when
-  // this function is invoked.
-}
-}
-
 std::unique_ptr<service_manager::Service> ShapeDetectionService::Create() {
   return base::MakeUnique<ShapeDetectionService>();
 }
@@ -33,21 +24,17 @@
   ref_factory_.reset(new service_manager::ServiceContextRefFactory(
       base::Bind(&service_manager::ServiceContext::RequestQuit,
                  base::Unretained(context()))));
+  registry_.AddInterface(base::Bind(&BarcodeDetectionImpl::Create));
+  registry_.AddInterface(base::Bind(&FaceDetectionProviderImpl::Create));
+  registry_.AddInterface(base::Bind(&TextDetectionImpl::Create));
 }
 
-bool ShapeDetectionService::OnConnect(
-    const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
-  // Add a reference to the service and tie it to the lifetime of the
-  // InterfaceRegistry's connection.
-  std::unique_ptr<service_manager::ServiceContextRef> connection_ref =
-      ref_factory_->CreateRef();
-  registry->AddConnectionLostClosure(
-      base::Bind(&OnConnectionLost, base::Passed(&connection_ref)));
-  registry->AddInterface(base::Bind(&BarcodeDetectionImpl::Create));
-  registry->AddInterface(base::Bind(&FaceDetectionProviderImpl::Create));
-  registry->AddInterface(base::Bind(&TextDetectionImpl::Create));
-  return true;
+void ShapeDetectionService::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 }  // namespace shape_detection
diff --git a/services/shape_detection/shape_detection_service.h b/services/shape_detection/shape_detection_service.h
index ab79456..bf0f78c32 100644
--- a/services/shape_detection/shape_detection_service.h
+++ b/services/shape_detection/shape_detection_service.h
@@ -9,6 +9,7 @@
 
 #include "base/callback.h"
 #include "base/macros.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_context_ref.h"
 
@@ -23,11 +24,13 @@
   ~ShapeDetectionService() override;
 
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
  private:
   std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_;
+  service_manager::BinderRegistry registry_;
 
   DISALLOW_COPY_AND_ASSIGN(ShapeDetectionService);
 };
diff --git a/services/tracing/service.cc b/services/tracing/service.cc
index aca1ec5e..6eaf742 100644
--- a/services/tracing/service.cc
+++ b/services/tracing/service.cc
@@ -14,19 +14,22 @@
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "mojo/public/cpp/system/wait.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/service_info.h"
 
 namespace tracing {
 
-Service::Service() : collector_binding_(this), tracing_active_(false) {}
+Service::Service() : collector_binding_(this), tracing_active_(false) {
+  registry_.AddInterface<mojom::Factory>(this);
+  registry_.AddInterface<mojom::Collector>(this);
+  registry_.AddInterface<mojom::StartupPerformanceDataCollector>(this);
+}
 Service::~Service() {}
 
-bool Service::OnConnect(const service_manager::ServiceInfo& remote_info,
-                        service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::Factory>(this);
-  registry->AddInterface<mojom::Collector>(this);
-  registry->AddInterface<mojom::StartupPerformanceDataCollector>(this);
-  return true;
+void Service::OnBindInterface(const service_manager::ServiceInfo& source_info,
+                              const std::string& interface_name,
+                              mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 bool Service::OnServiceManagerConnectionLost() {
diff --git a/services/tracing/service.h b/services/tracing/service.h
index b45d54c..7260f0a 100644
--- a/services/tracing/service.h
+++ b/services/tracing/service.h
@@ -14,6 +14,7 @@
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "mojo/public/cpp/bindings/interface_ptr_set.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/tracing/data_sink.h"
@@ -36,8 +37,9 @@
 
  private:
   // service_manager::Service implementation.
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
   bool OnServiceManagerConnectionLost() override;
 
   // service_manager::InterfaceFactory<mojom::Factory>:
@@ -73,6 +75,7 @@
 
   void AllDataCollected();
 
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::Factory> bindings_;
   std::unique_ptr<DataSink> sink_;
   std::vector<std::unique_ptr<Recorder>> recorder_impls_;
diff --git a/services/ui/demo/mus_demo.cc b/services/ui/demo/mus_demo.cc
index 0efcf00..a28ac9c5 100644
--- a/services/ui/demo/mus_demo.cc
+++ b/services/ui/demo/mus_demo.cc
@@ -82,11 +82,6 @@
   env_->SetWindowTreeClient(window_tree_client_.get());
 }
 
-bool MusDemo::OnConnect(const service_manager::ServiceInfo& remote_info,
-                        service_manager::InterfaceRegistry* registry) {
-  return true;
-}
-
 void MusDemo::OnEmbed(
     std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) {
   NOTREACHED();
diff --git a/services/ui/demo/mus_demo.h b/services/ui/demo/mus_demo.h
index 251a505..251e90ab 100644
--- a/services/ui/demo/mus_demo.h
+++ b/services/ui/demo/mus_demo.h
@@ -69,8 +69,6 @@
 
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
 
   // aura::WindowTreeClientDelegate:
   void OnEmbed(
diff --git a/services/ui/display/screen_manager.h b/services/ui/display/screen_manager.h
index ac7fe3ab..9252194 100644
--- a/services/ui/display/screen_manager.h
+++ b/services/ui/display/screen_manager.h
@@ -11,7 +11,7 @@
 #include "services/ui/display/screen_manager_delegate.h"
 
 namespace service_manager {
-class InterfaceRegistry;
+class BinderRegistry;
 }
 
 namespace display {
@@ -28,7 +28,7 @@
   static ScreenManager* GetInstance();
 
   // Registers Mojo interfaces provided.
-  virtual void AddInterfaces(service_manager::InterfaceRegistry* registry) = 0;
+  virtual void AddInterfaces(service_manager::BinderRegistry* registry) = 0;
 
   // Triggers initial display configuration to start. On device this will
   // configuration the connected displays. Off device this will create one or
diff --git a/services/ui/display/screen_manager_ozone_external.cc b/services/ui/display/screen_manager_ozone_external.cc
index ec27b7a..45a5027 100644
--- a/services/ui/display/screen_manager_ozone_external.cc
+++ b/services/ui/display/screen_manager_ozone_external.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "ui/display/types/display_constants.h"
 
 namespace display {
@@ -21,7 +21,7 @@
 ScreenManagerOzoneExternal::~ScreenManagerOzoneExternal() {}
 
 void ScreenManagerOzoneExternal::AddInterfaces(
-    service_manager::InterfaceRegistry* registry) {}
+    service_manager::BinderRegistry* registry) {}
 
 void ScreenManagerOzoneExternal::Init(ScreenManagerDelegate* delegate) {}
 
diff --git a/services/ui/display/screen_manager_ozone_external.h b/services/ui/display/screen_manager_ozone_external.h
index bf1c92a..41fe466 100644
--- a/services/ui/display/screen_manager_ozone_external.h
+++ b/services/ui/display/screen_manager_ozone_external.h
@@ -23,7 +23,7 @@
 
  private:
   // ScreenManager.
-  void AddInterfaces(service_manager::InterfaceRegistry* registry) override;
+  void AddInterfaces(service_manager::BinderRegistry* registry) override;
   void Init(ScreenManagerDelegate* delegate) override;
   void RequestCloseDisplay(int64_t display_id) override;
 
diff --git a/services/ui/display/screen_manager_ozone_internal.cc b/services/ui/display/screen_manager_ozone_internal.cc
index 1c3264e..854ef3ae 100644
--- a/services/ui/display/screen_manager_ozone_internal.cc
+++ b/services/ui/display/screen_manager_ozone_internal.cc
@@ -12,7 +12,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/system/devicemode.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/ui/display/output_protection.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/display/manager/chromeos/display_change_observer.h"
@@ -110,7 +110,7 @@
 }
 
 void ScreenManagerOzoneInternal::AddInterfaces(
-    service_manager::InterfaceRegistry* registry) {
+    service_manager::BinderRegistry* registry) {
   registry->AddInterface<mojom::DisplayController>(this);
   registry->AddInterface<mojom::OutputProtection>(this);
   registry->AddInterface<mojom::TestDisplayController>(this);
diff --git a/services/ui/display/screen_manager_ozone_internal.h b/services/ui/display/screen_manager_ozone_internal.h
index bb9abff..7032bdbb 100644
--- a/services/ui/display/screen_manager_ozone_internal.h
+++ b/services/ui/display/screen_manager_ozone_internal.h
@@ -50,7 +50,7 @@
   void SetPrimaryDisplayId(int64_t display_id);
 
   // ScreenManager:
-  void AddInterfaces(service_manager::InterfaceRegistry* registry) override;
+  void AddInterfaces(service_manager::BinderRegistry* registry) override;
   void Init(ScreenManagerDelegate* delegate) override;
   void RequestCloseDisplay(int64_t display_id) override;
 
diff --git a/services/ui/display/screen_manager_stub_internal.cc b/services/ui/display/screen_manager_stub_internal.cc
index ebd8925f..e513b00 100644
--- a/services/ui/display/screen_manager_stub_internal.cc
+++ b/services/ui/display/screen_manager_stub_internal.cc
@@ -10,7 +10,7 @@
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/ui/display/viewport_metrics.h"
 #include "ui/gfx/geometry/dip_util.h"
 #include "ui/gfx/geometry/rect.h"
@@ -60,7 +60,7 @@
 }
 
 void ScreenManagerStubInternal::AddInterfaces(
-    service_manager::InterfaceRegistry* registry) {}
+    service_manager::BinderRegistry* registry) {}
 
 void ScreenManagerStubInternal::Init(ScreenManagerDelegate* delegate) {
   DCHECK(delegate);
diff --git a/services/ui/display/screen_manager_stub_internal.h b/services/ui/display/screen_manager_stub_internal.h
index 71645ae8..bca5ab9 100644
--- a/services/ui/display/screen_manager_stub_internal.h
+++ b/services/ui/display/screen_manager_stub_internal.h
@@ -25,7 +25,7 @@
   void FixedSizeScreenConfiguration();
 
   // ScreenManager.
-  void AddInterfaces(service_manager::InterfaceRegistry* registry) override;
+  void AddInterfaces(service_manager::BinderRegistry* registry) override;
   void Init(ScreenManagerDelegate* delegate) override;
   void RequestCloseDisplay(int64_t display_id) override;
 
diff --git a/services/ui/gpu/gpu_service.cc b/services/ui/gpu/gpu_service.cc
index 90dc701..2bd0603c 100644
--- a/services/ui/gpu/gpu_service.cc
+++ b/services/ui/gpu/gpu_service.cc
@@ -232,8 +232,7 @@
                               id, client_id, sync_token));
     return;
   }
-  if (gpu_channel_manager_)
-    gpu_channel_manager_->DestroyGpuMemoryBuffer(id, client_id, sync_token);
+  gpu_channel_manager_->DestroyGpuMemoryBuffer(id, client_id, sync_token);
 }
 
 void GpuService::GetVideoMemoryUsageStats(
@@ -246,10 +245,8 @@
     return;
   }
   gpu::VideoMemoryUsageStats video_memory_usage_stats;
-  if (gpu_channel_manager_) {
-    gpu_channel_manager_->gpu_memory_manager()->GetVideoMemoryUsageStats(
-        &video_memory_usage_stats);
-  }
+  gpu_channel_manager_->gpu_memory_manager()->GetVideoMemoryUsageStats(
+      &video_memory_usage_stats);
   callback.Run(video_memory_usage_stats);
 }
 
@@ -384,11 +381,6 @@
     return;
   }
 
-  if (!gpu_channel_manager_) {
-    callback.Run(mojo::ScopedMessagePipeHandle());
-    return;
-  }
-
   gpu::GpuChannel* gpu_channel = gpu_channel_manager_->EstablishChannel(
       client_id, client_tracing_id, is_gpu_host);
 
@@ -407,8 +399,6 @@
         FROM_HERE, base::Bind(&GpuService::CloseChannel, weak_ptr_, client_id));
     return;
   }
-  if (!gpu_channel_manager_)
-    return;
   gpu_channel_manager_->RemoveChannel(client_id);
 }
 
@@ -418,8 +408,6 @@
         FROM_HERE, base::Bind(&GpuService::LoadedShader, weak_ptr_, data));
     return;
   }
-  if (!gpu_channel_manager_)
-    return;
   gpu_channel_manager_->PopulateShaderCache(data);
 }
 
@@ -449,8 +437,6 @@
     return;
   }
 #if defined(OS_ANDROID)
-  if (!gpu_channel_manager_)
-    return;
   gpu_channel_manager_->WakeUpGpu();
 #else
   NOTREACHED() << "WakeUpGpu() not supported on this platform.";
@@ -469,8 +455,6 @@
         FROM_HERE, base::Bind(&GpuService::DestroyAllChannels, weak_ptr_));
     return;
   }
-  if (!gpu_channel_manager_)
-    return;
   DVLOG(1) << "GPU: Removing all contexts";
   gpu_channel_manager_->DestroyAllChannels();
 }
diff --git a/services/ui/ime/test_ime_driver/test_ime_application.cc b/services/ui/ime/test_ime_driver/test_ime_application.cc
index 6804ee4..b10851d 100644
--- a/services/ui/ime/test_ime_driver/test_ime_application.cc
+++ b/services/ui/ime/test_ime_driver/test_ime_application.cc
@@ -30,11 +30,5 @@
   ime_registrar->RegisterDriver(std::move(ime_driver_ptr));
 }
 
-bool TestIMEApplication::OnConnect(
-    const service_manager::ServiceInfo& remote_info,
-    service_manager::InterfaceRegistry* registry) {
-  return true;
-}
-
 }  // namespace test
 }  // namespace ui
diff --git a/services/ui/ime/test_ime_driver/test_ime_application.h b/services/ui/ime/test_ime_driver/test_ime_application.h
index a194f6d2..ecab008 100644
--- a/services/ui/ime/test_ime_driver/test_ime_application.h
+++ b/services/ui/ime/test_ime_driver/test_ime_application.h
@@ -19,8 +19,6 @@
  private:
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
 
   DISALLOW_COPY_AND_ASSIGN(TestIMEApplication);
 };
diff --git a/services/ui/input_devices/input_device_server.cc b/services/ui/input_devices/input_device_server.cc
index d254cba..3983137b 100644
--- a/services/ui/input_devices/input_device_server.cc
+++ b/services/ui/input_devices/input_device_server.cc
@@ -7,7 +7,7 @@
 #include <utility>
 #include <vector>
 
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "ui/events/devices/input_device.h"
 #include "ui/events/devices/touchscreen_device.h"
 
@@ -34,7 +34,7 @@
 }
 
 void InputDeviceServer::AddInterface(
-    service_manager::InterfaceRegistry* registry) {
+    service_manager::BinderRegistry* registry) {
   DCHECK(IsRegisteredAsObserver());
   registry->AddInterface<mojom::InputDeviceServer>(this);
 }
diff --git a/services/ui/input_devices/input_device_server.h b/services/ui/input_devices/input_device_server.h
index a84651d..0e858b4 100644
--- a/services/ui/input_devices/input_device_server.h
+++ b/services/ui/input_devices/input_device_server.h
@@ -15,7 +15,7 @@
 #include "ui/events/devices/input_device_event_observer.h"
 
 namespace service_manager {
-class InterfaceRegistry;
+class BinderRegistry;
 }
 
 namespace ui {
@@ -39,7 +39,7 @@
   // connect. You should have already called RegisterAsObserver() to get local
   // input-device event updates and checked it was successful by calling
   // IsRegisteredAsObserver().
-  void AddInterface(service_manager::InterfaceRegistry* registry);
+  void AddInterface(service_manager::BinderRegistry* registry);
 
   // mojom::InputDeviceServer:
   void AddObserver(mojom::InputDeviceObserverMojoPtr observer) override;
diff --git a/services/ui/public/cpp/bitmap/BUILD.gn b/services/ui/public/cpp/bitmap/BUILD.gn
new file mode 100644
index 0000000..2562f20
--- /dev/null
+++ b/services/ui/public/cpp/bitmap/BUILD.gn
@@ -0,0 +1,20 @@
+# 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.
+
+import("//build/config/ui.gni")
+
+source_set("bitmap") {
+  sources = [
+    "child_shared_bitmap_manager.cc",
+    "child_shared_bitmap_manager.h",
+  ]
+
+  deps = [
+    "//base",
+    "//cc",
+    "//cc/ipc:interfaces",
+    "//mojo/public/cpp/bindings",
+    "//ui/gfx",
+  ]
+}
diff --git a/content/child/child_shared_bitmap_manager.cc b/services/ui/public/cpp/bitmap/child_shared_bitmap_manager.cc
similarity index 68%
rename from content/child/child_shared_bitmap_manager.cc
rename to services/ui/public/cpp/bitmap/child_shared_bitmap_manager.cc
index 225c569b..92fc430 100644
--- a/content/child/child_shared_bitmap_manager.cc
+++ b/services/ui/public/cpp/bitmap/child_shared_bitmap_manager.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/child/child_shared_bitmap_manager.h"
+#include "services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h"
 
 #include <stddef.h>
 
@@ -12,44 +12,43 @@
 #include "base/memory/ptr_util.h"
 #include "base/process/memory.h"
 #include "base/process/process_metrics.h"
+#include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
-#include "content/child/child_thread_impl.h"
-#include "content/common/child_process_messages.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "ui/gfx/geometry/size.h"
 
-namespace content {
+namespace ui {
 
 namespace {
 
 class ChildSharedBitmap : public cc::SharedBitmap {
  public:
   ChildSharedBitmap(
-      const scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>&
-          render_message_filter_ptr,
+      const scoped_refptr<cc::mojom::ThreadSafeSharedBitmapManagerAssociatedPtr>
+          shared_bitmap_manager_ptr,
       base::SharedMemory* shared_memory,
       const cc::SharedBitmapId& id)
       : cc::SharedBitmap(static_cast<uint8_t*>(shared_memory->memory()), id),
-        render_message_filter_ptr_(render_message_filter_ptr) {}
+        shared_bitmap_manager_ptr_(shared_bitmap_manager_ptr) {}
 
   ChildSharedBitmap(
-      const scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>&
-          render_message_filter_ptr,
+      const scoped_refptr<cc::mojom::ThreadSafeSharedBitmapManagerAssociatedPtr>
+          shared_bitmap_manager_ptr,
       std::unique_ptr<base::SharedMemory> shared_memory_holder,
       const cc::SharedBitmapId& id)
-      : ChildSharedBitmap(render_message_filter_ptr,
+      : ChildSharedBitmap(shared_bitmap_manager_ptr,
                           shared_memory_holder.get(),
                           id) {
     shared_memory_holder_ = std::move(shared_memory_holder);
   }
 
   ~ChildSharedBitmap() override {
-    (*render_message_filter_ptr_)->DeletedSharedBitmap(id());
+    (*shared_bitmap_manager_ptr_)->DidDeleteSharedBitmap(id());
   }
 
  private:
-  scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>
-      render_message_filter_ptr_;
+  scoped_refptr<cc::mojom::ThreadSafeSharedBitmapManagerAssociatedPtr>
+      shared_bitmap_manager_ptr_;
   std::unique_ptr<base::SharedMemory> shared_memory_holder_;
 };
 
@@ -77,12 +76,32 @@
   base::TerminateBecauseOutOfMemory(alloc_size);
 }
 
+// Allocates a block of shared memory of the given size. Returns nullptr on
+// failure.
+std::unique_ptr<base::SharedMemory> AllocateSharedMemory(size_t buf_size) {
+  mojo::ScopedSharedBufferHandle mojo_buf =
+      mojo::SharedBufferHandle::Create(buf_size);
+  if (!mojo_buf->is_valid()) {
+    LOG(WARNING) << "Browser failed to allocate shared memory";
+    return nullptr;
+  }
+
+  base::SharedMemoryHandle shared_buf;
+  if (mojo::UnwrapSharedMemoryHandle(std::move(mojo_buf), &shared_buf, nullptr,
+                                     nullptr) != MOJO_RESULT_OK) {
+    LOG(WARNING) << "Browser failed to allocate shared memory";
+    return nullptr;
+  }
+
+  return base::MakeUnique<base::SharedMemory>(shared_buf, false);
+}
+
 }  // namespace
 
 ChildSharedBitmapManager::ChildSharedBitmapManager(
-    const scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>&
-        render_message_filter_ptr)
-    : render_message_filter_ptr_(render_message_filter_ptr) {}
+    const scoped_refptr<cc::mojom::ThreadSafeSharedBitmapManagerAssociatedPtr>&
+        shared_bitmap_manager_ptr)
+    : shared_bitmap_manager_ptr_(shared_bitmap_manager_ptr) {}
 
 ChildSharedBitmapManager::~ChildSharedBitmapManager() {}
 
@@ -95,7 +114,7 @@
     return nullptr;
   cc::SharedBitmapId id = cc::SharedBitmap::GenerateId();
   std::unique_ptr<base::SharedMemory> memory =
-      ChildThreadImpl::AllocateSharedMemory(memory_size);
+      AllocateSharedMemory(memory_size);
   if (!memory || !memory->Map(memory_size))
     CollectMemoryUsageAndDie(size, memory_size);
 
@@ -105,7 +124,7 @@
   // remains available.
   memory->Close();
 
-  return base::MakeUnique<ChildSharedBitmap>(render_message_filter_ptr_,
+  return base::MakeUnique<ChildSharedBitmap>(shared_bitmap_manager_ptr_,
                                              std::move(memory), id);
 }
 
@@ -120,7 +139,7 @@
 ChildSharedBitmapManager::GetBitmapForSharedMemory(base::SharedMemory* mem) {
   cc::SharedBitmapId id = cc::SharedBitmap::GenerateId();
   NotifyAllocatedSharedBitmap(mem, cc::SharedBitmap::GenerateId());
-  return base::MakeUnique<ChildSharedBitmap>(render_message_filter_ptr_,
+  return base::MakeUnique<ChildSharedBitmap>(shared_bitmap_manager_ptr_,
                                              std::move(mem), id);
 }
 
@@ -139,8 +158,8 @@
   mojo::ScopedSharedBufferHandle buffer_handle = mojo::WrapSharedMemoryHandle(
       handle_to_send, memory->mapped_size(), true /* read_only */);
 
-  (*render_message_filter_ptr_)
-      ->AllocatedSharedBitmap(std::move(buffer_handle), id);
+  (*shared_bitmap_manager_ptr_)
+      ->DidAllocateSharedBitmap(std::move(buffer_handle), id);
 }
 
-}  // namespace content
+}  // namespace ui
diff --git a/content/child/child_shared_bitmap_manager.h b/services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h
similarity index 67%
rename from content/child/child_shared_bitmap_manager.h
rename to services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h
index dbf74ef..7e8eb3a9 100644
--- a/content/child/child_shared_bitmap_manager.h
+++ b/services/ui/public/cpp/bitmap/child_shared_bitmap_manager.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_CHILD_CHILD_SHARED_BITMAP_MANAGER_H_
-#define CONTENT_CHILD_CHILD_SHARED_BITMAP_MANAGER_H_
+#ifndef SERVICES_UI_PUBLIC_CPP_BITMAP_CHILD_CHILD_SHARED_BITMAP_MANAGER_H_
+#define SERVICES_UI_PUBLIC_CPP_BITMAP_CHILD_CHILD_SHARED_BITMAP_MANAGER_H_
 
 #include <stdint.h>
 
@@ -12,17 +12,18 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/shared_memory.h"
+#include "cc/ipc/shared_bitmap_manager.mojom.h"
 #include "cc/resources/shared_bitmap_manager.h"
-#include "content/common/render_message_filter.mojom.h"
 #include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
 
-namespace content {
+namespace ui {
 
 class ChildSharedBitmapManager : public cc::SharedBitmapManager {
  public:
   explicit ChildSharedBitmapManager(
-      const scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>&
-          render_message_filter_ptr);
+      const scoped_refptr<
+          cc::mojom::ThreadSafeSharedBitmapManagerAssociatedPtr>&
+          shared_bitmap_manager_ptr);
   ~ChildSharedBitmapManager() override;
 
   // cc::SharedBitmapManager implementation.
@@ -39,12 +40,12 @@
   void NotifyAllocatedSharedBitmap(base::SharedMemory* memory,
                                    const cc::SharedBitmapId& id);
 
-  scoped_refptr<mojom::ThreadSafeRenderMessageFilterAssociatedPtr>
-      render_message_filter_ptr_;
+  scoped_refptr<cc::mojom::ThreadSafeSharedBitmapManagerAssociatedPtr>
+      shared_bitmap_manager_ptr_;
 
   DISALLOW_COPY_AND_ASSIGN(ChildSharedBitmapManager);
 };
 
-}  // namespace content
+}  // namespace ui
 
-#endif  // CONTENT_CHILD_CHILD_SHARED_BITMAP_MANAGER_H_
+#endif  // SERVICES_UI_PUBLIC_CPP_BITMAP_CHILD_CHILD_SHARED_BITMAP_MANAGER_H_
diff --git a/services/ui/public/interfaces/window_manager.mojom b/services/ui/public/interfaces/window_manager.mojom
index a2a5e50..aa340ba6 100644
--- a/services/ui/public/interfaces/window_manager.mojom
+++ b/services/ui/public/interfaces/window_manager.mojom
@@ -270,6 +270,12 @@
   AddAccelerators(array<WmAccelerator> accelerators) => (bool success);
   RemoveAccelerator(uint32 id);
 
+  // Sets the root of a particular display. This is only applicable when the
+  // WindowTree was created with a value of false for
+  // |automatically_create_display_roots| (see
+  // WindowManagerWindowTreeFactory::CreateWindowTree() for details).
+  SetDisplayRoot(int64 display_id, uint32 window_id) => (bool success);
+
   // The window manager has completed a request with the specific change id.
   WmResponse(uint32 change_id, bool response);
 
diff --git a/services/ui/public/interfaces/window_manager_window_tree_factory.mojom b/services/ui/public/interfaces/window_manager_window_tree_factory.mojom
index 152b326..04ad1f3c4 100644
--- a/services/ui/public/interfaces/window_manager_window_tree_factory.mojom
+++ b/services/ui/public/interfaces/window_manager_window_tree_factory.mojom
@@ -7,10 +7,17 @@
 import "services/ui/public/interfaces/window_manager_constants.mojom";
 import "services/ui/public/interfaces/window_tree.mojom";
 
-// Interface used by the WindowManager to obtain a WindowTree. The
-// WindowManager is informed of the roots (one per display) by way of
-// WmNewDisplayAdded(). See it for details.
+// Interface used by the WindowManager to obtain a WindowTree. Server may be
+// configured in two distinct modes by way of the
+// |automatically_create_display_roots| parameter:
+// . If true, then mus creates windows for displays as displays are added and
+//   calls WmNewDisplayAdded() (see it for more details).
+// . If false, the client is responsible for creating and setting windows for
+//   displays (via SetDisplayRoot()). In this mode it is assumed the client is
+//   detecting displays via another mechanism.
 interface WindowManagerWindowTreeFactory {
   // NOTE: it is expected this is called only once.
-  CreateWindowTree(WindowTree& tree_request, WindowTreeClient client);
+  CreateWindowTree(WindowTree& tree_request,
+                   WindowTreeClient client,
+                   bool automatically_create_display_roots);
 };
diff --git a/services/ui/service.cc b/services/ui/service.cc
index 9b4991d..aa4aa441 100644
--- a/services/ui/service.cc
+++ b/services/ui/service.cc
@@ -96,6 +96,10 @@
   // WindowServer (or more correctly its Displays) may have state that needs to
   // be destroyed before GpuState as well.
   window_server_.reset();
+
+#if defined(USE_OZONE)
+  OzonePlatform::Shutdown();
+#endif
 }
 
 void Service::InitializeResources(service_manager::Connector* connector) {
@@ -195,39 +199,41 @@
 
   discardable_shared_memory_manager_ =
       base::MakeUnique<discardable_memory::DiscardableSharedMemoryManager>();
-}
 
-bool Service::OnConnect(const service_manager::ServiceInfo& remote_info,
-                        service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::AccessibilityManager>(this);
-  registry->AddInterface<mojom::Clipboard>(this);
-  registry->AddInterface<mojom::DisplayManager>(this);
-  registry->AddInterface<mojom::Gpu>(this);
-  registry->AddInterface<mojom::IMERegistrar>(this);
-  registry->AddInterface<mojom::IMEServer>(this);
-  registry->AddInterface<mojom::UserAccessManager>(this);
-  registry->AddInterface<mojom::UserActivityMonitor>(this);
-  registry->AddInterface<WindowTreeHostFactory>(this);
-  registry->AddInterface<mojom::WindowManagerWindowTreeFactory>(this);
-  registry->AddInterface<mojom::WindowTreeFactory>(this);
-  registry
-      ->AddInterface<discardable_memory::mojom::DiscardableSharedMemoryManager>(
+  registry_.AddInterface<mojom::AccessibilityManager>(this);
+  registry_.AddInterface<mojom::Clipboard>(this);
+  registry_.AddInterface<mojom::DisplayManager>(this);
+  registry_.AddInterface<mojom::Gpu>(this);
+  registry_.AddInterface<mojom::IMERegistrar>(this);
+  registry_.AddInterface<mojom::IMEServer>(this);
+  registry_.AddInterface<mojom::UserAccessManager>(this);
+  registry_.AddInterface<mojom::UserActivityMonitor>(this);
+  registry_.AddInterface<WindowTreeHostFactory>(this);
+  registry_.AddInterface<mojom::WindowManagerWindowTreeFactory>(this);
+  registry_.AddInterface<mojom::WindowTreeFactory>(this);
+  registry_
+      .AddInterface<discardable_memory::mojom::DiscardableSharedMemoryManager>(
           this);
   if (test_config_)
-    registry->AddInterface<WindowServerTest>(this);
+    registry_.AddInterface<WindowServerTest>(this);
 
   // On non-Linux platforms there will be no DeviceDataManager instance and no
   // purpose in adding the Mojo interface to connect to.
   if (input_device_server_.IsRegisteredAsObserver())
-    input_device_server_.AddInterface(registry);
+    input_device_server_.AddInterface(&registry_);
 
-  screen_manager_->AddInterfaces(registry);
+  screen_manager_->AddInterfaces(&registry_);
 
 #if defined(USE_OZONE)
-  ui::OzonePlatform::GetInstance()->AddInterfaces(registry);
+  ui::OzonePlatform::GetInstance()->AddInterfaces(&registry_);
 #endif
+}
 
-  return true;
+void Service::OnBindInterface(const service_manager::ServiceInfo& source_info,
+                              const std::string& interface_name,
+                              mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void Service::StartDisplayInit() {
diff --git a/services/ui/service.h b/services/ui/service.h
index 1b83c7d4..92e5f60 100644
--- a/services/ui/service.h
+++ b/services/ui/service.h
@@ -14,6 +14,7 @@
 
 #include "base/macros.h"
 #include "components/discardable_memory/public/interfaces/discardable_shared_memory_manager.mojom.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/cpp/service_runner.h"
@@ -101,8 +102,9 @@
 
   // service_manager::Service:
   void OnStart() override;
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // WindowServerDelegate:
   void StartDisplayInit() override;
@@ -176,7 +178,7 @@
   UserIdToUserState user_id_to_user_state_;
 
   // Provides input-device information via Mojo IPC. Registers Mojo interfaces
-  // and must outlive service_manager::InterfaceRegistry.
+  // and must outlive |registry_|.
   InputDeviceServer input_device_server_;
 
   bool test_config_;
@@ -185,7 +187,7 @@
 #endif
 
   // Manages display hardware and handles display management. May register Mojo
-  // interfaces and must outlive service_manager::InterfaceRegistry.
+  // interfaces and must outlive |registry_|.
   std::unique_ptr<display::ScreenManager> screen_manager_;
 
   IMERegistrarImpl ime_registrar_;
@@ -194,6 +196,8 @@
   std::unique_ptr<discardable_memory::DiscardableSharedMemoryManager>
       discardable_shared_memory_manager_;
 
+  service_manager::BinderRegistry registry_;
+
   DISALLOW_COPY_AND_ASSIGN(Service);
 };
 
diff --git a/services/ui/test_wm/test_wm.cc b/services/ui/test_wm/test_wm.cc
index cdca7ee..3fb4269 100644
--- a/services/ui/test_wm/test_wm.cc
+++ b/services/ui/test_wm/test_wm.cc
@@ -63,11 +63,9 @@
     aura_env_->SetWindowTreeClient(window_tree_client_.get());
     window_tree_client_->ConnectAsWindowManager();
   }
-
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    return false;
-  }
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {}
 
   // aura::WindowTreeClientDelegate:
   void OnEmbed(
diff --git a/services/ui/ws/BUILD.gn b/services/ui/ws/BUILD.gn
index 53cac7d7..90db269 100644
--- a/services/ui/ws/BUILD.gn
+++ b/services/ui/ws/BUILD.gn
@@ -262,6 +262,12 @@
     sources += [ "window_manager_client_unittest.cc" ]
   }
 
+  # TODO(jamescook): Run this test on non-ozone platforms. This will require
+  # initializing all the platform-specific windowing support.
+  if (use_ozone) {
+    sources += [ "platform_display_default_unittest.cc" ]
+  }
+
   catalog = ":mus_ws_unittests_catalog"
 
   deps = [
diff --git a/services/ui/ws/display.cc b/services/ui/ws/display.cc
index 3513568..fa0ec946 100644
--- a/services/ui/ws/display.cc
+++ b/services/ui/ws/display.cc
@@ -29,6 +29,10 @@
 #include "ui/base/cursor/cursor.h"
 #include "ui/display/screen.h"
 
+#if defined(USE_OZONE)
+#include "ui/ozone/public/ozone_platform.h"
+#endif
+
 namespace ui {
 namespace ws {
 
@@ -182,6 +186,18 @@
   }
 }
 
+void Display::RemoveWindowManagerDisplayRoot(
+    WindowManagerDisplayRoot* display_root) {
+  for (auto it = window_manager_display_root_map_.begin();
+       it != window_manager_display_root_map_.end(); ++it) {
+    if (it->second == display_root) {
+      window_manager_display_root_map_.erase(it);
+      return;
+    }
+  }
+  NOTREACHED();
+}
+
 void Display::UpdateNativeCursor(mojom::CursorType cursor_id) {
   if (cursor_id != last_cursor_) {
     platform_display_->SetCursorById(cursor_id);
@@ -276,6 +292,14 @@
     display_root->window_manager_state()->SetCapture(nullptr, kInvalidClientId);
 }
 
+OzonePlatform* Display::GetOzonePlatform() {
+#if defined(USE_OZONE)
+  return OzonePlatform::GetInstance();
+#else
+  return nullptr;
+#endif
+}
+
 void Display::OnViewportMetricsChanged(
     const display::ViewportMetrics& metrics) {
   platform_display_->UpdateViewportMetrics(metrics);
diff --git a/services/ui/ws/display.h b/services/ui/ws/display.h
index 354b52e3..b83ce21 100644
--- a/services/ui/ws/display.h
+++ b/services/ui/ws/display.h
@@ -50,8 +50,7 @@
 
 // Displays manages the state associated with a single display. Display has a
 // single root window whose children are the roots for a per-user
-// WindowManager. Display is configured in two distinct
-// ways:
+// WindowManager. Display is configured in two distinct ways:
 // . with a DisplayBinding. In this mode there is only ever one WindowManager
 //   for the display, which comes from the client that created the
 //   Display.
@@ -146,6 +145,10 @@
   // Called just before |tree| is destroyed.
   void OnWillDestroyTree(WindowTree* tree);
 
+  // Removes |display_root| from internal maps. This called prior to
+  // |display_root| being destroyed.
+  void RemoveWindowManagerDisplayRoot(WindowManagerDisplayRoot* display_root);
+
   void UpdateNativeCursor(mojom::CursorType cursor_id);
 
   // mojom::WindowTreeHost:
@@ -183,6 +186,7 @@
   EventSink* GetEventSink() override;
   void OnAcceleratedWidgetAvailable() override;
   void OnNativeCaptureLost() override;
+  OzonePlatform* GetOzonePlatform() override;
 
   // FocusControllerDelegate:
   bool CanHaveActiveChildren(ServerWindow* window) const override;
diff --git a/services/ui/ws/display_binding.cc b/services/ui/ws/display_binding.cc
index f70c92b..0915703 100644
--- a/services/ui/ws/display_binding.cc
+++ b/services/ui/ws/display_binding.cc
@@ -31,7 +31,8 @@
   WindowTree* tree = window_server_->EmbedAtWindow(
       root, user_id_, std::move(client_), embed_flags,
       base::WrapUnique(new WindowManagerAccessPolicy));
-  tree->ConfigureWindowManager();
+  const bool automatically_create_display_roots = true;
+  tree->ConfigureWindowManager(automatically_create_display_roots);
   return tree;
 }
 
diff --git a/services/ui/ws/display_manager.h b/services/ui/ws/display_manager.h
index e96f78b..3d2d370 100644
--- a/services/ui/ws/display_manager.h
+++ b/services/ui/ws/display_manager.h
@@ -29,7 +29,7 @@
 class WindowServer;
 
 // DisplayManager manages the set of Displays. DisplayManager distinguishes
-// between displays that do yet have an accelerated widget (pending), vs
+// between displays that do not yet have an accelerated widget (pending), vs
 // those that do.
 class DisplayManager : public UserIdTrackerObserver,
                        public display::ScreenManagerDelegate {
diff --git a/services/ui/ws/platform_display.cc b/services/ui/ws/platform_display.cc
index 36d8b656..587e450 100644
--- a/services/ui/ws/platform_display.cc
+++ b/services/ui/ws/platform_display.cc
@@ -8,6 +8,7 @@
 #include "services/ui/ws/platform_display_default.h"
 #include "services/ui/ws/platform_display_factory.h"
 #include "services/ui/ws/server_window.h"
+#include "ui/base/cursor/image_cursors.h"
 
 namespace ui {
 namespace ws {
@@ -22,7 +23,13 @@
   if (factory_)
     return factory_->CreatePlatformDisplay(root, metrics);
 
-  return base::MakeUnique<PlatformDisplayDefault>(root, metrics);
+#if defined(OS_ANDROID)
+  return base::MakeUnique<PlatformDisplayDefault>(root, metrics,
+                                                  nullptr /* image_cursors */);
+#else
+  return base::MakeUnique<PlatformDisplayDefault>(
+      root, metrics, base::MakeUnique<ImageCursors>());
+#endif
 }
 
 }  // namespace ws
diff --git a/services/ui/ws/platform_display_default.cc b/services/ui/ws/platform_display_default.cc
index 6b23408..08f8f9e2 100644
--- a/services/ui/ws/platform_display_default.cc
+++ b/services/ui/ws/platform_display_default.cc
@@ -4,6 +4,8 @@
 
 #include "services/ui/ws/platform_display_default.h"
 
+#include <utility>
+
 #include "base/memory/ptr_util.h"
 #include "gpu/ipc/client/gpu_channel_host.h"
 #include "services/ui/display/screen_manager.h"
@@ -31,14 +33,12 @@
 
 PlatformDisplayDefault::PlatformDisplayDefault(
     ServerWindow* root_window,
-    const display::ViewportMetrics& metrics)
+    const display::ViewportMetrics& metrics,
+    std::unique_ptr<ImageCursors> image_cursors)
     : root_window_(root_window),
-#if !defined(OS_ANDROID)
-      image_cursors_(new ImageCursors),
-#endif
+      image_cursors_(std::move(image_cursors)),
       metrics_(metrics),
-      widget_(gfx::kNullAcceleratedWidget) {
-}
+      widget_(gfx::kNullAcceleratedWidget) {}
 
 PlatformDisplayDefault::~PlatformDisplayDefault() {
   // Don't notify the delegate from the destructor.
@@ -56,6 +56,7 @@
 }
 
 void PlatformDisplayDefault::Init(PlatformDisplayDelegate* delegate) {
+  DCHECK(delegate);
   delegate_ = delegate;
 
   const gfx::Rect& bounds = metrics_.bounds_in_pixels;
@@ -70,16 +71,16 @@
   platform_window_->SetBounds(bounds);
 #elif defined(USE_OZONE)
   platform_window_ =
-      ui::OzonePlatform::GetInstance()->CreatePlatformWindow(this, bounds);
+      delegate_->GetOzonePlatform()->CreatePlatformWindow(this, bounds);
 #else
   NOTREACHED() << "Unsupported platform";
 #endif
 
   platform_window_->Show();
-#if !defined(OS_ANDROID)
-  image_cursors_->SetDisplay(delegate_->GetDisplay(),
-                             metrics_.device_scale_factor);
-#endif
+  if (image_cursors_) {
+    image_cursors_->SetDisplay(delegate_->GetDisplay(),
+                               metrics_.device_scale_factor);
+  }
 }
 
 void PlatformDisplayDefault::SetViewportSize(const gfx::Size& size) {
@@ -99,7 +100,9 @@
 }
 
 void PlatformDisplayDefault::SetCursorById(mojom::CursorType cursor_id) {
-#if !defined(OS_ANDROID)
+  if (!image_cursors_)
+    return;
+
   // TODO(erg): This still isn't sufficient, and will only use native cursors
   // that chrome would use, not custom image cursors. For that, we should
   // delegate to the window manager to load images from resource packs.
@@ -108,7 +111,6 @@
   ui::Cursor cursor(static_cast<int32_t>(cursor_id));
   image_cursors_->SetPlatformCursor(&cursor);
   platform_window_->SetCursor(cursor.platform());
-#endif
 }
 
 void PlatformDisplayDefault::UpdateTextInputState(
@@ -193,32 +195,6 @@
   } else {
     SendEventToSink(event);
   }
-
-#if defined(USE_X11) || defined(USE_OZONE)
-  // We want to emulate the WM_CHAR generation behaviour of Windows.
-  //
-  // On Linux, we've previously inserted characters by having
-  // InputMethodAuraLinux take all key down events and send a character event
-  // to the TextInputClient. This causes a mismatch in code that has to be
-  // shared between Windows and Linux, including blink code. Now that we're
-  // trying to have one way of doing things, we need to standardize on and
-  // emulate Windows character events.
-  //
-  // This is equivalent to what we're doing in the current Linux port, but
-  // done once instead of done multiple times in different places.
-  if (event->type() == ui::ET_KEY_PRESSED) {
-    ui::KeyEvent* key_press_event = event->AsKeyEvent();
-    ui::KeyEvent char_event(key_press_event->GetCharacter(),
-                            key_press_event->key_code(),
-                            key_press_event->flags());
-    // We don't check that GetCharacter() is equal because changing a key event
-    // with an accelerator to a character event can change the character, for
-    // example, from 'M' to '^M'.
-    DCHECK_EQ(key_press_event->key_code(), char_event.key_code());
-    DCHECK_EQ(key_press_event->flags(), char_event.flags());
-    SendEventToSink(&char_event);
-  }
-#endif
 }
 
 void PlatformDisplayDefault::OnCloseRequest() {
diff --git a/services/ui/ws/platform_display_default.h b/services/ui/ws/platform_display_default.h
index 86e43ab..3c7d590 100644
--- a/services/ui/ws/platform_display_default.h
+++ b/services/ui/ws/platform_display_default.h
@@ -29,8 +29,10 @@
 class PlatformDisplayDefault : public PlatformDisplay,
                                public ui::PlatformWindowDelegate {
  public:
+  // |image_cursors| may be null, for example on Android or in tests.
   PlatformDisplayDefault(ServerWindow* root_window,
-                         const display::ViewportMetrics& metrics);
+                         const display::ViewportMetrics& metrics,
+                         std::unique_ptr<ImageCursors> image_cursors);
   ~PlatformDisplayDefault() override;
 
   // EventSource::
@@ -72,9 +74,7 @@
 
   ServerWindow* root_window_;
 
-#if !defined(OS_ANDROID)
   std::unique_ptr<ui::ImageCursors> image_cursors_;
-#endif
 
   PlatformDisplayDelegate* delegate_ = nullptr;
   std::unique_ptr<FrameGenerator> frame_generator_;
diff --git a/services/ui/ws/platform_display_default_unittest.cc b/services/ui/ws/platform_display_default_unittest.cc
new file mode 100644
index 0000000..d7e72ff
--- /dev/null
+++ b/services/ui/ws/platform_display_default_unittest.cc
@@ -0,0 +1,153 @@
+// 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 "services/ui/ws/platform_display_default.h"
+
+#include "base/time/time.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/cursor/image_cursors.h"
+#include "ui/display/types/native_display_delegate.h"
+#include "ui/events/event.h"
+#include "ui/events/event_sink.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/ozone/public/ozone_platform.h"
+#include "ui/ozone/public/system_input_injector.h"
+#include "ui/platform_window/platform_window.h"
+#include "ui/platform_window/stub/stub_window.h"
+
+namespace ui {
+namespace ws {
+namespace {
+
+// An EventSink that records events sent to it.
+class TestEventSink : public EventSink {
+ public:
+  TestEventSink() { Reset(); }
+  ~TestEventSink() override = default;
+
+  void Reset() {
+    count_ = 0;
+    last_event_type_ = ET_UNKNOWN;
+  }
+
+  // EventSink:
+  EventDispatchDetails OnEventFromSource(Event* event) override {
+    count_++;
+    last_event_type_ = event->type();
+    return EventDispatchDetails();
+  }
+
+  int count_;
+  EventType last_event_type_;
+};
+
+// A PlatformDisplayDelegate to connect the PlatformDisplay to a TestEventSink.
+class TestPlatformDisplayDelegate : public PlatformDisplayDelegate {
+ public:
+  TestPlatformDisplayDelegate(TestEventSink* sink, OzonePlatform* platform)
+      : event_sink_(sink), ozone_platform_(platform) {}
+  ~TestPlatformDisplayDelegate() override = default;
+
+  // PlatformDisplayDelegate:
+  const display::Display& GetDisplay() override { return stub_display_; }
+  ServerWindow* GetRootWindow() override { return nullptr; }
+  EventSink* GetEventSink() override { return event_sink_; }
+  void OnAcceleratedWidgetAvailable() override {}
+  void OnNativeCaptureLost() override {}
+  OzonePlatform* GetOzonePlatform() override { return ozone_platform_; }
+
+ private:
+  TestEventSink* event_sink_;
+  OzonePlatform* ozone_platform_;
+  display::Display stub_display_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestPlatformDisplayDelegate);
+};
+
+// An OzonePlatform that creates StubWindows.
+class TestOzonePlatform : public OzonePlatform {
+ public:
+  TestOzonePlatform() = default;
+  ~TestOzonePlatform() override = default;
+
+  // OzonePlatform:
+  ui::SurfaceFactoryOzone* GetSurfaceFactoryOzone() override { return nullptr; }
+  ui::OverlayManagerOzone* GetOverlayManager() override { return nullptr; }
+  ui::CursorFactoryOzone* GetCursorFactoryOzone() override { return nullptr; }
+  ui::InputController* GetInputController() override { return nullptr; }
+  ui::GpuPlatformSupportHost* GetGpuPlatformSupportHost() override {
+    return nullptr;
+  }
+  std::unique_ptr<SystemInputInjector> CreateSystemInputInjector() override {
+    return nullptr;
+  }
+  std::unique_ptr<PlatformWindow> CreatePlatformWindow(
+      PlatformWindowDelegate* delegate,
+      const gfx::Rect& bounds) override {
+    return base::MakeUnique<StubWindow>(
+        delegate, false /* use_default_accelerated_widget */);
+  }
+  std::unique_ptr<display::NativeDisplayDelegate> CreateNativeDisplayDelegate()
+      override {
+    return nullptr;
+  }
+  void InitializeUI(const InitParams& params) override {}
+  void InitializeGPU(const InitParams& params) override {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TestOzonePlatform);
+};
+
+TEST(PlatformDisplayDefaultTest, EventDispatch) {
+  // Setup ozone so the display can be initialized.
+  TestOzonePlatform platform;
+
+  // Create the display.
+  display::ViewportMetrics metrics;
+  metrics.bounds_in_pixels = gfx::Rect(1024, 768);
+  metrics.device_scale_factor = 1.f;
+  metrics.ui_scale_factor = 1.f;
+  PlatformDisplayDefault display(nullptr, metrics,
+                                 std::unique_ptr<ImageCursors>());
+
+  // Initialize the display with a test EventSink so we can sense events.
+  TestEventSink event_sink;
+  TestPlatformDisplayDelegate delegate(&event_sink, &platform);
+  display.Init(&delegate);
+
+  // Event dispatch is handled at the PlatformWindowDelegate level.
+  PlatformWindowDelegate* display_for_dispatch =
+      static_cast<PlatformWindowDelegate*>(&display);
+
+  // Mouse events are converted to pointer events.
+  MouseEvent mouse(ET_MOUSE_PRESSED, gfx::Point(1, 2), gfx::Point(1, 2),
+                   base::TimeTicks(), EF_NONE, 0);
+  display_for_dispatch->DispatchEvent(&mouse);
+  EXPECT_EQ(ET_POINTER_DOWN, event_sink.last_event_type_);
+  event_sink.Reset();
+
+  // Touch events are converted to pointer events.
+  TouchEvent touch(ET_TOUCH_PRESSED, gfx::Point(3, 4), base::TimeTicks(),
+                   PointerDetails(EventPointerType::POINTER_TYPE_TOUCH, 0));
+  display_for_dispatch->DispatchEvent(&touch);
+  EXPECT_EQ(ET_POINTER_DOWN, event_sink.last_event_type_);
+  event_sink.Reset();
+
+  // Pressing a key dispatches exactly one event.
+  KeyEvent key_pressed(ET_KEY_PRESSED, VKEY_A, EF_NONE);
+  display_for_dispatch->DispatchEvent(&key_pressed);
+  EXPECT_EQ(1, event_sink.count_);
+  EXPECT_EQ(ET_KEY_PRESSED, event_sink.last_event_type_);
+  event_sink.Reset();
+
+  // Releasing the key dispatches exactly one event.
+  KeyEvent key_released(ET_KEY_RELEASED, VKEY_A, EF_NONE);
+  display_for_dispatch->DispatchEvent(&key_released);
+  EXPECT_EQ(1, event_sink.count_);
+  EXPECT_EQ(ET_KEY_RELEASED, event_sink.last_event_type_);
+}
+
+}  // namespace
+}  // namespace ws
+}  // namespace ui
diff --git a/services/ui/ws/platform_display_delegate.h b/services/ui/ws/platform_display_delegate.h
index 2140802..cc185b9 100644
--- a/services/ui/ws/platform_display_delegate.h
+++ b/services/ui/ws/platform_display_delegate.h
@@ -12,6 +12,7 @@
 namespace ui {
 
 class EventSink;
+class OzonePlatform;
 
 namespace ws {
 
@@ -37,6 +38,10 @@
   // Called when the Display loses capture.
   virtual void OnNativeCaptureLost() = 0;
 
+  // Allows the OzonePlatform to be overridden, e.g. for tests. Returns null
+  // for non-Ozone platforms.
+  virtual OzonePlatform* GetOzonePlatform() = 0;
+
  protected:
   virtual ~PlatformDisplayDelegate() {}
 };
diff --git a/services/ui/ws/test_utils.cc b/services/ui/ws/test_utils.cc
index ff46cb3..50cbcd27 100644
--- a/services/ui/ws/test_utils.cc
+++ b/services/ui/ws/test_utils.cc
@@ -203,12 +203,29 @@
       root, service_manager::mojom::kRootUserID,
       ui::mojom::WindowTreeClientPtr(), embed_flags,
       base::WrapUnique(new WindowManagerAccessPolicy));
-  tree->ConfigureWindowManager();
+  tree->ConfigureWindowManager(automatically_create_display_roots_);
   return tree;
 }
 
 // TestWindowManager ----------------------------------------------------------
 
+TestWindowManager::TestWindowManager() {}
+
+TestWindowManager::~TestWindowManager() {}
+
+void TestWindowManager::OnConnect(uint16_t client_id) {
+  connect_count_++;
+}
+
+void TestWindowManager::WmNewDisplayAdded(
+    const display::Display& display,
+    ui::mojom::WindowDataPtr root,
+    bool drawn,
+    const cc::FrameSinkId& frame_sink_id,
+    const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
+  display_added_count_++;
+}
+
 void TestWindowManager::WmDisplayRemoved(int64_t display_id) {
   got_display_removed_ = true;
   display_removed_id_ = display_id;
@@ -526,9 +543,11 @@
 
 // WindowEventTargetingHelper ------------------------------------------------
 
-WindowEventTargetingHelper::WindowEventTargetingHelper() {
+WindowEventTargetingHelper::WindowEventTargetingHelper(
+    bool automatically_create_display_roots) {
   display_ = new Display(window_server());
-  display_binding_ = new TestDisplayBinding(window_server());
+  display_binding_ = new TestDisplayBinding(window_server(),
+                                            automatically_create_display_roots);
   display_->Init(display::ViewportMetrics(),
                  base::WrapUnique(display_binding_));
   wm_client_ = ws_test_helper_.window_server_delegate()->last_client();
@@ -603,10 +622,12 @@
 
 // ----------------------------------------------------------------------------
 
-void AddWindowManager(WindowServer* window_server, const UserId& user_id) {
+void AddWindowManager(WindowServer* window_server,
+                      const UserId& user_id,
+                      bool automatically_create_display_roots) {
   window_server->window_manager_window_tree_factory_set()
       ->Add(user_id, nullptr)
-      ->CreateWindowTree(nullptr, nullptr);
+      ->CreateWindowTree(nullptr, nullptr, automatically_create_display_roots);
 }
 
 display::Display MakeDisplay(int origin_x,
diff --git a/services/ui/ws/test_utils.h b/services/ui/ws/test_utils.h
index 719d73e..bc7d52d 100644
--- a/services/ui/ws/test_utils.h
+++ b/services/ui/ws/test_utils.h
@@ -65,7 +65,7 @@
   void RemoveDisplay(int64_t id);
 
   // display::ScreenManager:
-  void AddInterfaces(service_manager::InterfaceRegistry* registry) override {}
+  void AddInterfaces(service_manager::BinderRegistry* registry) override {}
   void Init(display::ScreenManagerDelegate* delegate) override;
   void RequestCloseDisplay(int64_t display_id) override {}
 
@@ -127,6 +127,11 @@
   void StartPointerWatcher(bool want_moves);
   void StopPointerWatcher();
 
+  bool ProcessSetDisplayRoot(int64_t display_id,
+                             const ClientWindowId& client_window_id) {
+    return tree_->ProcessSetDisplayRoot(display_id, client_window_id);
+  }
+
  private:
   WindowTree* tree_;
 
@@ -227,6 +232,11 @@
                                           : nullptr;
   }
 
+  const std::vector<std::unique_ptr<WindowManagerDisplayRoot>>&
+  window_manager_display_roots() const {
+    return wms_->window_manager_display_roots_;
+  }
+
  private:
   WindowManagerState* wms_;
 
@@ -257,8 +267,11 @@
 // Factory that always embeds the new WindowTree as the root user id.
 class TestDisplayBinding : public DisplayBinding {
  public:
-  explicit TestDisplayBinding(WindowServer* window_server)
-      : window_server_(window_server) {}
+  explicit TestDisplayBinding(WindowServer* window_server,
+                              bool automatically_create_display_roots = true)
+      : window_server_(window_server),
+        automatically_create_display_roots_(
+            automatically_create_display_roots) {}
   ~TestDisplayBinding() override {}
 
  private:
@@ -266,6 +279,7 @@
   WindowTree* CreateWindowTree(ServerWindow* root) override;
 
   WindowServer* window_server_;
+  const bool automatically_create_display_roots_;
 
   DISALLOW_COPY_AND_ASSIGN(TestDisplayBinding);
 };
@@ -293,12 +307,8 @@
 
 class TestWindowManager : public mojom::WindowManager {
  public:
-  TestWindowManager()
-      : got_create_top_level_window_(false),
-        change_id_(0u),
-        on_accelerator_called_(false),
-        on_accelerator_id_(0u) {}
-  ~TestWindowManager() override {}
+  TestWindowManager();
+  ~TestWindowManager() override;
 
   bool did_call_create_top_level_window(uint32_t* change_id) {
     if (!got_create_top_level_window_)
@@ -320,16 +330,18 @@
   bool got_display_removed() const { return got_display_removed_; }
   int64_t display_removed_id() const { return display_removed_id_; }
   bool on_set_modal_type_called() { return on_set_modal_type_called_; }
+  int connect_count() const { return connect_count_; }
+  int display_added_count() const { return display_added_count_; }
 
  private:
   // WindowManager:
-  void OnConnect(uint16_t client_id) override {}
+  void OnConnect(uint16_t client_id) override;
   void WmNewDisplayAdded(
       const display::Display& display,
       ui::mojom::WindowDataPtr root,
       bool drawn,
       const cc::FrameSinkId& frame_sink_id,
-      const base::Optional<cc::LocalSurfaceId>& local_surface_id) override {}
+      const base::Optional<cc::LocalSurfaceId>& local_surface_id) override;
   void WmDisplayRemoved(int64_t display_id) override;
   void WmDisplayModified(const display::Display& display) override {}
   void WmSetBounds(uint32_t change_id,
@@ -372,15 +384,18 @@
   bool on_perform_move_loop_called_ = false;
   bool on_set_modal_type_called_ = false;
 
-  bool got_create_top_level_window_;
-  uint32_t change_id_;
+  bool got_create_top_level_window_ = false;
+  uint32_t change_id_ = 0u;
 
-  bool on_accelerator_called_;
-  uint32_t on_accelerator_id_;
+  bool on_accelerator_called_ = false;
+  uint32_t on_accelerator_id_ = 0u;
 
   bool got_display_removed_ = false;
   int64_t display_removed_id_ = 0;
 
+  int connect_count_ = 0;
+  int display_added_count_ = 0;
+
   DISALLOW_COPY_AND_ASSIGN(TestWindowManager);
 };
 
@@ -618,7 +633,8 @@
 // of ServerWindow objects.
 class WindowEventTargetingHelper {
  public:
-  WindowEventTargetingHelper();
+  explicit WindowEventTargetingHelper(
+      bool automatically_create_display_roots = true);
   ~WindowEventTargetingHelper();
 
   // Creates |window| as an embeded window of the primary tree. This window is a
@@ -667,7 +683,9 @@
 
 // Adds a new WM to |window_server| for |user_id|. Creates
 // WindowManagerWindowTreeFactory and associated WindowTree for the WM.
-void AddWindowManager(WindowServer* window_server, const UserId& user_id);
+void AddWindowManager(WindowServer* window_server,
+                      const UserId& user_id,
+                      bool automatically_create_display_roots = true);
 
 // Create a new Display object with specified origin, pixel size and device
 // scale factor. The bounds size is computed based on the pixel size and device
@@ -692,7 +710,8 @@
 
 // Creates a new visible window as a child of the single root of |tree|.
 // |client_id| is set to the ClientWindowId of the new window.
-ServerWindow* NewWindowInTree(WindowTree* tree, ClientWindowId* client_id);
+ServerWindow* NewWindowInTree(WindowTree* tree,
+                              ClientWindowId* client_id = nullptr);
 ServerWindow* NewWindowInTreeWithParent(WindowTree* tree,
                                         ServerWindow* parent,
                                         ClientWindowId* client_id = nullptr);
diff --git a/services/ui/ws/window_manager_state.cc b/services/ui/ws/window_manager_state.cc
index 3229b81..d7bad78 100644
--- a/services/ui/ws/window_manager_state.cc
+++ b/services/ui/ws/window_manager_state.cc
@@ -137,8 +137,10 @@
   for (auto& display_root : window_manager_display_roots_)
     display_root->display()->OnWillDestroyTree(window_tree_);
 
-  for (auto& display_root : orphaned_window_manager_display_roots_)
-    display_root->root()->RemoveObserver(this);
+  if (window_tree_->automatically_create_display_roots()) {
+    for (auto& display_root : orphaned_window_manager_display_roots_)
+      display_root->root()->RemoveObserver(this);
+  }
 }
 
 void WindowManagerState::SetFrameDecorationValues(
@@ -212,6 +214,28 @@
   event_dispatcher_.AddSystemModalWindow(window);
 }
 
+void WindowManagerState::DeleteWindowManagerDisplayRoot(
+    ServerWindow* display_root) {
+  for (auto iter = orphaned_window_manager_display_roots_.begin();
+       iter != orphaned_window_manager_display_roots_.end(); ++iter) {
+    if ((*iter)->root() == display_root) {
+      orphaned_window_manager_display_roots_.erase(iter);
+      return;
+    }
+  }
+
+  for (auto iter = window_manager_display_roots_.begin();
+       iter != window_manager_display_roots_.end(); ++iter) {
+    if ((*iter)->root() == display_root) {
+      (*iter)->display()->RemoveWindowManagerDisplayRoot((*iter).get());
+      window_manager_display_roots_.erase(iter);
+      return;
+    }
+  }
+
+  NOTREACHED();
+}
+
 const UserId& WindowManagerState::user_id() const {
   return window_tree_->user_id();
 }
@@ -356,14 +380,15 @@
   for (auto iter = window_manager_display_roots_.begin();
        iter != window_manager_display_roots_.end(); ++iter) {
     if ((*iter)->display() == display) {
-      (*iter)->root()->AddObserver(this);
+      if (window_tree_->automatically_create_display_roots())
+        (*iter)->root()->AddObserver(this);
       orphaned_window_manager_display_roots_.push_back(std::move(*iter));
       window_manager_display_roots_.erase(iter);
       window_tree_->OnDisplayDestroying(display->GetId());
+      orphaned_window_manager_display_roots_.back()->display_ = nullptr;
       return;
     }
   }
-  NOTREACHED();
 }
 
 void WindowManagerState::SetAllRootWindowsVisible(bool value) {
diff --git a/services/ui/ws/window_manager_state.h b/services/ui/ws/window_manager_state.h
index 108fd10..3921fdf 100644
--- a/services/ui/ws/window_manager_state.h
+++ b/services/ui/ws/window_manager_state.h
@@ -78,6 +78,9 @@
 
   void AddSystemModalWindow(ServerWindow* window);
 
+  // Deletes the WindowManagerDisplayRoot whose root is |display_root|.
+  void DeleteWindowManagerDisplayRoot(ServerWindow* display_root);
+
   // Returns the ServerWindow corresponding to an orphaned root with the
   // specified id. See |orphaned_window_manager_display_roots_| for details on
   // what on orphaned root is.
diff --git a/services/ui/ws/window_manager_window_tree_factory.cc b/services/ui/ws/window_manager_window_tree_factory.cc
index 26be4b7..0f9589b 100644
--- a/services/ui/ws/window_manager_window_tree_factory.cc
+++ b/services/ui/ws/window_manager_window_tree_factory.cc
@@ -26,14 +26,21 @@
 
 void WindowManagerWindowTreeFactory::CreateWindowTree(
     mojom::WindowTreeRequest window_tree_request,
-    mojom::WindowTreeClientPtr window_tree_client) {
+    mojom::WindowTreeClientPtr window_tree_client,
+    bool automatically_create_display_roots) {
+  if (window_tree_) {
+    DVLOG(1) << "CreateWindowTree() called more than once.";
+    return;
+  }
+
   // CreateWindowTree() can only be called once, so there is no reason to keep
   // the binding around.
   if (binding_.is_bound())
     binding_.Close();
 
   SetWindowTree(GetWindowServer()->CreateTreeForWindowManager(
-      user_id_, std::move(window_tree_request), std::move(window_tree_client)));
+      user_id_, std::move(window_tree_request), std::move(window_tree_client),
+      automatically_create_display_roots));
 }
 
 WindowManagerWindowTreeFactory::WindowManagerWindowTreeFactory(
@@ -42,8 +49,7 @@
     : window_manager_window_tree_factory_set_(
           window_manager_window_tree_factory_set),
       user_id_(user_id),
-      binding_(this),
-      window_tree_(nullptr) {}
+      binding_(this) {}
 
 WindowServer* WindowManagerWindowTreeFactory::GetWindowServer() {
   return window_manager_window_tree_factory_set_->window_server();
diff --git a/services/ui/ws/window_manager_window_tree_factory.h b/services/ui/ws/window_manager_window_tree_factory.h
index df5c4b0e..ce56479 100644
--- a/services/ui/ws/window_manager_window_tree_factory.h
+++ b/services/ui/ws/window_manager_window_tree_factory.h
@@ -34,7 +34,8 @@
 
   // mojom::WindowManagerWindowTreeFactory:
   void CreateWindowTree(mojom::WindowTreeRequest window_tree_request,
-                        mojom::WindowTreeClientPtr window_tree_client) override;
+                        mojom::WindowTreeClientPtr window_tree_client,
+                        bool window_manager_creates_roots) override;
 
  private:
   // Used by tests.
@@ -50,7 +51,7 @@
   mojo::Binding<mojom::WindowManagerWindowTreeFactory> binding_;
 
   // Owned by WindowServer.
-  WindowTree* window_tree_;
+  WindowTree* window_tree_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(WindowManagerWindowTreeFactory);
 };
diff --git a/services/ui/ws/window_server.cc b/services/ui/ws/window_server.cc
index 0e1e3a40..b47276b 100644
--- a/services/ui/ws/window_server.cc
+++ b/services/ui/ws/window_server.cc
@@ -133,7 +133,8 @@
 WindowTree* WindowServer::CreateTreeForWindowManager(
     const UserId& user_id,
     mojom::WindowTreeRequest window_tree_request,
-    mojom::WindowTreeClientPtr window_tree_client) {
+    mojom::WindowTreeClientPtr window_tree_client,
+    bool automatically_create_display_roots) {
   std::unique_ptr<WindowTree> window_tree(new WindowTree(
       this, user_id, nullptr, base::WrapUnique(new WindowManagerAccessPolicy)));
   std::unique_ptr<WindowTreeBinding> window_tree_binding =
@@ -147,7 +148,7 @@
   }
   WindowTree* window_tree_ptr = window_tree.get();
   AddTree(std::move(window_tree), std::move(window_tree_binding), nullptr);
-  window_tree_ptr->ConfigureWindowManager();
+  window_tree_ptr->ConfigureWindowManager(automatically_create_display_roots);
   return window_tree_ptr;
 }
 
diff --git a/services/ui/ws/window_server.h b/services/ui/ws/window_server.h
index e622820..d01c2e0 100644
--- a/services/ui/ws/window_server.h
+++ b/services/ui/ws/window_server.h
@@ -91,7 +91,8 @@
   WindowTree* CreateTreeForWindowManager(
       const UserId& user_id,
       mojom::WindowTreeRequest window_tree_request,
-      mojom::WindowTreeClientPtr window_tree_client);
+      mojom::WindowTreeClientPtr window_tree_client,
+      bool automatically_create_display_roots);
   // Invoked when a WindowTree's connection encounters an error.
   void DestroyTree(WindowTree* tree);
 
diff --git a/services/ui/ws/window_server_service_test_base.cc b/services/ui/ws/window_server_service_test_base.cc
index 4289dca..ab3f357 100644
--- a/services/ui/ws/window_server_service_test_base.cc
+++ b/services/ui/ws/window_server_service_test_base.cc
@@ -29,9 +29,11 @@
 
  private:
   // service_manager::test::ServiceTestClient:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    return test_->OnConnect(remote_info.identity, registry);
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    test_->OnBindInterface(source_info, interface_name,
+                           std::move(interface_pipe));
   }
 
   WindowServerServiceTestBase* test_;
diff --git a/services/ui/ws/window_server_service_test_base.h b/services/ui/ws/window_server_service_test_base.h
index e363525..e6be41d 100644
--- a/services/ui/ws/window_server_service_test_base.h
+++ b/services/ui/ws/window_server_service_test_base.h
@@ -17,8 +17,10 @@
   WindowServerServiceTestBase();
   ~WindowServerServiceTestBase() override;
 
-  virtual bool OnConnect(const service_manager::Identity& remote_identity,
-                         service_manager::InterfaceRegistry* registry) = 0;
+  virtual void OnBindInterface(
+      const service_manager::ServiceInfo& source_info,
+      const std::string& interface_name,
+      mojo::ScopedMessagePipeHandle interface_pipe) = 0;
 
  private:
   // service_manager::test::ServiceTest:
diff --git a/services/ui/ws/window_server_test_base.cc b/services/ui/ws/window_server_test_base.cc
index 34f0996..2062520 100644
--- a/services/ui/ws/window_server_test_base.cc
+++ b/services/ui/ws/window_server_test_base.cc
@@ -12,7 +12,6 @@
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "services/service_manager/public/cpp/connector.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "ui/aura/env.h"
 #include "ui/aura/mus/window_tree_client.h"
 #include "ui/aura/mus/window_tree_host_mus.h"
@@ -33,7 +32,9 @@
 
 }  // namespace
 
-WindowServerTestBase::WindowServerTestBase() {}
+WindowServerTestBase::WindowServerTestBase() {
+  registry_.AddInterface<mojom::WindowTreeClient>(this);
+}
 
 WindowServerTestBase::~WindowServerTestBase() {}
 
@@ -114,11 +115,12 @@
   WindowServerServiceTestBase::TearDown();
 }
 
-bool WindowServerTestBase::OnConnect(
-    const service_manager::Identity& remote_identity,
-    service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::WindowTreeClient>(this);
-  return true;
+void WindowServerTestBase::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void WindowServerTestBase::OnEmbed(
diff --git a/services/ui/ws/window_server_test_base.h b/services/ui/ws/window_server_test_base.h
index 9d0167b8..d5b0ec3 100644
--- a/services/ui/ws/window_server_test_base.h
+++ b/services/ui/ws/window_server_test_base.h
@@ -9,6 +9,7 @@
 #include <set>
 
 #include "base/macros.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/ui/public/interfaces/window_tree.mojom.h"
 #include "services/ui/ws/window_server_service_test_base.h"
@@ -74,8 +75,9 @@
   void TearDown() override;
 
   // WindowServerServiceTestBase:
-  bool OnConnect(const service_manager::Identity& remote_identity,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // WindowTreeClientDelegate:
   void OnEmbed(
@@ -159,6 +161,8 @@
 
   bool window_tree_client_lost_connection_ = false;
 
+  service_manager::BinderRegistry registry_;
+
   DISALLOW_COPY_AND_ASSIGN(WindowServerTestBase);
 };
 
diff --git a/services/ui/ws/window_tree.cc b/services/ui/ws/window_tree.cc
index c5ce26eb..85acf92d 100644
--- a/services/ui/ws/window_tree.cc
+++ b/services/ui/ws/window_tree.cc
@@ -101,8 +101,10 @@
   // We alert the WindowManagerState that we're destroying this state here
   // because WindowManagerState would attempt to use things that wouldn't have
   // been cleaned up by OnWindowDestroyingTreeImpl().
-  if (window_manager_state_)
+  if (window_manager_state_) {
     window_manager_state_->OnWillDestroyTree(this);
+    window_manager_state_.reset();
+  }
 }
 
 void WindowTree::Init(std::unique_ptr<WindowTreeBinding> binding,
@@ -134,7 +136,8 @@
                     root->frame_sink_id(), root->current_local_surface_id());
 }
 
-void WindowTree::ConfigureWindowManager() {
+void WindowTree::ConfigureWindowManager(
+    bool automatically_create_display_roots) {
   // ConfigureWindowManager() should be called early on, before anything
   // else. |waiting_for_top_level_window_info_| must be null as if
   // |waiting_for_top_level_window_info_| is non-null it means we're about to
@@ -142,6 +145,7 @@
   // TODO(sky): DCHECK temporary until 626869 is sorted out.
   DCHECK(!waiting_for_top_level_window_info_);
   DCHECK(!window_manager_internal_);
+  automatically_create_display_roots_ = automatically_create_display_roots;
   window_manager_internal_ = binding_->GetWindowManager();
   window_manager_internal_->OnConnect(id_);
   window_manager_state_ = base::MakeUnique<WindowManagerState>(this);
@@ -204,6 +208,10 @@
 }
 
 void WindowTree::AddRootForWindowManager(const ServerWindow* root) {
+  if (!automatically_create_display_roots_)
+    return;
+
+  DCHECK(automatically_create_display_roots_);
   DCHECK(window_manager_internal_);
   const ClientWindowId client_window_id(WindowIdToTransportId(root->id()));
   DCHECK_EQ(0u, client_id_to_window_id_map_.count(client_window_id));
@@ -255,6 +263,52 @@
   }
 }
 
+bool WindowTree::ProcessSetDisplayRoot(int64_t display_id,
+                                       const ClientWindowId& client_window_id) {
+  DCHECK(window_manager_state_);  // Only called for window manager.
+  Display* display =
+      window_server_->display_manager()->GetDisplayById(display_id);
+  if (!display) {
+    DVLOG(1) << "SetDisplayRoot called with unknown display " << display_id;
+    return false;
+  }
+
+  if (automatically_create_display_roots_) {
+    DVLOG(1) << "SetDisplayRoot is only applicable when "
+             << "automatically_create_display_roots is false";
+    return false;
+  }
+
+  ServerWindow* window = GetWindowByClientId(client_window_id);
+  // The window must not have a parent.
+  if (!window || window->parent()) {
+    DVLOG(1) << "SetDisplayRoot called with invalid window id "
+             << client_window_id.id;
+    return false;
+  }
+
+  WindowManagerDisplayRoot* display_root =
+      display->GetWindowManagerDisplayRootForUser(
+          window_manager_state_->user_id());
+  DCHECK(display_root);
+  if (!display_root->root()->children().empty()) {
+    DVLOG(1) << "SetDisplayRoot called more than once";
+    return false;
+  }
+
+  if (base::ContainsValue(roots_, window)) {
+    DVLOG(1) << "SetDisplayRoot called with existing root";
+    return false;
+  }
+
+  // NOTE: this doesn't resize the window in anyway. We assume the client takes
+  // care of any modifications it needs to do.
+  roots_.insert(window);
+  Operation op(this, window_server_, OperationType::ADD_WINDOW);
+  display_root->root()->Add(window);
+  return true;
+}
+
 bool WindowTree::SetCapture(const ClientWindowId& client_window_id) {
   ServerWindow* window = GetWindowByClientId(client_window_id);
   WindowManagerDisplayRoot* display_root = GetWindowManagerDisplayRoot(window);
@@ -596,7 +650,9 @@
 
 void WindowTree::OnDisplayDestroying(int64_t display_id) {
   DCHECK(window_manager_internal_);
-  window_manager_internal_->WmDisplayRemoved(display_id);
+  if (automatically_create_display_roots_)
+    window_manager_internal_->WmDisplayRemoved(display_id);
+  // For the else case the client should detect removal directly.
 }
 
 void WindowTree::ClientJankinessChanged(WindowTree* tree) {
@@ -1044,11 +1100,19 @@
   DCHECK(roots_.count(window) > 0);
   roots_.erase(window);
 
-  const ClientWindowId client_window_id(ClientWindowIdForWindow(window));
-
-  // No need to do anything if we created the window.
-  if (window->id().client_id == id_)
+  if (window->id().client_id == id_) {
+    // This cllient created the window. If this client is the window manager and
+    // display roots are manually created, then |window| is a display root and
+    // needs be cleaned.
+    if (window_manager_state_ && !automatically_create_display_roots_) {
+      // The window manager is asking to delete the root it created.
+      window_manager_state_->DeleteWindowManagerDisplayRoot(window->parent());
+      DeleteWindowImpl(this, window);
+    }
     return;
+  }
+
+  const ClientWindowId client_window_id(ClientWindowIdForWindow(window));
 
   if (reason == RemoveRootReason::EMBED) {
     client()->OnUnembed(client_window_id.id);
@@ -2041,6 +2105,12 @@
   window->set_extended_hit_test_region(hit_area);
 }
 
+void WindowTree::SetDisplayRoot(int64_t display_id,
+                                Id window_id,
+                                const SetDisplayRootCallback& callback) {
+  callback.Run(ProcessSetDisplayRoot(display_id, ClientWindowId(window_id)));
+}
+
 void WindowTree::WmResponse(uint32_t change_id, bool response) {
   if (window_server_->in_move_loop() &&
       window_server_->GetCurrentMoveLoopChangeId() == change_id) {
diff --git a/services/ui/ws/window_tree.h b/services/ui/ws/window_tree.h
index 0614f5c..fd7da3ac 100644
--- a/services/ui/ws/window_tree.h
+++ b/services/ui/ws/window_tree.h
@@ -78,8 +78,13 @@
   void Init(std::unique_ptr<WindowTreeBinding> binding,
             mojom::WindowTreePtr tree);
 
-  // Called if this WindowTree hosts a WindowManager.
-  void ConfigureWindowManager();
+  // Called if this WindowTree hosts a WindowManager. See mojom for details
+  // on |automatically_create_display_roots|.
+  void ConfigureWindowManager(bool automatically_create_display_roots);
+
+  bool automatically_create_display_roots() const {
+    return automatically_create_display_roots_;
+  }
 
   ClientSpecificId id() const { return id_; }
 
@@ -378,6 +383,10 @@
   // waiting for the last move to be acknowledged.
   void OnWmMoveDragImageAck();
 
+  // Called from SetDisplayRoot(), see mojom for details.
+  bool ProcessSetDisplayRoot(int64_t display_id,
+                             const ClientWindowId& client_window_id);
+
   // WindowTree:
   void NewWindow(uint32_t change_id,
                  Id transport_window_id,
@@ -487,6 +496,9 @@
   void RemoveActivationParent(Id transport_window_id) override;
   void ActivateNextWindow() override;
   void SetExtendedHitArea(Id window_id, const gfx::Insets& hit_area) override;
+  void SetDisplayRoot(int64_t display_id,
+                      Id window_id,
+                      const SetDisplayRootCallback& callback) override;
   void WmResponse(uint32_t change_id, bool response) override;
   void WmSetBoundsResponse(uint32_t change_id) override;
   void WmRequestClose(Id transport_window_id) override;
@@ -589,10 +601,14 @@
 
   std::queue<std::unique_ptr<TargetedEvent>> event_queue_;
 
+  // TODO(sky): move all window manager specific state into struct to make it
+  // clear what applies only to the window manager.
   std::unique_ptr<mojo::AssociatedBinding<mojom::WindowManagerClient>>
       window_manager_internal_client_binding_;
   mojom::WindowManager* window_manager_internal_;
   std::unique_ptr<WindowManagerState> window_manager_state_;
+  // See mojom for details.
+  bool automatically_create_display_roots_ = true;
 
   std::unique_ptr<WaitingForTopLevelWindowInfo>
       waiting_for_top_level_window_info_;
diff --git a/services/ui/ws/window_tree_client_unittest.cc b/services/ui/ws/window_tree_client_unittest.cc
index a2e2ce42..d70250c 100644
--- a/services/ui/ws/window_tree_client_unittest.cc
+++ b/services/ui/ws/window_tree_client_unittest.cc
@@ -14,8 +14,8 @@
 #include "cc/surfaces/local_surface_id_allocator.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "services/service_manager/public/cpp/service_test.h"
 #include "services/ui/public/interfaces/constants.mojom.h"
 #include "services/ui/public/interfaces/window_tree.mojom.h"
@@ -678,14 +678,16 @@
   }
 
   // WindowServerServiceTestBase:
-  bool OnConnect(const service_manager::Identity& remote_identity,
-                 service_manager::InterfaceRegistry* registry) override {
-    registry->AddInterface(client_factory_.get());
-    return true;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {
+    registry_.BindInterface(source_info.identity, interface_name,
+                            std::move(interface_pipe));
   }
 
   void SetUp() override {
     client_factory_ = base::MakeUnique<WindowTreeClientFactory>();
+    registry_.AddInterface(client_factory_.get());
 
     WindowServerServiceTestBase::SetUp();
 
@@ -736,6 +738,7 @@
   int client_id_1_;
   int client_id_2_;
   Id root_window_id_;
+  service_manager::BinderRegistry registry_;
 
   DISALLOW_COPY_AND_ASSIGN(WindowTreeClientTest);
 };
diff --git a/services/ui/ws/window_tree_unittest.cc b/services/ui/ws/window_tree_unittest.cc
index b0aaa75..9bea946 100644
--- a/services/ui/ws/window_tree_unittest.cc
+++ b/services/ui/ws/window_tree_unittest.cc
@@ -1505,6 +1505,85 @@
   EXPECT_TRUE(client->tracker()->changes()->empty());
 }
 
+// Used to test the window manager configured to manually create displays roots.
+class WindowTreeManualDisplayTest : public testing::Test {
+ public:
+  WindowTreeManualDisplayTest() {}
+  ~WindowTreeManualDisplayTest() override {}
+
+  WindowServer* window_server() { return ws_test_helper_.window_server(); }
+  DisplayManager* display_manager() {
+    return window_server()->display_manager();
+  }
+  TestWindowServerDelegate* window_server_delegate() {
+    return ws_test_helper_.window_server_delegate();
+  }
+  TestScreenManager& screen_manager() { return screen_manager_; }
+
+ protected:
+  // testing::Test:
+  void SetUp() override {
+    screen_manager_.Init(window_server()->display_manager());
+    window_server()->user_id_tracker()->AddUserId(kTestUserId1);
+  }
+
+ private:
+  WindowServerTestHelper ws_test_helper_;
+  TestScreenManager screen_manager_;
+
+  DISALLOW_COPY_AND_ASSIGN(WindowTreeManualDisplayTest);
+};
+
+TEST_F(WindowTreeManualDisplayTest, ClientCreatesDisplayRoot) {
+  const bool automatically_create_display_roots = false;
+  AddWindowManager(window_server(), kTestUserId1,
+                   automatically_create_display_roots);
+  const int64_t display_id =
+      screen_manager().AddDisplay(MakeDisplay(0, 0, 1024, 768, 1.0f));
+  WindowManagerState* window_manager_state =
+      window_server()->GetWindowManagerStateForUser(kTestUserId1);
+  ASSERT_TRUE(window_manager_state);
+  WindowTree* window_manager_tree = window_manager_state->window_tree();
+  EXPECT_TRUE(window_manager_tree->roots().empty());
+  TestWindowManager* test_window_manager =
+      window_server_delegate()->last_binding()->window_manager();
+  EXPECT_EQ(1, test_window_manager->connect_count());
+  EXPECT_EQ(0, test_window_manager->display_added_count());
+
+  // Add another display and make sure WindowManager is not updated.
+  screen_manager().AddDisplay(MakeDisplay(0, 0, 1024, 768, 1.0f));
+  EXPECT_EQ(0, test_window_manager->display_added_count());
+
+  // Create a window for the windowmanager and set it as the root.
+  ClientWindowId display_root_id = BuildClientWindowId(window_manager_tree, 10);
+  ASSERT_TRUE(window_manager_tree->NewWindow(display_root_id,
+                                             ServerWindow::Properties()));
+  ServerWindow* display_root =
+      window_manager_tree->GetWindowByClientId(display_root_id);
+  ASSERT_TRUE(display_root);
+  ASSERT_TRUE(WindowTreeTestApi(window_manager_tree)
+                  .ProcessSetDisplayRoot(display_id, display_root_id));
+  EXPECT_TRUE(display_root->parent());
+  EXPECT_TRUE(window_server_delegate()
+                  ->last_binding()
+                  ->client()
+                  ->tracker()
+                  ->changes()
+                  ->empty());
+  ASSERT_EQ(1u, window_manager_tree->roots().size());
+  EXPECT_EQ(display_root, *window_manager_tree->roots().begin());
+  ASSERT_EQ(2u, WindowManagerStateTestApi(window_manager_state)
+                    .window_manager_display_roots()
+                    .size());
+
+  // Delete the root, which should delete the WindowManagerDisplayRoot.
+  EXPECT_TRUE(window_manager_tree->DeleteWindow(display_root_id));
+  ASSERT_TRUE(window_manager_tree->roots().empty());
+  ASSERT_EQ(1u, WindowManagerStateTestApi(window_manager_state)
+                    .window_manager_display_roots()
+                    .size());
+}
+
 }  // namespace test
 }  // namespace ws
 }  // namespace ui
diff --git a/services/video_capture/service_impl.cc b/services/video_capture/service_impl.cc
index a1fc433..bd3d050 100644
--- a/services/video_capture/service_impl.cc
+++ b/services/video_capture/service_impl.cc
@@ -10,7 +10,7 @@
 #include "media/capture/video/video_capture_buffer_pool.h"
 #include "media/capture/video/video_capture_buffer_tracker.h"
 #include "media/capture/video/video_capture_jpeg_decoder.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/service_info.h"
 #include "services/video_capture/device_factory_media_to_mojo_adapter.h"
 
 namespace {
@@ -25,14 +25,18 @@
 
 namespace video_capture {
 
-ServiceImpl::ServiceImpl() = default;
+ServiceImpl::ServiceImpl() {
+  registry_.AddInterface<mojom::Service>(this);
+}
 
 ServiceImpl::~ServiceImpl() = default;
 
-bool ServiceImpl::OnConnect(const service_manager::ServiceInfo& remote_info,
-                            service_manager::InterfaceRegistry* registry) {
-  registry->AddInterface<mojom::Service>(this);
-  return true;
+void ServiceImpl::OnBindInterface(
+    const service_manager::ServiceInfo& source_info,
+    const std::string& interface_name,
+    mojo::ScopedMessagePipeHandle interface_pipe) {
+  registry_.BindInterface(source_info.identity, interface_name,
+                          std::move(interface_pipe));
 }
 
 void ServiceImpl::Create(const service_manager::Identity& remote_identity,
diff --git a/services/video_capture/service_impl.h b/services/video_capture/service_impl.h
index 0b7a611..a4aef2ad 100644
--- a/services/video_capture/service_impl.h
+++ b/services/video_capture/service_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/video_capture/public/interfaces/service.mojom.h"
@@ -25,8 +26,9 @@
   ~ServiceImpl() override;
 
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override;
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override;
 
   // service_manager::InterfaceFactory<video_capture::mojom::Service>:
   void Create(const service_manager::Identity& remote_identity,
@@ -40,6 +42,7 @@
   void LazyInitializeDeviceFactory();
   void LazyInitializeFakeDeviceFactory();
 
+  service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::Service> service_bindings_;
   mojo::BindingSet<mojom::DeviceFactory> factory_bindings_;
   mojo::BindingSet<mojom::DeviceFactory> fake_factory_bindings_;
diff --git a/testing/OWNERS b/testing/OWNERS
index d048dc6..43dc478 100644
--- a/testing/OWNERS
+++ b/testing/OWNERS
@@ -1,2 +1,9 @@
 phajdan.jr@chromium.org
 dpranke@chromium.org
+
+# These aren't actually great contact points for this directory, but
+# changes in this directory are rare and most changes happen in better-owned
+# subdirectories.
+#
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Build
diff --git a/testing/buildbot/OWNERS b/testing/buildbot/OWNERS
index 5a13552..65cae271 100644
--- a/testing/buildbot/OWNERS
+++ b/testing/buildbot/OWNERS
@@ -9,7 +9,6 @@
 maruel@chromium.org
 phajdan.jr@chromium.org
 sky@chromium.org
-stip@chromium.org
 tansell@chromium.org
 thakis@chromium.org
 
@@ -31,4 +30,5 @@
 per-file chromium.webrtc.json=kjellander@chromium.org
 per-file chromium.webrtc.fyi.json=kjellander@chromium.org
 
-# COMPONENT: Infra>Client
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Infra>Client>Chrome
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 0628bd8..6df5157 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -225,7 +225,6 @@
   "Lollipop Low-end Tester": {
     "gtest_tests": [
       {
-        "expiration": 14400,
         "override_compile_targets": [
           "android_webview_test_apk"
         ],
@@ -239,12 +238,12 @@
               "device_type": "sprout"
             }
           ],
+          "expiration": 14400,
           "shards": 2
         },
         "test": "android_webview_test_apk"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "android_webview_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -254,12 +253,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "android_webview_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "base_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -269,12 +268,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "base_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "blink_heap_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -284,12 +283,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "blink_heap_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "breakpad_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -299,12 +298,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "breakpad_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "capture_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -314,12 +313,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "capture_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "cc_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -329,12 +328,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "cc_unittests"
       },
       {
-        "expiration": 14400,
         "override_compile_targets": [
           "chrome_public_test_apk"
         ],
@@ -348,12 +347,12 @@
               "device_type": "sprout"
             }
           ],
+          "expiration": 14400,
           "shards": 6
         },
         "test": "chrome_public_test_apk"
       },
       {
-        "expiration": 14400,
         "override_compile_targets": [
           "chrome_sync_shell_test_apk"
         ],
@@ -366,12 +365,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "chrome_sync_shell_test_apk"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "components_browsertests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -381,12 +380,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "components_browsertests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "components_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -396,12 +395,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "components_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "content_browsertests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -412,12 +411,12 @@
               "device_type": "sprout"
             }
           ],
+          "expiration": 14400,
           "shards": 4
         },
         "test": "content_browsertests"
       },
       {
-        "expiration": 14400,
         "override_compile_targets": [
           "content_shell_test_apk"
         ],
@@ -430,12 +429,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "content_shell_test_apk"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "content_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -445,12 +444,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "content_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "device_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -460,12 +459,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "device_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "events_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -475,12 +474,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "events_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "gl_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -490,12 +489,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "gl_tests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "gl_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -505,12 +504,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "gl_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "gpu_ipc_service_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -520,12 +519,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "gpu_ipc_service_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "gpu_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -535,12 +534,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "gpu_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "ipc_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -550,12 +549,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "ipc_tests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "media_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -565,12 +564,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "media_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "net_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -580,12 +579,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "net_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "sandbox_linux_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -595,12 +594,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "sandbox_linux_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "sql_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -610,12 +609,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "sql_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "storage_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -625,12 +624,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "storage_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "ui_android_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -640,12 +639,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "ui_android_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "ui_base_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -655,12 +654,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "ui_base_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "ui_touch_selection_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -670,12 +669,12 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "ui_touch_selection_unittests"
       },
       {
-        "expiration": 14400,
         "override_isolate_target": "unit_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -685,7 +684,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "unit_tests"
       }
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json
index 49ef27a..2d8f47bf 100644
--- a/testing/buildbot/chromium.perf.fyi.json
+++ b/testing/buildbot/chromium.perf.fyi.json
@@ -28,7 +28,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58,7 +58,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87,7 +87,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117,7 +117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146,7 +146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176,7 +176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -205,7 +205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -235,7 +235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -264,7 +264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -294,7 +294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -323,7 +323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -353,7 +353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -382,7 +382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -412,7 +412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -441,7 +441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -471,7 +471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -500,7 +500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -530,7 +530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -559,7 +559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -589,7 +589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -618,7 +618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -648,7 +648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -677,7 +677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -707,7 +707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -736,7 +736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -766,7 +766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -795,7 +795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -825,7 +825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -854,7 +854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -884,7 +884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -913,7 +913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -943,7 +943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -972,7 +972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1002,7 +1002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1031,7 +1031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1061,7 +1061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1090,7 +1090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1120,7 +1120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1149,7 +1149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1179,7 +1179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1208,7 +1208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1238,7 +1238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1267,7 +1267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1297,7 +1297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1326,7 +1326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1356,7 +1356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1385,7 +1385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1415,7 +1415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1444,7 +1444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1474,7 +1474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1503,7 +1503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1533,7 +1533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1562,7 +1562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1592,7 +1592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1621,7 +1621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1651,7 +1651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1680,7 +1680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1710,7 +1710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1739,7 +1739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1769,7 +1769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1798,7 +1798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1828,7 +1828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1857,7 +1857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1887,7 +1887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1916,7 +1916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1946,7 +1946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1975,7 +1975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2005,7 +2005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2034,7 +2034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2064,7 +2064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2093,7 +2093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2123,7 +2123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2152,7 +2152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2182,7 +2182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2211,7 +2211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2241,7 +2241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2270,7 +2270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2300,7 +2300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2329,7 +2329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2359,7 +2359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2388,7 +2388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2418,7 +2418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2447,7 +2447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2477,7 +2477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2506,7 +2506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2536,7 +2536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2565,7 +2565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2595,7 +2595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2624,7 +2624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2654,7 +2654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2683,7 +2683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2713,7 +2713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2742,7 +2742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2772,7 +2772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2801,7 +2801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2831,7 +2831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2860,7 +2860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2890,7 +2890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2919,7 +2919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2949,7 +2949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2978,7 +2978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3008,7 +3008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3037,7 +3037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3067,7 +3067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3096,7 +3096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3126,7 +3126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3155,7 +3155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3185,7 +3185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3214,7 +3214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3244,7 +3244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3273,7 +3273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3303,7 +3303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3332,7 +3332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3362,7 +3362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3391,7 +3391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3421,7 +3421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3450,7 +3450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3480,7 +3480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3509,7 +3509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3539,7 +3539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3568,7 +3568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3598,7 +3598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3627,7 +3627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3657,7 +3657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3686,7 +3686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3716,7 +3716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3745,7 +3745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3775,7 +3775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3804,7 +3804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3834,7 +3834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3863,7 +3863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3893,7 +3893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3922,7 +3922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3952,7 +3952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3981,7 +3981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4011,7 +4011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4040,7 +4040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4070,7 +4070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4099,7 +4099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4129,7 +4129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4158,7 +4158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4188,7 +4188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4217,7 +4217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4247,7 +4247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4276,7 +4276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4306,7 +4306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4335,7 +4335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4365,7 +4365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4394,7 +4394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4424,7 +4424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4453,7 +4453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4483,7 +4483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4512,7 +4512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4542,7 +4542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4571,7 +4571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4601,7 +4601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4630,7 +4630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4660,7 +4660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4689,7 +4689,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4719,7 +4719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4748,7 +4748,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4778,7 +4778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4807,7 +4807,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4837,7 +4837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4866,7 +4866,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4896,7 +4896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4925,7 +4925,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4955,7 +4955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4984,7 +4984,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5014,7 +5014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5043,7 +5043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5073,7 +5073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5102,7 +5102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5132,7 +5132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5161,7 +5161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5191,7 +5191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5220,7 +5220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5250,7 +5250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5279,7 +5279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5309,7 +5309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5338,7 +5338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5368,7 +5368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5397,7 +5397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5427,7 +5427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5456,7 +5456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5486,7 +5486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5515,7 +5515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5545,7 +5545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5574,7 +5574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5604,7 +5604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5633,7 +5633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5663,7 +5663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5692,7 +5692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5722,7 +5722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5751,7 +5751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5781,7 +5781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5810,7 +5810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5840,7 +5840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5869,7 +5869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5899,7 +5899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5928,7 +5928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5958,7 +5958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5987,7 +5987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6017,7 +6017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6046,7 +6046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6076,7 +6076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6105,7 +6105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6135,7 +6135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6164,7 +6164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6194,7 +6194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6223,7 +6223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6253,7 +6253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6282,7 +6282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6312,7 +6312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6341,7 +6341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6371,7 +6371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6400,7 +6400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6430,7 +6430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6459,7 +6459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6489,7 +6489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6518,7 +6518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6548,7 +6548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6577,7 +6577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6607,7 +6607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6636,7 +6636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6666,7 +6666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6695,7 +6695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6725,7 +6725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6754,7 +6754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6784,7 +6784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6813,7 +6813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6843,7 +6843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6872,7 +6872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6902,7 +6902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6931,7 +6931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6961,7 +6961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6990,7 +6990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7020,7 +7020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7049,7 +7049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7079,7 +7079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7108,7 +7108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7138,7 +7138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7167,7 +7167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7197,7 +7197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7226,7 +7226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7256,7 +7256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7285,7 +7285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7315,7 +7315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7344,7 +7344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7374,7 +7374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7403,7 +7403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7433,7 +7433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7462,7 +7462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7492,7 +7492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7521,7 +7521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7551,7 +7551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7580,7 +7580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7610,7 +7610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7639,7 +7639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7668,7 +7668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7698,7 +7698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7727,7 +7727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7757,7 +7757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7787,7 +7787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7816,7 +7816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7846,7 +7846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7875,7 +7875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7905,7 +7905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7934,7 +7934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7964,7 +7964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7993,7 +7993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8023,7 +8023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8052,7 +8052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8082,7 +8082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8111,7 +8111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8141,7 +8141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8170,7 +8170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8200,7 +8200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8229,7 +8229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8259,7 +8259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8288,7 +8288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8318,7 +8318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8347,7 +8347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8377,7 +8377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8406,7 +8406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8436,7 +8436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8465,7 +8465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8495,7 +8495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8524,7 +8524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8554,7 +8554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8583,7 +8583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8613,7 +8613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8642,7 +8642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8672,7 +8672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8701,7 +8701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8731,7 +8731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8760,7 +8760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8790,7 +8790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8819,7 +8819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8849,7 +8849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8878,7 +8878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8908,7 +8908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8937,7 +8937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8967,7 +8967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8996,7 +8996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9026,7 +9026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9055,7 +9055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9085,7 +9085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9114,7 +9114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9144,7 +9144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9173,7 +9173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9203,7 +9203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9232,7 +9232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9262,7 +9262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9291,7 +9291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9321,7 +9321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9350,7 +9350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9380,7 +9380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9409,7 +9409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9439,7 +9439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9468,7 +9468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9498,7 +9498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9527,7 +9527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9557,7 +9557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9586,7 +9586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9616,7 +9616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9645,7 +9645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9675,7 +9675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9704,7 +9704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9734,7 +9734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9763,7 +9763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9793,7 +9793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9822,7 +9822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9852,7 +9852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9881,7 +9881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9911,7 +9911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9940,7 +9940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9970,7 +9970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9999,7 +9999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10029,7 +10029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10058,7 +10058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10088,7 +10088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10117,7 +10117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10147,7 +10147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10176,7 +10176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10206,7 +10206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10235,7 +10235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10265,7 +10265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10294,7 +10294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10324,7 +10324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10353,7 +10353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10383,7 +10383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10412,7 +10412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10442,7 +10442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10471,7 +10471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10501,7 +10501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10530,7 +10530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10560,7 +10560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10589,7 +10589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10619,7 +10619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10648,7 +10648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10678,7 +10678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10707,7 +10707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10737,7 +10737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10766,7 +10766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10796,7 +10796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10825,7 +10825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10855,7 +10855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10884,7 +10884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10914,7 +10914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10943,7 +10943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10973,7 +10973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11002,7 +11002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11031,7 +11031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11061,7 +11061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11090,7 +11090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11120,7 +11120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11150,7 +11150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11179,7 +11179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11209,7 +11209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11238,7 +11238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11268,7 +11268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11297,7 +11297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11327,7 +11327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11356,7 +11356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11386,7 +11386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11415,7 +11415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11445,7 +11445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11474,7 +11474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11504,7 +11504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11533,7 +11533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11563,7 +11563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -11587,7 +11587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11616,7 +11616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11646,7 +11646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11675,7 +11675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11705,7 +11705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11734,7 +11734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11764,7 +11764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11793,7 +11793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11823,7 +11823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11852,7 +11852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11882,7 +11882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11911,7 +11911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11941,7 +11941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11970,7 +11970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12000,7 +12000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12029,7 +12029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12059,7 +12059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12088,7 +12088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12118,7 +12118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12147,7 +12147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12177,7 +12177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12206,7 +12206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12236,7 +12236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12265,7 +12265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12295,7 +12295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12324,7 +12324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12354,7 +12354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12383,7 +12383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12413,7 +12413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12442,7 +12442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12472,7 +12472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12501,7 +12501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12531,7 +12531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12560,7 +12560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12590,7 +12590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12619,7 +12619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12649,7 +12649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12678,7 +12678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12708,7 +12708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12728,7 +12728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12757,7 +12757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12787,7 +12787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12816,7 +12816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12846,7 +12846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12875,7 +12875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12905,7 +12905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12934,7 +12934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12964,7 +12964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12993,7 +12993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13023,7 +13023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13052,7 +13052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13082,7 +13082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13111,7 +13111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13141,7 +13141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13170,7 +13170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13200,7 +13200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13229,7 +13229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13259,7 +13259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13288,7 +13288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13318,7 +13318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13347,7 +13347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13377,7 +13377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13406,7 +13406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13436,7 +13436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13465,7 +13465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13495,7 +13495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13524,7 +13524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13554,7 +13554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13583,7 +13583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13613,7 +13613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13642,7 +13642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13672,7 +13672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13701,7 +13701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13731,7 +13731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13751,7 +13751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13780,7 +13780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13810,7 +13810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13839,7 +13839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13869,7 +13869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13898,7 +13898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13928,7 +13928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13957,7 +13957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13987,7 +13987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14016,7 +14016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14046,7 +14046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14075,7 +14075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14105,7 +14105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14134,7 +14134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14164,7 +14164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14193,7 +14193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14223,7 +14223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14243,7 +14243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14272,7 +14272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14302,7 +14302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14331,7 +14331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14361,7 +14361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14390,7 +14390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14420,7 +14420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14449,7 +14449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14479,7 +14479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14508,7 +14508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14538,7 +14538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14567,7 +14567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14597,7 +14597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14626,7 +14626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14656,7 +14656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14685,7 +14685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14715,7 +14715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14744,7 +14744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14774,7 +14774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14803,7 +14803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14833,7 +14833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14862,7 +14862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14892,7 +14892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14921,7 +14921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14951,7 +14951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14980,7 +14980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15010,7 +15010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15039,7 +15039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15069,7 +15069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15098,7 +15098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15128,7 +15128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15157,7 +15157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15187,7 +15187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15216,7 +15216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15246,7 +15246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15275,7 +15275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15305,7 +15305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15334,7 +15334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15364,7 +15364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15393,7 +15393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15423,7 +15423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15452,7 +15452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15482,7 +15482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15511,7 +15511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15541,7 +15541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15570,7 +15570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15600,7 +15600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15629,7 +15629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15659,7 +15659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15688,7 +15688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15718,7 +15718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15747,7 +15747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15777,7 +15777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15806,7 +15806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15836,7 +15836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15865,7 +15865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15895,7 +15895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15924,7 +15924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15954,7 +15954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15983,7 +15983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16013,7 +16013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16042,7 +16042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16072,7 +16072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16101,7 +16101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16131,7 +16131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16160,7 +16160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16190,7 +16190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16219,7 +16219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16249,7 +16249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16278,7 +16278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16308,7 +16308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16337,7 +16337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16367,7 +16367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16387,7 +16387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16416,7 +16416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16446,7 +16446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16475,7 +16475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16505,7 +16505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16534,7 +16534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16564,7 +16564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16593,7 +16593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16623,7 +16623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16652,7 +16652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16682,7 +16682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16711,7 +16711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16741,7 +16741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16770,7 +16770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16800,7 +16800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16829,7 +16829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16859,7 +16859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16888,7 +16888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16918,7 +16918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16947,7 +16947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16977,7 +16977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17006,7 +17006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17036,7 +17036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17065,7 +17065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17095,7 +17095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17124,7 +17124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17154,7 +17154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17183,7 +17183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17213,7 +17213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17242,7 +17242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17272,7 +17272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17301,7 +17301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17331,7 +17331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17360,7 +17360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17390,7 +17390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17419,7 +17419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17449,7 +17449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17478,7 +17478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17508,7 +17508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17537,7 +17537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17567,7 +17567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17596,7 +17596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17626,7 +17626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17655,7 +17655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17685,7 +17685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17714,7 +17714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17744,7 +17744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17773,7 +17773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17803,7 +17803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17832,7 +17832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17862,7 +17862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17891,7 +17891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17921,7 +17921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17950,7 +17950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17980,7 +17980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18009,7 +18009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18039,7 +18039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18068,7 +18068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18098,7 +18098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18127,7 +18127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18157,7 +18157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18186,7 +18186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18216,7 +18216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18245,7 +18245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18275,7 +18275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18304,7 +18304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18334,7 +18334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18363,7 +18363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18393,7 +18393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18422,7 +18422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18452,7 +18452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18481,7 +18481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18511,7 +18511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18540,7 +18540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18570,7 +18570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18599,7 +18599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18629,7 +18629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18658,7 +18658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18688,7 +18688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18717,7 +18717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18747,7 +18747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18776,7 +18776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18806,7 +18806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18835,7 +18835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18865,7 +18865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18894,7 +18894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18924,7 +18924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18953,7 +18953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18983,7 +18983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19012,7 +19012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19042,7 +19042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19071,7 +19071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19101,7 +19101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19130,7 +19130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19160,7 +19160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19189,7 +19189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19219,7 +19219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19248,7 +19248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19278,7 +19278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19307,7 +19307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19336,7 +19336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19366,7 +19366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19395,7 +19395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19425,7 +19425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19455,7 +19455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19484,7 +19484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19514,7 +19514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19543,7 +19543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19573,7 +19573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19602,7 +19602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19632,7 +19632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19661,7 +19661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19691,7 +19691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19720,7 +19720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19750,7 +19750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19779,7 +19779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19809,7 +19809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19838,7 +19838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19868,7 +19868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19897,7 +19897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19927,7 +19927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19956,7 +19956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19986,7 +19986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20015,7 +20015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20045,7 +20045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20074,7 +20074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20104,7 +20104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20133,7 +20133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20163,7 +20163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20192,7 +20192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20222,7 +20222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20251,7 +20251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20281,7 +20281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20310,7 +20310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20340,7 +20340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20369,7 +20369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20399,7 +20399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20428,7 +20428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20458,7 +20458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20487,7 +20487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20517,7 +20517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20546,7 +20546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20576,7 +20576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20605,7 +20605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20635,7 +20635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20664,7 +20664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20694,7 +20694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20723,7 +20723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20753,7 +20753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20782,7 +20782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20812,7 +20812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20841,7 +20841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20871,7 +20871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20900,7 +20900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20930,7 +20930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20959,7 +20959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20989,7 +20989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21018,7 +21018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21048,7 +21048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21077,7 +21077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21107,7 +21107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21136,7 +21136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21166,7 +21166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21195,7 +21195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21225,7 +21225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21254,7 +21254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21284,7 +21284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21313,7 +21313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21343,7 +21343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21363,7 +21363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21392,7 +21392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21422,7 +21422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21451,7 +21451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21481,7 +21481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21510,7 +21510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21540,7 +21540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21569,7 +21569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21599,7 +21599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21628,7 +21628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21658,7 +21658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21687,7 +21687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21717,7 +21717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21746,7 +21746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21776,7 +21776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21805,7 +21805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21835,7 +21835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21864,7 +21864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21894,7 +21894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21923,7 +21923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21953,7 +21953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21982,7 +21982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22012,7 +22012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22041,7 +22041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22071,7 +22071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22100,7 +22100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22130,7 +22130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22159,7 +22159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22189,7 +22189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22218,7 +22218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22248,7 +22248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22277,7 +22277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22307,7 +22307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22336,7 +22336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22366,7 +22366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22395,7 +22395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22425,7 +22425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22454,7 +22454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22484,7 +22484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22513,7 +22513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22543,7 +22543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22572,7 +22572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22602,7 +22602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22631,7 +22631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22661,7 +22661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22690,7 +22690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22719,7 +22719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22749,7 +22749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22778,7 +22778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22808,7 +22808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22838,7 +22838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22867,7 +22867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22897,7 +22897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22926,7 +22926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22956,7 +22956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22985,7 +22985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23015,7 +23015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23044,7 +23044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23074,7 +23074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23103,7 +23103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23133,7 +23133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23162,7 +23162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23192,7 +23192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23221,7 +23221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23251,7 +23251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -23284,7 +23284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23314,7 +23314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23343,7 +23343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23373,7 +23373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23402,7 +23402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23432,7 +23432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23461,7 +23461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23491,7 +23491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23520,7 +23520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23550,7 +23550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23579,7 +23579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23609,7 +23609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23638,7 +23638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23668,7 +23668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23697,7 +23697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23727,7 +23727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23756,7 +23756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23786,7 +23786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23815,7 +23815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23845,7 +23845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23874,7 +23874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23904,7 +23904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23933,7 +23933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23963,7 +23963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23992,7 +23992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24022,7 +24022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24051,7 +24051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24081,7 +24081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24110,7 +24110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24140,7 +24140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24169,7 +24169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24199,7 +24199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24228,7 +24228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24258,7 +24258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24287,7 +24287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24317,7 +24317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24346,7 +24346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24376,7 +24376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24405,7 +24405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24435,7 +24435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24464,7 +24464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24494,7 +24494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24523,7 +24523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24553,7 +24553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24582,7 +24582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24612,7 +24612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24641,7 +24641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24671,7 +24671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24700,7 +24700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24730,7 +24730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24759,7 +24759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24789,7 +24789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24818,7 +24818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24848,7 +24848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24877,7 +24877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24907,7 +24907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24936,7 +24936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24966,7 +24966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24995,7 +24995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25025,7 +25025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25054,7 +25054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25084,7 +25084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25113,7 +25113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25143,7 +25143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25172,7 +25172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25202,7 +25202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25231,7 +25231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25261,7 +25261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25290,7 +25290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25320,7 +25320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25349,7 +25349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25379,7 +25379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25408,7 +25408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25438,7 +25438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25467,7 +25467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25497,7 +25497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25526,7 +25526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25556,7 +25556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25585,7 +25585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25615,7 +25615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25644,7 +25644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25674,7 +25674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25703,7 +25703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25733,7 +25733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25762,7 +25762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25792,7 +25792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25821,7 +25821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25851,7 +25851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25880,7 +25880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25910,7 +25910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25939,7 +25939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25969,7 +25969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25998,7 +25998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26028,7 +26028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26057,7 +26057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26087,7 +26087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26116,7 +26116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26146,7 +26146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26175,7 +26175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26205,7 +26205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26234,7 +26234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26264,7 +26264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26293,7 +26293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26323,7 +26323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26352,7 +26352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26382,7 +26382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26411,7 +26411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26441,7 +26441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26470,7 +26470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26500,7 +26500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26529,7 +26529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26559,7 +26559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26588,7 +26588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26618,7 +26618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26647,7 +26647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26677,7 +26677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26706,7 +26706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26736,7 +26736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26765,7 +26765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26795,7 +26795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26824,7 +26824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26854,7 +26854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26883,7 +26883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26913,7 +26913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26942,7 +26942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26972,7 +26972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27001,7 +27001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27031,7 +27031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27060,7 +27060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27090,7 +27090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27119,7 +27119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27149,7 +27149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27178,7 +27178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27208,7 +27208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27237,7 +27237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27267,7 +27267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27296,7 +27296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27326,7 +27326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27355,7 +27355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27385,7 +27385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27414,7 +27414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27444,7 +27444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27473,7 +27473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27503,7 +27503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27532,7 +27532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27562,7 +27562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27591,7 +27591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27621,7 +27621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27650,7 +27650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27680,7 +27680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27709,7 +27709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27739,7 +27739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27768,7 +27768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27798,7 +27798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27827,7 +27827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27857,7 +27857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27886,7 +27886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27916,7 +27916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27945,7 +27945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27975,7 +27975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28004,7 +28004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28034,7 +28034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28063,7 +28063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28093,7 +28093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28122,7 +28122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28152,7 +28152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28181,7 +28181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28211,7 +28211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28240,7 +28240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28270,7 +28270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28299,7 +28299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28329,7 +28329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28358,7 +28358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28388,7 +28388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28417,7 +28417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28447,7 +28447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28476,7 +28476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28506,7 +28506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28535,7 +28535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28565,7 +28565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28594,7 +28594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28624,7 +28624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28653,7 +28653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28683,7 +28683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28712,7 +28712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28742,7 +28742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28771,7 +28771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28801,7 +28801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28830,7 +28830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28860,7 +28860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28889,7 +28889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28919,7 +28919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28948,7 +28948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28978,7 +28978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29007,7 +29007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29037,7 +29037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29066,7 +29066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29096,7 +29096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29125,7 +29125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29155,7 +29155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29184,7 +29184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29214,7 +29214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29243,7 +29243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29273,7 +29273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29302,7 +29302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29332,7 +29332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29361,7 +29361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29391,7 +29391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29420,7 +29420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29450,7 +29450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29479,7 +29479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29509,7 +29509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29538,7 +29538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29568,7 +29568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29597,7 +29597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29627,7 +29627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29656,7 +29656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29686,7 +29686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29715,7 +29715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29745,7 +29745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29774,7 +29774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29804,7 +29804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29833,7 +29833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29863,7 +29863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29892,7 +29892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29922,7 +29922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29951,7 +29951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29981,7 +29981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30010,7 +30010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30040,7 +30040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30069,7 +30069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30099,7 +30099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30128,7 +30128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30158,7 +30158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30187,7 +30187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30217,7 +30217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30246,7 +30246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30276,7 +30276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30305,7 +30305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30335,7 +30335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30364,7 +30364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30394,7 +30394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30423,7 +30423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30453,7 +30453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30482,7 +30482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30512,7 +30512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30541,7 +30541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30571,7 +30571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30600,7 +30600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30630,7 +30630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30659,7 +30659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30689,7 +30689,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30718,7 +30718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30748,7 +30748,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30777,7 +30777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30807,7 +30807,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30836,7 +30836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30866,7 +30866,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30895,7 +30895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30924,7 +30924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30954,7 +30954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30983,7 +30983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31013,7 +31013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31043,7 +31043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31072,7 +31072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31102,7 +31102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31131,7 +31131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31161,7 +31161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31190,7 +31190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31220,7 +31220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31249,7 +31249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31279,7 +31279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31308,7 +31308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31338,7 +31338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31367,7 +31367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31397,7 +31397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31426,7 +31426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31456,7 +31456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31485,7 +31485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31515,7 +31515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31544,7 +31544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31574,7 +31574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31603,7 +31603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31633,7 +31633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31662,7 +31662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31692,7 +31692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31721,7 +31721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31751,7 +31751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31780,7 +31780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31810,7 +31810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31839,7 +31839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31869,7 +31869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31898,7 +31898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31928,7 +31928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31957,7 +31957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31987,7 +31987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32016,7 +32016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32046,7 +32046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32075,7 +32075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32105,7 +32105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32134,7 +32134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32164,7 +32164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32193,7 +32193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32223,7 +32223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32252,7 +32252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32282,7 +32282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32311,7 +32311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32341,7 +32341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32370,7 +32370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32400,7 +32400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32429,7 +32429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32459,7 +32459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32488,7 +32488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32518,7 +32518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32547,7 +32547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32577,7 +32577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32606,7 +32606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32636,7 +32636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32665,7 +32665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32695,7 +32695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32724,7 +32724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32754,7 +32754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32783,7 +32783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32813,7 +32813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32842,7 +32842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32872,7 +32872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32901,7 +32901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32931,7 +32931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32960,7 +32960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32990,7 +32990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33019,7 +33019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33049,7 +33049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33078,7 +33078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33108,7 +33108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33137,7 +33137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33167,7 +33167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33196,7 +33196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33226,7 +33226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33255,7 +33255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33285,7 +33285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33314,7 +33314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33344,7 +33344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33373,7 +33373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33403,7 +33403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33432,7 +33432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33462,7 +33462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33491,7 +33491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33521,7 +33521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33550,7 +33550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33580,7 +33580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33609,7 +33609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33639,7 +33639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33668,7 +33668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33698,7 +33698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33727,7 +33727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33757,7 +33757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33786,7 +33786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33816,7 +33816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33845,7 +33845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33875,7 +33875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33904,7 +33904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33934,7 +33934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33963,7 +33963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33993,7 +33993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34022,7 +34022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34052,7 +34052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34081,7 +34081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34111,7 +34111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34140,7 +34140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34170,7 +34170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34199,7 +34199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34229,7 +34229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34258,7 +34258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34287,7 +34287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34317,7 +34317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34346,7 +34346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34376,7 +34376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34406,7 +34406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34435,7 +34435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34465,7 +34465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34494,7 +34494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34524,7 +34524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34553,7 +34553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34583,7 +34583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34612,7 +34612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34642,7 +34642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34671,7 +34671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34701,7 +34701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34730,7 +34730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34760,7 +34760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34789,7 +34789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34819,7 +34819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json
index 4502679..79e8380 100644
--- a/testing/buildbot/chromium.perf.json
+++ b/testing/buildbot/chromium.perf.json
@@ -95,7 +95,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125,7 +125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154,7 +154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184,7 +184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -213,7 +213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -243,7 +243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -272,7 +272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -302,7 +302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -331,7 +331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -361,7 +361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -390,7 +390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -420,7 +420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -449,7 +449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -479,7 +479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -508,7 +508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -538,7 +538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -567,7 +567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -597,7 +597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -626,7 +626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -656,7 +656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -685,7 +685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -715,7 +715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -744,7 +744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -774,7 +774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -803,7 +803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -833,7 +833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -862,7 +862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -892,7 +892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -921,7 +921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -951,7 +951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -980,7 +980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1010,7 +1010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1039,7 +1039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1069,7 +1069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1098,7 +1098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1128,7 +1128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1157,7 +1157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1187,7 +1187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1216,7 +1216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1246,7 +1246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1275,7 +1275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1305,7 +1305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1334,7 +1334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1364,7 +1364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1393,7 +1393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1423,7 +1423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1452,7 +1452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1482,7 +1482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1511,7 +1511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1541,7 +1541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1570,7 +1570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1600,7 +1600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1629,7 +1629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1659,7 +1659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1688,7 +1688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1718,7 +1718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1747,7 +1747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1777,7 +1777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1806,7 +1806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1836,7 +1836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1865,7 +1865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1895,7 +1895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1924,7 +1924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1954,7 +1954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1983,7 +1983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2013,7 +2013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2042,7 +2042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2072,7 +2072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2101,7 +2101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2131,7 +2131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2160,7 +2160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2190,7 +2190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2219,7 +2219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2249,7 +2249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2278,7 +2278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2308,7 +2308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2337,7 +2337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2367,7 +2367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2396,7 +2396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2426,7 +2426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2455,7 +2455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2485,7 +2485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2514,7 +2514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2544,7 +2544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2573,7 +2573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2603,7 +2603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2632,7 +2632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2662,7 +2662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2682,7 +2682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2711,7 +2711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2741,7 +2741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2770,7 +2770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2800,7 +2800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2829,7 +2829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2859,7 +2859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2888,7 +2888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2918,7 +2918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2947,7 +2947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2977,7 +2977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3006,7 +3006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3036,7 +3036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3065,7 +3065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3095,7 +3095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3124,7 +3124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3154,7 +3154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3183,7 +3183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3213,7 +3213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3242,7 +3242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3272,7 +3272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3301,7 +3301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3331,7 +3331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3351,7 +3351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3380,7 +3380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3410,7 +3410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3439,7 +3439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3469,7 +3469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3498,7 +3498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3528,7 +3528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3557,7 +3557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3587,7 +3587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3616,7 +3616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3646,7 +3646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3675,7 +3675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3705,7 +3705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3734,7 +3734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3764,7 +3764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3793,7 +3793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3823,7 +3823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3852,7 +3852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3882,7 +3882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3911,7 +3911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3941,7 +3941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3970,7 +3970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4000,7 +4000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4029,7 +4029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4059,7 +4059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4088,7 +4088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4118,7 +4118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4147,7 +4147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4177,7 +4177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4206,7 +4206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4236,7 +4236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4265,7 +4265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4295,7 +4295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4324,7 +4324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4354,7 +4354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4383,7 +4383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4413,7 +4413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4442,7 +4442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4472,7 +4472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4501,7 +4501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4531,7 +4531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4560,7 +4560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4590,7 +4590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4619,7 +4619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4649,7 +4649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4678,7 +4678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4708,7 +4708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4737,7 +4737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4767,7 +4767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4796,7 +4796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4826,7 +4826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4855,7 +4855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4885,7 +4885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4914,7 +4914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4944,7 +4944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4973,7 +4973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5003,7 +5003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5032,7 +5032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5062,7 +5062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5091,7 +5091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5121,7 +5121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5150,7 +5150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5180,7 +5180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5209,7 +5209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5239,7 +5239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5268,7 +5268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5298,7 +5298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5327,7 +5327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5357,7 +5357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5386,7 +5386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5416,7 +5416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5445,7 +5445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5475,7 +5475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5504,7 +5504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5534,7 +5534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5563,7 +5563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5593,7 +5593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5622,7 +5622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5652,7 +5652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5681,7 +5681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5711,7 +5711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5740,7 +5740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5770,7 +5770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5799,7 +5799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5829,7 +5829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5858,7 +5858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5888,7 +5888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5917,7 +5917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5947,7 +5947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5976,7 +5976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6006,7 +6006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6035,7 +6035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6065,7 +6065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6094,7 +6094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6124,7 +6124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6153,7 +6153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6183,7 +6183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6212,7 +6212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6242,7 +6242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6271,7 +6271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6301,7 +6301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6330,7 +6330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6360,7 +6360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6389,7 +6389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6419,7 +6419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6448,7 +6448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6478,7 +6478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6507,7 +6507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6537,7 +6537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6566,7 +6566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6596,7 +6596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6625,7 +6625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6655,7 +6655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6684,7 +6684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6714,7 +6714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6743,7 +6743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6773,7 +6773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6802,7 +6802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6832,7 +6832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6861,7 +6861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6891,7 +6891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6920,7 +6920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6950,7 +6950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6979,7 +6979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7009,7 +7009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7038,7 +7038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7068,7 +7068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7097,7 +7097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7127,7 +7127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7156,7 +7156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7186,7 +7186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7215,7 +7215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7245,7 +7245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7274,7 +7274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7304,7 +7304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7333,7 +7333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7363,7 +7363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7392,7 +7392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7422,7 +7422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7451,7 +7451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7481,7 +7481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7510,7 +7510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7540,7 +7540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7569,7 +7569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7599,7 +7599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7628,7 +7628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7658,7 +7658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7687,7 +7687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7717,7 +7717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7746,7 +7746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7775,7 +7775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7805,7 +7805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7834,7 +7834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7864,7 +7864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7894,7 +7894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7923,7 +7923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7953,7 +7953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7982,7 +7982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8012,7 +8012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8041,7 +8041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8071,7 +8071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8100,7 +8100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8130,7 +8130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8159,7 +8159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8189,7 +8189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8218,7 +8218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8248,7 +8248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8277,7 +8277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8307,7 +8307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8336,7 +8336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8366,7 +8366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8395,7 +8395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8425,7 +8425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8454,7 +8454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8484,7 +8484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8513,7 +8513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8543,7 +8543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8572,7 +8572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8602,7 +8602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8631,7 +8631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8661,7 +8661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8690,7 +8690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8720,7 +8720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8749,7 +8749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8779,7 +8779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8808,7 +8808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8838,7 +8838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8867,7 +8867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8897,7 +8897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8926,7 +8926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8956,7 +8956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8985,7 +8985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9015,7 +9015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9044,7 +9044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9074,7 +9074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9103,7 +9103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9133,7 +9133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9162,7 +9162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9192,7 +9192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9221,7 +9221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9251,7 +9251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9280,7 +9280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9310,7 +9310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9339,7 +9339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9369,7 +9369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9398,7 +9398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9428,7 +9428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9457,7 +9457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9487,7 +9487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9516,7 +9516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9546,7 +9546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9575,7 +9575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9605,7 +9605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9634,7 +9634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9664,7 +9664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9693,7 +9693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9723,7 +9723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9752,7 +9752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9782,7 +9782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9802,7 +9802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9831,7 +9831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9861,7 +9861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9890,7 +9890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9920,7 +9920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9949,7 +9949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9979,7 +9979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10008,7 +10008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10038,7 +10038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10067,7 +10067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10097,7 +10097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10126,7 +10126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10156,7 +10156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10185,7 +10185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10215,7 +10215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10244,7 +10244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10274,7 +10274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10303,7 +10303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10333,7 +10333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10362,7 +10362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10392,7 +10392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10421,7 +10421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10451,7 +10451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10480,7 +10480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10510,7 +10510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10539,7 +10539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10569,7 +10569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10598,7 +10598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10628,7 +10628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10657,7 +10657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10687,7 +10687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10716,7 +10716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10746,7 +10746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10775,7 +10775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10805,7 +10805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10834,7 +10834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10864,7 +10864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10893,7 +10893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10923,7 +10923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10952,7 +10952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10982,7 +10982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11011,7 +11011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11041,7 +11041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11070,7 +11070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11100,7 +11100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11129,7 +11129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11158,7 +11158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11188,7 +11188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11217,7 +11217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11247,7 +11247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11277,7 +11277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11306,7 +11306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11336,7 +11336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11365,7 +11365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11395,7 +11395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11424,7 +11424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11454,7 +11454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11483,7 +11483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11513,7 +11513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11542,7 +11542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11572,7 +11572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11601,7 +11601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11631,7 +11631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11660,7 +11660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11690,7 +11690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -11723,7 +11723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11753,7 +11753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11782,7 +11782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11812,7 +11812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11841,7 +11841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11871,7 +11871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11900,7 +11900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11930,7 +11930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11959,7 +11959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11989,7 +11989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12018,7 +12018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12048,7 +12048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12077,7 +12077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12107,7 +12107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12136,7 +12136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12166,7 +12166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12195,7 +12195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12225,7 +12225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12254,7 +12254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12284,7 +12284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12313,7 +12313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12343,7 +12343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12372,7 +12372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12402,7 +12402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12431,7 +12431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12461,7 +12461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12490,7 +12490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12520,7 +12520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12549,7 +12549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12579,7 +12579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12608,7 +12608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12638,7 +12638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12667,7 +12667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12697,7 +12697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12726,7 +12726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12756,7 +12756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12785,7 +12785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12815,7 +12815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12844,7 +12844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12874,7 +12874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12903,7 +12903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12933,7 +12933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12962,7 +12962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12992,7 +12992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13021,7 +13021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13051,7 +13051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13080,7 +13080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13110,7 +13110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13139,7 +13139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13169,7 +13169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13198,7 +13198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13228,7 +13228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13257,7 +13257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13287,7 +13287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13316,7 +13316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13346,7 +13346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13375,7 +13375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13405,7 +13405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13434,7 +13434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13464,7 +13464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13493,7 +13493,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13523,7 +13523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13552,7 +13552,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13582,7 +13582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13611,7 +13611,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13641,7 +13641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13670,7 +13670,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13700,7 +13700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13729,7 +13729,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13759,7 +13759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13788,7 +13788,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13818,7 +13818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13847,7 +13847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13877,7 +13877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13906,7 +13906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13936,7 +13936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13965,7 +13965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13995,7 +13995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14024,7 +14024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14054,7 +14054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14083,7 +14083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14113,7 +14113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14142,7 +14142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14172,7 +14172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14201,7 +14201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14231,7 +14231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14260,7 +14260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14290,7 +14290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14319,7 +14319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14349,7 +14349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14378,7 +14378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14408,7 +14408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14437,7 +14437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14467,7 +14467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14496,7 +14496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14526,7 +14526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14555,7 +14555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14585,7 +14585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14614,7 +14614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14644,7 +14644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14673,7 +14673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14703,7 +14703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14732,7 +14732,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14762,7 +14762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14791,7 +14791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14821,7 +14821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14850,7 +14850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14880,7 +14880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14909,7 +14909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14939,7 +14939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14959,7 +14959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14988,7 +14988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15018,7 +15018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15047,7 +15047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15077,7 +15077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15106,7 +15106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15136,7 +15136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15165,7 +15165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15195,7 +15195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15224,7 +15224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15254,7 +15254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15283,7 +15283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15313,7 +15313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15342,7 +15342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15372,7 +15372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15401,7 +15401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15431,7 +15431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15460,7 +15460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15490,7 +15490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15519,7 +15519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15549,7 +15549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15578,7 +15578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15608,7 +15608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15637,7 +15637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15667,7 +15667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15696,7 +15696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15726,7 +15726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15755,7 +15755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15785,7 +15785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15814,7 +15814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15844,7 +15844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15873,7 +15873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15903,7 +15903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15932,7 +15932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15962,7 +15962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15991,7 +15991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16021,7 +16021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16050,7 +16050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16080,7 +16080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16109,7 +16109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16139,7 +16139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16168,7 +16168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16198,7 +16198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16227,7 +16227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16257,7 +16257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16286,7 +16286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16316,7 +16316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16345,7 +16345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16375,7 +16375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16404,7 +16404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16434,7 +16434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16463,7 +16463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16493,7 +16493,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16522,7 +16522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16552,7 +16552,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16581,7 +16581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16611,7 +16611,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16640,7 +16640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16670,7 +16670,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16699,7 +16699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16729,7 +16729,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16758,7 +16758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16788,7 +16788,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16817,7 +16817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16847,7 +16847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16876,7 +16876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16906,7 +16906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16935,7 +16935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16965,7 +16965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16994,7 +16994,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17024,7 +17024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17053,7 +17053,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17083,7 +17083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17112,7 +17112,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17142,7 +17142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17171,7 +17171,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17201,7 +17201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17230,7 +17230,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17260,7 +17260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17289,7 +17289,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17319,7 +17319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17348,7 +17348,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17378,7 +17378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17407,7 +17407,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17437,7 +17437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17466,7 +17466,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17496,7 +17496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17525,7 +17525,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17555,7 +17555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17584,7 +17584,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17614,7 +17614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17643,7 +17643,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17673,7 +17673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17702,7 +17702,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17732,7 +17732,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17761,7 +17761,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17791,7 +17791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17820,7 +17820,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17850,7 +17850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17879,7 +17879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17909,7 +17909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17938,7 +17938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17968,7 +17968,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17997,7 +17997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18027,7 +18027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18056,7 +18056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18086,7 +18086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18115,7 +18115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18145,7 +18145,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18174,7 +18174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18204,7 +18204,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18233,7 +18233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18263,7 +18263,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18292,7 +18292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18322,7 +18322,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18351,7 +18351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18381,7 +18381,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18410,7 +18410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18440,7 +18440,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18469,7 +18469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18499,7 +18499,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18528,7 +18528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18558,7 +18558,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18587,7 +18587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18617,7 +18617,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18646,7 +18646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18676,7 +18676,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18705,7 +18705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18735,7 +18735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18764,7 +18764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18794,7 +18794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18823,7 +18823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18853,7 +18853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18882,7 +18882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18912,7 +18912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18941,7 +18941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18971,7 +18971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19000,7 +19000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19030,7 +19030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19059,7 +19059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19089,7 +19089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19118,7 +19118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19148,7 +19148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19177,7 +19177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19207,7 +19207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19236,7 +19236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19266,7 +19266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19295,7 +19295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19325,7 +19325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19354,7 +19354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19383,7 +19383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19413,7 +19413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19442,7 +19442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19472,7 +19472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19502,7 +19502,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19531,7 +19531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19561,7 +19561,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19590,7 +19590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19620,7 +19620,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19649,7 +19649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19679,7 +19679,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19708,7 +19708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19738,7 +19738,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19767,7 +19767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19797,7 +19797,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19826,7 +19826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19856,7 +19856,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19885,7 +19885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19915,7 +19915,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19944,7 +19944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19974,7 +19974,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20003,7 +20003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20033,7 +20033,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20062,7 +20062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20092,7 +20092,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20121,7 +20121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20151,7 +20151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20180,7 +20180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20210,7 +20210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20239,7 +20239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20269,7 +20269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20298,7 +20298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20328,7 +20328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20357,7 +20357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20387,7 +20387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20416,7 +20416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20446,7 +20446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20475,7 +20475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20505,7 +20505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20534,7 +20534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20564,7 +20564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20593,7 +20593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20623,7 +20623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20652,7 +20652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20682,7 +20682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20711,7 +20711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20741,7 +20741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20770,7 +20770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20800,7 +20800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20829,7 +20829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20859,7 +20859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20888,7 +20888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20918,7 +20918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20947,7 +20947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20977,7 +20977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21006,7 +21006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21036,7 +21036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21065,7 +21065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21095,7 +21095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21124,7 +21124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21154,7 +21154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21183,7 +21183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21213,7 +21213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21242,7 +21242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21272,7 +21272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21301,7 +21301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21331,7 +21331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21360,7 +21360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21390,7 +21390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21419,7 +21419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21449,7 +21449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21478,7 +21478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21508,7 +21508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21537,7 +21537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21567,7 +21567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21596,7 +21596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21626,7 +21626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21655,7 +21655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21685,7 +21685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21714,7 +21714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21744,7 +21744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21773,7 +21773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21803,7 +21803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21832,7 +21832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21862,7 +21862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21891,7 +21891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21921,7 +21921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21950,7 +21950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21980,7 +21980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22009,7 +22009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22039,7 +22039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22068,7 +22068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22098,7 +22098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22127,7 +22127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22157,7 +22157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22186,7 +22186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22216,7 +22216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22245,7 +22245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22275,7 +22275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22304,7 +22304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22334,7 +22334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22363,7 +22363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22393,7 +22393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22422,7 +22422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22452,7 +22452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22481,7 +22481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22511,7 +22511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22540,7 +22540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22570,7 +22570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22599,7 +22599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22629,7 +22629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22658,7 +22658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22688,7 +22688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22717,7 +22717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22746,7 +22746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22776,7 +22776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22805,7 +22805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22835,7 +22835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22865,7 +22865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22894,7 +22894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22924,7 +22924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22953,7 +22953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22983,7 +22983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23012,7 +23012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23042,7 +23042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23071,7 +23071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23101,7 +23101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23130,7 +23130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23160,7 +23160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23189,7 +23189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23219,7 +23219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23248,7 +23248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23278,7 +23278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -23311,7 +23311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23341,7 +23341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23370,7 +23370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23400,7 +23400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23429,7 +23429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23459,7 +23459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23488,7 +23488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23518,7 +23518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23547,7 +23547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23577,7 +23577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23606,7 +23606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23636,7 +23636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23665,7 +23665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23695,7 +23695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23724,7 +23724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23754,7 +23754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23783,7 +23783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23813,7 +23813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23842,7 +23842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23872,7 +23872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23901,7 +23901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23931,7 +23931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23960,7 +23960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23990,7 +23990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24019,7 +24019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24049,7 +24049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24078,7 +24078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24108,7 +24108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24137,7 +24137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24167,7 +24167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24196,7 +24196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24226,7 +24226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24255,7 +24255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24285,7 +24285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24314,7 +24314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24344,7 +24344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24373,7 +24373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24403,7 +24403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24432,7 +24432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24462,7 +24462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24491,7 +24491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24521,7 +24521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24550,7 +24550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24580,7 +24580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24609,7 +24609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24639,7 +24639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24668,7 +24668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24698,7 +24698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24727,7 +24727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24757,7 +24757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24786,7 +24786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24816,7 +24816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24845,7 +24845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24875,7 +24875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24904,7 +24904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24934,7 +24934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24963,7 +24963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24993,7 +24993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25022,7 +25022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25052,7 +25052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25081,7 +25081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25111,7 +25111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25140,7 +25140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25170,7 +25170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25199,7 +25199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25229,7 +25229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25258,7 +25258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25288,7 +25288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25317,7 +25317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25347,7 +25347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25376,7 +25376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25406,7 +25406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25435,7 +25435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25465,7 +25465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25494,7 +25494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25524,7 +25524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25553,7 +25553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25583,7 +25583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25612,7 +25612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25642,7 +25642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25671,7 +25671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25701,7 +25701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25730,7 +25730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25760,7 +25760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25789,7 +25789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25819,7 +25819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25848,7 +25848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25878,7 +25878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25907,7 +25907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25937,7 +25937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25966,7 +25966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25996,7 +25996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26025,7 +26025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26055,7 +26055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26084,7 +26084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26114,7 +26114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26143,7 +26143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26173,7 +26173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26202,7 +26202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26232,7 +26232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26261,7 +26261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26291,7 +26291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26320,7 +26320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26350,7 +26350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26379,7 +26379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26409,7 +26409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26438,7 +26438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26468,7 +26468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26497,7 +26497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26527,7 +26527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26556,7 +26556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26586,7 +26586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26615,7 +26615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26645,7 +26645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26674,7 +26674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26704,7 +26704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26733,7 +26733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26763,7 +26763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26792,7 +26792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26822,7 +26822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26851,7 +26851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26881,7 +26881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26910,7 +26910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26940,7 +26940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26969,7 +26969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26999,7 +26999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27028,7 +27028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27058,7 +27058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27087,7 +27087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27117,7 +27117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27146,7 +27146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27176,7 +27176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27205,7 +27205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27235,7 +27235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27264,7 +27264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27294,7 +27294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27323,7 +27323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27353,7 +27353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27382,7 +27382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27412,7 +27412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27441,7 +27441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27471,7 +27471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27500,7 +27500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27530,7 +27530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27559,7 +27559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27589,7 +27589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27618,7 +27618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27648,7 +27648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27677,7 +27677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27707,7 +27707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27736,7 +27736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27766,7 +27766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27795,7 +27795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27825,7 +27825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27854,7 +27854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27884,7 +27884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27913,7 +27913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27943,7 +27943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27972,7 +27972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28002,7 +28002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28031,7 +28031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28061,7 +28061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28090,7 +28090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28120,7 +28120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28149,7 +28149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28179,7 +28179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28208,7 +28208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28238,7 +28238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28267,7 +28267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28297,7 +28297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28326,7 +28326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28356,7 +28356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28385,7 +28385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28415,7 +28415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28444,7 +28444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28474,7 +28474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28503,7 +28503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28533,7 +28533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28562,7 +28562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28592,7 +28592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28621,7 +28621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28651,7 +28651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28680,7 +28680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28710,7 +28710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28739,7 +28739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28769,7 +28769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28798,7 +28798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28828,7 +28828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28857,7 +28857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28887,7 +28887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28916,7 +28916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28946,7 +28946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28975,7 +28975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29005,7 +29005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29034,7 +29034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29064,7 +29064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29093,7 +29093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29123,7 +29123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29152,7 +29152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29182,7 +29182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29211,7 +29211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29241,7 +29241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29270,7 +29270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29300,7 +29300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29329,7 +29329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29359,7 +29359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29388,7 +29388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29418,7 +29418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29447,7 +29447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29477,7 +29477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29506,7 +29506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29536,7 +29536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29565,7 +29565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29595,7 +29595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29624,7 +29624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29654,7 +29654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29683,7 +29683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29713,7 +29713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29742,7 +29742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29772,7 +29772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29801,7 +29801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29831,7 +29831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29860,7 +29860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29890,7 +29890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29919,7 +29919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29949,7 +29949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29978,7 +29978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30008,7 +30008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30037,7 +30037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30067,7 +30067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30096,7 +30096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30126,7 +30126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30155,7 +30155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30185,7 +30185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30214,7 +30214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30244,7 +30244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30273,7 +30273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30303,7 +30303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30332,7 +30332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30362,7 +30362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30391,7 +30391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30421,7 +30421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30450,7 +30450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30480,7 +30480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30509,7 +30509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30539,7 +30539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30568,7 +30568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30598,7 +30598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30627,7 +30627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30657,7 +30657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30686,7 +30686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30716,7 +30716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30745,7 +30745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30775,7 +30775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30804,7 +30804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30834,7 +30834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30863,7 +30863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30893,7 +30893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30922,7 +30922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30951,7 +30951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30981,7 +30981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31010,7 +31010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31040,7 +31040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31070,7 +31070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31099,7 +31099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31129,7 +31129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31158,7 +31158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31188,7 +31188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31217,7 +31217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31247,7 +31247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31276,7 +31276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31306,7 +31306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31335,7 +31335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31365,7 +31365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31394,7 +31394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31424,7 +31424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31453,7 +31453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31483,7 +31483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31512,7 +31512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31542,7 +31542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31571,7 +31571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31601,7 +31601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31630,7 +31630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31660,7 +31660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31689,7 +31689,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31719,7 +31719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31748,7 +31748,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31778,7 +31778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31807,7 +31807,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31837,7 +31837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31866,7 +31866,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31896,7 +31896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31925,7 +31925,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31955,7 +31955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31984,7 +31984,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32014,7 +32014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32043,7 +32043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32073,7 +32073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32102,7 +32102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32132,7 +32132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32161,7 +32161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32191,7 +32191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32220,7 +32220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32250,7 +32250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32279,7 +32279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32309,7 +32309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32338,7 +32338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32368,7 +32368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32397,7 +32397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32427,7 +32427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32456,7 +32456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32486,7 +32486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32515,7 +32515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32545,7 +32545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32574,7 +32574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32604,7 +32604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32633,7 +32633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32663,7 +32663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32692,7 +32692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32722,7 +32722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32751,7 +32751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32781,7 +32781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32810,7 +32810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32840,7 +32840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32869,7 +32869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32899,7 +32899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32928,7 +32928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32958,7 +32958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32987,7 +32987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33017,7 +33017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33046,7 +33046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33076,7 +33076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33105,7 +33105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33135,7 +33135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33164,7 +33164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33194,7 +33194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33223,7 +33223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33253,7 +33253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33282,7 +33282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33312,7 +33312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33341,7 +33341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33371,7 +33371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33400,7 +33400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33430,7 +33430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33459,7 +33459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33489,7 +33489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33518,7 +33518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33548,7 +33548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33577,7 +33577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33607,7 +33607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33636,7 +33636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33666,7 +33666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33695,7 +33695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33725,7 +33725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33754,7 +33754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33784,7 +33784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33813,7 +33813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33843,7 +33843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33872,7 +33872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33902,7 +33902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33931,7 +33931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33961,7 +33961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33990,7 +33990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34020,7 +34020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34049,7 +34049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34079,7 +34079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34108,7 +34108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34138,7 +34138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34167,7 +34167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34197,7 +34197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34226,7 +34226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34256,7 +34256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34285,7 +34285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34314,7 +34314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34344,7 +34344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34373,7 +34373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34403,7 +34403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34433,7 +34433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34462,7 +34462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34492,7 +34492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34521,7 +34521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34551,7 +34551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34580,7 +34580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34610,7 +34610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34639,7 +34639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34669,7 +34669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34698,7 +34698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34728,7 +34728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34757,7 +34757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34787,7 +34787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34816,7 +34816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34846,7 +34846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -34879,7 +34879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34909,7 +34909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34938,7 +34938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34968,7 +34968,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34997,7 +34997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35027,7 +35027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35056,7 +35056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35086,7 +35086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35115,7 +35115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35145,7 +35145,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35174,7 +35174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35204,7 +35204,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35233,7 +35233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35263,7 +35263,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35292,7 +35292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35322,7 +35322,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35351,7 +35351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35381,7 +35381,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35410,7 +35410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35440,7 +35440,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35469,7 +35469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35499,7 +35499,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35528,7 +35528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35558,7 +35558,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35587,7 +35587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35617,7 +35617,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35646,7 +35646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35676,7 +35676,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35705,7 +35705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35735,7 +35735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35764,7 +35764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35794,7 +35794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35823,7 +35823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35853,7 +35853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35882,7 +35882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35912,7 +35912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35941,7 +35941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35971,7 +35971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36000,7 +36000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36030,7 +36030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36059,7 +36059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36089,7 +36089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36118,7 +36118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36148,7 +36148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36177,7 +36177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36207,7 +36207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36236,7 +36236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36266,7 +36266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36295,7 +36295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36325,7 +36325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36354,7 +36354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36384,7 +36384,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36413,7 +36413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36443,7 +36443,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36472,7 +36472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36502,7 +36502,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36531,7 +36531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36561,7 +36561,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36590,7 +36590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36620,7 +36620,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36649,7 +36649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36679,7 +36679,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36708,7 +36708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36738,7 +36738,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36767,7 +36767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36797,7 +36797,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36826,7 +36826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36856,7 +36856,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36885,7 +36885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36915,7 +36915,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36944,7 +36944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36974,7 +36974,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37003,7 +37003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37033,7 +37033,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37062,7 +37062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37092,7 +37092,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37121,7 +37121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37151,7 +37151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37180,7 +37180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37210,7 +37210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37239,7 +37239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37269,7 +37269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37298,7 +37298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37328,7 +37328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37357,7 +37357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37387,7 +37387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37416,7 +37416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37446,7 +37446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37475,7 +37475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37505,7 +37505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37534,7 +37534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37564,7 +37564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37593,7 +37593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37623,7 +37623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37652,7 +37652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37682,7 +37682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37711,7 +37711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37741,7 +37741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37770,7 +37770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37800,7 +37800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37829,7 +37829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37859,7 +37859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37888,7 +37888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37918,7 +37918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37947,7 +37947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37977,7 +37977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38006,7 +38006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38036,7 +38036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38065,7 +38065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38095,7 +38095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38124,7 +38124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38154,7 +38154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38183,7 +38183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38213,7 +38213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38242,7 +38242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38272,7 +38272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38301,7 +38301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38331,7 +38331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38360,7 +38360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38390,7 +38390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38419,7 +38419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38449,7 +38449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38478,7 +38478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38508,7 +38508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38537,7 +38537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38567,7 +38567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38596,7 +38596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38626,7 +38626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38655,7 +38655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38685,7 +38685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38714,7 +38714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38744,7 +38744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38773,7 +38773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38803,7 +38803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38832,7 +38832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38862,7 +38862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38891,7 +38891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38921,7 +38921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38950,7 +38950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38980,7 +38980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39009,7 +39009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39039,7 +39039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39068,7 +39068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39098,7 +39098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39127,7 +39127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39157,7 +39157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39186,7 +39186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39216,7 +39216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39245,7 +39245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39275,7 +39275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39304,7 +39304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39334,7 +39334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39363,7 +39363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39393,7 +39393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39422,7 +39422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39452,7 +39452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39481,7 +39481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39511,7 +39511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39540,7 +39540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39570,7 +39570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39599,7 +39599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39629,7 +39629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39658,7 +39658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39688,7 +39688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39717,7 +39717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39747,7 +39747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39776,7 +39776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39806,7 +39806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39835,7 +39835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39865,7 +39865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39894,7 +39894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39924,7 +39924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39953,7 +39953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39983,7 +39983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40012,7 +40012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40042,7 +40042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40071,7 +40071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40101,7 +40101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40130,7 +40130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40160,7 +40160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40189,7 +40189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40219,7 +40219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40248,7 +40248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40278,7 +40278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40307,7 +40307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40337,7 +40337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40366,7 +40366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40396,7 +40396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40425,7 +40425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40455,7 +40455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40484,7 +40484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40514,7 +40514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40543,7 +40543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40573,7 +40573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40602,7 +40602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40632,7 +40632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40661,7 +40661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40691,7 +40691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40720,7 +40720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40750,7 +40750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40779,7 +40779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40809,7 +40809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40838,7 +40838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40868,7 +40868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40897,7 +40897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40927,7 +40927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40956,7 +40956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40986,7 +40986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41015,7 +41015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41045,7 +41045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41074,7 +41074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41104,7 +41104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41133,7 +41133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41163,7 +41163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41192,7 +41192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41222,7 +41222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41251,7 +41251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41281,7 +41281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41310,7 +41310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41340,7 +41340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41369,7 +41369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41399,7 +41399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41428,7 +41428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41458,7 +41458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41487,7 +41487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41517,7 +41517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41546,7 +41546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41576,7 +41576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41605,7 +41605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41635,7 +41635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41664,7 +41664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41694,7 +41694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41723,7 +41723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41753,7 +41753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41782,7 +41782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41812,7 +41812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41841,7 +41841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41871,7 +41871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41900,7 +41900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41930,7 +41930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41959,7 +41959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41989,7 +41989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42018,7 +42018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42048,7 +42048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42077,7 +42077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42107,7 +42107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42136,7 +42136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42166,7 +42166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42195,7 +42195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42225,7 +42225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42254,7 +42254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42284,7 +42284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42313,7 +42313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42343,7 +42343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42372,7 +42372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42402,7 +42402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42431,7 +42431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42461,7 +42461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42490,7 +42490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42519,7 +42519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42549,7 +42549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42578,7 +42578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42608,7 +42608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42638,7 +42638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42667,7 +42667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42697,7 +42697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42726,7 +42726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42756,7 +42756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42785,7 +42785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42815,7 +42815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42844,7 +42844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42874,7 +42874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42903,7 +42903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42933,7 +42933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42962,7 +42962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42992,7 +42992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43021,7 +43021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43051,7 +43051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43080,7 +43080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43110,7 +43110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43139,7 +43139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43169,7 +43169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43198,7 +43198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43228,7 +43228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43257,7 +43257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43287,7 +43287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43316,7 +43316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43346,7 +43346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43375,7 +43375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43405,7 +43405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43434,7 +43434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43464,7 +43464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43493,7 +43493,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43523,7 +43523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43552,7 +43552,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43582,7 +43582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43611,7 +43611,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43641,7 +43641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43670,7 +43670,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43700,7 +43700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43729,7 +43729,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43759,7 +43759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43788,7 +43788,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43818,7 +43818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43847,7 +43847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43877,7 +43877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43906,7 +43906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43936,7 +43936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43965,7 +43965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43995,7 +43995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44024,7 +44024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44054,7 +44054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44083,7 +44083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44113,7 +44113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44142,7 +44142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44172,7 +44172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44201,7 +44201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44231,7 +44231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44260,7 +44260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44290,7 +44290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44319,7 +44319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44349,7 +44349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44378,7 +44378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44408,7 +44408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44437,7 +44437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44467,7 +44467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44496,7 +44496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44526,7 +44526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44555,7 +44555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44585,7 +44585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44614,7 +44614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44644,7 +44644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44673,7 +44673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44703,7 +44703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44732,7 +44732,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44762,7 +44762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44791,7 +44791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44821,7 +44821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44850,7 +44850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44880,7 +44880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44909,7 +44909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44939,7 +44939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44968,7 +44968,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44998,7 +44998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45027,7 +45027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45057,7 +45057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45086,7 +45086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45116,7 +45116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45145,7 +45145,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45175,7 +45175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45204,7 +45204,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45234,7 +45234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45263,7 +45263,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45293,7 +45293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45322,7 +45322,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45352,7 +45352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45381,7 +45381,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45411,7 +45411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45440,7 +45440,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45470,7 +45470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45499,7 +45499,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45529,7 +45529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45558,7 +45558,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45588,7 +45588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45617,7 +45617,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45647,7 +45647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45676,7 +45676,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45706,7 +45706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45735,7 +45735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45765,7 +45765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45794,7 +45794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45824,7 +45824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45853,7 +45853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45882,7 +45882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45912,7 +45912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45941,7 +45941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45971,7 +45971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46001,7 +46001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46030,7 +46030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46060,7 +46060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46089,7 +46089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46119,7 +46119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46148,7 +46148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46178,7 +46178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46207,7 +46207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46237,7 +46237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46266,7 +46266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46296,7 +46296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46325,7 +46325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46355,7 +46355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46384,7 +46384,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46414,7 +46414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -46447,7 +46447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46477,7 +46477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46506,7 +46506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46536,7 +46536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46565,7 +46565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46595,7 +46595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46624,7 +46624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46654,7 +46654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46683,7 +46683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46713,7 +46713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46742,7 +46742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46772,7 +46772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46801,7 +46801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46831,7 +46831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46860,7 +46860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46890,7 +46890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46919,7 +46919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46949,7 +46949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46978,7 +46978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47008,7 +47008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47037,7 +47037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47067,7 +47067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47096,7 +47096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47126,7 +47126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47155,7 +47155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47185,7 +47185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47214,7 +47214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47244,7 +47244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47273,7 +47273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47303,7 +47303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47332,7 +47332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47362,7 +47362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47391,7 +47391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47421,7 +47421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47450,7 +47450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47480,7 +47480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47509,7 +47509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47539,7 +47539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47568,7 +47568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47598,7 +47598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47627,7 +47627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47657,7 +47657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47686,7 +47686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47716,7 +47716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47745,7 +47745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47775,7 +47775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47804,7 +47804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47834,7 +47834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47863,7 +47863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47893,7 +47893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47922,7 +47922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47952,7 +47952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47981,7 +47981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48011,7 +48011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48040,7 +48040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48070,7 +48070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48099,7 +48099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48129,7 +48129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48158,7 +48158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48188,7 +48188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48217,7 +48217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48247,7 +48247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48276,7 +48276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48306,7 +48306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48335,7 +48335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48365,7 +48365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48394,7 +48394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48424,7 +48424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48453,7 +48453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48483,7 +48483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48512,7 +48512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48542,7 +48542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48571,7 +48571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48601,7 +48601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48630,7 +48630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48660,7 +48660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48689,7 +48689,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48719,7 +48719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48748,7 +48748,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48778,7 +48778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48807,7 +48807,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48837,7 +48837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48866,7 +48866,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48896,7 +48896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48925,7 +48925,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48955,7 +48955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48984,7 +48984,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49014,7 +49014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49043,7 +49043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49073,7 +49073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49102,7 +49102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49132,7 +49132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49161,7 +49161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49191,7 +49191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49220,7 +49220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49250,7 +49250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49279,7 +49279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49309,7 +49309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49338,7 +49338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49368,7 +49368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49397,7 +49397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49427,7 +49427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49456,7 +49456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49486,7 +49486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49515,7 +49515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49545,7 +49545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49574,7 +49574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49604,7 +49604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49633,7 +49633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49663,7 +49663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49692,7 +49692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49722,7 +49722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49751,7 +49751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49781,7 +49781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49810,7 +49810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49840,7 +49840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49869,7 +49869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49899,7 +49899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49928,7 +49928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49958,7 +49958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49987,7 +49987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50017,7 +50017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50046,7 +50046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50076,7 +50076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50105,7 +50105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50135,7 +50135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50164,7 +50164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50194,7 +50194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50223,7 +50223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50253,7 +50253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50282,7 +50282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50312,7 +50312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50341,7 +50341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50371,7 +50371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50400,7 +50400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50430,7 +50430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50459,7 +50459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50489,7 +50489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50518,7 +50518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50548,7 +50548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50577,7 +50577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50607,7 +50607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50636,7 +50636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50666,7 +50666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50695,7 +50695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50725,7 +50725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50754,7 +50754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50784,7 +50784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50813,7 +50813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50843,7 +50843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50872,7 +50872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50902,7 +50902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50931,7 +50931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50961,7 +50961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50990,7 +50990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51020,7 +51020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51049,7 +51049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51079,7 +51079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51108,7 +51108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51138,7 +51138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51167,7 +51167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51197,7 +51197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51226,7 +51226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51256,7 +51256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51285,7 +51285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51315,7 +51315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51344,7 +51344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51374,7 +51374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51403,7 +51403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51433,7 +51433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51462,7 +51462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51492,7 +51492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51521,7 +51521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51551,7 +51551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51580,7 +51580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51610,7 +51610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51639,7 +51639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51669,7 +51669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51698,7 +51698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51728,7 +51728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51757,7 +51757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51787,7 +51787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51816,7 +51816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51846,7 +51846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51875,7 +51875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51905,7 +51905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51934,7 +51934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51964,7 +51964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51993,7 +51993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52023,7 +52023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52052,7 +52052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52082,7 +52082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52111,7 +52111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52141,7 +52141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52170,7 +52170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52200,7 +52200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52229,7 +52229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52259,7 +52259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52288,7 +52288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52318,7 +52318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52347,7 +52347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52377,7 +52377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52406,7 +52406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52436,7 +52436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52465,7 +52465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52495,7 +52495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52524,7 +52524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52554,7 +52554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52583,7 +52583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52613,7 +52613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52642,7 +52642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52672,7 +52672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52701,7 +52701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52731,7 +52731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52760,7 +52760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52790,7 +52790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52819,7 +52819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52849,7 +52849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52878,7 +52878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52908,7 +52908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52937,7 +52937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52967,7 +52967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52996,7 +52996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53026,7 +53026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53055,7 +53055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53085,7 +53085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53114,7 +53114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53144,7 +53144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53173,7 +53173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53203,7 +53203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53232,7 +53232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53262,7 +53262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53291,7 +53291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53321,7 +53321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53350,7 +53350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53380,7 +53380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53409,7 +53409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53439,7 +53439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53468,7 +53468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53498,7 +53498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53527,7 +53527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53557,7 +53557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53586,7 +53586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53616,7 +53616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53645,7 +53645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53675,7 +53675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53704,7 +53704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53734,7 +53734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53763,7 +53763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53793,7 +53793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53822,7 +53822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53852,7 +53852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53881,7 +53881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53911,7 +53911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53940,7 +53940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53970,7 +53970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53999,7 +53999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54029,7 +54029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54058,7 +54058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54087,7 +54087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54117,7 +54117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54146,7 +54146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54176,7 +54176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54206,7 +54206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54235,7 +54235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54265,7 +54265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54294,7 +54294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54324,7 +54324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54353,7 +54353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54383,7 +54383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54412,7 +54412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54442,7 +54442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54471,7 +54471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54501,7 +54501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54530,7 +54530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54560,7 +54560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54589,7 +54589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54619,7 +54619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54648,7 +54648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54678,7 +54678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54707,7 +54707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54737,7 +54737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54766,7 +54766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54796,7 +54796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54825,7 +54825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54855,7 +54855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54884,7 +54884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54914,7 +54914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54943,7 +54943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54973,7 +54973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55002,7 +55002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55032,7 +55032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55061,7 +55061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55091,7 +55091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55120,7 +55120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55150,7 +55150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55179,7 +55179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55209,7 +55209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55238,7 +55238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55268,7 +55268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55297,7 +55297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55327,7 +55327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55356,7 +55356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55386,7 +55386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55415,7 +55415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55445,7 +55445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55474,7 +55474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55504,7 +55504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55533,7 +55533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55563,7 +55563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55592,7 +55592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55622,7 +55622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55651,7 +55651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55681,7 +55681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55710,7 +55710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55740,7 +55740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55769,7 +55769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55799,7 +55799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55828,7 +55828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55858,7 +55858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55887,7 +55887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55917,7 +55917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55946,7 +55946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55976,7 +55976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56005,7 +56005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56035,7 +56035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56064,7 +56064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56094,7 +56094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56123,7 +56123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56153,7 +56153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56182,7 +56182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56212,7 +56212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56241,7 +56241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56271,7 +56271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56300,7 +56300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56330,7 +56330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56359,7 +56359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56389,7 +56389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56418,7 +56418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56448,7 +56448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56477,7 +56477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56507,7 +56507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56536,7 +56536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56566,7 +56566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56595,7 +56595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56625,7 +56625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56654,7 +56654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56684,7 +56684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56713,7 +56713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56743,7 +56743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56772,7 +56772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56802,7 +56802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56831,7 +56831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56861,7 +56861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56890,7 +56890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56920,7 +56920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56949,7 +56949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56979,7 +56979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57008,7 +57008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57038,7 +57038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57067,7 +57067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57097,7 +57097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57126,7 +57126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57156,7 +57156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57185,7 +57185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57215,7 +57215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57244,7 +57244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57274,7 +57274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57303,7 +57303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57333,7 +57333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57362,7 +57362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57392,7 +57392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57421,7 +57421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57450,7 +57450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57480,7 +57480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57509,7 +57509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57539,7 +57539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57569,7 +57569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57598,7 +57598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57628,7 +57628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57657,7 +57657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57687,7 +57687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57716,7 +57716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57746,7 +57746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57775,7 +57775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57805,7 +57805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57834,7 +57834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57864,7 +57864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57893,7 +57893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57923,7 +57923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57952,7 +57952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57982,7 +57982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -58015,7 +58015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58045,7 +58045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58074,7 +58074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58104,7 +58104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58133,7 +58133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58163,7 +58163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58192,7 +58192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58222,7 +58222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58251,7 +58251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58281,7 +58281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58310,7 +58310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58340,7 +58340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58369,7 +58369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58399,7 +58399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58428,7 +58428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58458,7 +58458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58487,7 +58487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58517,7 +58517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58546,7 +58546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58576,7 +58576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58605,7 +58605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58635,7 +58635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58664,7 +58664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58694,7 +58694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58723,7 +58723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58753,7 +58753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58782,7 +58782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58812,7 +58812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58841,7 +58841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58871,7 +58871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58900,7 +58900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58930,7 +58930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58959,7 +58959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58989,7 +58989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59018,7 +59018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59048,7 +59048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59077,7 +59077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59107,7 +59107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59136,7 +59136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59166,7 +59166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59195,7 +59195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59225,7 +59225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59254,7 +59254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59284,7 +59284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59313,7 +59313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59343,7 +59343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59372,7 +59372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59402,7 +59402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59431,7 +59431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59461,7 +59461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59490,7 +59490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59520,7 +59520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59549,7 +59549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59579,7 +59579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59608,7 +59608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59638,7 +59638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59667,7 +59667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59697,7 +59697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59726,7 +59726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59756,7 +59756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59785,7 +59785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59815,7 +59815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59844,7 +59844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59874,7 +59874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59903,7 +59903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59933,7 +59933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59962,7 +59962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59992,7 +59992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60021,7 +60021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60051,7 +60051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60080,7 +60080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60110,7 +60110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60139,7 +60139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60169,7 +60169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60198,7 +60198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60228,7 +60228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60257,7 +60257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60287,7 +60287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60316,7 +60316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60346,7 +60346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60375,7 +60375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60405,7 +60405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60434,7 +60434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60464,7 +60464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60493,7 +60493,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60523,7 +60523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60552,7 +60552,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60582,7 +60582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60611,7 +60611,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60641,7 +60641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60670,7 +60670,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60700,7 +60700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60729,7 +60729,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60759,7 +60759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60788,7 +60788,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60818,7 +60818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60847,7 +60847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60877,7 +60877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60906,7 +60906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60936,7 +60936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60965,7 +60965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60995,7 +60995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61024,7 +61024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61054,7 +61054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61083,7 +61083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61113,7 +61113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61142,7 +61142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61172,7 +61172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61201,7 +61201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61231,7 +61231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61260,7 +61260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61290,7 +61290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61319,7 +61319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61349,7 +61349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61378,7 +61378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61408,7 +61408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61437,7 +61437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61467,7 +61467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61496,7 +61496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61526,7 +61526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61555,7 +61555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61585,7 +61585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61614,7 +61614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61644,7 +61644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61673,7 +61673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61703,7 +61703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61732,7 +61732,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61762,7 +61762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61791,7 +61791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61821,7 +61821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61850,7 +61850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61880,7 +61880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61909,7 +61909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61939,7 +61939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61968,7 +61968,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61998,7 +61998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62027,7 +62027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62057,7 +62057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62086,7 +62086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62116,7 +62116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62145,7 +62145,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62175,7 +62175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62204,7 +62204,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62234,7 +62234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62263,7 +62263,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62293,7 +62293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62322,7 +62322,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62352,7 +62352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62381,7 +62381,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62411,7 +62411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62440,7 +62440,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62470,7 +62470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62499,7 +62499,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62529,7 +62529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62558,7 +62558,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62588,7 +62588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62617,7 +62617,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62647,7 +62647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62676,7 +62676,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62706,7 +62706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62735,7 +62735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62765,7 +62765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62794,7 +62794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62824,7 +62824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62853,7 +62853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62883,7 +62883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62912,7 +62912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62942,7 +62942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62971,7 +62971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63001,7 +63001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63030,7 +63030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63060,7 +63060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63089,7 +63089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63119,7 +63119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63148,7 +63148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63178,7 +63178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63207,7 +63207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63237,7 +63237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63266,7 +63266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63296,7 +63296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63325,7 +63325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63355,7 +63355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63384,7 +63384,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63414,7 +63414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63443,7 +63443,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63473,7 +63473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63502,7 +63502,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63532,7 +63532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63561,7 +63561,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63591,7 +63591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63620,7 +63620,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63650,7 +63650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63679,7 +63679,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63709,7 +63709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63738,7 +63738,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63768,7 +63768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63797,7 +63797,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63827,7 +63827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63856,7 +63856,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63886,7 +63886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63915,7 +63915,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63945,7 +63945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63974,7 +63974,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64004,7 +64004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64033,7 +64033,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64063,7 +64063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64092,7 +64092,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64122,7 +64122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64151,7 +64151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64181,7 +64181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64210,7 +64210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64240,7 +64240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64269,7 +64269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64299,7 +64299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64328,7 +64328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64358,7 +64358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64387,7 +64387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64417,7 +64417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64446,7 +64446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64476,7 +64476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64505,7 +64505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64535,7 +64535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64564,7 +64564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64594,7 +64594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64623,7 +64623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64653,7 +64653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64682,7 +64682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64712,7 +64712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64741,7 +64741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64771,7 +64771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64800,7 +64800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64830,7 +64830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64859,7 +64859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64889,7 +64889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64918,7 +64918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64948,7 +64948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64977,7 +64977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65007,7 +65007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65036,7 +65036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65066,7 +65066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65095,7 +65095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65125,7 +65125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65154,7 +65154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65184,7 +65184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65213,7 +65213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65243,7 +65243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65272,7 +65272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65302,7 +65302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65331,7 +65331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65361,7 +65361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65390,7 +65390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65420,7 +65420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65449,7 +65449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65479,7 +65479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65508,7 +65508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65538,7 +65538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65567,7 +65567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65597,7 +65597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65626,7 +65626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65655,7 +65655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65685,7 +65685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65714,7 +65714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65744,7 +65744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65774,7 +65774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65803,7 +65803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65833,7 +65833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65862,7 +65862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65892,7 +65892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65921,7 +65921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65951,7 +65951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65980,7 +65980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66010,7 +66010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66039,7 +66039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66069,7 +66069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66098,7 +66098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66128,7 +66128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66157,7 +66157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66187,7 +66187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66216,7 +66216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66246,7 +66246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66275,7 +66275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66305,7 +66305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66334,7 +66334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66364,7 +66364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66393,7 +66393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66423,7 +66423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66452,7 +66452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66482,7 +66482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66511,7 +66511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66541,7 +66541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66570,7 +66570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66600,7 +66600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66629,7 +66629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66659,7 +66659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66688,7 +66688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66718,7 +66718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66747,7 +66747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66777,7 +66777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66806,7 +66806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66836,7 +66836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66865,7 +66865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66895,7 +66895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66924,7 +66924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66954,7 +66954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66983,7 +66983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67013,7 +67013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67042,7 +67042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67072,7 +67072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67101,7 +67101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67131,7 +67131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67160,7 +67160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67190,7 +67190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67219,7 +67219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67249,7 +67249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67278,7 +67278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67308,7 +67308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67337,7 +67337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67367,7 +67367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67396,7 +67396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67426,7 +67426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67455,7 +67455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67485,7 +67485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67514,7 +67514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67544,7 +67544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67573,7 +67573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67603,7 +67603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67632,7 +67632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67662,7 +67662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67691,7 +67691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67721,7 +67721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67750,7 +67750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67780,7 +67780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67809,7 +67809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67839,7 +67839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67868,7 +67868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67898,7 +67898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67927,7 +67927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67957,7 +67957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67986,7 +67986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68016,7 +68016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68045,7 +68045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68075,7 +68075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68104,7 +68104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68134,7 +68134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68163,7 +68163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68193,7 +68193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68222,7 +68222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68252,7 +68252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68281,7 +68281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68311,7 +68311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68340,7 +68340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68370,7 +68370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68399,7 +68399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68429,7 +68429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68458,7 +68458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68488,7 +68488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68517,7 +68517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68547,7 +68547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68576,7 +68576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68606,7 +68606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68635,7 +68635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68665,7 +68665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68694,7 +68694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68724,7 +68724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68753,7 +68753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68783,7 +68783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68812,7 +68812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68842,7 +68842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68871,7 +68871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68901,7 +68901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68930,7 +68930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68960,7 +68960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68989,7 +68989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69018,7 +69018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69048,7 +69048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69077,7 +69077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69107,7 +69107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69137,7 +69137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69166,7 +69166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69196,7 +69196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69225,7 +69225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69255,7 +69255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69284,7 +69284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69314,7 +69314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69343,7 +69343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69373,7 +69373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69402,7 +69402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69432,7 +69432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69461,7 +69461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69491,7 +69491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69520,7 +69520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69550,7 +69550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -69583,7 +69583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69613,7 +69613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69642,7 +69642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69672,7 +69672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69701,7 +69701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69731,7 +69731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69760,7 +69760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69790,7 +69790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69819,7 +69819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69849,7 +69849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69878,7 +69878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69908,7 +69908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69937,7 +69937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69967,7 +69967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69996,7 +69996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70026,7 +70026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70055,7 +70055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70085,7 +70085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70114,7 +70114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70144,7 +70144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70173,7 +70173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70203,7 +70203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70232,7 +70232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70262,7 +70262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70291,7 +70291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70321,7 +70321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70350,7 +70350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70380,7 +70380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70409,7 +70409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70439,7 +70439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70468,7 +70468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70498,7 +70498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70527,7 +70527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70557,7 +70557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70586,7 +70586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70616,7 +70616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70645,7 +70645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70675,7 +70675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70704,7 +70704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70734,7 +70734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70763,7 +70763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70793,7 +70793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70822,7 +70822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70852,7 +70852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70881,7 +70881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70911,7 +70911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70940,7 +70940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70970,7 +70970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70999,7 +70999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71029,7 +71029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71058,7 +71058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71088,7 +71088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71117,7 +71117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71147,7 +71147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71176,7 +71176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71206,7 +71206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71235,7 +71235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71265,7 +71265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71294,7 +71294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71324,7 +71324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71353,7 +71353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71383,7 +71383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71412,7 +71412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71442,7 +71442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71471,7 +71471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71501,7 +71501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71530,7 +71530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71560,7 +71560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71589,7 +71589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71619,7 +71619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71648,7 +71648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71678,7 +71678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71707,7 +71707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71737,7 +71737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71766,7 +71766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71796,7 +71796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71825,7 +71825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71855,7 +71855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71884,7 +71884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71914,7 +71914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71943,7 +71943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71973,7 +71973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72002,7 +72002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72032,7 +72032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72061,7 +72061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72091,7 +72091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72120,7 +72120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72150,7 +72150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72179,7 +72179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72209,7 +72209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72238,7 +72238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72268,7 +72268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72297,7 +72297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72327,7 +72327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72356,7 +72356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72386,7 +72386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72415,7 +72415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72445,7 +72445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72474,7 +72474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72504,7 +72504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72533,7 +72533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72563,7 +72563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72592,7 +72592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72622,7 +72622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72651,7 +72651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72681,7 +72681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72710,7 +72710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72740,7 +72740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72769,7 +72769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72799,7 +72799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72828,7 +72828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72858,7 +72858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72887,7 +72887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72917,7 +72917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72946,7 +72946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72976,7 +72976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73005,7 +73005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73035,7 +73035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73064,7 +73064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73094,7 +73094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73123,7 +73123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73153,7 +73153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73182,7 +73182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73212,7 +73212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73241,7 +73241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73271,7 +73271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73300,7 +73300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73330,7 +73330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73359,7 +73359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73389,7 +73389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73418,7 +73418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73448,7 +73448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73477,7 +73477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73507,7 +73507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73536,7 +73536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73566,7 +73566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73595,7 +73595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73625,7 +73625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73654,7 +73654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73684,7 +73684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73713,7 +73713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73743,7 +73743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73772,7 +73772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73802,7 +73802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73831,7 +73831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73861,7 +73861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73890,7 +73890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73920,7 +73920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73949,7 +73949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73979,7 +73979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74008,7 +74008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74038,7 +74038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74067,7 +74067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74097,7 +74097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74126,7 +74126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74156,7 +74156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74185,7 +74185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74215,7 +74215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74244,7 +74244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74274,7 +74274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74303,7 +74303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74333,7 +74333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74362,7 +74362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74392,7 +74392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74421,7 +74421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74451,7 +74451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74480,7 +74480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74510,7 +74510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74539,7 +74539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74569,7 +74569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74598,7 +74598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74628,7 +74628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74657,7 +74657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74687,7 +74687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74716,7 +74716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74746,7 +74746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74775,7 +74775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74805,7 +74805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74834,7 +74834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74864,7 +74864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74893,7 +74893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74923,7 +74923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74952,7 +74952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74982,7 +74982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75011,7 +75011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75041,7 +75041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75070,7 +75070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75100,7 +75100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75129,7 +75129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75159,7 +75159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75188,7 +75188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75218,7 +75218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75247,7 +75247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75277,7 +75277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75306,7 +75306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75336,7 +75336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75365,7 +75365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75395,7 +75395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75424,7 +75424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75454,7 +75454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75483,7 +75483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75513,7 +75513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75542,7 +75542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75572,7 +75572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75601,7 +75601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75631,7 +75631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75660,7 +75660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75690,7 +75690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75719,7 +75719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75749,7 +75749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75778,7 +75778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75808,7 +75808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75837,7 +75837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75867,7 +75867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75896,7 +75896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75926,7 +75926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75955,7 +75955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75985,7 +75985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76014,7 +76014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76044,7 +76044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76073,7 +76073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76103,7 +76103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76132,7 +76132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76162,7 +76162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76191,7 +76191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76221,7 +76221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76250,7 +76250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76280,7 +76280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76309,7 +76309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76339,7 +76339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76368,7 +76368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76398,7 +76398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76427,7 +76427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76457,7 +76457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76486,7 +76486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76516,7 +76516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76545,7 +76545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76575,7 +76575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76604,7 +76604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76634,7 +76634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76663,7 +76663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76693,7 +76693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76722,7 +76722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76752,7 +76752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76781,7 +76781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76811,7 +76811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76840,7 +76840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76870,7 +76870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76899,7 +76899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76929,7 +76929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76958,7 +76958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76988,7 +76988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77017,7 +77017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77047,7 +77047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77076,7 +77076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77106,7 +77106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77135,7 +77135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77165,7 +77165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77194,7 +77194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77223,7 +77223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77253,7 +77253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77282,7 +77282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77312,7 +77312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77342,7 +77342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77371,7 +77371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77401,7 +77401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77430,7 +77430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77460,7 +77460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77489,7 +77489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77519,7 +77519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77548,7 +77548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77578,7 +77578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77607,7 +77607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77637,7 +77637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77666,7 +77666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77696,7 +77696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77725,7 +77725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77755,7 +77755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77784,7 +77784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77814,7 +77814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77843,7 +77843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77873,7 +77873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77902,7 +77902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77932,7 +77932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77961,7 +77961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77991,7 +77991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78020,7 +78020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78050,7 +78050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78079,7 +78079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78109,7 +78109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78138,7 +78138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78168,7 +78168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78197,7 +78197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78227,7 +78227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78256,7 +78256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78286,7 +78286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78315,7 +78315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78345,7 +78345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78374,7 +78374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78404,7 +78404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78433,7 +78433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78463,7 +78463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78492,7 +78492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78522,7 +78522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78551,7 +78551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78581,7 +78581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78610,7 +78610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78640,7 +78640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78669,7 +78669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78699,7 +78699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78728,7 +78728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78758,7 +78758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78787,7 +78787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78817,7 +78817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78846,7 +78846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78876,7 +78876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78905,7 +78905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78935,7 +78935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78964,7 +78964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78994,7 +78994,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79023,7 +79023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79053,7 +79053,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79082,7 +79082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79112,7 +79112,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79141,7 +79141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79171,7 +79171,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79200,7 +79200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79230,7 +79230,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79259,7 +79259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79289,7 +79289,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79318,7 +79318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79348,7 +79348,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79377,7 +79377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79407,7 +79407,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79436,7 +79436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79466,7 +79466,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79495,7 +79495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79525,7 +79525,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79554,7 +79554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79584,7 +79584,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79613,7 +79613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79643,7 +79643,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79672,7 +79672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79702,7 +79702,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79731,7 +79731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79761,7 +79761,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79790,7 +79790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79820,7 +79820,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79849,7 +79849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79879,7 +79879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79908,7 +79908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79938,7 +79938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79967,7 +79967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79997,7 +79997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80026,7 +80026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80056,7 +80056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80085,7 +80085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80115,7 +80115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80144,7 +80144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80174,7 +80174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80203,7 +80203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80233,7 +80233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80262,7 +80262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80292,7 +80292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80321,7 +80321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80351,7 +80351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80380,7 +80380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80410,7 +80410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80439,7 +80439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80469,7 +80469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80498,7 +80498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80528,7 +80528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80557,7 +80557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80586,7 +80586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80616,7 +80616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80645,7 +80645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80675,7 +80675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80705,7 +80705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80734,7 +80734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80764,7 +80764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80793,7 +80793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80823,7 +80823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80852,7 +80852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80882,7 +80882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80911,7 +80911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80941,7 +80941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80970,7 +80970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81000,7 +81000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81029,7 +81029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81059,7 +81059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81088,7 +81088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81118,7 +81118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -81151,7 +81151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81181,7 +81181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81210,7 +81210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81240,7 +81240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81269,7 +81269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81299,7 +81299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81328,7 +81328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81358,7 +81358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81387,7 +81387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81417,7 +81417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81446,7 +81446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81476,7 +81476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81505,7 +81505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81535,7 +81535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81564,7 +81564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81594,7 +81594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81623,7 +81623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81653,7 +81653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81682,7 +81682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81712,7 +81712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81741,7 +81741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81771,7 +81771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81800,7 +81800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81830,7 +81830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81859,7 +81859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81889,7 +81889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81918,7 +81918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81948,7 +81948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81977,7 +81977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82007,7 +82007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82036,7 +82036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82066,7 +82066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82095,7 +82095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82125,7 +82125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82154,7 +82154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82184,7 +82184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82213,7 +82213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82243,7 +82243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82272,7 +82272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82302,7 +82302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82331,7 +82331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82361,7 +82361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82390,7 +82390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82420,7 +82420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82449,7 +82449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82479,7 +82479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82508,7 +82508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82538,7 +82538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82567,7 +82567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82597,7 +82597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82626,7 +82626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82656,7 +82656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82685,7 +82685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82715,7 +82715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82744,7 +82744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82774,7 +82774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82803,7 +82803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82833,7 +82833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82862,7 +82862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82892,7 +82892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82921,7 +82921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82951,7 +82951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82980,7 +82980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83010,7 +83010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83039,7 +83039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83069,7 +83069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83098,7 +83098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83128,7 +83128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83157,7 +83157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83187,7 +83187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83216,7 +83216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83246,7 +83246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83275,7 +83275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83305,7 +83305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83334,7 +83334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83364,7 +83364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83393,7 +83393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83423,7 +83423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83452,7 +83452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83482,7 +83482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83511,7 +83511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83541,7 +83541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83570,7 +83570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83600,7 +83600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83629,7 +83629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83659,7 +83659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83688,7 +83688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83718,7 +83718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83747,7 +83747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83777,7 +83777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83806,7 +83806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83836,7 +83836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83865,7 +83865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83895,7 +83895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83924,7 +83924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83954,7 +83954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83983,7 +83983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84013,7 +84013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84042,7 +84042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84072,7 +84072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84101,7 +84101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84131,7 +84131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84160,7 +84160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84190,7 +84190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84219,7 +84219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84249,7 +84249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84278,7 +84278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84308,7 +84308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84337,7 +84337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84367,7 +84367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84396,7 +84396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84426,7 +84426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84455,7 +84455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84485,7 +84485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84514,7 +84514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84544,7 +84544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84573,7 +84573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84603,7 +84603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84632,7 +84632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84662,7 +84662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84691,7 +84691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84721,7 +84721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84750,7 +84750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84780,7 +84780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84809,7 +84809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84839,7 +84839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84868,7 +84868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84898,7 +84898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84927,7 +84927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84957,7 +84957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84986,7 +84986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85016,7 +85016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85045,7 +85045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85075,7 +85075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85104,7 +85104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85134,7 +85134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85163,7 +85163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85193,7 +85193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85222,7 +85222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85252,7 +85252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85281,7 +85281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85311,7 +85311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85340,7 +85340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85370,7 +85370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85399,7 +85399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85429,7 +85429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85458,7 +85458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85488,7 +85488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85517,7 +85517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85547,7 +85547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85576,7 +85576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85606,7 +85606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85635,7 +85635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85665,7 +85665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85694,7 +85694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85724,7 +85724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85753,7 +85753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85783,7 +85783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85812,7 +85812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85842,7 +85842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85871,7 +85871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85901,7 +85901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85930,7 +85930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85960,7 +85960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85989,7 +85989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86019,7 +86019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86048,7 +86048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86078,7 +86078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86107,7 +86107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86137,7 +86137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86166,7 +86166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86196,7 +86196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86225,7 +86225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86255,7 +86255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86284,7 +86284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86314,7 +86314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86343,7 +86343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86373,7 +86373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86402,7 +86402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86432,7 +86432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86461,7 +86461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86491,7 +86491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86520,7 +86520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86550,7 +86550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86579,7 +86579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86609,7 +86609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86638,7 +86638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86668,7 +86668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86697,7 +86697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86727,7 +86727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86756,7 +86756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86786,7 +86786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86815,7 +86815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86845,7 +86845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86874,7 +86874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86904,7 +86904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86933,7 +86933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86963,7 +86963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86992,7 +86992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87022,7 +87022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87051,7 +87051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87081,7 +87081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87110,7 +87110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87140,7 +87140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87169,7 +87169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87199,7 +87199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87228,7 +87228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87258,7 +87258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87287,7 +87287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87317,7 +87317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87346,7 +87346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87376,7 +87376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87405,7 +87405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87435,7 +87435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87464,7 +87464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87494,7 +87494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87523,7 +87523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87553,7 +87553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87582,7 +87582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87612,7 +87612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87641,7 +87641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87671,7 +87671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87700,7 +87700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87730,7 +87730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87759,7 +87759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87789,7 +87789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87818,7 +87818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87848,7 +87848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87877,7 +87877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87907,7 +87907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87936,7 +87936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87966,7 +87966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87995,7 +87995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88025,7 +88025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88054,7 +88054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88084,7 +88084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88113,7 +88113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88143,7 +88143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88172,7 +88172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88202,7 +88202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88231,7 +88231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88261,7 +88261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88290,7 +88290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88320,7 +88320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88349,7 +88349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88379,7 +88379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88408,7 +88408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88438,7 +88438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88467,7 +88467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88497,7 +88497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88526,7 +88526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88556,7 +88556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88585,7 +88585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88615,7 +88615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88644,7 +88644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88674,7 +88674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88703,7 +88703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88733,7 +88733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88762,7 +88762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88791,7 +88791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88821,7 +88821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88850,7 +88850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88880,7 +88880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88910,7 +88910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88939,7 +88939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88969,7 +88969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88998,7 +88998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89028,7 +89028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89057,7 +89057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89087,7 +89087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89116,7 +89116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89146,7 +89146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89175,7 +89175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89205,7 +89205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89234,7 +89234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89264,7 +89264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89293,7 +89293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89323,7 +89323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89352,7 +89352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89382,7 +89382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89411,7 +89411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89441,7 +89441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89470,7 +89470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89500,7 +89500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89529,7 +89529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89559,7 +89559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89588,7 +89588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89618,7 +89618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89647,7 +89647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89677,7 +89677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89706,7 +89706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89736,7 +89736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89765,7 +89765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89795,7 +89795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89824,7 +89824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89854,7 +89854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89883,7 +89883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89913,7 +89913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89942,7 +89942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89972,7 +89972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90001,7 +90001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90031,7 +90031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90060,7 +90060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90090,7 +90090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90119,7 +90119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90149,7 +90149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90178,7 +90178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90208,7 +90208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90237,7 +90237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90267,7 +90267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90296,7 +90296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90326,7 +90326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90355,7 +90355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90385,7 +90385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90414,7 +90414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90444,7 +90444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90473,7 +90473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90503,7 +90503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90532,7 +90532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90562,7 +90562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90591,7 +90591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90621,7 +90621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90650,7 +90650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90680,7 +90680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90709,7 +90709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90739,7 +90739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90768,7 +90768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90798,7 +90798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90827,7 +90827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90857,7 +90857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90886,7 +90886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90916,7 +90916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90945,7 +90945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90975,7 +90975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91004,7 +91004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91034,7 +91034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91063,7 +91063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91093,7 +91093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91122,7 +91122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91152,7 +91152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91181,7 +91181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91211,7 +91211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91240,7 +91240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91270,7 +91270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91299,7 +91299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91329,7 +91329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91358,7 +91358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91388,7 +91388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91417,7 +91417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91447,7 +91447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91476,7 +91476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91506,7 +91506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91535,7 +91535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91565,7 +91565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91594,7 +91594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91624,7 +91624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91653,7 +91653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91683,7 +91683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91712,7 +91712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91742,7 +91742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91771,7 +91771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91801,7 +91801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91830,7 +91830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91860,7 +91860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91889,7 +91889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91919,7 +91919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91948,7 +91948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91978,7 +91978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92007,7 +92007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92037,7 +92037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92066,7 +92066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92096,7 +92096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92125,7 +92125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92154,7 +92154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92184,7 +92184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92213,7 +92213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92243,7 +92243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92273,7 +92273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92302,7 +92302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92332,7 +92332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92361,7 +92361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92391,7 +92391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92420,7 +92420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92450,7 +92450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92479,7 +92479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92509,7 +92509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92538,7 +92538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92568,7 +92568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92597,7 +92597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92627,7 +92627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92656,7 +92656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92686,7 +92686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -92719,7 +92719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92749,7 +92749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92778,7 +92778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92808,7 +92808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92837,7 +92837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92867,7 +92867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92896,7 +92896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92926,7 +92926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92955,7 +92955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92985,7 +92985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93014,7 +93014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93044,7 +93044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93073,7 +93073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93103,7 +93103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93132,7 +93132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93162,7 +93162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93191,7 +93191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93221,7 +93221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93250,7 +93250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93280,7 +93280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93309,7 +93309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93339,7 +93339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93368,7 +93368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93398,7 +93398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93427,7 +93427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93457,7 +93457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93486,7 +93486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93516,7 +93516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93545,7 +93545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93575,7 +93575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93604,7 +93604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93634,7 +93634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93663,7 +93663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93693,7 +93693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93722,7 +93722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93752,7 +93752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93781,7 +93781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93811,7 +93811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93840,7 +93840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93870,7 +93870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93899,7 +93899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93929,7 +93929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93958,7 +93958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93988,7 +93988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94017,7 +94017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94047,7 +94047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94076,7 +94076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94106,7 +94106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94135,7 +94135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94165,7 +94165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94194,7 +94194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94224,7 +94224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94253,7 +94253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94283,7 +94283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94312,7 +94312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94342,7 +94342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94371,7 +94371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94401,7 +94401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94430,7 +94430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94460,7 +94460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94489,7 +94489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94519,7 +94519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94548,7 +94548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94578,7 +94578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94607,7 +94607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94637,7 +94637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94666,7 +94666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94696,7 +94696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94725,7 +94725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94755,7 +94755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94784,7 +94784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94814,7 +94814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94843,7 +94843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94873,7 +94873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94902,7 +94902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94932,7 +94932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94961,7 +94961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94991,7 +94991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95020,7 +95020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95050,7 +95050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95079,7 +95079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95109,7 +95109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95138,7 +95138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95168,7 +95168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95197,7 +95197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95227,7 +95227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95256,7 +95256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95286,7 +95286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95315,7 +95315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95345,7 +95345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95374,7 +95374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95404,7 +95404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95433,7 +95433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95463,7 +95463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95492,7 +95492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95522,7 +95522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95551,7 +95551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95581,7 +95581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95610,7 +95610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95640,7 +95640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95669,7 +95669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95699,7 +95699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95728,7 +95728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95758,7 +95758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95787,7 +95787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95817,7 +95817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95846,7 +95846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95876,7 +95876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95905,7 +95905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95935,7 +95935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95955,7 +95955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95984,7 +95984,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96014,7 +96014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96043,7 +96043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96073,7 +96073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96102,7 +96102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96132,7 +96132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96161,7 +96161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96191,7 +96191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96220,7 +96220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96250,7 +96250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96279,7 +96279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96309,7 +96309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96338,7 +96338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96368,7 +96368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96397,7 +96397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96427,7 +96427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96456,7 +96456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96486,7 +96486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96515,7 +96515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96545,7 +96545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96574,7 +96574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96604,7 +96604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96633,7 +96633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96663,7 +96663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96692,7 +96692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96722,7 +96722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96751,7 +96751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96781,7 +96781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96810,7 +96810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96840,7 +96840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96869,7 +96869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96899,7 +96899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96928,7 +96928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96958,7 +96958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96987,7 +96987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97017,7 +97017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97046,7 +97046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97076,7 +97076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97105,7 +97105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97135,7 +97135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97164,7 +97164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97194,7 +97194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97223,7 +97223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97253,7 +97253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97282,7 +97282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97312,7 +97312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97341,7 +97341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97371,7 +97371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97400,7 +97400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97430,7 +97430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97459,7 +97459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97489,7 +97489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97518,7 +97518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97548,7 +97548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97577,7 +97577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97607,7 +97607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97636,7 +97636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97666,7 +97666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97695,7 +97695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97725,7 +97725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97754,7 +97754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97784,7 +97784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97813,7 +97813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97843,7 +97843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97872,7 +97872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97902,7 +97902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97931,7 +97931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97961,7 +97961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97990,7 +97990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98020,7 +98020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98049,7 +98049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98079,7 +98079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98108,7 +98108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98138,7 +98138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98167,7 +98167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98197,7 +98197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98226,7 +98226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98256,7 +98256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98285,7 +98285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98315,7 +98315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98344,7 +98344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98374,7 +98374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98403,7 +98403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98433,7 +98433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98462,7 +98462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98492,7 +98492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98521,7 +98521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98551,7 +98551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98580,7 +98580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98610,7 +98610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98639,7 +98639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98669,7 +98669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98698,7 +98698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98728,7 +98728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98757,7 +98757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98787,7 +98787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98816,7 +98816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98846,7 +98846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98875,7 +98875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98905,7 +98905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98934,7 +98934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98964,7 +98964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98993,7 +98993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99023,7 +99023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99052,7 +99052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99082,7 +99082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99111,7 +99111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99141,7 +99141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99170,7 +99170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99200,7 +99200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99229,7 +99229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99259,7 +99259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99288,7 +99288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99318,7 +99318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99347,7 +99347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99377,7 +99377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99406,7 +99406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99436,7 +99436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99465,7 +99465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99495,7 +99495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99524,7 +99524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99554,7 +99554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99583,7 +99583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99613,7 +99613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99642,7 +99642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99672,7 +99672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99701,7 +99701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99731,7 +99731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99760,7 +99760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99790,7 +99790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99819,7 +99819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99849,7 +99849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99878,7 +99878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99908,7 +99908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99937,7 +99937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99967,7 +99967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99996,7 +99996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100026,7 +100026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100055,7 +100055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100085,7 +100085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100114,7 +100114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100144,7 +100144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100173,7 +100173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100203,7 +100203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100232,7 +100232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100262,7 +100262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100291,7 +100291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100321,7 +100321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100350,7 +100350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100379,7 +100379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100409,7 +100409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100438,7 +100438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100468,7 +100468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100498,7 +100498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100527,7 +100527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100557,7 +100557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100586,7 +100586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100616,7 +100616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100645,7 +100645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100675,7 +100675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100704,7 +100704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100734,7 +100734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100763,7 +100763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100793,7 +100793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100822,7 +100822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100852,7 +100852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100881,7 +100881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100911,7 +100911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100940,7 +100940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100970,7 +100970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100999,7 +100999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101029,7 +101029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101058,7 +101058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101088,7 +101088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101117,7 +101117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101147,7 +101147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101176,7 +101176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101206,7 +101206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101235,7 +101235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101265,7 +101265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101294,7 +101294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101324,7 +101324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101353,7 +101353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101383,7 +101383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101412,7 +101412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101442,7 +101442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101471,7 +101471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101501,7 +101501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101530,7 +101530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101560,7 +101560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101589,7 +101589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101619,7 +101619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101648,7 +101648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101678,7 +101678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101707,7 +101707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101737,7 +101737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101766,7 +101766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101796,7 +101796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101825,7 +101825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101855,7 +101855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101884,7 +101884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101914,7 +101914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101943,7 +101943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101973,7 +101973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102002,7 +102002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102032,7 +102032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102061,7 +102061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102091,7 +102091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102120,7 +102120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102150,7 +102150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102179,7 +102179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102209,7 +102209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102238,7 +102238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102268,7 +102268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102297,7 +102297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102327,7 +102327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102356,7 +102356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102386,7 +102386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102415,7 +102415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102445,7 +102445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102474,7 +102474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102504,7 +102504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102533,7 +102533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102563,7 +102563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102592,7 +102592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102622,7 +102622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102651,7 +102651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102681,7 +102681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102710,7 +102710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102740,7 +102740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102769,7 +102769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102799,7 +102799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102828,7 +102828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102858,7 +102858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102887,7 +102887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102917,7 +102917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102946,7 +102946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102976,7 +102976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103005,7 +103005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103035,7 +103035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103064,7 +103064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103094,7 +103094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103123,7 +103123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103153,7 +103153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103182,7 +103182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103212,7 +103212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103241,7 +103241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103271,7 +103271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103300,7 +103300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103330,7 +103330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103359,7 +103359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103389,7 +103389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103418,7 +103418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103448,7 +103448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103477,7 +103477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103507,7 +103507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103536,7 +103536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103566,7 +103566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103595,7 +103595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103625,7 +103625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103654,7 +103654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103684,7 +103684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103713,7 +103713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103742,7 +103742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103772,7 +103772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103801,7 +103801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103831,7 +103831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103861,7 +103861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103890,7 +103890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103920,7 +103920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103949,7 +103949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103979,7 +103979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104008,7 +104008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104038,7 +104038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104067,7 +104067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104097,7 +104097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104126,7 +104126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104156,7 +104156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104185,7 +104185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104215,7 +104215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104244,7 +104244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104274,7 +104274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -104298,7 +104298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104327,7 +104327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104357,7 +104357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104386,7 +104386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104416,7 +104416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104445,7 +104445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104475,7 +104475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104504,7 +104504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104534,7 +104534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104563,7 +104563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104593,7 +104593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104622,7 +104622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104652,7 +104652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104681,7 +104681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104711,7 +104711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104740,7 +104740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104770,7 +104770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104799,7 +104799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104829,7 +104829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104858,7 +104858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104888,7 +104888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104917,7 +104917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104947,7 +104947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104976,7 +104976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105006,7 +105006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105035,7 +105035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105065,7 +105065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105094,7 +105094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105124,7 +105124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105153,7 +105153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105183,7 +105183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105212,7 +105212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105242,7 +105242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105271,7 +105271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105301,7 +105301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105330,7 +105330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105360,7 +105360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105389,7 +105389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105419,7 +105419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105448,7 +105448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105478,7 +105478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105507,7 +105507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105537,7 +105537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105566,7 +105566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105596,7 +105596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105625,7 +105625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105655,7 +105655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105684,7 +105684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105714,7 +105714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105743,7 +105743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105773,7 +105773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105802,7 +105802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105832,7 +105832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105861,7 +105861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105891,7 +105891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105920,7 +105920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105950,7 +105950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105979,7 +105979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106009,7 +106009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106038,7 +106038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106068,7 +106068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106097,7 +106097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106127,7 +106127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106156,7 +106156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106186,7 +106186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106215,7 +106215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106245,7 +106245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106274,7 +106274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106304,7 +106304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106333,7 +106333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106363,7 +106363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106392,7 +106392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106422,7 +106422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106451,7 +106451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106481,7 +106481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106510,7 +106510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106540,7 +106540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106569,7 +106569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106599,7 +106599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106628,7 +106628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106658,7 +106658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106687,7 +106687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106717,7 +106717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106746,7 +106746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106776,7 +106776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106805,7 +106805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106835,7 +106835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106864,7 +106864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106894,7 +106894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106914,7 +106914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106943,7 +106943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106973,7 +106973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107002,7 +107002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107032,7 +107032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107061,7 +107061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107091,7 +107091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107120,7 +107120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107150,7 +107150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107179,7 +107179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107209,7 +107209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107238,7 +107238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107268,7 +107268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107297,7 +107297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107327,7 +107327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107356,7 +107356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107386,7 +107386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107415,7 +107415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107445,7 +107445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107474,7 +107474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107504,7 +107504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107533,7 +107533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107563,7 +107563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107583,7 +107583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107612,7 +107612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107642,7 +107642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107671,7 +107671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107701,7 +107701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107730,7 +107730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107760,7 +107760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107789,7 +107789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107819,7 +107819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107848,7 +107848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107878,7 +107878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107907,7 +107907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107937,7 +107937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107966,7 +107966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107996,7 +107996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108025,7 +108025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108055,7 +108055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108084,7 +108084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108114,7 +108114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108143,7 +108143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108173,7 +108173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108202,7 +108202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108232,7 +108232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108261,7 +108261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108291,7 +108291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108320,7 +108320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108350,7 +108350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108379,7 +108379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108409,7 +108409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108438,7 +108438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108468,7 +108468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108497,7 +108497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108527,7 +108527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108556,7 +108556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108586,7 +108586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108615,7 +108615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108645,7 +108645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108674,7 +108674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108704,7 +108704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108733,7 +108733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108763,7 +108763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108792,7 +108792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108822,7 +108822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108851,7 +108851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108881,7 +108881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108910,7 +108910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108940,7 +108940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108969,7 +108969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108999,7 +108999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109028,7 +109028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109058,7 +109058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109078,7 +109078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109107,7 +109107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109137,7 +109137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109166,7 +109166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109196,7 +109196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109225,7 +109225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109255,7 +109255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109284,7 +109284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109314,7 +109314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109343,7 +109343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109373,7 +109373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109402,7 +109402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109432,7 +109432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109461,7 +109461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109491,7 +109491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109520,7 +109520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109550,7 +109550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109579,7 +109579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109609,7 +109609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109638,7 +109638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109668,7 +109668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109697,7 +109697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109727,7 +109727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109756,7 +109756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109786,7 +109786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109815,7 +109815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109845,7 +109845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109874,7 +109874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109904,7 +109904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109933,7 +109933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109963,7 +109963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109992,7 +109992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110022,7 +110022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110051,7 +110051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110081,7 +110081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110110,7 +110110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110140,7 +110140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110169,7 +110169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110199,7 +110199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110228,7 +110228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110258,7 +110258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110287,7 +110287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110317,7 +110317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110346,7 +110346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110376,7 +110376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110405,7 +110405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110435,7 +110435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110464,7 +110464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110494,7 +110494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110523,7 +110523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110553,7 +110553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110582,7 +110582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110612,7 +110612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110641,7 +110641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110671,7 +110671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110700,7 +110700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110730,7 +110730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110759,7 +110759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110789,7 +110789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110818,7 +110818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110848,7 +110848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110877,7 +110877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110907,7 +110907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110936,7 +110936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110966,7 +110966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110995,7 +110995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111025,7 +111025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111054,7 +111054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111084,7 +111084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111113,7 +111113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111143,7 +111143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111172,7 +111172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111202,7 +111202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111231,7 +111231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111261,7 +111261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111290,7 +111290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111320,7 +111320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111349,7 +111349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111379,7 +111379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111408,7 +111408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111438,7 +111438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111467,7 +111467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111497,7 +111497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111526,7 +111526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111556,7 +111556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111585,7 +111585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111615,7 +111615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111644,7 +111644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111674,7 +111674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111703,7 +111703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111733,7 +111733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111762,7 +111762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111792,7 +111792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111821,7 +111821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111851,7 +111851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111880,7 +111880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111910,7 +111910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111939,7 +111939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111969,7 +111969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111998,7 +111998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112027,7 +112027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112057,7 +112057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112086,7 +112086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112116,7 +112116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112146,7 +112146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112175,7 +112175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112205,7 +112205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112234,7 +112234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112264,7 +112264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112293,7 +112293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112323,7 +112323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112352,7 +112352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112382,7 +112382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112411,7 +112411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112441,7 +112441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112470,7 +112470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112500,7 +112500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112529,7 +112529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112559,7 +112559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112588,7 +112588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112618,7 +112618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112647,7 +112647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112677,7 +112677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112706,7 +112706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112736,7 +112736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112765,7 +112765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112795,7 +112795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112824,7 +112824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112854,7 +112854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112883,7 +112883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112913,7 +112913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112942,7 +112942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112972,7 +112972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113001,7 +113001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113031,7 +113031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113060,7 +113060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113090,7 +113090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113119,7 +113119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113149,7 +113149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113178,7 +113178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113208,7 +113208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113237,7 +113237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113267,7 +113267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113296,7 +113296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113326,7 +113326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113355,7 +113355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113385,7 +113385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113414,7 +113414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113444,7 +113444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113473,7 +113473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113503,7 +113503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113532,7 +113532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113562,7 +113562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113591,7 +113591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113621,7 +113621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113650,7 +113650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113680,7 +113680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113709,7 +113709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113739,7 +113739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113768,7 +113768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113798,7 +113798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113827,7 +113827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113857,7 +113857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113886,7 +113886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113916,7 +113916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113945,7 +113945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113975,7 +113975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114004,7 +114004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114034,7 +114034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114063,7 +114063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114093,7 +114093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114122,7 +114122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114152,7 +114152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114181,7 +114181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114211,7 +114211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114240,7 +114240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114270,7 +114270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114299,7 +114299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114329,7 +114329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114358,7 +114358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114388,7 +114388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114417,7 +114417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114447,7 +114447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114476,7 +114476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114506,7 +114506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114535,7 +114535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114565,7 +114565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114594,7 +114594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114624,7 +114624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114653,7 +114653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114683,7 +114683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114712,7 +114712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114742,7 +114742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114771,7 +114771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114801,7 +114801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114830,7 +114830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114860,7 +114860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114889,7 +114889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114919,7 +114919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114948,7 +114948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114978,7 +114978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115007,7 +115007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115037,7 +115037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115066,7 +115066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115096,7 +115096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115125,7 +115125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115155,7 +115155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115184,7 +115184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115214,7 +115214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115243,7 +115243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115273,7 +115273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115302,7 +115302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115332,7 +115332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115361,7 +115361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115390,7 +115390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115420,7 +115420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115449,7 +115449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115479,7 +115479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115509,7 +115509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115538,7 +115538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115568,7 +115568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115597,7 +115597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115627,7 +115627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115656,7 +115656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115686,7 +115686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115715,7 +115715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115745,7 +115745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115774,7 +115774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115804,7 +115804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115833,7 +115833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115863,7 +115863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115892,7 +115892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115922,7 +115922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -115946,7 +115946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115975,7 +115975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116005,7 +116005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116034,7 +116034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116064,7 +116064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116093,7 +116093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116123,7 +116123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116152,7 +116152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116182,7 +116182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116211,7 +116211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116241,7 +116241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116270,7 +116270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116300,7 +116300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116329,7 +116329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116359,7 +116359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116388,7 +116388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116418,7 +116418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116447,7 +116447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116477,7 +116477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116506,7 +116506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116536,7 +116536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116565,7 +116565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116595,7 +116595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116624,7 +116624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116654,7 +116654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116683,7 +116683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116713,7 +116713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116742,7 +116742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116772,7 +116772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116801,7 +116801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116831,7 +116831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116860,7 +116860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116890,7 +116890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116919,7 +116919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116949,7 +116949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116978,7 +116978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117008,7 +117008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117037,7 +117037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117067,7 +117067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117096,7 +117096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117126,7 +117126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117155,7 +117155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117185,7 +117185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117214,7 +117214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117244,7 +117244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117273,7 +117273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117303,7 +117303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117332,7 +117332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117362,7 +117362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117391,7 +117391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117421,7 +117421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117450,7 +117450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117480,7 +117480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117509,7 +117509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117539,7 +117539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117568,7 +117568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117598,7 +117598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117627,7 +117627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117657,7 +117657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117686,7 +117686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117716,7 +117716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117745,7 +117745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117775,7 +117775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117804,7 +117804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117834,7 +117834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117863,7 +117863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117893,7 +117893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117922,7 +117922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117952,7 +117952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117981,7 +117981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118011,7 +118011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118040,7 +118040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118070,7 +118070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118099,7 +118099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118129,7 +118129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118158,7 +118158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118188,7 +118188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118217,7 +118217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118247,7 +118247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118276,7 +118276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118306,7 +118306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118335,7 +118335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118365,7 +118365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118394,7 +118394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118424,7 +118424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118453,7 +118453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118483,7 +118483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118512,7 +118512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118542,7 +118542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118562,7 +118562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118591,7 +118591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118621,7 +118621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118650,7 +118650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118680,7 +118680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118709,7 +118709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118739,7 +118739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118768,7 +118768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118798,7 +118798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118827,7 +118827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118857,7 +118857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118886,7 +118886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118916,7 +118916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118945,7 +118945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118975,7 +118975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119004,7 +119004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119034,7 +119034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119063,7 +119063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119093,7 +119093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119122,7 +119122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119152,7 +119152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119181,7 +119181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119211,7 +119211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119240,7 +119240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119270,7 +119270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119299,7 +119299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119329,7 +119329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119358,7 +119358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119388,7 +119388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119417,7 +119417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119447,7 +119447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119476,7 +119476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119506,7 +119506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119535,7 +119535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119565,7 +119565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119594,7 +119594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119624,7 +119624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119653,7 +119653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119683,7 +119683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119712,7 +119712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119742,7 +119742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119771,7 +119771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119801,7 +119801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119830,7 +119830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119860,7 +119860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119889,7 +119889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119919,7 +119919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119948,7 +119948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119978,7 +119978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120007,7 +120007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120037,7 +120037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120066,7 +120066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120096,7 +120096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120125,7 +120125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120155,7 +120155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120184,7 +120184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120214,7 +120214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120243,7 +120243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120273,7 +120273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120302,7 +120302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120332,7 +120332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120361,7 +120361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120391,7 +120391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120420,7 +120420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120450,7 +120450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120479,7 +120479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120509,7 +120509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120538,7 +120538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120568,7 +120568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120597,7 +120597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120627,7 +120627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120656,7 +120656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120686,7 +120686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120706,7 +120706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120735,7 +120735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120765,7 +120765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120794,7 +120794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120824,7 +120824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120853,7 +120853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120883,7 +120883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120912,7 +120912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120942,7 +120942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120971,7 +120971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121001,7 +121001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121030,7 +121030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121060,7 +121060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121089,7 +121089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121119,7 +121119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121148,7 +121148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121178,7 +121178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121207,7 +121207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121237,7 +121237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121266,7 +121266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121296,7 +121296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121325,7 +121325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121355,7 +121355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121384,7 +121384,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121414,7 +121414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121443,7 +121443,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121473,7 +121473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121502,7 +121502,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121532,7 +121532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121561,7 +121561,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121591,7 +121591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121620,7 +121620,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121650,7 +121650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121679,7 +121679,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121709,7 +121709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121738,7 +121738,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121768,7 +121768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121797,7 +121797,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121827,7 +121827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121856,7 +121856,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121886,7 +121886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121915,7 +121915,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121945,7 +121945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121974,7 +121974,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122004,7 +122004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122033,7 +122033,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122063,7 +122063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122092,7 +122092,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122122,7 +122122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122151,7 +122151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122181,7 +122181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122210,7 +122210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122240,7 +122240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122269,7 +122269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122299,7 +122299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122328,7 +122328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122358,7 +122358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122387,7 +122387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122417,7 +122417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122446,7 +122446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122476,7 +122476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122505,7 +122505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122535,7 +122535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122564,7 +122564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122594,7 +122594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122623,7 +122623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122653,7 +122653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122682,7 +122682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122712,7 +122712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122741,7 +122741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122771,7 +122771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122800,7 +122800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122830,7 +122830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122859,7 +122859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122889,7 +122889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122918,7 +122918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122948,7 +122948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122977,7 +122977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123007,7 +123007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123036,7 +123036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123066,7 +123066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123095,7 +123095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123125,7 +123125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123154,7 +123154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123184,7 +123184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123213,7 +123213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123243,7 +123243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123272,7 +123272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123302,7 +123302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123331,7 +123331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123361,7 +123361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123390,7 +123390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123420,7 +123420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123449,7 +123449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123479,7 +123479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123508,7 +123508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123538,7 +123538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123567,7 +123567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123597,7 +123597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123626,7 +123626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123655,7 +123655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123685,7 +123685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123714,7 +123714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123744,7 +123744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123774,7 +123774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123803,7 +123803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123833,7 +123833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123862,7 +123862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123892,7 +123892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123921,7 +123921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123951,7 +123951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123980,7 +123980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124010,7 +124010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124039,7 +124039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124069,7 +124069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124098,7 +124098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124128,7 +124128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124157,7 +124157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124187,7 +124187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124216,7 +124216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124246,7 +124246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124275,7 +124275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124305,7 +124305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124334,7 +124334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124364,7 +124364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124393,7 +124393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124423,7 +124423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124452,7 +124452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124482,7 +124482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124511,7 +124511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124541,7 +124541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124570,7 +124570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124600,7 +124600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124629,7 +124629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124659,7 +124659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124688,7 +124688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124718,7 +124718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124747,7 +124747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124777,7 +124777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124806,7 +124806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124836,7 +124836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124865,7 +124865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124895,7 +124895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124924,7 +124924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124954,7 +124954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124983,7 +124983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125013,7 +125013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125042,7 +125042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125072,7 +125072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125101,7 +125101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125131,7 +125131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125160,7 +125160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125190,7 +125190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125219,7 +125219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125249,7 +125249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125278,7 +125278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125308,7 +125308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125337,7 +125337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125367,7 +125367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125396,7 +125396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125426,7 +125426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125455,7 +125455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125485,7 +125485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125514,7 +125514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125544,7 +125544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125573,7 +125573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125603,7 +125603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125632,7 +125632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125662,7 +125662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125691,7 +125691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125721,7 +125721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125750,7 +125750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125780,7 +125780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125809,7 +125809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125839,7 +125839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125868,7 +125868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125898,7 +125898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125927,7 +125927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125957,7 +125957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125986,7 +125986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126016,7 +126016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126045,7 +126045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126075,7 +126075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126104,7 +126104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126134,7 +126134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126163,7 +126163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126193,7 +126193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126222,7 +126222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126252,7 +126252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126281,7 +126281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126311,7 +126311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126340,7 +126340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126370,7 +126370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126399,7 +126399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126429,7 +126429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126458,7 +126458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126488,7 +126488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126517,7 +126517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126547,7 +126547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126576,7 +126576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126606,7 +126606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126635,7 +126635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126665,7 +126665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126694,7 +126694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126724,7 +126724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126753,7 +126753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126783,7 +126783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126812,7 +126812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126842,7 +126842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126871,7 +126871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126901,7 +126901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126930,7 +126930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126960,7 +126960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126989,7 +126989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127018,7 +127018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127048,7 +127048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127077,7 +127077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127107,7 +127107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127137,7 +127137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127166,7 +127166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127196,7 +127196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127225,7 +127225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127255,7 +127255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127284,7 +127284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127314,7 +127314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127343,7 +127343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127373,7 +127373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127402,7 +127402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127432,7 +127432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127461,7 +127461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127491,7 +127491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127520,7 +127520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127550,7 +127550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -127574,7 +127574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127603,7 +127603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127633,7 +127633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127662,7 +127662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127692,7 +127692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127721,7 +127721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127751,7 +127751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127780,7 +127780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127810,7 +127810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127839,7 +127839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127869,7 +127869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127898,7 +127898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127928,7 +127928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127957,7 +127957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127987,7 +127987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128016,7 +128016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128046,7 +128046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128075,7 +128075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128105,7 +128105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128134,7 +128134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128164,7 +128164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128193,7 +128193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128223,7 +128223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128252,7 +128252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128282,7 +128282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128311,7 +128311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128341,7 +128341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128370,7 +128370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128400,7 +128400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128429,7 +128429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128459,7 +128459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128488,7 +128488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128518,7 +128518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128547,7 +128547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128577,7 +128577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128606,7 +128606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128636,7 +128636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128665,7 +128665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128695,7 +128695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128724,7 +128724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128754,7 +128754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128783,7 +128783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128813,7 +128813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128842,7 +128842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128872,7 +128872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128901,7 +128901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128931,7 +128931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128960,7 +128960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128990,7 +128990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129019,7 +129019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129049,7 +129049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129078,7 +129078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129108,7 +129108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129137,7 +129137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129167,7 +129167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129196,7 +129196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129226,7 +129226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129255,7 +129255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129285,7 +129285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129314,7 +129314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129344,7 +129344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129373,7 +129373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129403,7 +129403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129432,7 +129432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129462,7 +129462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129491,7 +129491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129521,7 +129521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129550,7 +129550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129580,7 +129580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129609,7 +129609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129639,7 +129639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129668,7 +129668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129698,7 +129698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129727,7 +129727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129757,7 +129757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129786,7 +129786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129816,7 +129816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129845,7 +129845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129875,7 +129875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129904,7 +129904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129934,7 +129934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129963,7 +129963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129993,7 +129993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130022,7 +130022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130052,7 +130052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130081,7 +130081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130111,7 +130111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130140,7 +130140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130170,7 +130170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130190,7 +130190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130219,7 +130219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130249,7 +130249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130278,7 +130278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130308,7 +130308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130337,7 +130337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130367,7 +130367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130396,7 +130396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130426,7 +130426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130455,7 +130455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130485,7 +130485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130514,7 +130514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130544,7 +130544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130573,7 +130573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130603,7 +130603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130632,7 +130632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130662,7 +130662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130691,7 +130691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130721,7 +130721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130750,7 +130750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130780,7 +130780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130809,7 +130809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130839,7 +130839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130859,7 +130859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130888,7 +130888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130918,7 +130918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130947,7 +130947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130977,7 +130977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131006,7 +131006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131036,7 +131036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131065,7 +131065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131095,7 +131095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131124,7 +131124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131154,7 +131154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131183,7 +131183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131213,7 +131213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131242,7 +131242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131272,7 +131272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131301,7 +131301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131331,7 +131331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131360,7 +131360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131390,7 +131390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131419,7 +131419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131449,7 +131449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131478,7 +131478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131508,7 +131508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131537,7 +131537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131567,7 +131567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131596,7 +131596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131626,7 +131626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131655,7 +131655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131685,7 +131685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131714,7 +131714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131744,7 +131744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131773,7 +131773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131803,7 +131803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131832,7 +131832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131862,7 +131862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131891,7 +131891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131921,7 +131921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131950,7 +131950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131980,7 +131980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132009,7 +132009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132039,7 +132039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132068,7 +132068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132098,7 +132098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132127,7 +132127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132157,7 +132157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132186,7 +132186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132216,7 +132216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132245,7 +132245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132275,7 +132275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132304,7 +132304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132334,7 +132334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132354,7 +132354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132383,7 +132383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132413,7 +132413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132442,7 +132442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132472,7 +132472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132501,7 +132501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132531,7 +132531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132560,7 +132560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132590,7 +132590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132619,7 +132619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132649,7 +132649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132678,7 +132678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132708,7 +132708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132737,7 +132737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132767,7 +132767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132796,7 +132796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132826,7 +132826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132855,7 +132855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132885,7 +132885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132914,7 +132914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132944,7 +132944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132973,7 +132973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133003,7 +133003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133032,7 +133032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133062,7 +133062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133091,7 +133091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133121,7 +133121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133150,7 +133150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133180,7 +133180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133209,7 +133209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133239,7 +133239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133268,7 +133268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133298,7 +133298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133327,7 +133327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133357,7 +133357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133386,7 +133386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133416,7 +133416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133445,7 +133445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133475,7 +133475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133504,7 +133504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133534,7 +133534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133563,7 +133563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133593,7 +133593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133622,7 +133622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133652,7 +133652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133681,7 +133681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133711,7 +133711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133740,7 +133740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133770,7 +133770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133799,7 +133799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133829,7 +133829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133858,7 +133858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133888,7 +133888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133917,7 +133917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133947,7 +133947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133976,7 +133976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134006,7 +134006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134035,7 +134035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134065,7 +134065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134094,7 +134094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134124,7 +134124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134153,7 +134153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134183,7 +134183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134212,7 +134212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134242,7 +134242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134271,7 +134271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134301,7 +134301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134330,7 +134330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134360,7 +134360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134389,7 +134389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134419,7 +134419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134448,7 +134448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134478,7 +134478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134507,7 +134507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134537,7 +134537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134566,7 +134566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134596,7 +134596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134625,7 +134625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134655,7 +134655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134684,7 +134684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134714,7 +134714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134743,7 +134743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134773,7 +134773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134802,7 +134802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134832,7 +134832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134861,7 +134861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134891,7 +134891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134920,7 +134920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134950,7 +134950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134979,7 +134979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135009,7 +135009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135038,7 +135038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135068,7 +135068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135097,7 +135097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135127,7 +135127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135156,7 +135156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135186,7 +135186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135215,7 +135215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135245,7 +135245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135274,7 +135274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135303,7 +135303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135333,7 +135333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135362,7 +135362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135392,7 +135392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135422,7 +135422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135451,7 +135451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135481,7 +135481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135510,7 +135510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135540,7 +135540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135569,7 +135569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135599,7 +135599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135628,7 +135628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135658,7 +135658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135687,7 +135687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135717,7 +135717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135746,7 +135746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135776,7 +135776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135805,7 +135805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135835,7 +135835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135864,7 +135864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135894,7 +135894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135923,7 +135923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135953,7 +135953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135982,7 +135982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136012,7 +136012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136041,7 +136041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136071,7 +136071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136100,7 +136100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136130,7 +136130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136159,7 +136159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136189,7 +136189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136218,7 +136218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136248,7 +136248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136277,7 +136277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136307,7 +136307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136336,7 +136336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136366,7 +136366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136395,7 +136395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136425,7 +136425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136454,7 +136454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136484,7 +136484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136513,7 +136513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136543,7 +136543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136572,7 +136572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136602,7 +136602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136631,7 +136631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136661,7 +136661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136690,7 +136690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136720,7 +136720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136749,7 +136749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136779,7 +136779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136808,7 +136808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136838,7 +136838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136867,7 +136867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136897,7 +136897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136926,7 +136926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136956,7 +136956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136985,7 +136985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137015,7 +137015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137044,7 +137044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137074,7 +137074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137103,7 +137103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137133,7 +137133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137162,7 +137162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137192,7 +137192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137221,7 +137221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137251,7 +137251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137280,7 +137280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137310,7 +137310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137339,7 +137339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137369,7 +137369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137398,7 +137398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137428,7 +137428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137457,7 +137457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137487,7 +137487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137516,7 +137516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137546,7 +137546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137575,7 +137575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137605,7 +137605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137634,7 +137634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137664,7 +137664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137693,7 +137693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137723,7 +137723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137752,7 +137752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137782,7 +137782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137811,7 +137811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137841,7 +137841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137870,7 +137870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137900,7 +137900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137929,7 +137929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137959,7 +137959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137988,7 +137988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138018,7 +138018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138047,7 +138047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138077,7 +138077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138106,7 +138106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138136,7 +138136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138165,7 +138165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138195,7 +138195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138224,7 +138224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138254,7 +138254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138283,7 +138283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138313,7 +138313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138342,7 +138342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138372,7 +138372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138401,7 +138401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138431,7 +138431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138460,7 +138460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138490,7 +138490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138519,7 +138519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138549,7 +138549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138578,7 +138578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138608,7 +138608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138637,7 +138637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138666,7 +138666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138696,7 +138696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138725,7 +138725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138755,7 +138755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138785,7 +138785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138814,7 +138814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138844,7 +138844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138873,7 +138873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138903,7 +138903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138932,7 +138932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138962,7 +138962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138991,7 +138991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139021,7 +139021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139050,7 +139050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139080,7 +139080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139109,7 +139109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139139,7 +139139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139168,7 +139168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139198,7 +139198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -139231,7 +139231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139261,7 +139261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139290,7 +139290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139320,7 +139320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139349,7 +139349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139379,7 +139379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139408,7 +139408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139438,7 +139438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139467,7 +139467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139497,7 +139497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139526,7 +139526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139556,7 +139556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139585,7 +139585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139615,7 +139615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139644,7 +139644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139674,7 +139674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139703,7 +139703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139733,7 +139733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139762,7 +139762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139792,7 +139792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139821,7 +139821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139851,7 +139851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139880,7 +139880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139910,7 +139910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139939,7 +139939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139969,7 +139969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139998,7 +139998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140028,7 +140028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140057,7 +140057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140087,7 +140087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140116,7 +140116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140146,7 +140146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140175,7 +140175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140205,7 +140205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140234,7 +140234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140264,7 +140264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140293,7 +140293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140323,7 +140323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140352,7 +140352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140382,7 +140382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140411,7 +140411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140441,7 +140441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140470,7 +140470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140500,7 +140500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140529,7 +140529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140559,7 +140559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140588,7 +140588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140618,7 +140618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140647,7 +140647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140677,7 +140677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140706,7 +140706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140736,7 +140736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140765,7 +140765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140795,7 +140795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140824,7 +140824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140854,7 +140854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140883,7 +140883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140913,7 +140913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140942,7 +140942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140972,7 +140972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141001,7 +141001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141031,7 +141031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141060,7 +141060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141090,7 +141090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141119,7 +141119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141149,7 +141149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141178,7 +141178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141208,7 +141208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141237,7 +141237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141267,7 +141267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141296,7 +141296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141326,7 +141326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141355,7 +141355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141385,7 +141385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141414,7 +141414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141444,7 +141444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141473,7 +141473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141503,7 +141503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141532,7 +141532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141562,7 +141562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141591,7 +141591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141621,7 +141621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141650,7 +141650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141680,7 +141680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141709,7 +141709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141739,7 +141739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141768,7 +141768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141798,7 +141798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141818,7 +141818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141847,7 +141847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141877,7 +141877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141906,7 +141906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141936,7 +141936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141965,7 +141965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141995,7 +141995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142024,7 +142024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142054,7 +142054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142083,7 +142083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142113,7 +142113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142142,7 +142142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142172,7 +142172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142201,7 +142201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142231,7 +142231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142260,7 +142260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142290,7 +142290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142319,7 +142319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142349,7 +142349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142378,7 +142378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142408,7 +142408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142437,7 +142437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142467,7 +142467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142487,7 +142487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142516,7 +142516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142546,7 +142546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142575,7 +142575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142605,7 +142605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142634,7 +142634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142664,7 +142664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142693,7 +142693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142723,7 +142723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142752,7 +142752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142782,7 +142782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142811,7 +142811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142841,7 +142841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142870,7 +142870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142900,7 +142900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142929,7 +142929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142959,7 +142959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142988,7 +142988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143018,7 +143018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143047,7 +143047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143077,7 +143077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143106,7 +143106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143136,7 +143136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143165,7 +143165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143195,7 +143195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143224,7 +143224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143254,7 +143254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143283,7 +143283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143313,7 +143313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143342,7 +143342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143372,7 +143372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143401,7 +143401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143431,7 +143431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143460,7 +143460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143490,7 +143490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143519,7 +143519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143549,7 +143549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143578,7 +143578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143608,7 +143608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143637,7 +143637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143667,7 +143667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143696,7 +143696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143726,7 +143726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143755,7 +143755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143785,7 +143785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143814,7 +143814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143844,7 +143844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143873,7 +143873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143903,7 +143903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143932,7 +143932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143962,7 +143962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143982,7 +143982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144011,7 +144011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144041,7 +144041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144070,7 +144070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144100,7 +144100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144129,7 +144129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144159,7 +144159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144188,7 +144188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144218,7 +144218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144247,7 +144247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144277,7 +144277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144306,7 +144306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144336,7 +144336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144365,7 +144365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144395,7 +144395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144424,7 +144424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144454,7 +144454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144483,7 +144483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144513,7 +144513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144542,7 +144542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144572,7 +144572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144601,7 +144601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144631,7 +144631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144660,7 +144660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144690,7 +144690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144719,7 +144719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144749,7 +144749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144778,7 +144778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144808,7 +144808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144837,7 +144837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144867,7 +144867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144896,7 +144896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144926,7 +144926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144955,7 +144955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144985,7 +144985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145014,7 +145014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145044,7 +145044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145073,7 +145073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145103,7 +145103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145132,7 +145132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145162,7 +145162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145191,7 +145191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145221,7 +145221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145250,7 +145250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145280,7 +145280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145309,7 +145309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145339,7 +145339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145368,7 +145368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145398,7 +145398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145427,7 +145427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145457,7 +145457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145486,7 +145486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145516,7 +145516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145545,7 +145545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145575,7 +145575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145604,7 +145604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145634,7 +145634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145663,7 +145663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145693,7 +145693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145722,7 +145722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145752,7 +145752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145781,7 +145781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145811,7 +145811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145840,7 +145840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145870,7 +145870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145899,7 +145899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145929,7 +145929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145958,7 +145958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145988,7 +145988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146017,7 +146017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146047,7 +146047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146076,7 +146076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146106,7 +146106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146135,7 +146135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146165,7 +146165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146194,7 +146194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146224,7 +146224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146253,7 +146253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146283,7 +146283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146312,7 +146312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146342,7 +146342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146371,7 +146371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146401,7 +146401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146430,7 +146430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146460,7 +146460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146489,7 +146489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146519,7 +146519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146548,7 +146548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146578,7 +146578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146607,7 +146607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146637,7 +146637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146666,7 +146666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146696,7 +146696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146725,7 +146725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146755,7 +146755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146784,7 +146784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146814,7 +146814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146843,7 +146843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146873,7 +146873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146902,7 +146902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146931,7 +146931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146961,7 +146961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146990,7 +146990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147020,7 +147020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147050,7 +147050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147079,7 +147079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147109,7 +147109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147138,7 +147138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147168,7 +147168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147197,7 +147197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147227,7 +147227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147256,7 +147256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147286,7 +147286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147315,7 +147315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147345,7 +147345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147374,7 +147374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147404,7 +147404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147433,7 +147433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147463,7 +147463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147492,7 +147492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147522,7 +147522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147551,7 +147551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147581,7 +147581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147610,7 +147610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147640,7 +147640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147669,7 +147669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147699,7 +147699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147728,7 +147728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147758,7 +147758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147787,7 +147787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147817,7 +147817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147846,7 +147846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147876,7 +147876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147905,7 +147905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147935,7 +147935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147964,7 +147964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147994,7 +147994,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148023,7 +148023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148053,7 +148053,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148082,7 +148082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148112,7 +148112,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148141,7 +148141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148171,7 +148171,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148200,7 +148200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148230,7 +148230,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148259,7 +148259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148289,7 +148289,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148318,7 +148318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148348,7 +148348,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148377,7 +148377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148407,7 +148407,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148436,7 +148436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148466,7 +148466,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148495,7 +148495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148525,7 +148525,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148554,7 +148554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148584,7 +148584,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148613,7 +148613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148643,7 +148643,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148672,7 +148672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148702,7 +148702,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148731,7 +148731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148761,7 +148761,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148790,7 +148790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148820,7 +148820,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148849,7 +148849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148879,7 +148879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148908,7 +148908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148938,7 +148938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148967,7 +148967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148997,7 +148997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149026,7 +149026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149056,7 +149056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149085,7 +149085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149115,7 +149115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149144,7 +149144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149174,7 +149174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149203,7 +149203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149233,7 +149233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149262,7 +149262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149292,7 +149292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149321,7 +149321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149351,7 +149351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149380,7 +149380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149410,7 +149410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149439,7 +149439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149469,7 +149469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149498,7 +149498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149528,7 +149528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149557,7 +149557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149587,7 +149587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149616,7 +149616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149646,7 +149646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149675,7 +149675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149705,7 +149705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149734,7 +149734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149764,7 +149764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149793,7 +149793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149823,7 +149823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149852,7 +149852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149882,7 +149882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149911,7 +149911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149941,7 +149941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149970,7 +149970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150000,7 +150000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150029,7 +150029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150059,7 +150059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150088,7 +150088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150118,7 +150118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150147,7 +150147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150177,7 +150177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150206,7 +150206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150236,7 +150236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150265,7 +150265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150294,7 +150294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150324,7 +150324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150353,7 +150353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150383,7 +150383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150413,7 +150413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150442,7 +150442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150472,7 +150472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150501,7 +150501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150531,7 +150531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150560,7 +150560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150590,7 +150590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150619,7 +150619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150649,7 +150649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150678,7 +150678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150708,7 +150708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150737,7 +150737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150767,7 +150767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150796,7 +150796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150826,7 +150826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -150859,7 +150859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150889,7 +150889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150918,7 +150918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150948,7 +150948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150977,7 +150977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151007,7 +151007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151036,7 +151036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151066,7 +151066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151095,7 +151095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151125,7 +151125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151154,7 +151154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151184,7 +151184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151213,7 +151213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151243,7 +151243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151272,7 +151272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151302,7 +151302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151331,7 +151331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151361,7 +151361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151390,7 +151390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151420,7 +151420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151449,7 +151449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151479,7 +151479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151508,7 +151508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151538,7 +151538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151567,7 +151567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151597,7 +151597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151626,7 +151626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151656,7 +151656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151685,7 +151685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151715,7 +151715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151744,7 +151744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151774,7 +151774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151803,7 +151803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151833,7 +151833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151862,7 +151862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151892,7 +151892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151921,7 +151921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151951,7 +151951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151980,7 +151980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152010,7 +152010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152039,7 +152039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152069,7 +152069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152098,7 +152098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152128,7 +152128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152157,7 +152157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152187,7 +152187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152216,7 +152216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152246,7 +152246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152275,7 +152275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152305,7 +152305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152334,7 +152334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152364,7 +152364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152393,7 +152393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152423,7 +152423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152452,7 +152452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152482,7 +152482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152511,7 +152511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152541,7 +152541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152570,7 +152570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152600,7 +152600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152629,7 +152629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152659,7 +152659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152688,7 +152688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152718,7 +152718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152747,7 +152747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152777,7 +152777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152806,7 +152806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152836,7 +152836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152865,7 +152865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152895,7 +152895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152924,7 +152924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152954,7 +152954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152983,7 +152983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153013,7 +153013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153042,7 +153042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153072,7 +153072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153101,7 +153101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153131,7 +153131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153160,7 +153160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153190,7 +153190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153219,7 +153219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153249,7 +153249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153278,7 +153278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153308,7 +153308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153337,7 +153337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153367,7 +153367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153396,7 +153396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153426,7 +153426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153446,7 +153446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153475,7 +153475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153505,7 +153505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153534,7 +153534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153564,7 +153564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153593,7 +153593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153623,7 +153623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153652,7 +153652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153682,7 +153682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153711,7 +153711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153741,7 +153741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153770,7 +153770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153800,7 +153800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153829,7 +153829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153859,7 +153859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153888,7 +153888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153918,7 +153918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153947,7 +153947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153977,7 +153977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154006,7 +154006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154036,7 +154036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154065,7 +154065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154095,7 +154095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154124,7 +154124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154154,7 +154154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154183,7 +154183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154213,7 +154213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154242,7 +154242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154272,7 +154272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154301,7 +154301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154331,7 +154331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154360,7 +154360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154390,7 +154390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154419,7 +154419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154449,7 +154449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154478,7 +154478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154508,7 +154508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154537,7 +154537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154567,7 +154567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154596,7 +154596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154626,7 +154626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154655,7 +154655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154685,7 +154685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154714,7 +154714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154744,7 +154744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154773,7 +154773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154803,7 +154803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154832,7 +154832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154862,7 +154862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154891,7 +154891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154921,7 +154921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154950,7 +154950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154980,7 +154980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155009,7 +155009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155039,7 +155039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155068,7 +155068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155098,7 +155098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155127,7 +155127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155157,7 +155157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155186,7 +155186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155216,7 +155216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155245,7 +155245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155275,7 +155275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155304,7 +155304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155334,7 +155334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155363,7 +155363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155393,7 +155393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155422,7 +155422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155452,7 +155452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155481,7 +155481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155511,7 +155511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155540,7 +155540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155570,7 +155570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155590,7 +155590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155619,7 +155619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155649,7 +155649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155678,7 +155678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155708,7 +155708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155737,7 +155737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155767,7 +155767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155796,7 +155796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155826,7 +155826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155855,7 +155855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155885,7 +155885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155914,7 +155914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155944,7 +155944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155973,7 +155973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156003,7 +156003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156032,7 +156032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156062,7 +156062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156091,7 +156091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156121,7 +156121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156150,7 +156150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156180,7 +156180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156209,7 +156209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156239,7 +156239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156268,7 +156268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156298,7 +156298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156327,7 +156327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156357,7 +156357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156386,7 +156386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156416,7 +156416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156445,7 +156445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156475,7 +156475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156504,7 +156504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156534,7 +156534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156563,7 +156563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156593,7 +156593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156622,7 +156622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156652,7 +156652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156681,7 +156681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156711,7 +156711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156740,7 +156740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156770,7 +156770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156799,7 +156799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156829,7 +156829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156858,7 +156858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156888,7 +156888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156917,7 +156917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156947,7 +156947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156976,7 +156976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157006,7 +157006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157035,7 +157035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157065,7 +157065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157094,7 +157094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157124,7 +157124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157153,7 +157153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157183,7 +157183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157212,7 +157212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157242,7 +157242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157271,7 +157271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157301,7 +157301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157330,7 +157330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157360,7 +157360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157389,7 +157389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157419,7 +157419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157448,7 +157448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157478,7 +157478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157507,7 +157507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157537,7 +157537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157566,7 +157566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157596,7 +157596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157625,7 +157625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157655,7 +157655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157684,7 +157684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157714,7 +157714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157743,7 +157743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157773,7 +157773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157802,7 +157802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157832,7 +157832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157861,7 +157861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157891,7 +157891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157920,7 +157920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157950,7 +157950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157979,7 +157979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158009,7 +158009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158038,7 +158038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158068,7 +158068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158097,7 +158097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158127,7 +158127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158156,7 +158156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158186,7 +158186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158215,7 +158215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158245,7 +158245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158274,7 +158274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158304,7 +158304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158333,7 +158333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158363,7 +158363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158392,7 +158392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158422,7 +158422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158451,7 +158451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158481,7 +158481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158510,7 +158510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158539,7 +158539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158569,7 +158569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158598,7 +158598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158628,7 +158628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158658,7 +158658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158687,7 +158687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158717,7 +158717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158746,7 +158746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158776,7 +158776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158805,7 +158805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158835,7 +158835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158864,7 +158864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158894,7 +158894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158923,7 +158923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158953,7 +158953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158982,7 +158982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159012,7 +159012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159041,7 +159041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159071,7 +159071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159100,7 +159100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159130,7 +159130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159159,7 +159159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159189,7 +159189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159218,7 +159218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159248,7 +159248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159277,7 +159277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159307,7 +159307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159336,7 +159336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159366,7 +159366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159395,7 +159395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159425,7 +159425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159454,7 +159454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159484,7 +159484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159513,7 +159513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159543,7 +159543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159572,7 +159572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159602,7 +159602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159631,7 +159631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159661,7 +159661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159690,7 +159690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159720,7 +159720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159749,7 +159749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159779,7 +159779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159808,7 +159808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159838,7 +159838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159867,7 +159867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159897,7 +159897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159926,7 +159926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159956,7 +159956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159985,7 +159985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160015,7 +160015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160044,7 +160044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160074,7 +160074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160103,7 +160103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160133,7 +160133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160162,7 +160162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160192,7 +160192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160221,7 +160221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160251,7 +160251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160280,7 +160280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160310,7 +160310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160339,7 +160339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160369,7 +160369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160398,7 +160398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160428,7 +160428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160457,7 +160457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160487,7 +160487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160516,7 +160516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160546,7 +160546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160575,7 +160575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160605,7 +160605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160634,7 +160634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160664,7 +160664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160693,7 +160693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160723,7 +160723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160752,7 +160752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160782,7 +160782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160811,7 +160811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160841,7 +160841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160870,7 +160870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160900,7 +160900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160929,7 +160929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160959,7 +160959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160988,7 +160988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161018,7 +161018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161047,7 +161047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161077,7 +161077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161106,7 +161106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161136,7 +161136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161165,7 +161165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161195,7 +161195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161224,7 +161224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161254,7 +161254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161283,7 +161283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161313,7 +161313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161342,7 +161342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161372,7 +161372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161401,7 +161401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161431,7 +161431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161460,7 +161460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161490,7 +161490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161519,7 +161519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161549,7 +161549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161578,7 +161578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161608,7 +161608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161637,7 +161637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161667,7 +161667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161696,7 +161696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161726,7 +161726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161755,7 +161755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161785,7 +161785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161814,7 +161814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161844,7 +161844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161873,7 +161873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161902,7 +161902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161932,7 +161932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161961,7 +161961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161991,7 +161991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162021,7 +162021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162050,7 +162050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162080,7 +162080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162109,7 +162109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162139,7 +162139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162168,7 +162168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162198,7 +162198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162227,7 +162227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162257,7 +162257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162286,7 +162286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162316,7 +162316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162345,7 +162345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162375,7 +162375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162404,7 +162404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162434,7 +162434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -162467,7 +162467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162497,7 +162497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162526,7 +162526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162556,7 +162556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162585,7 +162585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162615,7 +162615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162644,7 +162644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162674,7 +162674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162703,7 +162703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162733,7 +162733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162762,7 +162762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162792,7 +162792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162821,7 +162821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162851,7 +162851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162880,7 +162880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162910,7 +162910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162939,7 +162939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162969,7 +162969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162998,7 +162998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163028,7 +163028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163057,7 +163057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163087,7 +163087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163116,7 +163116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163146,7 +163146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163175,7 +163175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163205,7 +163205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163234,7 +163234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163264,7 +163264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163293,7 +163293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163323,7 +163323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163352,7 +163352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163382,7 +163382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163411,7 +163411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163441,7 +163441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163470,7 +163470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163500,7 +163500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163529,7 +163529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163559,7 +163559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163588,7 +163588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163618,7 +163618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163647,7 +163647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163677,7 +163677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163706,7 +163706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163736,7 +163736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163765,7 +163765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163795,7 +163795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163824,7 +163824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163854,7 +163854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163883,7 +163883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163913,7 +163913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163942,7 +163942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163972,7 +163972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164001,7 +164001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164031,7 +164031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164060,7 +164060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164090,7 +164090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164119,7 +164119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164149,7 +164149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164178,7 +164178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164208,7 +164208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164237,7 +164237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164267,7 +164267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164296,7 +164296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164326,7 +164326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164355,7 +164355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164385,7 +164385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164414,7 +164414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164444,7 +164444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164473,7 +164473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164503,7 +164503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164532,7 +164532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164562,7 +164562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164591,7 +164591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164621,7 +164621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164650,7 +164650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164680,7 +164680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164709,7 +164709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164739,7 +164739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164768,7 +164768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164798,7 +164798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164827,7 +164827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164857,7 +164857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164886,7 +164886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164916,7 +164916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164945,7 +164945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164975,7 +164975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165004,7 +165004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165034,7 +165034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165054,7 +165054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165083,7 +165083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165113,7 +165113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165142,7 +165142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165172,7 +165172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165201,7 +165201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165231,7 +165231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165260,7 +165260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165290,7 +165290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165319,7 +165319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165349,7 +165349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165378,7 +165378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165408,7 +165408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165437,7 +165437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165467,7 +165467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165496,7 +165496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165526,7 +165526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165555,7 +165555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165585,7 +165585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165614,7 +165614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165644,7 +165644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165673,7 +165673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165703,7 +165703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165723,7 +165723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165752,7 +165752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165782,7 +165782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165811,7 +165811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165841,7 +165841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165870,7 +165870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165900,7 +165900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165929,7 +165929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165959,7 +165959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165988,7 +165988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166018,7 +166018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166047,7 +166047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166077,7 +166077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166106,7 +166106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166136,7 +166136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166165,7 +166165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166195,7 +166195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166224,7 +166224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166254,7 +166254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166283,7 +166283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166313,7 +166313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166342,7 +166342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166372,7 +166372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166401,7 +166401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166431,7 +166431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166460,7 +166460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166490,7 +166490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166519,7 +166519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166549,7 +166549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166578,7 +166578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166608,7 +166608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166637,7 +166637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166667,7 +166667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166696,7 +166696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166726,7 +166726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166755,7 +166755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166785,7 +166785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166814,7 +166814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166844,7 +166844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166873,7 +166873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166903,7 +166903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166932,7 +166932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166962,7 +166962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166991,7 +166991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167021,7 +167021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167050,7 +167050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167080,7 +167080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167109,7 +167109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167139,7 +167139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167168,7 +167168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167198,7 +167198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167218,7 +167218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167247,7 +167247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167277,7 +167277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167306,7 +167306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167336,7 +167336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167365,7 +167365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167395,7 +167395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167424,7 +167424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167454,7 +167454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167483,7 +167483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167513,7 +167513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167542,7 +167542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167572,7 +167572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167601,7 +167601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167631,7 +167631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167660,7 +167660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167690,7 +167690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167719,7 +167719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167749,7 +167749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167778,7 +167778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167808,7 +167808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167837,7 +167837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167867,7 +167867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167896,7 +167896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167926,7 +167926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167955,7 +167955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167985,7 +167985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168014,7 +168014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168044,7 +168044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168073,7 +168073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168103,7 +168103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168132,7 +168132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168162,7 +168162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168191,7 +168191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168221,7 +168221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168250,7 +168250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168280,7 +168280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168309,7 +168309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168339,7 +168339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168368,7 +168368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168398,7 +168398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168427,7 +168427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168457,7 +168457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168486,7 +168486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168516,7 +168516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168545,7 +168545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168575,7 +168575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168604,7 +168604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168634,7 +168634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168663,7 +168663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168693,7 +168693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168722,7 +168722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168752,7 +168752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168781,7 +168781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168811,7 +168811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168840,7 +168840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168870,7 +168870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168899,7 +168899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168929,7 +168929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168958,7 +168958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168988,7 +168988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169017,7 +169017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169047,7 +169047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169076,7 +169076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169106,7 +169106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169135,7 +169135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169165,7 +169165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169194,7 +169194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169224,7 +169224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169253,7 +169253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169283,7 +169283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169312,7 +169312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169342,7 +169342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169371,7 +169371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169401,7 +169401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169430,7 +169430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169460,7 +169460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169489,7 +169489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169519,7 +169519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169548,7 +169548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169578,7 +169578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169607,7 +169607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169637,7 +169637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169666,7 +169666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169696,7 +169696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169725,7 +169725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169755,7 +169755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169784,7 +169784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169814,7 +169814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169843,7 +169843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169873,7 +169873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169902,7 +169902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169932,7 +169932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169961,7 +169961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169991,7 +169991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170020,7 +170020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170050,7 +170050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170079,7 +170079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170109,7 +170109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170138,7 +170138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170167,7 +170167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170197,7 +170197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170226,7 +170226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170256,7 +170256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170286,7 +170286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170315,7 +170315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170345,7 +170345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170374,7 +170374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170404,7 +170404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170433,7 +170433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170463,7 +170463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170492,7 +170492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170522,7 +170522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170551,7 +170551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170581,7 +170581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170610,7 +170610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170640,7 +170640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170669,7 +170669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170699,7 +170699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170728,7 +170728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170758,7 +170758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170787,7 +170787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170817,7 +170817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170846,7 +170846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170876,7 +170876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170905,7 +170905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170935,7 +170935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170964,7 +170964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170994,7 +170994,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171023,7 +171023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171053,7 +171053,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171082,7 +171082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171112,7 +171112,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171141,7 +171141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171171,7 +171171,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171200,7 +171200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171230,7 +171230,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171259,7 +171259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171289,7 +171289,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171318,7 +171318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171348,7 +171348,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171377,7 +171377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171407,7 +171407,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171436,7 +171436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171466,7 +171466,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171495,7 +171495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171525,7 +171525,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171554,7 +171554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171584,7 +171584,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171613,7 +171613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171643,7 +171643,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171672,7 +171672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171702,7 +171702,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171731,7 +171731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171761,7 +171761,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171790,7 +171790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171820,7 +171820,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171849,7 +171849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171879,7 +171879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171908,7 +171908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171938,7 +171938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171967,7 +171967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171997,7 +171997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172026,7 +172026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172056,7 +172056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172085,7 +172085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172115,7 +172115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172144,7 +172144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172174,7 +172174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172203,7 +172203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172233,7 +172233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172262,7 +172262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172292,7 +172292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172321,7 +172321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172351,7 +172351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172380,7 +172380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172410,7 +172410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172439,7 +172439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172469,7 +172469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172498,7 +172498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172528,7 +172528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172557,7 +172557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172587,7 +172587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172616,7 +172616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172646,7 +172646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172675,7 +172675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172705,7 +172705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172734,7 +172734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172764,7 +172764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172793,7 +172793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172823,7 +172823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172852,7 +172852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172882,7 +172882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172911,7 +172911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172941,7 +172941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172970,7 +172970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173000,7 +173000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173029,7 +173029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173059,7 +173059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173088,7 +173088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173118,7 +173118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173147,7 +173147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173177,7 +173177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173206,7 +173206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173236,7 +173236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173265,7 +173265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173295,7 +173295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173324,7 +173324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173354,7 +173354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173383,7 +173383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173413,7 +173413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173442,7 +173442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173472,7 +173472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173501,7 +173501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173530,7 +173530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173560,7 +173560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173589,7 +173589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173619,7 +173619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173649,7 +173649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173678,7 +173678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173708,7 +173708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173737,7 +173737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173767,7 +173767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173796,7 +173796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173826,7 +173826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173855,7 +173855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173885,7 +173885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173914,7 +173914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173944,7 +173944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173973,7 +173973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174003,7 +174003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174032,7 +174032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174062,7 +174062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -174095,7 +174095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174125,7 +174125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174154,7 +174154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174184,7 +174184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174213,7 +174213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174243,7 +174243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174272,7 +174272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174302,7 +174302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174331,7 +174331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174361,7 +174361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174390,7 +174390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174420,7 +174420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174449,7 +174449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174479,7 +174479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174508,7 +174508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174538,7 +174538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174567,7 +174567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174597,7 +174597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174626,7 +174626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174656,7 +174656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174685,7 +174685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174715,7 +174715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174744,7 +174744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174774,7 +174774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174803,7 +174803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174833,7 +174833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174862,7 +174862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174892,7 +174892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174921,7 +174921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174951,7 +174951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174980,7 +174980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175010,7 +175010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175039,7 +175039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175069,7 +175069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175098,7 +175098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175128,7 +175128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175157,7 +175157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175187,7 +175187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175216,7 +175216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175246,7 +175246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175275,7 +175275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175305,7 +175305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175334,7 +175334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175364,7 +175364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175393,7 +175393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175423,7 +175423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175452,7 +175452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175482,7 +175482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175511,7 +175511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175541,7 +175541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175570,7 +175570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175600,7 +175600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175629,7 +175629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175659,7 +175659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175688,7 +175688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175718,7 +175718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175747,7 +175747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175777,7 +175777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175806,7 +175806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175836,7 +175836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175865,7 +175865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175895,7 +175895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175924,7 +175924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175954,7 +175954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175983,7 +175983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176013,7 +176013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176042,7 +176042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176072,7 +176072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176101,7 +176101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176131,7 +176131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176160,7 +176160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176190,7 +176190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176219,7 +176219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176249,7 +176249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176278,7 +176278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176308,7 +176308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176337,7 +176337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176367,7 +176367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176396,7 +176396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176426,7 +176426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176455,7 +176455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176485,7 +176485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176514,7 +176514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176544,7 +176544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176573,7 +176573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176603,7 +176603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176632,7 +176632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176662,7 +176662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176691,7 +176691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176721,7 +176721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176750,7 +176750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176780,7 +176780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176809,7 +176809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176839,7 +176839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176868,7 +176868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176898,7 +176898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176927,7 +176927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176957,7 +176957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176986,7 +176986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177016,7 +177016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177045,7 +177045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177075,7 +177075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177104,7 +177104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177134,7 +177134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177163,7 +177163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177193,7 +177193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177222,7 +177222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177252,7 +177252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177281,7 +177281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177311,7 +177311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177340,7 +177340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177370,7 +177370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177399,7 +177399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177429,7 +177429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177458,7 +177458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177488,7 +177488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177517,7 +177517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177547,7 +177547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177576,7 +177576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177606,7 +177606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177635,7 +177635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177665,7 +177665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177694,7 +177694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177724,7 +177724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177753,7 +177753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177783,7 +177783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177812,7 +177812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177842,7 +177842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177871,7 +177871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177901,7 +177901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177930,7 +177930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177960,7 +177960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177989,7 +177989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178019,7 +178019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178048,7 +178048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178078,7 +178078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178107,7 +178107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178137,7 +178137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178166,7 +178166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178196,7 +178196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178225,7 +178225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178255,7 +178255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178284,7 +178284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178314,7 +178314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178343,7 +178343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178373,7 +178373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178402,7 +178402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178432,7 +178432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178461,7 +178461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178491,7 +178491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178520,7 +178520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178550,7 +178550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178579,7 +178579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178609,7 +178609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178638,7 +178638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178668,7 +178668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178697,7 +178697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178727,7 +178727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178756,7 +178756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178786,7 +178786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178815,7 +178815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178845,7 +178845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178874,7 +178874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178904,7 +178904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178933,7 +178933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178963,7 +178963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178992,7 +178992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179022,7 +179022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179051,7 +179051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179081,7 +179081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179110,7 +179110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179140,7 +179140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179169,7 +179169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179199,7 +179199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179228,7 +179228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179258,7 +179258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179287,7 +179287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179317,7 +179317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179346,7 +179346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179376,7 +179376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179405,7 +179405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179435,7 +179435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179464,7 +179464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179494,7 +179494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179523,7 +179523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179553,7 +179553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179582,7 +179582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179612,7 +179612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179641,7 +179641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179671,7 +179671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179700,7 +179700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179730,7 +179730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179759,7 +179759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179789,7 +179789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179818,7 +179818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179848,7 +179848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179877,7 +179877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179907,7 +179907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179936,7 +179936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179966,7 +179966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179995,7 +179995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180025,7 +180025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180054,7 +180054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180084,7 +180084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180113,7 +180113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180143,7 +180143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180172,7 +180172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180202,7 +180202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180231,7 +180231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180261,7 +180261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180290,7 +180290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180320,7 +180320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180349,7 +180349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180379,7 +180379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180408,7 +180408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180438,7 +180438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180467,7 +180467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180497,7 +180497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180526,7 +180526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180556,7 +180556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180585,7 +180585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180615,7 +180615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180644,7 +180644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180674,7 +180674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180703,7 +180703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180733,7 +180733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180762,7 +180762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180792,7 +180792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180821,7 +180821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180851,7 +180851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180880,7 +180880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180910,7 +180910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180939,7 +180939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180969,7 +180969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180998,7 +180998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181028,7 +181028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181057,7 +181057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181087,7 +181087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181116,7 +181116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181146,7 +181146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181175,7 +181175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181205,7 +181205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181234,7 +181234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181264,7 +181264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181293,7 +181293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181323,7 +181323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181352,7 +181352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181382,7 +181382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181411,7 +181411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181441,7 +181441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181470,7 +181470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181500,7 +181500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181529,7 +181529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181559,7 +181559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181588,7 +181588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181618,7 +181618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181647,7 +181647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181677,7 +181677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181706,7 +181706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181735,7 +181735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181765,7 +181765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181794,7 +181794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181824,7 +181824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181854,7 +181854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181883,7 +181883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181913,7 +181913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181942,7 +181942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181972,7 +181972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182001,7 +182001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182031,7 +182031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182060,7 +182060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182090,7 +182090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182119,7 +182119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182149,7 +182149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182178,7 +182178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182208,7 +182208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182237,7 +182237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182267,7 +182267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182296,7 +182296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182326,7 +182326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182355,7 +182355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182385,7 +182385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182414,7 +182414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182444,7 +182444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182473,7 +182473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182503,7 +182503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182532,7 +182532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182562,7 +182562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182591,7 +182591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182621,7 +182621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182650,7 +182650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182680,7 +182680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182709,7 +182709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182739,7 +182739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182768,7 +182768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182798,7 +182798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182827,7 +182827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182857,7 +182857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182886,7 +182886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182916,7 +182916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182945,7 +182945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182975,7 +182975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183004,7 +183004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183034,7 +183034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183063,7 +183063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183093,7 +183093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183122,7 +183122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183152,7 +183152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183181,7 +183181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183211,7 +183211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183240,7 +183240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183270,7 +183270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183299,7 +183299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183329,7 +183329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183358,7 +183358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183388,7 +183388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183417,7 +183417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183447,7 +183447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183476,7 +183476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183506,7 +183506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183535,7 +183535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183565,7 +183565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183594,7 +183594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183624,7 +183624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183653,7 +183653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183683,7 +183683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183712,7 +183712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183742,7 +183742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183771,7 +183771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183801,7 +183801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183830,7 +183830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183860,7 +183860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183889,7 +183889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183919,7 +183919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183948,7 +183948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183978,7 +183978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184007,7 +184007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184037,7 +184037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184066,7 +184066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184096,7 +184096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184125,7 +184125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184155,7 +184155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184184,7 +184184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184214,7 +184214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184243,7 +184243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184273,7 +184273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184302,7 +184302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184332,7 +184332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184361,7 +184361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184391,7 +184391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184420,7 +184420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184450,7 +184450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184479,7 +184479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184509,7 +184509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184538,7 +184538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184568,7 +184568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184597,7 +184597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184627,7 +184627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184656,7 +184656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184686,7 +184686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184715,7 +184715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184745,7 +184745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184774,7 +184774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184804,7 +184804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184833,7 +184833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184863,7 +184863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184892,7 +184892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184922,7 +184922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184951,7 +184951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184981,7 +184981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185010,7 +185010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185040,7 +185040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185069,7 +185069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185098,7 +185098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185128,7 +185128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185157,7 +185157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185187,7 +185187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185217,7 +185217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185246,7 +185246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185276,7 +185276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185305,7 +185305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185335,7 +185335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185364,7 +185364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185394,7 +185394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185423,7 +185423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185453,7 +185453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185482,7 +185482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185512,7 +185512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185541,7 +185541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185571,7 +185571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185600,7 +185600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185630,7 +185630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
diff --git a/testing/buildbot/filters/OWNERS b/testing/buildbot/filters/OWNERS
index b9ed1d6e..5f8334b 100644
--- a/testing/buildbot/filters/OWNERS
+++ b/testing/buildbot/filters/OWNERS
@@ -10,4 +10,5 @@
 per-file browser-side-navigation*=scottmg@chromium.org
 per-file browser-side-navigation*=yzshen@chromium.org
 
-# COMPONENT: Infra>Platform>Buildbot
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Infra>Client>Chrome
diff --git a/testing/scripts/OWNERS b/testing/scripts/OWNERS
index 231035d1..5c5cbc9b 100644
--- a/testing/scripts/OWNERS
+++ b/testing/scripts/OWNERS
@@ -5,6 +5,9 @@
 iannucci@chromium.org
 phajdan.jr@chromium.org
 
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Infra>Client>Chrome
+
 # Wrappers for Telemetry based tests.
 per-file run_gpu*=kbr@chromium.org
 per-file run_gpu*=nednguyen@google.com
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 3a92224c..81fb72a0 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1377,6 +1377,24 @@
             ]
         }
     ],
+    "NTPLaunchAfterInactivity": [
+        {
+            "platforms": [
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "OneHourDelay",
+                    "params": {
+                        "delay_in_mins": "60"
+                    },
+                    "enable_features": [
+                        "NTPLaunchAfterInactivity"
+                    ]
+                }
+            ]
+        }
+    ],
     "NTPPersonalizedSectionRanking": [
         {
             "platforms": [
diff --git a/third_party/WebKit/LayoutTests/ASANExpectations b/third_party/WebKit/LayoutTests/ASANExpectations
index 021eb38..b72d4ec 100644
--- a/third_party/WebKit/LayoutTests/ASANExpectations
+++ b/third_party/WebKit/LayoutTests/ASANExpectations
@@ -94,8 +94,6 @@
 # Reliably timeout on Linux ASAN bots.
 crbug.com/248938 [ Linux ] virtual/threaded/animations/transition-and-animation-2.html [ Skip ]
 
-crbug.com/446661 [Linux ] geolocation-api/success-clear-watch.html [ Timeout Pass ]
-
 crbug.com/464065 [ Linux ] media/track/css-cue-for-video-in-shadow.html [ Timeout ]
 crbug.com/464065 [ Linux ] media/track/css-cue-for-video-in-shadow-2.html [ Timeout ]
 crbug.com/525975 [ Linux ] http/tests/websocket/workers/close-before-open.html [ Timeout Pass ]
diff --git a/third_party/WebKit/LayoutTests/SlowTests b/third_party/WebKit/LayoutTests/SlowTests
index c5ea71d..4abba26 100644
--- a/third_party/WebKit/LayoutTests/SlowTests
+++ b/third_party/WebKit/LayoutTests/SlowTests
@@ -80,7 +80,6 @@
 crbug.com/24182 virtual/gpu/fast/canvas/canvas-strokePath-gradient-shadow.html [ Slow ]
 crbug.com/24182 virtual/gpu/fast/canvas/canvas-strokeRect-gradient-shadow.html [ Slow ]
 crbug.com/24182 virtual/gpu/fast/canvas/canvas-toDataURL-jpeg-crash.html [ Slow ]
-crbug.com/24182 virtual/gpu/fast/canvas/getPutImageDataPairTest.html [ Slow ]
 crbug.com/24182 fast/dom/timer-throttling-background-page-near-alignment-interval.html [ Slow ]
 crbug.com/24182 http/tests/perf/large-inlined-script.html [ Slow ]
 crbug.com/24182 virtual/mojo-loading/http/tests/perf/large-inlined-script.html [ Slow ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index da7b775..92ce5a24 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -5,7 +5,6 @@
 # TODO(qyearsley): Remove these lines and uncomment other test expectation
 # lines related to CSS tests (crbug.com/706118).
 crbug.com/706118 external/wpt/css/CSS2 [ Skip ]
-crbug.com/706118 external/wpt/css/css-align-3 [ Skip ]
 crbug.com/706118 external/wpt/css/css-flexbox-1 [ Skip ]
 crbug.com/706118 external/wpt/css/css-scoping-1 [ Skip ]
 crbug.com/706118 external/wpt/css/css-shapes-1 [ Skip ]
@@ -15,7 +14,6 @@
 crbug.com/706118 external/wpt/css/css-writing-modes-3 [ Skip ]
 crbug.com/706118 external/wpt/css/cssom-1 [ Skip ]
 crbug.com/706118 external/wpt/css/cssom-view-1 [ Skip ]
-crbug.com/706118 external/wpt/css/selectors4 [ Skip ]
 
 # ====== Oilpan-only failures from here ======
 # Most of these actually cause the tests to report success, rather than
@@ -125,6 +123,9 @@
 
 crbug.com/671048 virtual/color_space/fast/canvas/color-space/display_linear-rgb.html [ Pass Failure Crash ]
 
+# Can be broken into smaller tests, probably.
+crbug.com/709009 virtual/gpu/fast/canvas/getPutImageDataPairTest.html [ Timeout Pass ]
+
 # ====== Paint team owned tests to here ======
 
 # ====== LayoutNG-only failures from here ======
@@ -1112,8 +1113,6 @@
 
 crbug.com/637255 [ Win10 ] media/video-transformed.html [ Pass Failure ]
 
-crbug.com/691045 media/autoplay-muted.html [ Pass Timeout ]
-
 # These tests pass but images do not match because tests are stricter than the spec.
 #crbug.com/492664 external/wpt/css/css-writing-modes-3/text-combine-upright-value-all-001.html [ Failure ]
 #crbug.com/492664 external/wpt/css/css-writing-modes-3/text-combine-upright-value-all-002.html [ Failure ]
@@ -1234,7 +1233,6 @@
 
 crbug.com/613887 http/tests/preload/meta-viewport-link-headers.html [ Failure Pass ]
 crbug.com/613887 virtual/mojo-loading/http/tests/preload/meta-viewport-link-headers.html [ Failure Pass ]
-crbug.com/564403 [ Win Debug ] http/tests/inspector/service-workers/service-worker-manager.html [ Failure Pass Timeout ]
 
 crbug.com/306222 fast/hidpi/image-srcset-relative-svg-canvas.html [ Skip ]
 crbug.com/306222 fast/hidpi/image-srcset-relative-svg-canvas-2x.html [ Skip ]
@@ -1296,8 +1294,6 @@
 crbug.com/417782 virtual/rootlayerscrolls/fast/scrolling/scrollbar-tickmarks-styled.html [ Failure ]
 crbug.com/417782 virtual/rootlayerscrolls/fast/scrolling/scrollbar-tickmarks-styled-after-onload.html [ Failure ]
 
-crbug.com/651343 fast/text/international/inline-plaintext-relayout-with-leading-neutrals.html [ Pass Failure ]
-
 crbug.com/574283 [ Mac ] fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-anchors.html [ Skip ]
 crbug.com/574283 [ Mac ] virtual/scroll_customization/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-anchors.html [ Skip ]
 crbug.com/574283 [ Mac ] virtual/threaded/fast/scroll-behavior/first-scroll-runs-on-compositor.html [ Skip ]
@@ -1655,8 +1651,6 @@
 crbug.com/564109 [ Win7 ]  virtual/mojo-loading/http/tests/webfont/font-display.html [ Pass Failure ]
 crbug.com/564109 [ Win7 ]  virtual/mojo-loading/http/tests/webfont/font-display-intervention.html [ Pass Failure ]
 
-crbug.com/581468 http/tests/inspector/resource-tree/resource-tree-non-unique-url.html [ Pass Failure ]
-
 crbug.com/399951 http/tests/mime/javascript-mimetype-usecounters.html [ Pass Failure ]
 crbug.com/399951 virtual/mojo-loading/http/tests/mime/javascript-mimetype-usecounters.html [ Pass Failure ]
 
@@ -1866,6 +1860,8 @@
 crbug.com/626703 external/wpt/domxpath/001.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/css/css-display-3/display-contents-dynamic-before-after-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-display-3/display-contents-dynamic-before-after-first-letter-001.html [ Failure ]
 crbug.com/626703 external/wpt/FileAPI/url/url_createobjecturl_file_img-manual.html [ Skip ]
 crbug.com/626703 external/wpt/html/browsers/offline/browser-state/navigator_online_event-manual.html [ Skip ]
 crbug.com/626703 external/wpt/html/browsers/offline/manifest_main_empty-manual.html [ Skip ]
@@ -2423,39 +2419,28 @@
 crbug.com/707359 [ Mac ] fast/css-grid-layout/grid-self-baseline-vertical-rl-05.html [ Failure ]
 
 # [css-align]
-#crbug.com/703584 external/wpt/css/css-align-3/content-distribution/place-content-shorthand-001.html [ Failure ]
-#crbug.com/703584 external/wpt/css/css-align-3/content-distribution/place-content-shorthand-002.html [ Failure ]
-#crbug.com/703584 external/wpt/css/css-align-3/content-distribution/place-content-shorthand-003.html [ Failure ]
-#crbug.com/703584 external/wpt/css/css-align-3/content-distribution/place-content-shorthand-004.html [ Failure ]
-#crbug.com/703584 external/wpt/css/css-align-3/content-distribution/place-content-shorthand-005.html [ Failure ]
-#crbug.com/703584 external/wpt/css/css-align-3/content-distribution/place-content-shorthand-006.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/default-alignment/place-items-shorthand-001.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/default-alignment/place-items-shorthand-002.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/default-alignment/place-items-shorthand-003.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/default-alignment/place-items-shorthand-004.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/default-alignment/place-items-shorthand-005.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/default-alignment/place-items-shorthand-006.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/self-alignment/place-self-shorthand-001.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/self-alignment/place-self-shorthand-002.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/self-alignment/place-self-shorthand-003.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/self-alignment/place-self-shorthand-004.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/self-alignment/place-self-shorthand-005.html [ Failure ]
-#crbug.com/668639 external/wpt/css/css-align-3/self-alignment/place-self-shorthand-006.html [ Failure ]
+crbug.com/668639 external/wpt/css/css-align-3/default-alignment/place-items-shorthand-006.html [ Failure ]
+crbug.com/668639 external/wpt/css/css-align-3/self-alignment/place-self-shorthand-006.html [ Failure ]
+crbug.com/708121 external/wpt/css/css-align-3/distribution-values/space-evenly-001.html [ Failure ]
 
 # [selectors-4]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-001.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-002.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-003.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-004.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-005.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-006.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-shadow-001.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-shadow-002.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-shadow-003.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-shadow-004.html [ Failure ]
-#crbug.com/617371 external/wpt/css/selectors-4/focus-within-shadow-005.html [ Failure ]
-#crbug.com/576815 external/wpt/css/selectors-4/selectors-dir-selector-ltr-001.html [ Failure ]
-#crbug.com/576815 external/wpt/css/selectors-4/selectors-dir-selector-rtl-001.html [ Failure ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-001.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-002.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-003.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-004.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-005.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-006.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-007.html [ Failure ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-008.html [ Failure ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-009.html [ Failure ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-shadow-001.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-shadow-002.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-shadow-003.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-shadow-004.html [ Skip ]
+crbug.com/617371 external/wpt/css/selectors4/focus-within-shadow-005.html [ Skip ]
+crbug.com/706118 external/wpt/css/selectors4/hover-001-manual.html [ Skip ]
+crbug.com/576815 external/wpt/css/selectors4/selectors-dir-selector-ltr-001.html [ Failure ]
+crbug.com/576815 external/wpt/css/selectors4/selectors-dir-selector-rtl-001.html [ Failure ]
 crbug.com/576815 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/dir-style-01a.html [ Failure ]
 crbug.com/576815 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/dir-style-01b.html [ Failure ]
 crbug.com/576815 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/dir-style-02a.html [ Failure ]
@@ -2524,9 +2509,6 @@
 crbug.com/595993 external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 crbug.com/595993 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
 
-crbug.com/666628 http/tests/inspector-enabled/console-stack-overflow-source-url.html [ Pass Failure ]
-crbug.com/666628 virtual/mojo-loading/http/tests/inspector-enabled/console-stack-overflow-source-url.html [ Pass Failure ]
-
 crbug.com/619427 [ Mac Linux ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ]
 
 crbug.com/667371 inspector/elements/styles-1/color-aware-property-value-edit.html [ Pass Failure ]
@@ -2592,7 +2574,6 @@
 crbug.com/664819 virtual/mojo-loading/http/tests/security/isolatedWorld/bypass-main-world-csp-for-xhr.html [ Pass Failure ]
 crbug.com/664819 virtual/mojo-loading/http/tests/security/isolatedWorld/bypass-main-world-csp-iframes.html [ Pass Failure ]
 crbug.com/664819 virtual/mojo-loading/http/tests/security/isolatedWorld/events.html [ Pass Failure ]
-crbug.com/664839 virtual/mojo-loading/http/tests/security/link-crossorigin-preload-no-cors.html [ Pass Failure ]
 
 # Possible duplicate of crbug.com/498539
 # crbug.com/664843 inspector/elements/styles-4/styles-update-from-js.html [ Pass Failure ]
@@ -2641,10 +2622,7 @@
 
 crbug.com/678487 http/tests/inspector/resource-tree/resource-tree-reload.html [ Failure Timeout Pass ]
 crbug.com/678487 virtual/mojo-loading/http/tests/inspector/resource-tree/resource-tree-reload.html [ Failure Timeout Pass ]
-crbug.com/678489 http/tests/inspector/tracing/timeline-script-parse.html [ Timeout Pass ]
 crbug.com/678489 virtual/mojo-loading/http/tests/inspector/tracing/timeline-script-parse.html [ Timeout Pass ]
-crbug.com/678490 http/tests/media/media-source/mediasource-seek-beyond-duration.html [ Failure Pass ]
-crbug.com/678490 virtual/mojo-loading/http/tests/media/media-source/mediasource-seek-beyond-duration.html [ Failure Pass ]
 crbug.com/678492 http/tests/misc/webtiming-ssl.php [ Failure Pass ]
 crbug.com/678492 virtual/mojo-loading/http/tests/misc/webtiming-ssl.php [ Failure Pass ]
 crbug.com/678493 http/tests/permissions/chromium/test-request-window.html [ Timeout Pass ]
@@ -2683,10 +2661,6 @@
 
 # Importing 'fetch' tests from WPT.
 crbug.com/705490 external/wpt/fetch/api/basic/error-after-response.html [ Timeout Pass ]
-crbug.com/705490 external/wpt/fetch/api/redirect/redirect-location-worker.html [ Timeout Pass ]
-crbug.com/705490 external/wpt/fetch/api/redirect/redirect-location.html [ Timeout Pass ]
-crbug.com/705490 external/wpt/fetch/api/redirect/redirect-origin-worker.html [ Timeout Pass ]
-crbug.com/705490 external/wpt/fetch/api/request/request-cache-default-conditional.html [ Timeout Pass ]
 
 # Non-deterministic output, as the failing subtests dump timestamps.
 crbug.com/705490 external/wpt/fetch/api/request/request-cache-reload.html [ Failure ]
@@ -2707,8 +2681,6 @@
 crbug.com/694338 [ Mac10.9 ] fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Failure ]
 crbug.com/694338 [ Mac10.9 ] fast/forms/calendar-picker/calendar-picker-appearance-zoom200.html [ Failure ]
 
-crbug.com/697087 external/wpt/service-workers/service-worker/registration-iframe.https.html [ Pass Timeout ]
-
 crbug.com/697342 http/tests/push_messaging/permission-state-granted-in-document.html [ Pass Failure ]
 crbug.com/697342 virtual/mojo-loading/http/tests/push_messaging/permission-state-granted-in-document.html [ Pass Failure ]
 
diff --git a/third_party/WebKit/LayoutTests/W3CImportExpectations b/third_party/WebKit/LayoutTests/W3CImportExpectations
index 390b11fc..7686140e 100644
--- a/third_party/WebKit/LayoutTests/W3CImportExpectations
+++ b/third_party/WebKit/LayoutTests/W3CImportExpectations
@@ -289,7 +289,6 @@
 # external/wpt/innerText [ Pass ]
 external/wpt/js [ Skip ]
 external/wpt/lint [ Skip ]
-external/wpt/lint.whitelist [ Skip ]
 external/wpt/manifest [ Skip ]
 external/wpt/mathml [ Skip ]
 ## Owners: none; No tests in the directory.
diff --git a/third_party/WebKit/LayoutTests/bindings/blink-in-js-asan-crash-expected.txt b/third_party/WebKit/LayoutTests/bindings/blink-in-js-asan-crash-expected.txt
index 9fad658..c57c260 100644
--- a/third_party/WebKit/LayoutTests/bindings/blink-in-js-asan-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/bindings/blink-in-js-asan-crash-expected.txt
@@ -1 +1,2 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Test passes if it does not crash on ASan builds.  
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-in-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-in-composited-layer-expected.txt
index 3255aa6..c90a95b4 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-in-composited-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-in-composited-layer-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/editing/pasteboard/dragstart-contains-default-content-expected.txt b/third_party/WebKit/LayoutTests/editing/pasteboard/dragstart-contains-default-content-expected.txt
index d7f3e48..9c915e47 100644
--- a/third_party/WebKit/LayoutTests/editing/pasteboard/dragstart-contains-default-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/editing/pasteboard/dragstart-contains-default-content-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Simple test that the dragstart event contains the default data in the event.
 
 Select some text in this box and drag it.
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index 0fae601..210b98e 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -8769,6 +8769,30 @@
      {}
     ]
    ],
+   "css/css-display-3/display-contents-dynamic-before-after-001.html": [
+    [
+     "/css/css-display-3/display-contents-dynamic-before-after-001.html",
+     [
+      [
+       "/css/css-display-3/display-contents-pass-green-no-red-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-display-3/display-contents-dynamic-before-after-first-letter-001.html": [
+    [
+     "/css/css-display-3/display-contents-dynamic-before-after-first-letter-001.html",
+     [
+      [
+       "/css/css-display-3/display-contents-pass-green-no-red-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-display-3/display-contents-dynamic-flex-001-inline.html": [
     [
      "/css/css-display-3/display-contents-dynamic-flex-001-inline.html",
@@ -37318,6 +37342,31 @@
      {}
     ]
    ],
+   "beacon/headers/header-referrer-no-referrer-when-downgrade.https-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "beacon/headers/header-referrer-same-origin-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "beacon/headers/header-referrer-strict-origin-when-cross-origin.https-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "beacon/headers/header-referrer-strict-origin.https-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "beacon/headers/header-referrer-unsafe-url.https-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "beacon/headers/header-referrer.js": [
     [
      {}
@@ -38958,6 +39007,26 @@
      {}
     ]
    ],
+   "css-timing-1/cubic-bezier-timing-functions-output-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css-timing-1/frames-timing-functions-output-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css-timing-1/frames-timing-functions-syntax-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css-timing-1/step-timing-functions-output-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "css-timing-1/testcommon.js": [
     [
      {}
@@ -53493,6 +53562,11 @@
      {}
     ]
    ],
+   "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-001-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/resources/close-self.html": [
     [
      {}
@@ -53658,57 +53732,82 @@
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/001-1.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_parent-001-iframe-1.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/002-1.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_parent-002-iframe.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/existing.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_parent-002-window.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/parent-iframe-1.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_parent-003-iframe.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/parent-iframe-2.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_parent-003-window.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/parent-iframe-3.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-1.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-1.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-2.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-2.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_self-001-iframe.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/parent-top-nested.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_self-002-iframe.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/parent-top-replace.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_top-002-window.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/parent-top.html": [
+   "html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-1.html": [
+    [
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-2.html": [
+    [
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/resources/choose-default-002-iframe.html": [
+    [
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/resources/choose-existing-001-iframe.html": [
+    [
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/resources/open-in-_parent.html": [
+    [
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/resources/open-in-_top.html": [
     [
      {}
     ]
@@ -53718,22 +53817,17 @@
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/resources/post-to-top-or-close.html": [
-    [
-     {}
-    ]
-   ],
    "html/browsers/windows/browsing-context-names/resources/post-to-top.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/self1.html": [
+   "html/browsers/windows/browsing-context-names/resources/report-has-opener.html": [
     [
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/self2.html": [
+   "html/browsers/windows/browsing-context-names/resources/report-is-top.html": [
     [
      {}
     ]
@@ -60073,6 +60167,11 @@
      {}
     ]
    ],
+   "html/semantics/interactive-elements/the-dialog-element/centering-iframe.sub.html": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/interactive-elements/the-dialog-element/contains.json": [
     [
      {}
@@ -61833,6 +61932,11 @@
      {}
     ]
    ],
+   "mediacapture-record/idlharness-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "mediacapture-streams/GUM-deny.https-expected.txt": [
     [
      {}
@@ -65533,11 +65637,6 @@
      {}
     ]
    ],
-   "service-workers/cache-storage/serviceworker/cache-put.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt": [
     [
      {}
@@ -65553,11 +65652,6 @@
      {}
     ]
    ],
-   "service-workers/cache-storage/window/cache-put.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "service-workers/cache-storage/window/cache-storage.https-expected.txt": [
     [
      {}
@@ -65578,11 +65672,6 @@
      {}
     ]
    ],
-   "service-workers/cache-storage/worker/cache-put.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "service-workers/cache-storage/worker/cache-storage.https-expected.txt": [
     [
      {}
@@ -65598,6 +65687,11 @@
      {}
     ]
    ],
+   "service-workers/service-worker/ServiceWorkerGlobalScope/resources/error-worker.js": [
+    [
+     {}
+    ]
+   ],
    "service-workers/service-worker/ServiceWorkerGlobalScope/resources/extendable-message-event-constructor-worker.js": [
     [
      {}
@@ -66238,6 +66332,11 @@
      {}
     ]
    ],
+   "service-workers/service-worker/resources/import-mime-type-worker.py": [
+    [
+     {}
+    ]
+   ],
    "service-workers/service-worker/resources/indexeddb-worker.js": [
     [
      {}
@@ -66823,6 +66922,11 @@
      {}
     ]
    ],
+   "storage/interfaces.https-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "storage/interfaces.idl": [
     [
      {}
@@ -66858,11 +66962,31 @@
      {}
     ]
    ],
+   "streams/piping/close-propagation-forward-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "streams/piping/close-propagation-forward.dedicatedworker-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "streams/piping/close-propagation-forward.js": [
     [
      {}
     ]
    ],
+   "streams/piping/close-propagation-forward.serviceworker.https-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "streams/piping/close-propagation-forward.sharedworker-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "streams/piping/error-propagation-backward.js": [
     [
      {}
@@ -66883,31 +67007,11 @@
      {}
     ]
    ],
-   "streams/piping/multiple-propagation-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/piping/multiple-propagation.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/piping/multiple-propagation.js": [
     [
      {}
     ]
    ],
-   "streams/piping/multiple-propagation.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/piping/multiple-propagation.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/piping/pipe-through-expected.txt": [
     [
      {}
@@ -68078,6 +68182,11 @@
      {}
     ]
    ],
+   "webrtc/rtcpeerconnection/canTrickleIceCandidates-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "webrtc/rtcpeerconnection/iceGatheringState-expected.txt": [
     [
      {}
@@ -76693,6 +76802,12 @@
      {}
     ]
    ],
+   "cssom/css-style-attribute-modifications.html": [
+    [
+     "/cssom/css-style-attribute-modifications.html",
+     {}
+    ]
+   ],
    "cssom/historical.html": [
     [
      "/cssom/historical.html",
@@ -82305,63 +82420,93 @@
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/001.html": [
+   "html/browsers/windows/browsing-context-names/choose-_blank-001.html": [
     [
-     "/html/browsers/windows/browsing-context-names/001.html",
+     "/html/browsers/windows/browsing-context-names/choose-_blank-001.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/002.html": [
+   "html/browsers/windows/browsing-context-names/choose-_blank-002.html": [
     [
-     "/html/browsers/windows/browsing-context-names/002.html",
+     "/html/browsers/windows/browsing-context-names/choose-_blank-002.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/browsing-context-_blank.html": [
+   "html/browsers/windows/browsing-context-names/choose-_blank-003.html": [
     [
-     "/html/browsers/windows/browsing-context-names/browsing-context-_blank.html",
+     "/html/browsers/windows/browsing-context-names/choose-_blank-003.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/browsing-context-choose-existing.html": [
+   "html/browsers/windows/browsing-context-names/choose-_parent-001.html": [
     [
-     "/html/browsers/windows/browsing-context-names/browsing-context-choose-existing.html",
+     "/html/browsers/windows/browsing-context-names/choose-_parent-001.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/browsing-context-choose-parent-001.html": [
+   "html/browsers/windows/browsing-context-names/choose-_parent-002.html": [
     [
-     "/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-001.html",
+     "/html/browsers/windows/browsing-context-names/choose-_parent-002.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/browsing-context-choose-parent-002.html": [
+   "html/browsers/windows/browsing-context-names/choose-_parent-003.html": [
     [
-     "/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-002.html",
+     "/html/browsers/windows/browsing-context-names/choose-_parent-003.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/browsing-context-choose-parent-003.html": [
+   "html/browsers/windows/browsing-context-names/choose-_parent-004.html": [
     [
-     "/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-003.html",
+     "/html/browsers/windows/browsing-context-names/choose-_parent-004.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/browsing-context-choose-parent-004.html": [
+   "html/browsers/windows/browsing-context-names/choose-_self-001.html": [
     [
-     "/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-004.html",
+     "/html/browsers/windows/browsing-context-names/choose-_self-001.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/browsing-context-choose-self-1.html": [
+   "html/browsers/windows/browsing-context-names/choose-_self-002.html": [
     [
-     "/html/browsers/windows/browsing-context-names/browsing-context-choose-self-1.html",
+     "/html/browsers/windows/browsing-context-names/choose-_self-002.html",
      {}
     ]
    ],
-   "html/browsers/windows/browsing-context-names/browsing-context-default-name.html": [
+   "html/browsers/windows/browsing-context-names/choose-_top-001.html": [
     [
-     "/html/browsers/windows/browsing-context-names/browsing-context-default-name.html",
+     "/html/browsers/windows/browsing-context-names/choose-_top-001.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/choose-_top-002.html": [
+    [
+     "/html/browsers/windows/browsing-context-names/choose-_top-002.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/choose-_top-003.html": [
+    [
+     "/html/browsers/windows/browsing-context-names/choose-_top-003.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/choose-default-001.html": [
+    [
+     "/html/browsers/windows/browsing-context-names/choose-default-001.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/choose-default-002.html": [
+    [
+     "/html/browsers/windows/browsing-context-names/choose-default-002.html",
+     {}
+    ]
+   ],
+   "html/browsers/windows/browsing-context-names/choose-existing-001.html": [
+    [
+     "/html/browsers/windows/browsing-context-names/choose-existing-001.html",
      {}
     ]
    ],
@@ -85747,6 +85892,12 @@
      {}
     ]
    ],
+   "html/semantics/interactive-elements/the-dialog-element/centering.html": [
+    [
+     "/html/semantics/interactive-elements/the-dialog-element/centering.html",
+     {}
+    ]
+   ],
    "html/semantics/interactive-elements/the-dialog-element/dialog-close.html": [
     [
      "/html/semantics/interactive-elements/the-dialog-element/dialog-close.html",
@@ -90407,6 +90558,18 @@
      {}
     ]
    ],
+   "navigation-timing/nav2_test_document_replaced.html": [
+    [
+     "/navigation-timing/nav2_test_document_replaced.html",
+     {}
+    ]
+   ],
+   "navigation-timing/nav2_test_frame_removed.html": [
+    [
+     "/navigation-timing/nav2_test_frame_removed.html",
+     {}
+    ]
+   ],
    "navigation-timing/nav2_test_instance_accessible_from_the_start.html": [
     [
      "/navigation-timing/nav2_test_instance_accessible_from_the_start.html",
@@ -99419,6 +99582,12 @@
      {}
     ]
    ],
+   "service-workers/service-worker/ServiceWorkerGlobalScope/service-worker-error-event.https.html": [
+    [
+     "/service-workers/service-worker/ServiceWorkerGlobalScope/service-worker-error-event.https.html",
+     {}
+    ]
+   ],
    "service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https.html": [
     [
      "/service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https.html",
@@ -101614,7 +101783,9 @@
    "svg/interfaces.html": [
     [
      "/svg/interfaces.html",
-     {}
+     {
+      "timeout": "long"
+     }
     ]
    ],
    "touch-events/create-touch-touchlist.html": [
@@ -105645,7 +105816,7 @@
    "support"
   ],
   "./check_stability.py": [
-   "8c416e2ed1af63ca9ad682f27d50692a3e51949b",
+   "f818356e2394747a7c0828cd1e2eabeb73265601",
    "support"
   ],
   "./ci_built_diff.sh": [
@@ -107340,6 +107511,10 @@
    "0c959d5fa41c3db70c326b83e064b8261a6f90b4",
    "testharness"
   ],
+  "beacon/headers/header-referrer-no-referrer-when-downgrade.https-expected.txt": [
+   "d7120d5fd0d4f1a0503339bb4a86345a64fd3cbb",
+   "support"
+  ],
   "beacon/headers/header-referrer-no-referrer-when-downgrade.https.html": [
    "273c7d0110d5efc9fac0029cd257256894d3eb4b",
    "testharness"
@@ -107356,18 +107531,34 @@
    "1329850363c327533f50e509c6a48f6e4b1ed4bb",
    "testharness"
   ],
+  "beacon/headers/header-referrer-same-origin-expected.txt": [
+   "e7c2fc15dd757bc7c092d59c70eb1c4c7fc3eec4",
+   "support"
+  ],
   "beacon/headers/header-referrer-same-origin.html": [
    "9701f2f0a83c6eeefe781d7de2c0cdbcff38b58e",
    "testharness"
   ],
+  "beacon/headers/header-referrer-strict-origin-when-cross-origin.https-expected.txt": [
+   "e2b79cc679f34a14700a94480b87371ae99abe5a",
+   "support"
+  ],
   "beacon/headers/header-referrer-strict-origin-when-cross-origin.https.html": [
    "295ef746c475fca0ae8b492375a48948b4ea19c3",
    "testharness"
   ],
+  "beacon/headers/header-referrer-strict-origin.https-expected.txt": [
+   "8fcf54d68ca6a179335e3ab93a8a6d5cebd3b239",
+   "support"
+  ],
   "beacon/headers/header-referrer-strict-origin.https.html": [
    "295ef746c475fca0ae8b492375a48948b4ea19c3",
    "testharness"
   ],
+  "beacon/headers/header-referrer-unsafe-url.https-expected.txt": [
+   "cd3cfb43cf8a6c7e1fafaa4262f0fd7df7633872",
+   "support"
+  ],
   "beacon/headers/header-referrer-unsafe-url.https.html": [
    "a7b6e697be165124ed5d6846335c8d3a38ee98f5",
    "testharness"
@@ -108933,7 +109124,7 @@
    "support"
   ],
   "content-security-policy/generic/generic-0_1-img-src.html": [
-   "0af19ad686c41332aa090ba3cfe240ecd9f990ff",
+   "b9e456586e6acc8f56864ab36bea8c9ff67b3959",
    "testharness"
   ],
   "content-security-policy/generic/generic-0_1-img-src.html.sub.headers": [
@@ -108941,7 +109132,7 @@
    "support"
   ],
   "content-security-policy/generic/generic-0_1-script-src.html": [
-   "cb2a8523a7519c3b0458f726aa97bca08ac92c3c",
+   "d1d01090fb8ae7f33357d0d4d75e2606d637a881",
    "testharness"
   ],
   "content-security-policy/generic/generic-0_1-script-src.html.sub.headers": [
@@ -109784,18 +109975,34 @@
    "ff4d7ca289ea20fa00bca535fdcf929876a2278b",
    "testharness"
   ],
+  "css-timing-1/cubic-bezier-timing-functions-output-expected.txt": [
+   "55d3fc7b0d318a2cbf418f5b386b0fac8eae0023",
+   "support"
+  ],
   "css-timing-1/cubic-bezier-timing-functions-output.html": [
    "77a45437209844f7e5128bd6aa2efeeacf876187",
    "testharness"
   ],
+  "css-timing-1/frames-timing-functions-output-expected.txt": [
+   "fe0c5ed2207897d4c7a9af3d2a2be745e9f83800",
+   "support"
+  ],
   "css-timing-1/frames-timing-functions-output.html": [
    "fe9a931466f31605f1a09d5f95589cc54ee34663",
    "testharness"
   ],
+  "css-timing-1/frames-timing-functions-syntax-expected.txt": [
+   "613677c126bf89209ea3ad481f4c94c83fbe6f2c",
+   "support"
+  ],
   "css-timing-1/frames-timing-functions-syntax.html": [
    "7ac5eef9cec74746aa076912285398f525b01c06",
    "testharness"
   ],
+  "css-timing-1/step-timing-functions-output-expected.txt": [
+   "aa33ab0aed875bb1206592f8f854bd1a1b5cd45e",
+   "support"
+  ],
   "css-timing-1/step-timing-functions-output.html": [
    "4b514aac1efca5813e5a551290f8c84f678bd41d",
    "testharness"
@@ -111472,6 +111679,14 @@
    "fafcbafe333e22424dcf715e56d2cca8f9da3272",
    "testharness"
   ],
+  "css/css-display-3/display-contents-dynamic-before-after-001.html": [
+   "9142d9f1ad5b5e9a5f5705a44c962084f023a3c6",
+   "reftest"
+  ],
+  "css/css-display-3/display-contents-dynamic-before-after-first-letter-001.html": [
+   "6b14a221a120cd134bda7826a12f92117e170a59",
+   "reftest"
+  ],
   "css/css-display-3/display-contents-dynamic-flex-001-inline.html": [
    "196c96cd9a9899484154879005be85368b24f800",
    "reftest"
@@ -132320,6 +132535,10 @@
    "3a0e6f64f70f863d679e537c4bfb76aaa0d3598a",
    "testharness"
   ],
+  "cssom/css-style-attribute-modifications.html": [
+   "9199534f3b6cc473832562b1701ade3a05dde172",
+   "testharness"
+  ],
   "cssom/historical.html": [
    "2c78218b89efb9bdf60cf708920be142051347c7",
    "testharness"
@@ -132873,7 +133092,7 @@
    "testharness"
   ],
   "dom/lists/DOMTokenList-iteration-expected.txt": [
-   "7f3f1f0b92a9f1944312dde73d4fb85b5318abcd",
+   "b38c2de90e12aac30ed19bd3799738d9b815d8d6",
    "support"
   ],
   "dom/lists/DOMTokenList-iteration.html": [
@@ -136349,11 +136568,11 @@
    "testharness"
   ],
   "fetch/api/request/request-init-003.sub-expected.txt": [
-   "8f2886e93fb0672805fa5b0569ba2a89ffeb6e3e",
+   "ba6b11b48f7cc8a2372cc332a8ea30734875d7f8",
    "support"
   ],
   "fetch/api/request/request-init-003.sub.html": [
-   "059edc7e857af7231abc1434f3dcebb35229f459",
+   "f3084c91090e9c86c5586e947e63baf4990b582e",
    "testharness"
   ],
   "fetch/api/request/request-keepalive-quota-expected.txt": [
@@ -138736,6 +138955,10 @@
    "c4f0da17299d37f70b316d709dbde0ff6a1f62fb",
    "support"
   ],
+  "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-001-expected.txt": [
+   "49897f58e260ac5506a869ff0547130c0c103d43",
+   "support"
+  ],
   "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-001.html": [
    "4d40dc6b41bd10fcdb1a37894827b601b2168e1c",
    "testharness"
@@ -138992,108 +139215,144 @@
    "1c8adae8b27e8310be0ac7a26cd586b685df001e",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/001-1.html": [
-   "7f9396d2baeeafd98832c7fe5a0a1474fc358e98",
-   "support"
-  ],
-  "html/browsers/windows/browsing-context-names/001.html": [
-   "1b127e23e7991080fc01b24c1924822642480744",
-   "testharness"
-  ],
-  "html/browsers/windows/browsing-context-names/002-1.html": [
-   "f70339fff42414af8441fdf4be42151839989839",
-   "support"
-  ],
-  "html/browsers/windows/browsing-context-names/002.html": [
-   "ed586ee147452ba6cb8d90782b266807f8b7975e",
-   "testharness"
-  ],
-  "html/browsers/windows/browsing-context-names/browsing-context-_blank.html": [
+  "html/browsers/windows/browsing-context-names/choose-_blank-001.html": [
    "4a1a9ff6c913291edce2339faa443b6da2e5fe74",
    "testharness"
   ],
-  "html/browsers/windows/browsing-context-names/browsing-context-choose-existing.html": [
-   "381a1a09c09e8c43849a7b8f4d120507b2196aeb",
+  "html/browsers/windows/browsing-context-names/choose-_blank-002.html": [
+   "37fffaad1ad4136a759507ab0565896e8ed7e0c5",
    "testharness"
   ],
-  "html/browsers/windows/browsing-context-names/browsing-context-choose-parent-001.html": [
-   "4767179a7c78a8e0798997dace46b47ec5d902ad",
+  "html/browsers/windows/browsing-context-names/choose-_blank-003.html": [
+   "e3f7b085257c45bb2a8a86d6a7d7ff9b5191dbf4",
    "testharness"
   ],
-  "html/browsers/windows/browsing-context-names/browsing-context-choose-parent-002.html": [
-   "7d1692f649951585d8ce60bd7cc9c4470f255b95",
+  "html/browsers/windows/browsing-context-names/choose-_parent-001.html": [
+   "a03843100fba5a753ae3a4451cd5b03ec8808e56",
    "testharness"
   ],
-  "html/browsers/windows/browsing-context-names/browsing-context-choose-parent-003.html": [
-   "61ebac870a8c1e030468f5cfd4f6e22171c015e7",
+  "html/browsers/windows/browsing-context-names/choose-_parent-002.html": [
+   "7ef76d4690da42586f3e673413d943da12527001",
    "testharness"
   ],
-  "html/browsers/windows/browsing-context-names/browsing-context-choose-parent-004.html": [
-   "6341211c1c38b6b3e3b09329c71bd0b8e79e2f2f",
+  "html/browsers/windows/browsing-context-names/choose-_parent-003.html": [
+   "b12b3005f9227e45f2c92dd7ca5aad339cbdae25",
    "testharness"
   ],
-  "html/browsers/windows/browsing-context-names/browsing-context-choose-self-1.html": [
-   "f957a910476b1294de97ef69e671e84d201ca5c0",
+  "html/browsers/windows/browsing-context-names/choose-_parent-004.html": [
+   "7ecba630d8fa01fde65abc0f6b135363707b91df",
    "testharness"
   ],
-  "html/browsers/windows/browsing-context-names/browsing-context-default-name.html": [
-   "12ab8a79c7239a712cebfa171c4271fae4a49b0e",
+  "html/browsers/windows/browsing-context-names/choose-_self-001.html": [
+   "04add262884e7e19a290ebd40ddb90107055e906",
    "testharness"
   ],
-  "html/browsers/windows/browsing-context-names/existing.html": [
-   "eb695cb2f8a126f0c32347d8716936fc288d0858",
+  "html/browsers/windows/browsing-context-names/choose-_self-002.html": [
+   "4804c851ba55a65d24e88456c0021b32b13fae44",
+   "testharness"
+  ],
+  "html/browsers/windows/browsing-context-names/choose-_top-001.html": [
+   "b85f6e0bdcddba5cde28bc088ee0b81d6506fde8",
+   "testharness"
+  ],
+  "html/browsers/windows/browsing-context-names/choose-_top-002.html": [
+   "8ec181327440e8ef5516b1cd23d1733355015ac5",
+   "testharness"
+  ],
+  "html/browsers/windows/browsing-context-names/choose-_top-003.html": [
+   "6c1fb058b4ce37789baf8bdf6dd6ab6695e54f78",
+   "testharness"
+  ],
+  "html/browsers/windows/browsing-context-names/choose-default-001.html": [
+   "cebca758b8fc07fbbf9a99700acc464cd67d397e",
+   "testharness"
+  ],
+  "html/browsers/windows/browsing-context-names/choose-default-002.html": [
+   "0a6b8b82b44289c5ff6212857a1a174cf7d9d9d7",
+   "testharness"
+  ],
+  "html/browsers/windows/browsing-context-names/choose-existing-001.html": [
+   "175492ca2ea7d2ce000466e895ff22f29b77df93",
+   "testharness"
+  ],
+  "html/browsers/windows/browsing-context-names/resources/choose-_parent-001-iframe-1.html": [
+   "a3c60408fc0d545e3a7ca8161f04d095ebdba02a",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/parent-iframe-1.html": [
-   "6b1687e52c5b53e6d7a0bb4fed5bed7291154ff2",
+  "html/browsers/windows/browsing-context-names/resources/choose-_parent-002-iframe.html": [
+   "8df4501c8bf73f5c1daed2986eba8adeb211a6cc",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/parent-iframe-2.html": [
-   "95f916c7b914088b59ce6addb5c639f4dc158de1",
+  "html/browsers/windows/browsing-context-names/resources/choose-_parent-002-window.html": [
+   "85ad3ee8ec0e3028f993fd776de6ddb5948f750a",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/parent-iframe-3.html": [
+  "html/browsers/windows/browsing-context-names/resources/choose-_parent-003-iframe.html": [
    "169dc483de493c5c4f0383063dc1d9aad2b41073",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-1.html": [
-   "638ed0ec62a27b3acc1d0acb60bd5113a1c2988c",
+  "html/browsers/windows/browsing-context-names/resources/choose-_parent-003-window.html": [
+   "e8f5e55f930899229252a04b2d698abddf73ffb2",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-2.html": [
-   "e6ab1f0e5aa36e69467ae1f69e4682d40ae692a7",
+  "html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-1.html": [
+   "050927f475859690243f6039036bd8dd5bc72992",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/parent-top-nested.html": [
-   "03b7ece0831f8059f687135be899f4de2831568d",
+  "html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-2.html": [
+   "39aa44e0efbea17158e4aeea731a22f8b4946006",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/parent-top-replace.html": [
-   "1f3d056bbb472a730ee2f40085c51fbb279ad52f",
+  "html/browsers/windows/browsing-context-names/resources/choose-_self-001-iframe.html": [
+   "3ad6ddf88d32b0733fe1041636081c33c4611ecc",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/parent-top.html": [
-   "e2247fbb30c24e014d1743cd9df91bf0195fbfe0",
+  "html/browsers/windows/browsing-context-names/resources/choose-_self-002-iframe.html": [
+   "adc1c8ac78adbdd1455f8e22289a9bfef079ca5c",
+   "support"
+  ],
+  "html/browsers/windows/browsing-context-names/resources/choose-_top-002-window.html": [
+   "be64018ffa35bf3dc1200111fc25f7d1b520fc41",
+   "support"
+  ],
+  "html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-1.html": [
+   "dd62814246f87a9847b5c2de1a6537a7daa81bf4",
+   "support"
+  ],
+  "html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-2.html": [
+   "8e940565ae03d662d1dc878115d9665a5f01a837",
+   "support"
+  ],
+  "html/browsers/windows/browsing-context-names/resources/choose-default-002-iframe.html": [
+   "b4fddf4509e4922bc2baad24247d72f4fc41f718",
+   "support"
+  ],
+  "html/browsers/windows/browsing-context-names/resources/choose-existing-001-iframe.html": [
+   "7e71b6f0835a78ffbd7e0731ce271d78b20890c8",
+   "support"
+  ],
+  "html/browsers/windows/browsing-context-names/resources/open-in-_parent.html": [
+   "95f916c7b914088b59ce6addb5c639f4dc158de1",
+   "support"
+  ],
+  "html/browsers/windows/browsing-context-names/resources/open-in-_top.html": [
+   "6fad2b581eb588c91923bad0e3b780089e5849df",
    "support"
   ],
   "html/browsers/windows/browsing-context-names/resources/post-to-opener.html": [
    "a724ee03afea915ba9a3636e6915db8bda801212",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/resources/post-to-top-or-close.html": [
-   "83eae63250fb3ad9f146283e9387b0e18284d4f7",
-   "support"
-  ],
   "html/browsers/windows/browsing-context-names/resources/post-to-top.html": [
    "c2b557ab78403aa520346da294e1c406dd37ebda",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/self1.html": [
-   "7c86c871972f456c6b97be7b46fa7d6ce87a3a80",
+  "html/browsers/windows/browsing-context-names/resources/report-has-opener.html": [
+   "8cc69db12b379eb57c2a1d3d3321a4034fa2e301",
    "support"
   ],
-  "html/browsers/windows/browsing-context-names/self2.html": [
-   "fd91e9250c182da49ab39220a656348c29c84048",
+  "html/browsers/windows/browsing-context-names/resources/report-is-top.html": [
+   "e65bff43b66ee9f7b6aa5b061fff835b199e1745",
    "support"
   ],
   "html/browsers/windows/browsing-context-window.html": [
@@ -147416,6 +147675,14 @@
    "e3e7f3973cf8f9b466d4f22d1ec3b9b9241fb906",
    "support"
   ],
+  "html/semantics/interactive-elements/the-dialog-element/centering-iframe.sub.html": [
+   "eb00778210365e13b33e194da1b9e870d7e39153",
+   "support"
+  ],
+  "html/semantics/interactive-elements/the-dialog-element/centering.html": [
+   "47a8ae7ca2a2d06ee042213d0800e0da37b1fe10",
+   "testharness"
+  ],
   "html/semantics/interactive-elements/the-dialog-element/contains.json": [
    "340924bc329569ce605ce228619d95f09f335ec5",
    "support"
@@ -150380,6 +150647,10 @@
    "29d5649ff97ca0631f8c841425a88248525f9774",
    "testharness"
   ],
+  "mediacapture-record/idlharness-expected.txt": [
+   "e04fb8879cf82709e5f6eaa40d1e64918665ef9d",
+   "support"
+  ],
   "mediacapture-record/idlharness.html": [
    "d96f50512a47fed449151b716d838ac10d23f47f",
    "testharness"
@@ -152232,6 +152503,14 @@
    "22ff29845d8417ccbae58123efe8e1c9b9c81eaf",
    "testharness"
   ],
+  "navigation-timing/nav2_test_document_replaced.html": [
+   "b36ccb9a595ea5ab318f53dbff75b3c8f7c5b044",
+   "testharness"
+  ],
+  "navigation-timing/nav2_test_frame_removed.html": [
+   "8ed53df25ff06d2affa9c438e3bb85d6dc9f34a1",
+   "testharness"
+  ],
   "navigation-timing/nav2_test_instance_accessible_from_the_start.html": [
    "79bd2cff7e144ef3d1b093c542ad69302a0138b3",
    "testharness"
@@ -160673,7 +160952,7 @@
    "support"
   ],
   "service-workers/cache-storage/serviceworker/cache-add.https-expected.txt": [
-   "29b6b9d6234097f6e28efb9abb06920fb9fa7d87",
+   "4ff0ad47d20edcf6372d35f88a22a62a7c4e6ce4",
    "support"
   ],
   "service-workers/cache-storage/serviceworker/cache-add.https.html": [
@@ -160689,17 +160968,13 @@
    "testharness"
   ],
   "service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt": [
-   "17557e1cb1470ec4f86ae816a8f39b0347dc2a57",
+   "66e9b97e7e7fdfa48be808fbfe5e5ab73f30d992",
    "support"
   ],
   "service-workers/cache-storage/serviceworker/cache-matchAll.https.html": [
    "4c5a0d03953151cedf15e2b7e0b01679d2d0af51",
    "testharness"
   ],
-  "service-workers/cache-storage/serviceworker/cache-put.https-expected.txt": [
-   "7edbf157fdfb7b28d1ae5c88e6bd5fb9d3e70fa8",
-   "support"
-  ],
   "service-workers/cache-storage/serviceworker/cache-put.https.html": [
    "8678bebde6ef0c6e1f8ca7c7c5c40a5c2f04083d",
    "testharness"
@@ -160713,7 +160988,7 @@
    "testharness"
   ],
   "service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt": [
-   "6c986cc3af6f53090e62325aa433f9e02cc1b66c",
+   "43b7d2821f2754d1ff47f27ff7ebfae44f59b355",
    "support"
   ],
   "service-workers/cache-storage/serviceworker/cache-storage.https.html": [
@@ -160725,7 +161000,7 @@
    "testharness"
   ],
   "service-workers/cache-storage/window/cache-add.https-expected.txt": [
-   "6efe1ca94742b99558f3cce4157d98f34f41423b",
+   "ca6275929bb2b6b41101e60624c09612b80fd519",
    "support"
   ],
   "service-workers/cache-storage/window/cache-add.https.html": [
@@ -160741,17 +161016,13 @@
    "testharness"
   ],
   "service-workers/cache-storage/window/cache-matchAll.https-expected.txt": [
-   "d374c79612c859b147f454906a6648c06c07f3d8",
+   "f13b9e7c054609b797f36827bf3a086286b3956c",
    "support"
   ],
   "service-workers/cache-storage/window/cache-matchAll.https.html": [
    "f39bd1317aca437c9b5fddef2aaae907e05869b2",
    "testharness"
   ],
-  "service-workers/cache-storage/window/cache-put.https-expected.txt": [
-   "118ae85ee7c44132e87143f9c10efbfc9ec2bc19",
-   "support"
-  ],
   "service-workers/cache-storage/window/cache-put.https.html": [
    "1f0e133e01dc8ff3ede598d978719e775a913183",
    "testharness"
@@ -160765,7 +161036,7 @@
    "testharness"
   ],
   "service-workers/cache-storage/window/cache-storage.https-expected.txt": [
-   "111f8163a1a7ed9ef625ff9c8ce5f64b0eb705b6",
+   "32a7a37626e39abf01d98ff9a96c23b5c16acd6d",
    "support"
   ],
   "service-workers/cache-storage/window/cache-storage.https.html": [
@@ -160781,7 +161052,7 @@
    "testharness"
   ],
   "service-workers/cache-storage/worker/cache-add.https-expected.txt": [
-   "6efe1ca94742b99558f3cce4157d98f34f41423b",
+   "ca6275929bb2b6b41101e60624c09612b80fd519",
    "support"
   ],
   "service-workers/cache-storage/worker/cache-add.https.html": [
@@ -160797,17 +161068,13 @@
    "testharness"
   ],
   "service-workers/cache-storage/worker/cache-matchAll.https-expected.txt": [
-   "d374c79612c859b147f454906a6648c06c07f3d8",
+   "f13b9e7c054609b797f36827bf3a086286b3956c",
    "support"
   ],
   "service-workers/cache-storage/worker/cache-matchAll.https.html": [
    "c5cb31692e541e4ad720ccc2c8e82e0a071fa5f8",
    "testharness"
   ],
-  "service-workers/cache-storage/worker/cache-put.https-expected.txt": [
-   "118ae85ee7c44132e87143f9c10efbfc9ec2bc19",
-   "support"
-  ],
   "service-workers/cache-storage/worker/cache-put.https.html": [
    "be4b7818ee9c31360a14d3a64a85ad6efe0cf189",
    "testharness"
@@ -160821,7 +161088,7 @@
    "testharness"
   ],
   "service-workers/cache-storage/worker/cache-storage.https-expected.txt": [
-   "111f8163a1a7ed9ef625ff9c8ce5f64b0eb705b6",
+   "32a7a37626e39abf01d98ff9a96c23b5c16acd6d",
    "support"
   ],
   "service-workers/cache-storage/worker/cache-storage.https.html": [
@@ -160856,6 +161123,10 @@
    "559815205e99f825fdc0a0f2564e7e25586f3c05",
    "support"
   ],
+  "service-workers/service-worker/ServiceWorkerGlobalScope/resources/error-worker.js": [
+   "41b92697bbc0b75ce1087f8437afefb52ea7ce7a",
+   "support"
+  ],
   "service-workers/service-worker/ServiceWorkerGlobalScope/resources/extendable-message-event-constructor-worker.js": [
    "1ac8fb8c675c398257be0be676872b2944418aa8",
    "support"
@@ -160912,6 +161183,10 @@
    "93d2aace8471bcb120a3d7c2029af360220e9b91",
    "support"
   ],
+  "service-workers/service-worker/ServiceWorkerGlobalScope/service-worker-error-event.https.html": [
+   "f5f263a3c0f9e154f8b43425f3f42cb792f483a3",
+   "testharness"
+  ],
   "service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https.html": [
    "9fe4c10b921a84dc086cea47d48bb34fdbb28eee",
    "testharness"
@@ -161776,6 +162051,10 @@
    "c5f88c11333ff1faba5d57812a36553d174ab711",
    "support"
   ],
+  "service-workers/service-worker/resources/import-mime-type-worker.py": [
+   "7881cd81f7fe54bf3be799f3549098c78b896574",
+   "support"
+  ],
   "service-workers/service-worker/resources/indexeddb-worker.js": [
    "ed0ff45423ba74ad0b82e46debd865fdae2fbcb6",
    "support"
@@ -161957,7 +162236,7 @@
    "support"
   ],
   "service-workers/service-worker/resources/registration-tests.js": [
-   "5588535a80930c1d526d3b94ec7930a191d729db",
+   "bdb31335f8d15de455108e0186183f1acdaef41e",
    "support"
   ],
   "service-workers/service-worker/resources/registration-worker.js": [
@@ -162900,6 +163179,10 @@
    "6e5db2d0c2f5d2d8f1e2d04da953a3f2c50bec7a",
    "testharness"
   ],
+  "storage/interfaces.https-expected.txt": [
+   "9a8cf2bf1a59ee18acdb7207a0a8fb625ec4287c",
+   "support"
+  ],
   "storage/interfaces.https.html": [
    "76fa61c3a87485266a7f9d6f66e5d08bb7881ff7",
    "testharness"
@@ -162992,6 +163275,14 @@
    "7ef2ba0b429b2032e099f62cf2bc17d606ad1c64",
    "testharness"
   ],
+  "streams/piping/close-propagation-forward-expected.txt": [
+   "2137ce5181a06dadd8f3f05a39730312ae18490e",
+   "support"
+  ],
+  "streams/piping/close-propagation-forward.dedicatedworker-expected.txt": [
+   "2137ce5181a06dadd8f3f05a39730312ae18490e",
+   "support"
+  ],
   "streams/piping/close-propagation-forward.dedicatedworker.html": [
    "d227631adae0611f7920d33343d148f19c13f833",
    "testharness"
@@ -163004,10 +163295,18 @@
    "955736af478e8ec307dfe00a461f4b72949b110d",
    "support"
   ],
+  "streams/piping/close-propagation-forward.serviceworker.https-expected.txt": [
+   "cf0510f91c9dffb00a20f442b9bcbf173dd59e00",
+   "support"
+  ],
   "streams/piping/close-propagation-forward.serviceworker.https.html": [
    "759ca4e212311a001d0abae2b2f21d1dca42736b",
    "testharness"
   ],
+  "streams/piping/close-propagation-forward.sharedworker-expected.txt": [
+   "2137ce5181a06dadd8f3f05a39730312ae18490e",
+   "support"
+  ],
   "streams/piping/close-propagation-forward.sharedworker.html": [
    "277a94372fc8359b631b46ea79778ce2ec0e928c",
    "testharness"
@@ -163092,14 +163391,6 @@
    "44f9ceaa3bfc9d8b92885997d322486bd0f237a6",
    "testharness"
   ],
-  "streams/piping/multiple-propagation-expected.txt": [
-   "e1c701155da2752a69ab048a1d2b0d02ee9c23b0",
-   "support"
-  ],
-  "streams/piping/multiple-propagation.dedicatedworker-expected.txt": [
-   "e1c701155da2752a69ab048a1d2b0d02ee9c23b0",
-   "support"
-  ],
   "streams/piping/multiple-propagation.dedicatedworker.html": [
    "ef3d8a0ab031c3e25c6fcd083e7361a449ed671d",
    "testharness"
@@ -163112,28 +163403,20 @@
    "8d00cd13d84d421a297bff499511d96f7b72c98c",
    "support"
   ],
-  "streams/piping/multiple-propagation.serviceworker.https-expected.txt": [
-   "943a89576b2c9fe677d61dd3b5b65cde228fa23a",
-   "support"
-  ],
   "streams/piping/multiple-propagation.serviceworker.https.html": [
    "b1ec8a36de6b683fcfc9b3af35f7544d4806bdb6",
    "testharness"
   ],
-  "streams/piping/multiple-propagation.sharedworker-expected.txt": [
-   "e1c701155da2752a69ab048a1d2b0d02ee9c23b0",
-   "support"
-  ],
   "streams/piping/multiple-propagation.sharedworker.html": [
    "a2aaf43f0d2eb831bd9f8e379fbf0076eee76633",
    "testharness"
   ],
   "streams/piping/pipe-through-expected.txt": [
-   "85af76050db0eb713c881b422d70e7d9965c2eef",
+   "7d7d518eeb738d44f5cf0aa02e9ee145a41d7b7b",
    "support"
   ],
   "streams/piping/pipe-through.dedicatedworker-expected.txt": [
-   "85af76050db0eb713c881b422d70e7d9965c2eef",
+   "7d7d518eeb738d44f5cf0aa02e9ee145a41d7b7b",
    "support"
   ],
   "streams/piping/pipe-through.dedicatedworker.html": [
@@ -163149,7 +163432,7 @@
    "support"
   ],
   "streams/piping/pipe-through.serviceworker.https-expected.txt": [
-   "6c5faa30d98d1f34cb6badf7f8e59a2cf2fb9449",
+   "6dfe18fc58f798dd116ea8e022b1d0d9e643f448",
    "support"
   ],
   "streams/piping/pipe-through.serviceworker.https.html": [
@@ -163157,7 +163440,7 @@
    "testharness"
   ],
   "streams/piping/pipe-through.sharedworker-expected.txt": [
-   "85af76050db0eb713c881b422d70e7d9965c2eef",
+   "7d7d518eeb738d44f5cf0aa02e9ee145a41d7b7b",
    "support"
   ],
   "streams/piping/pipe-through.sharedworker.html": [
@@ -163921,7 +164204,7 @@
    "support"
   ],
   "svg/interfaces.html": [
-   "60d504a006d54fde191d0e04b7624c2091bb518b",
+   "af04368e73b54ea570eba5fa483d3b1eeb462b17",
    "testharness"
   ],
   "svg/linking/reftests/href-a-element-attr-change.html": [
@@ -164585,7 +164868,7 @@
    "testharness"
   ],
   "web-animations/interfaces/Animatable/animate-expected.txt": [
-   "e9d5ab88a0bbaeac9aab961be02cdf6e522cfe34",
+   "a045e3296bdcf355ce831e232dae43bf94aa6e8d",
    "support"
   ],
   "web-animations/interfaces/Animatable/animate.html": [
@@ -164693,7 +164976,7 @@
    "testharness"
   ],
   "web-animations/interfaces/AnimationEffectTiming/easing-expected.txt": [
-   "cd3accf90f53fd604760d8451216437b42edbb0a",
+   "b1ff3a9b783d6f258b587ac7371c047b8423bf66",
    "support"
   ],
   "web-animations/interfaces/AnimationEffectTiming/easing.html": [
@@ -164937,7 +165220,7 @@
    "testharness"
   ],
   "web-animations/timing-model/time-transformations/transformed-progress-expected.txt": [
-   "722aa62582cb856a726a00c7b39abe32e6850099",
+   "55a3ac611b5a2c74ca67994d84584bc130f1118e",
    "support"
   ],
   "web-animations/timing-model/time-transformations/transformed-progress.html": [
@@ -165396,6 +165679,10 @@
    "392d4975b232b9003a75d3771ba5c6f2e992849e",
    "testharness"
   ],
+  "webrtc/rtcpeerconnection/canTrickleIceCandidates-expected.txt": [
+   "2ac075fe0ee3b4c0da551ad770db34192b426e8a",
+   "support"
+  ],
   "webrtc/rtcpeerconnection/canTrickleIceCandidates.html": [
    "0f585a89bd8f25aa8f83b6ec39b704cbb8e970b2",
    "testharness"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/check_stability.py b/third_party/WebKit/LayoutTests/external/wpt/check_stability.py
index 79c01de..dea4c70a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/check_stability.py
+++ b/third_party/WebKit/LayoutTests/external/wpt/check_stability.py
@@ -394,27 +394,42 @@
     git = get_git_cmd(wpt_root)
     if os.environ.get("TRAVIS_PULL_REQUEST", "false") != "false":
         # This is a PR, so the base branch is in TRAVIS_BRANCH
-        branch_point = os.environ.get("TRAVIS_COMMIT_RANGE").split(".", 1)[0]
-        branch_point = git("rev-parse", branch_point)
+        travis_branch = os.environ.get("TRAVIS_BRANCH")
+        assert travis_branch, "TRAVIS_BRANCH environment variable is defined"
+        branch_point = git("rev-parse", travis_branch)
     else:
         # Otherwise we aren't on a PR, so we try to find commits that are only in the
         # current branch c.f.
         # http://stackoverflow.com/questions/13460152/find-first-ancestor-commit-in-another-branch
         head = git("rev-parse", "HEAD")
         # To do this we need all the commits in the local copy
-        fetch_wpt(user, "--unshallow", "+refs/heads/*:refs/remotes/origin/*")
+        fetch_args = [user, "+refs/heads/*:refs/remotes/origin/*"]
+        if os.path.exists(os.path.join(wpt_root, ".git", "shallow")):
+            fetch_args.insert(1, "--unshallow")
+        fetch_wpt(*fetch_args)
         not_heads = [item for item in git("rev-parse", "--not", "--all").split("\n")
-                     if not head in item]
+                     if item.strip() and not head in item]
         commits = git("rev-list", "HEAD", *not_heads).split("\n")
-        first_commit = commits[-1]
-        branch_point = git("rev-parse", first_commit + "^")
-        # The above can produce a too-early commit if we are e.g. on master and there are
-        # preceding changes that were rebased and so aren't on any other branch. To avoid
-        # this issue we check for the later of the above branch point and the merge-base
-        # with master
+        branch_point = None
+        if len(commits):
+            first_commit = commits[-1]
+            if first_commit:
+                branch_point = git("rev-parse", first_commit + "^")
+
+        # The above heuristic will fail in the following cases:
+        #
+        # - The current branch has fallen behind the version retrieved via the above
+        #   `fetch` invocation
+        # - Changes on the current branch were rebased and therefore do not exist on any
+        #   other branch. This will result in the selection of a commit that is earlier
+        #   in the history than desired (as determined by calculating the later of the
+        #   branch point and the merge base)
+        #
+        # In either case, fall back to using the merge base as the branch point.
         merge_base = git("merge-base", "HEAD", "origin/master")
-        if (branch_point != merge_base and
-            not git("log", "--oneline", "%s..%s" % (merge_base, branch_point)).strip()):
+        if (branch_point is None or
+            (branch_point != merge_base and
+             not git("log", "--oneline", "%s..%s" % (merge_base, branch_point)).strip())):
             logger.debug("Using merge-base as the branch point")
             branch_point = merge_base
         else:
@@ -428,7 +443,7 @@
     """Get and return files changed since current branch diverged from master."""
     root = os.path.abspath(os.curdir)
     git = get_git_cmd(wpt_root)
-    files = git("diff", "--name-only", "-z", "%s.." % branch_point)
+    files = git("diff", "--name-only", "-z", "%s..." % branch_point)
     if not files:
         return []
     assert files[-1] == "\0"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/crossoriginScript.js b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/crossoriginScript.js
new file mode 100644
index 0000000..08535fa5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/crossoriginScript.js
@@ -0,0 +1,3 @@
+// Identical to simpleSourcedScript.js but with a different hash, thanks to
+// this comment!
+window.postMessage(document.currentScript.id, "*");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/crossoriginScript.js.headers b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/crossoriginScript.js.headers
new file mode 100644
index 0000000..cb762eff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/crossoriginScript.js.headers
@@ -0,0 +1 @@
+Access-Control-Allow-Origin: *
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/externalScript.js b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/externalScript.js
new file mode 100644
index 0000000..2920b03
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/externalScript.js
@@ -0,0 +1 @@
+externalRan = true;
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/script-src-sri_hash.sub.html b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/script-src-sri_hash.sub.html
new file mode 100644
index 0000000..2c888f4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/script-src-sri_hash.sub.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+    <title>External scripts with matching SRI hash should be allowed.</title>
+    <script src='/resources/testharness.js' nonce='dummy'></script>
+    <script src='/resources/testharnessreport.js' nonce='dummy'></script>
+
+    <!-- CSP served: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=' -->
+</head>
+
+<body>
+    <h1>External scripts with matching SRI hash should be allowed.</h1>
+    <div id='log'></div>
+
+    <script nonce='dummy'>
+        var port = "{{ports[http][0]}}";
+        if (location.protocol === "https:")
+          port = "{{ports[https][0]}}";
+        var crossorigin_base = location.protocol + "//{{domains[www]}}:" + port;
+
+        // Test name, src, integrity, expected to run.
+        var test_cases = [
+          [ 'matching integrity',
+            './simpleSourcedScript.js',
+            'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=',
+            true ],
+          [ 'multiple matching integrity',
+            './simpleSourcedScript.js',
+            'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=',
+            true ],
+          [ 'no integrity',
+            './simpleSourcedScript.js',
+            '',
+            false ],
+          [ 'matching plus unsupported integrity',
+            './simpleSourcedScript.js',
+            'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha999-xyz',
+            true ],
+          [ 'mismatched integrity',
+            './simpleSourcedScript.js',
+            'sha256-xyz',
+            false ],
+          [ 'multiple mismatched integrity',
+            './simpleSourcedScript.js',
+            'sha256-xyz sha256-zyx',
+            false ],
+          [ 'partially matching integrity',
+            './simpleSourcedScript.js',
+            'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha256-xyz',
+            false ],
+          [ 'crossorigin no integrity but whitelisted host',
+            crossorigin_base + '/content-security-policy/script-src/crossoriginScript.js',
+            '',
+            true ],
+          [ 'crossorigin mismatched integrity but whitelisted host',
+            crossorigin_base + '/content-security-policy/script-src/crossoriginScript.js',
+            'sha256-kKJ5c48yxzaaSBupJSCmY50hkD8xbVgZgLHLtmnkeAo=',
+            true ],
+        ];
+
+        test(_ => {
+          for (item of test_cases) {
+            async_test(t => {
+              var s = document.createElement('script');
+              s.id = item[0].replace(' ', '-');
+              s.src = item[1];
+              s.integrity = item[2];
+              s.setAttribute('crossorigin', 'anonymous');
+
+              if (item[3]) {
+                s.onerror = t.unreached_func("Script should load! " + s.src);
+                window.addEventListener('message', t.step_func(e => {
+                  if (e.data == s.id)
+                    t.done();
+                }));
+              } else {
+                s.onerror = t.step_func_done();
+                window.addEventListener('message', t.step_func(e => {
+                  if (e.data == s.id)
+                    assert_unreached("Script should not execute!");
+                }));
+              }
+
+              document.body.appendChild(s);
+            }, item[0]);
+          }
+        }, "Load all the tests.");
+    </script>
+
+    <script nonce='dummy'>
+        var externalRan = false;
+    </script>
+    <script src='./externalScript.js'
+        integrity="sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0="></script>
+    <script nonce='dummy'>
+        test(function() {
+            assert_true(externalRan, 'External script ran.');
+        }, 'External script in a script tag with matching SRI hash should run.');
+    </script>
+
+</body>
+
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers
new file mode 100644
index 0000000..25cd654
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers
@@ -0,0 +1,5 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Content-Security-Policy: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA='
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-display-3/display-contents-dynamic-before-after-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-display-3/display-contents-dynamic-before-after-001.html
new file mode 100644
index 0000000..b8dc4ba
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-display-3/display-contents-dynamic-before-after-001.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Display: Dynamic changes to ::before and ::after on display:contents</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:ecobos@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents">
+<link rel="match" href="display-contents-pass-green-no-red-ref.html">
+<style>
+    div { display: contents; color: green; }
+    .p::before { content: "P" }
+    .a::before { content: "A" }
+    .s::after { content: "S" }
+    div::before { color: red; display: contents; border: 1px solid red; }
+    .active div::before { color: green; }
+</style>
+<p>You should see the word PASS in green and no red below.</p>
+<div><!--
+ --><div><div class="p"></div></div><!--
+ --><div></div><!--
+ --><div class="a"></div><!--
+ --><div>S<div class="s"></div></div>
+</div>
+<script>
+document.body.offsetTop;
+document.body.className = "active";
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-display-3/display-contents-dynamic-before-after-first-letter-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-display-3/display-contents-dynamic-before-after-first-letter-001.html
new file mode 100644
index 0000000..7684a4b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-display-3/display-contents-dynamic-before-after-first-letter-001.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Display: Dynamic changes to ::before and ::after on display:contents when ::first-letter is in effect</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:ecobos@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents">
+<link rel="match" href="display-contents-pass-green-no-red-ref.html">
+<style>
+    div { color: blue; }
+    div::first-letter { color: red; }
+    div::before { display: contents; content: "PASS"; border: 1px solid red; }
+    .active div::before,
+    .active div::first-letter { color: green; }
+</style>
+<p>You should see the word PASS in green and no red below.</p>
+<div></div>
+<script>
+document.body.offsetTop;
+document.body.className = "active";
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cssom/css-style-attribute-modifications-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/cssom/css-style-attribute-modifications-expected.txt
new file mode 100644
index 0000000..3a812409
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/cssom/css-style-attribute-modifications-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Mutating the style declaration doesn't remove the style attribute assert_true: expected true got false
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cssom/css-style-attribute-modifications.html b/third_party/WebKit/LayoutTests/external/wpt/cssom/css-style-attribute-modifications.html
new file mode 100644
index 0000000..6177c33
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/cssom/css-style-attribute-modifications.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:ecobos@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/cssom/#the-elementcssinlinestyle-interface">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="test" style="color: red"></div>
+<script>
+test(function() {
+  var el = document.getElementById("test");
+  el.style.color = "";
+  assert_true(el.hasAttribute("style"));
+}, "Mutating the style declaration doesn't remove the style attribute");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/001-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/001-1.html
deleted file mode 100644
index d413c30..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/001-1.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!doctype html>
-001-1
-<script>
-if (window.opener !== null) {
-  window.opener.postMessage("FAIL", "*");
-}
-window.close();
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/001.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/001.html
deleted file mode 100644
index 2478cdc..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/001.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!doctype html>
-<title>Link with target=_blank, rel=noreferrer</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<a href="001-1.html" rel="noreferrer" target="_blank">Link</a>
-<script>
-var t = async_test();
-var a;
-t.step(function() {
-  a = document.getElementsByTagName("a")[0];
-  a.click();
-  //This is a bit hacky; if the test passes there isn't a link back to the parent
-  //window so we have to pass on a timeout. But opening the link could be slow in
-  //some cases, so there is some possibility of false passes
-  setTimeout(t.step_func(function() {
-               t.done();
-             }), 1000);
-});
-
-onmessage = t.step_func(function() {assert_unreached("Opened window had a reference to opener")});
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/002-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/002-1.html
deleted file mode 100644
index ca8a485..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/002-1.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!doctype html>
-002-1
-<script>
-if (window.opener !== null) {
-  window.opener.postMessage("PASS", "*");
-}
-window.close();
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/002.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/002.html
deleted file mode 100644
index 4a1df8e..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/002.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!doctype html>
-<title>Link with target=_blank, no rel</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<a href="002-1.html" target="_blank">Link</a>
-<script>
-var a;
-async_test(function(t) {
-  a = document.getElementsByTagName("a")[0];
-  a.click();
-
-  // This is a bit hacky; if the test fails there isn't a link back to the parent
-  // window so we have to pass on a timeout. But opening the link could be slow in
-  // some cases, so there is some possibility of false fails
-  step_timeout(t.step_func(function() {
-                 assert_unreached("Failed to get callback from opened window");
-               }), 5000);
-
-  onmessage = t.step_func(function(e) {
-    assert_equals(e.data, "PASS");
-    t.done()
-  });
-});
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-existing.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-existing.html
deleted file mode 100644
index 2eaba22f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-existing.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>HTML Test: Choose browsing context - the given name is same as an existing browsing context's name</title>
-<link rel="author" title="Intel" href="http://www.intel.com/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<iframe src="existing.html" style="display:none"></iframe>
-<iframe name="existWin" style="display:none"></iframe>
-<script>
-
-var t = async_test("The browsing context must be chosen if the given name is same as its name");
-
-window.addEventListener("message", function (e) {
-  t.step(function() {
-    assert_equals(e.data.name, "existWin", "The browsing context name should be 'existWin'.");
-  });
-  t.done();
-}, false);
-
-frames[0].onload = t.step_func(function(e) {
-  frames[0].do_test();
-});
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-004.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-004.html
deleted file mode 100644
index ca98f66..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-004.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>HTML Test: Choose browsing context - '_parent' (case-sensitivity)</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<iframe src="resources/parent-iframe-insensitive-1.html" name="parentWin" style="display:none"></iframe>
-
-<script>
-async_test(t => {
-  window.addEventListener('message', t.step_func_done(e => {
-    assert_equals(e.data.name, 'parentWin', "The browsing context name should be 'parentWin'.");
-    assert_equals(e.data.isTop, false);
-  }));
-}, 'choosing _parent context should be case-insensitive');
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-self-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-self-1.html
deleted file mode 100644
index 99d7fe7..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-self-1.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>HTML Test: Choose browsing context - the given name is '_self'</title>
-<link rel="author" title="Intel" href="http://www.intel.com/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<iframe src="self1.html" style="display:none"></iframe>
-<script>
-
-var t = async_test("The current browsing context must be chosen if the given name is '_self'");
-
-window.addEventListener("message", function (e) {
-  t.step(function () {
-    assert_equals(e.data.name, "selfWin1", "The browsing context name should be 'selfWin1'.");
-  });
-  t.done();
-}, false);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-_blank.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-001.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-_blank.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-001.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html
new file mode 100644
index 0000000..aba9d52
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<title>Link with target=_blank, rel=noreferrer</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<div id="log"></div>
+<a href="resources/report-has-opener.html" rel="noreferrer" target="_blank">Link</a>
+<script>
+var prefixedStorage;
+setup (() => prefixedStorage = new PrefixedLocalStorageTest());
+
+async_test(t => {
+  t.add_cleanup(() => prefixedStorage.cleanup());
+  var a = document.getElementsByTagName('a')[0];
+  a.href = prefixedStorage.url(a.href);
+  prefixedStorage.onSet('hasOpener', t.step_func_done(e => {
+    assert_equals(e.newValue, 'false');
+  }));
+  a.click();
+}, 'Context for opened noreferrer link targeted to "_blank" should not have opener reference');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-003.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-003.html
new file mode 100644
index 0000000..6912300
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-003.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<title>Link with target=_blank, no rel</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<div id="log"></div>
+<a href="resources/report-has-opener.html" target="_blank">Link</a>
+<script>
+var prefixedStorage;
+setup(() => prefixedStorage = new PrefixedLocalStorageTest());
+async_test(t => {
+  t.add_cleanup(() => prefixedStorage.cleanup());
+  prefixedStorage.onSet('hasOpener', t.step_func_done(e => {
+    assert_equals(e.newValue, 'true');
+  }));
+  var a = document.getElementsByTagName('a')[0];
+  a.href = prefixedStorage.url(a.href);
+  a.click();
+}, 'Context created by link targeting "_blank" should retain opener reference');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-001.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-001.html
similarity index 81%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-001.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-001.html
index e1495be..35cbc10 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-001.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-001.html
@@ -12,4 +12,4 @@
   }));
 }, 'The parent browsing context must be chosen if the given name is `_parent`');
 </script>
-<iframe id="embedded" src="resources/parent-iframe-1.html" name="parentWin" style="display:none"></iframe>
+<iframe id="embedded" src="resources/choose-_parent-001-iframe-1.html" name="parentWin" style="display:none"></iframe>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-002.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-002.html
similarity index 87%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-002.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-002.html
index 9cdef8349..7b7d561 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-002.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-002.html
@@ -12,6 +12,6 @@
     assert_equals(e.data.name, 'iframeParent');
     assert_false(e.data.isTop, 'window.parent is not top');
   }));
-  topWindow = window.open('resources/parent-top.html', '_blank');
+  topWindow = window.open('resources/choose-_parent-002-window.html', '_blank');
 }, 'choosing _parent context: multiple nested contexts');
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-003.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-003.html
similarity index 85%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-003.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-003.html
index f0a165e..20dc9b0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-003.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-003.html
@@ -12,6 +12,6 @@
     assert_equals(e.data.name, 'parentTopReplace');
     assert_equals(e.data.isTop, true);
   }));
-  topWindow = window.open('resources/parent-top-replace.html', 'parentTopReplace');
+  topWindow = window.open('resources/choose-_parent-003-window.html', 'parentTopReplace');
 }, '_parent should reuse window.parent context');
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-004.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-004.html
new file mode 100644
index 0000000..c7937801
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-004.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: Choose browsing context - '_parent' (case-sensitivity)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<body>
+<div id="log"></div>
+
+<script>
+var prefixedStorage;
+var iframe;
+setup(() => prefixedStorage = new PrefixedLocalStorageTest());
+
+async_test(t => {
+  t.add_cleanup(() => prefixedStorage.cleanup());
+  var testFunc = (function (t) {
+    var completed = 0;
+    var testCount = 2;
+    return function (actual, expected) {
+      assert_equals(actual, expected);
+      if (++completed >= testCount) {
+        t.done();
+      }
+    }
+  }(t));
+
+  prefixedStorage.onSet('isTop', t.step_func(e => {
+    testFunc(e.newValue, 'false');
+  }));
+  prefixedStorage.onSet('name', t.step_func(e => {
+    testFunc(e.newValue, 'parentWin');
+  }));
+  iframe = document.createElement('iframe');
+  iframe.src = prefixedStorage.url('resources/choose-_parent-004-iframe-1.html');
+  iframe.name = 'parentWin';
+  document.body.appendChild(iframe);
+}, 'choosing _parent context should be case-insensitive');
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_self-001.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_self-001.html
new file mode 100644
index 0000000..ed7666846
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_self-001.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: Choose browsing context - the given name is '_self'</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<iframe src="resources/choose-_self-001-iframe.html" style="display:none"></iframe>
+<script>
+async_test(t => {
+  window.addEventListener('message', t.step_func_done(e => {
+    assert_equals(e.data.name, 'myownself');
+  }), false);
+}, 'The current browsing context must be chosen if the given name is "_self"');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_self-002.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_self-002.html
new file mode 100644
index 0000000..2e798f54
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_self-002.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: Choose browsing context - '_self' (case-sensitivity)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<body>
+<div id="log"></div>
+
+<script>
+var prefixedStorage;
+setup(() => prefixedStorage = new PrefixedLocalStorageTest());
+
+async_test(t => {
+  var iframe;
+
+  var testFunc = (function (t) {
+    var completed = 0;
+    var testCount = 2;
+    return function (actual, expected) {
+      assert_equals(actual, expected);
+      if (++completed >= testCount) {
+        t.done();
+      }
+    }
+  }(t));
+
+  t.add_cleanup(() => prefixedStorage.cleanup());
+
+  prefixedStorage.onSet('isTop', t.step_func(e => {
+    testFunc(e.newValue, 'false');
+  }));
+  prefixedStorage.onSet('name', t.step_func(e => {
+    testFunc(e.newValue, 'testWin');
+  }));
+
+  iframe = document.createElement('iframe');
+  iframe.name = 'testWin';
+  iframe.src = prefixedStorage.url('resources/choose-_self-002-iframe.html');
+  document.body.appendChild(iframe);
+
+}, 'choosing _self context should be case-insensitive');
+
+</script>
+
+</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-001.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-001.html
new file mode 100644
index 0000000..de4c6ad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-001.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<title>HTML Test: Browsing context name - _top (current is top)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<div id="log"></div>
+<script>
+var prefixedStorage;
+setup (() => prefixedStorage = new PrefixedLocalStorageTest());
+
+async_test(t => {
+  t.add_cleanup(() => prefixedStorage.cleanup());
+
+  var testFunc = (function (t) {
+    var completed = 0;
+    var testCount = 2;
+    return function (actual, expected) {
+      assert_equals(actual, expected);
+      if (++completed >= testCount) {
+        t.done();
+      }
+    }
+  }(t));
+
+  prefixedStorage.onSet('isTop', t.step_func(e => {
+    testFunc(e.newValue, 'true');
+  }));
+  prefixedStorage.onSet('name', t.step_func(e => {
+    testFunc(e.newValue, 'topWin1');
+  }));
+
+  window.open(prefixedStorage.url('resources/open-in-_top.html'), '_blank');
+}, 'Should choose current browsing context for "_top" if current is top');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-002.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-002.html
new file mode 100644
index 0000000..f29da80
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-002.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<title>HTML Test: Browsing context name - _top</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<div id="log"></div>
+<script>
+var prefixedStorage;
+setup (() => prefixedStorage = new PrefixedLocalStorageTest());
+
+async_test(t => {
+  t.add_cleanup(() => prefixedStorage.cleanup());
+
+  var testFunc = (function (t) {
+    var completed = 0;
+    var testCount = 2;
+    return function (actual, expected) {
+      assert_equals(actual, expected);
+      if (++completed >= testCount) {
+        t.done();
+      }
+    }
+  }(t));
+
+  prefixedStorage.onSet('isTop', t.step_func(e => {
+    testFunc(e.newValue, 'true');
+  }));
+  prefixedStorage.onSet('name', t.step_func(e => {
+    testFunc(e.newValue, 'topWin2');
+  }));
+  window.open(prefixedStorage.url('resources/choose-_top-002-window.html'), '_blank');
+}, 'Should choose top browsing context for "_top" if current is not top');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-003.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-003.html
new file mode 100644
index 0000000..e068f8c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-_top-003.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: Choose browsing context - '_top' (case-sensitivity)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<body>
+<div id="log"></div>
+
+<script>
+var prefixedStorage;
+setup(() => prefixedStorage = new PrefixedLocalStorageTest());
+
+async_test(t => {
+  var testFunc = (function (t) {
+    var completed = 0;
+    var testCount = 2;
+    return function (actual, expected) {
+      assert_equals(actual, expected);
+      if (++completed >= testCount) {
+        t.done();
+      }
+    }
+  }(t));
+
+  t.add_cleanup(() => prefixedStorage.cleanup());
+
+  prefixedStorage.onSet('isTop', t.step_func(e => {
+    testFunc(e.newValue, 'true');
+  }));
+  prefixedStorage.onSet('name', t.step_func(e => {
+    testFunc(e.newValue, 'topWin');
+  }));
+
+  window.open(prefixedStorage.url('resources/choose-_top-003-iframe-1.html'), '_blank');
+}, 'choosing _top context should be case-insensitive');
+
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-default-name.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-default-001.html
similarity index 83%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-default-name.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-default-001.html
index 470e244..c21159e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/browsing-context-default-name.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-default-001.html
@@ -20,10 +20,4 @@
   assert_equals(win.name, "");
   win.close();
 }, "A browsing context which is opened by window.open() method with '_blank' parameter has empty-string default name");
-
-//This test must be run when the current browsing context's name is not set
-test(t => {
-  assert_equals(window.name, "");
-}, "A browsing context has an empty-string default name");
-
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-default-002.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-default-002.html
new file mode 100644
index 0000000..748ee689
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-default-002.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: Browsing context names - empty string</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(t => {
+  window.addEventListener('message', t.step_func_done(e => {
+    assert_equals(e.data.isTop, false);
+    assert_equals(e.data.name, 'hellothere', 'Empty-string browsing context should choose current context');
+  }), false);
+}, 'The current browsing context must be chosen if the given name is empty string');
+</script>
+<iframe name="hellothere" src="resources/choose-default-002-iframe.html"></iframe>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-existing-001.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-existing-001.html
new file mode 100644
index 0000000..fdf74b8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/choose-existing-001.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: Choose browsing context - the given name is same as an existing browsing context's name</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<iframe src="resources/choose-existing-001-iframe.html" style="display:none"></iframe>
+<iframe name="iExist" style="display:none"></iframe>
+<script>
+async_test(t => {
+  window.addEventListener('message', t.step_func_done(e => {
+    assert_equals(e.data.name, 'iExist');
+  }), false);
+
+}, 'An existing browsing context must be chosen if the given name is the same as its name');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-001-iframe-1.html
similarity index 77%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-1.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-001-iframe-1.html
index 3d7accf..04dd74f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-1.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-001-iframe-1.html
@@ -2,4 +2,4 @@
 <meta charset="utf-8">
 <title>HTML Test: browsing context name - parent</title>
 <link rel="author" title="Intel" href="http://www.intel.com/">
-<iframe src="parent-iframe-2.html"></iframe>
+<iframe src="open-in-_parent.html"></iframe>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top-nested.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-002-iframe.html
similarity index 63%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top-nested.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-002-iframe.html
index ffe3511..52da8986 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top-nested.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-002-iframe.html
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
 <meta charset="utf-8">
 <title>HTML Test: browsing context name - parent: nested context</title>
-<iframe name="iframeChild" src="parent-iframe-2.html"></iframe>
+<iframe name="iframeChild" src="open-in-_parent.html"></iframe>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-002-window.html
similarity index 80%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-002-window.html
index 6ad72f9..5581937 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-002-window.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <meta charset="utf-8">
 <title>HTML Test: browsing context name - parent: top-level context</title>
-<iframe name="iframeParent" src="parent-top-nested.html"></iframe>
+<iframe name="iframeParent" src="choose-_parent-002-iframe.html"></iframe>
 <script>
 // Relay a message from child context to opener context
 window.addEventListener('message', e => {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-3.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-003-iframe.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-3.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-003-iframe.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top-replace.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-003-window.html
similarity index 63%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top-replace.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-003-window.html
index 9b334c3..bd1802a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-top-replace.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-003-window.html
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
 <meta charset="utf-8">
 <title>HTML Test: browsing context name - parent: top-level context (gets replaced)</title>
-<iframe name="iframeOpener" src="parent-iframe-3.html"></iframe>
+<iframe name="iframeOpener" src="choose-_parent-003-iframe.html"></iframe>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-1.html
new file mode 100644
index 0000000..7a8cbecb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-1.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: browsing context name - parent</title>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<body>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource({
+  close_on_cleanup: true
+});
+var iframe = document.createElement('iframe');
+iframe.src = prefixedStorage.url('choose-_parent-004-iframe-2.html');
+document.body.appendChild(iframe);
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-2.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-2.html
new file mode 100644
index 0000000..33ead5a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_parent-004-iframe-2.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: browsing context name - parent (case-insensitive)</title>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource();
+window.open(prefixedStorage.url('report-is-top.html'), '_pARent');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/self2.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_self-001-iframe.html
similarity index 68%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/self2.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_self-001-iframe.html
index b3b4f59..0ad79d6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/self2.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_self-001-iframe.html
@@ -3,9 +3,7 @@
 <title>HTML Test: browsing context name - self</title>
 <link rel="author" title="Intel" href="http://www.intel.com/">
 <script>
-
-window.name = "selfWin2";
-var win = window.open("resources/post-to-top.html", "");
+window.name = 'myownself';
+var win = window.open('post-to-top.html', '_self');
 win.close();
-
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_self-002-iframe.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_self-002-iframe.html
new file mode 100644
index 0000000..9d88305
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_self-002-iframe.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: browsing context name - self (case-insensitive)</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+<script src="/common/PrefixedLocalStorage.js"></script>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource({
+  close_on_cleanup: true
+});
+var win = window.open(prefixedStorage.url('report-is-top.html'), '_sElF');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-002-window.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-002-window.html
new file mode 100644
index 0000000..d71384b7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-002-window.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="/common/PrefixedLocalStorage.js"></script>
+<title>HTML Test: browsing context name - _top</title>
+<body>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource({
+  close_on_cleanup:true
+});
+window.name = 'topWin2';
+var iframe = document.createElement('iframe');
+iframe.src = prefixedStorage.url('open-in-_top.html');
+// Append iframe that will open another document into `_top` (this context)
+document.body.appendChild(iframe);
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-1.html
new file mode 100644
index 0000000..aecc2fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-1.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: browsing context name - top (case-insensitive)</title>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<body>
+</body>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource({
+  close_on_cleanup: true
+});
+window.name = 'topWin';
+var iframe = document.createElement('iframe');
+iframe.src = prefixedStorage.url('choose-_top-003-iframe-2.html');
+document.body.appendChild(iframe);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-2.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-2.html
new file mode 100644
index 0000000..a1a7e1d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-_top-003-iframe-2.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Test: browsing context name - top (case-insensitive)</title>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource({
+  close_on_cleanup: true
+});
+window.open(prefixedStorage.url("report-is-top.html"), "_ToP");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-default-002-iframe.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-default-002-iframe.html
new file mode 100644
index 0000000..567e4ea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-default-002-iframe.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<meta charset="utf-8">
+<title>HTML Test: browsing context name - Empty string</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+<body onload="followLink()">
+</body>
+<script>
+function followLink() {
+  var a = document.createElement('a');
+  a.href = 'post-to-top.html';
+  a.target = ''; // Target is empty string
+  document.body.appendChild(a);
+  a.click();
+}
+</script>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/existing.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-existing-001-iframe.html
similarity index 65%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/existing.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-existing-001-iframe.html
index 6023319..cb0b554 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/existing.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/choose-existing-001-iframe.html
@@ -3,9 +3,5 @@
 <title>This is a test page</title>
 <link rel="author" title="Intel" href="http://www.intel.com/">
 <script>
-
-function do_test() {
-  window.open("resources/post-to-top.html", "existWin");
-}
-
+window.open("post-to-top.html", "iExist");
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-2.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/open-in-_parent.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-2.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/open-in-_parent.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/open-in-_top.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/open-in-_top.html
new file mode 100644
index 0000000..929d52d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/open-in-_top.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="/common/PrefixedLocalStorage.js"></script>
+<title>HTML Test: browsing context name - _top</title>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource();
+window.name = 'topWin1';
+window.open(prefixedStorage.url('report-is-top.html'), '_top');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-1.html
deleted file mode 100644
index 8ddbf44a..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-1.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>HTML Test: browsing context name - parent</title>
-<iframe src="parent-iframe-insensitive-2.html"></iframe>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-2.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-2.html
deleted file mode 100644
index 38d6b2f4..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/parent-iframe-insensitive-2.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>HTML Test: browsing context name - parent (case-insensitive)</title>
-<script>
-
-window.open("post-to-top-or-close.html", "_pARent");
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/post-to-top-or-close.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/post-to-top-or-close.html
deleted file mode 100644
index 2ccb673..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/post-to-top-or-close.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>HTML Test: post window's name to top browsing context</title>
-<link rel="author" title="Intel" href="http://www.intel.com/">
-<script>
-if (window.top === window) {
-  // This is an implicit failure; go ahead and close now
-  // so that this window isn't left hanging around
-  window.close();
-} else {
-  top.postMessage({
-    name: window.name,
-    isTop: (window.top === window)
-  }, "*");
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/report-has-opener.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/report-has-opener.html
new file mode 100644
index 0000000..37d8cedc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/report-has-opener.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<script src="/common/PrefixedLocalStorage.js"></script>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource({
+  close_on_cleanup: true
+});
+prefixedStorage.setItem('hasOpener', window.opener !== null);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/report-is-top.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/report-is-top.html
new file mode 100644
index 0000000..8711235
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/resources/report-is-top.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<meta charset="utf-8">
+<script src="/common/PrefixedLocalStorage.js"></script>
+<script>
+var prefixedStorage = new PrefixedLocalStorageResource({
+  close_on_cleanup: true
+});
+prefixedStorage.setItem('isTop', window === window.top);
+prefixedStorage.setItem('name', window.name);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/self1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/self1.html
deleted file mode 100644
index d72df6f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/windows/browsing-context-names/self1.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>HTML Test: browsing context name - self</title>
-<link rel="author" title="Intel" href="http://www.intel.com/">
-<script>
-
-window.name = "selfWin1";
-var win = window.open("resources/post-to-top.html", "_self");
-win.close();
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt
new file mode 100644
index 0000000..97070a77
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering-expected.txt
@@ -0,0 +1,18 @@
+This is a testharness.js-based test.
+PASS horizontal-tb: tall viewport 
+PASS horizontal-tb: wide viewport 
+PASS horizontal-tb: square viewport 
+PASS horizontal-tb: dialog and viewport match 
+PASS horizontal-tb: dialog bigger than viewport 
+FAIL vertical-rl: tall viewport assert_equals: expected "10px" but got "0px"
+FAIL vertical-lr: tall viewport assert_equals: expected "10px" but got "0px"
+PASS vertical-lr: dialog bigger than viewport 
+FAIL vertical-rl (dialog horizontal-tb): tall viewport assert_equals: expected "10px" but got "0px"
+FAIL vertical-lr (dialog horizontal-tb): tall viewport assert_equals: expected "10px" but got "0px"
+PASS vertical-lr (dialog horizontal-tb): dialog bigger than viewport 
+FAIL horizontal-tb (container vertical-rl): tall viewport assert_equals: expected "10px" but got "0px"
+PASS vertical-rl (container horizontal-tb): tall viewport 
+FAIL horizontal-tb (container vertical-rl) (dialog horizontal-tb): tall viewport assert_equals: expected "10px" but got "0px"
+PASS vertical-rl (container horizontal-tb) (dialog vertical-rl): tall viewport 
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering-iframe.sub.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering-iframe.sub.html
new file mode 100644
index 0000000..2f9721e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering-iframe.sub.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>dialog element centered frame</title>
+<style>
+  html {
+    writing-mode: {{GET[html-writing-mode]}}
+  }
+
+  #container {
+    writing-mode: {{GET[container-writing-mode]}}
+  }
+
+  dialog {
+    writing-mode: {{GET[dialog-writing-mode]}};
+    border: none;
+    padding: 0;
+    margin: 0;
+  }
+</style>
+
+<div id="container">
+  <dialog style="width: 20px; height: 10px;">X</dialog> <!-- sync width and height with centering.html -->
+</div>
+
+<script>
+"use strict";
+document.querySelector("dialog").showModal();
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering.html
new file mode 100644
index 0000000..8df2d30
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/interactive-elements/the-dialog-element/centering.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>dialog element: centered alignment</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+<link rel=help href="https://html.spec.whatwg.org/multipage/#centered-alignment">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+
+<script>
+"use strict";
+
+// Be sure to sync with centering-iframe.html
+const DIALOG_WIDTH = 20;
+const DIALOG_HEIGHT = 10;
+
+testDialogCentering("horizontal-tb", "", "", "tall viewport", 40, 100, "top", 100 / 2 - DIALOG_HEIGHT / 2);
+testDialogCentering("horizontal-tb", "", "", "wide viewport", 100, 40, "top", 40 / 2 - DIALOG_HEIGHT / 2);
+testDialogCentering("horizontal-tb", "", "", "square viewport", 100, 100, "top", 100 / 2 - DIALOG_HEIGHT / 2);
+testDialogCentering("horizontal-tb", "", "", "dialog and viewport match", DIALOG_WIDTH, DIALOG_HEIGHT, "top", 0);
+testDialogCentering("horizontal-tb", "", "", "dialog bigger than viewport", 100, DIALOG_HEIGHT / 2, "top", 0);
+
+testDialogCentering("vertical-rl", "", "", "tall viewport", 40, 100, "left", 40 / 2 - DIALOG_WIDTH / 2);
+testDialogCentering("vertical-lr", "", "", "tall viewport", 40, 100, "right", 40 / 2 - DIALOG_WIDTH / 2);
+testDialogCentering("vertical-lr", "", "", "dialog bigger than viewport", DIALOG_WIDTH / 2, 100, "right", 0);
+
+testDialogCentering("vertical-rl", "", "horizontal-tb", "tall viewport", 40, 100, "left", 40 / 2 - DIALOG_WIDTH / 2);
+testDialogCentering("vertical-lr", "", "horizontal-tb", "tall viewport", 40, 100, "right", 40 / 2 - DIALOG_WIDTH / 2);
+testDialogCentering("vertical-lr", "", "horizontal-tb", "dialog bigger than viewport", DIALOG_WIDTH / 2, 100, "right", 0);
+
+testDialogCentering("horizontal-tb", "vertical-rl", "", "tall viewport", 40, 100, "right", 40 / 2 - DIALOG_WIDTH / 2);
+testDialogCentering("vertical-rl", "horizontal-tb", "", "tall viewport", 40, 100, "top", 100 / 2 - DIALOG_HEIGHT / 2);
+
+testDialogCentering("horizontal-tb", "vertical-rl", "horizontal-tb", "tall viewport", 40, 100, "right", 40 / 2 - DIALOG_WIDTH / 2);
+testDialogCentering("vertical-rl", "horizontal-tb", "vertical-rl", "tall viewport", 40, 100, "top", 100 / 2 - DIALOG_HEIGHT / 2);
+
+function testDialogCentering(writingMode, containerWritingMode, dialogWritingMode, label, iframeWidth, iframeHeight, property, numericValue) {
+  async_test(t => {
+    const iframe = document.createElement("iframe");
+    iframe.src = `centering-iframe.sub.html?html-writing-mode=${writingMode}&container-writing-mode=${containerWritingMode}&dialog-writing-mode=${dialogWritingMode}`;
+    iframe.width = iframeWidth;
+    iframe.height = iframeHeight;
+    iframe.onload = t.step_func_done(() => {
+      const dialog = iframe.contentDocument.querySelector("dialog");
+      assert_equals(iframe.contentWindow.getComputedStyle(dialog)[property], numericValue + "px");
+    });
+    document.body.appendChild(iframe);
+  }, writingMode + (containerWritingMode ? ` (container ${containerWritingMode})` : "") +
+     (dialogWritingMode ? ` (dialog ${dialogWritingMode})` : "") + `: ${label}`);
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_test_document_replaced.html b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_test_document_replaced.html
new file mode 100644
index 0000000..b910f45
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_test_document_replaced.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <title>Navigation Timing 2 WPT</title>
+        <link rel="author" title="Google" href="http://www.google.com/" />
+        <link rel="help" href="http://www.w3.org/TR/navigation-timing/#sec-navigation-timing-interface"/>
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
+        <script>
+            var navigation_frame;
+            var pnt1;
+            var step = 1;
+            function onload_test()
+            {
+                navigation_frame = document.getElementById("frameContext").contentWindow;
+                setTimeout("nav_frame();", 0);
+            }
+
+            function nav_frame()
+            {
+                switch (step)
+                {
+                    case 1:
+                    {
+                        pnt1 = navigation_frame.performance.getEntriesByType("navigation")[0];
+                        navigation_frame.location.href = '/navigation-timing/resources/blank_page_green_with_onunload.html';
+                        step++;
+                        break;
+                    }
+                    case 2:
+                    {
+                        navigation_frame.history.back();
+                        step++;
+                        break;
+                    }
+                    case 3:
+                    {
+                        var pnt2 = navigation_frame.performance.getEntriesByType("navigation")[0];
+                        assert_equals(pnt1.type, "navigate");
+                        assert_equals(pnt2.type, "back_forward");
+                        done();
+                        break;
+                    }
+                    default:
+                        break;
+                }
+            }
+        </script>
+    </head>
+    <body>
+        <h1>
+            Description</h1>
+        <p>
+            This test validates that a PerformanceNavigatingTiming corresponding to a detached document can't access a different document's state. </p>
+        <iframe id="frameContext" onload="onload_test();" src="resources/blank_page_yellow_with_onunload.html" style="width: 250px; height: 250px;"></iframe>
+    </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_test_frame_removed.html b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_test_frame_removed.html
new file mode 100644
index 0000000..0bef297d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/navigation-timing/nav2_test_frame_removed.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <title>Navigation Timing 2 WPT</title>
+        <link rel="author" title="Google" href="http://www.google.com/" />
+        <link rel="help" href="http://www.w3.org/TR/navigation-timing/#sec-navigation-timing-interface"/>
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
+        <script>
+            function onload_test()
+            {   test(function() {
+                    var pnt = window.frames[0].performance.getEntriesByType("navigation")[0];
+                    document.getElementById("frameContext").remove();
+                    assert_equals(pnt.type, "navigate");
+                });
+            }
+        </script>
+    </head>
+    <body>
+        <h1>
+            Description</h1>
+        <p>
+            This test validates that PerformanceNavigationTiming::type()'s default value is navigate </p>
+        <iframe id="frameContext" onload="onload_test();" src="resources/blank_page_yellow_with_onunload.html" style="width: 250px; height: 250px;"></iframe>
+    </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/extendable-event-waituntil.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/extendable-event-waituntil.https-expected.txt
new file mode 100644
index 0000000..8f72ff81
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/extendable-event-waituntil.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+PASS Test install event waitUntil fulfilled 
+PASS Test ExtendableEvent multiple waitUntil fulfilled. 
+FAIL Test ExtendableEvent waitUntil reject precedence. assert_unreached: unexpected rejection: assert_true: The "redundant" state was entered after the first "extend lifetime promise" resolved. expected true got undefined Reached unreachable code
+PASS Test activate event waitUntil fulfilled 
+PASS Test install event waitUntil rejected 
+PASS Test activate event waitUntil rejected. 
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/extendable-event-waituntil.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/extendable-event-waituntil.https.html
index b2029ae..8e790d0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/extendable-event-waituntil.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/extendable-event-waituntil.https.html
@@ -16,14 +16,17 @@
 // |obj.synced| to true once ack'd.
 function syncWorker(test, worker, obj) {
   var channel = new MessageChannel();
-  channel.port1.onmessage = test.step_func(function(e) {
-      var message = e.data;
-      assert_equals(message, 'SYNC',
-                    'Should receive sync message from worker.');
-      obj.synced = true;
-      channel.port1.postMessage('ACK');
-    });
   worker.postMessage({port: channel.port2}, [channel.port2]);
+  return new Promise(function(resolve) {
+      channel.port1.onmessage = test.step_func(function(e) {
+          var message = e.data;
+          assert_equals(message, 'SYNC',
+                        'Should receive sync message from worker.');
+          obj.synced = true;
+          channel.port1.postMessage('ACK');
+          resolve();
+        });
+    });
 }
 
 async_test(function(t) {
@@ -68,13 +71,28 @@
 async_test(function(t) {
     var scope = 'resources/install-reject-precedence';
     var onRegister = function(worker) {
-        var obj = {};
+        var obj1 = {};
+        var obj2 = {};
         wait_for_state(t, worker, 'redundant')
           .then(function() {
+              assert_true(
+                obj1.synced,
+                'The "redundant" state was entered after the first "extend ' +
+                  'lifetime promise" resolved.'
+              );
+              assert_true(
+                obj2.synced,
+                'The "redundant" state was entered after the third "extend ' +
+                  'lifetime promise" resolved.'
+              );
               service_worker_unregister_and_done(t, scope);
             })
           .catch(unreached_rejection(t));
-        syncWorker(t, worker, obj);
+
+        syncWorker(t, worker, obj1)
+          .then(function() {
+              syncWorker(t, worker, obj2);
+            });
       };
     runTest(t, scope, onRegister);
   }, 'Test ExtendableEvent waitUntil reject precedence.');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/extendable-event-waituntil.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/extendable-event-waituntil.js
index 48fdf1b9..20a9eb0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/extendable-event-waituntil.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/extendable-event-waituntil.js
@@ -57,8 +57,20 @@
       e.waitUntil(fulfillPromise());
       break;
     case 'install-reject-precedence':
+      // Three "extend lifetime promises" are needed to verify that the user
+      // agent waits for all promises to settle even in the event of rejection.
+      // The first promise is fulfilled on demand by the client, the second is
+      // immediately scheduled for rejection, and the third is fulfilled on
+      // demand by the client (but only after the first promise has been
+      // fulfilled).
+      //
+      // User agents which simply expose `Promise.all` semantics in this case
+      // (by entering the "redundant state" following the rejection of the
+      // second promise but prior to the fulfillment of the third) can be
+      // identified from the client context.
       e.waitUntil(fulfillPromise());
       e.waitUntil(rejectPromise());
+      e.waitUntil(fulfillPromise());
       break;
   }
 };
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/resources/storagemanager-persist-worker.js b/third_party/WebKit/LayoutTests/external/wpt/storage/resources/storagemanager-persist-worker.js
new file mode 100644
index 0000000..1152e4ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/storage/resources/storagemanager-persist-worker.js
@@ -0,0 +1,7 @@
+importScripts('/resources/testharness.js');
+
+test(function() {
+  assert_false('persist' in navigator.storage);
+}, 'navigator.storage.persist should not exist in workers');
+
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/resources/storagemanager-persisted-worker.js b/third_party/WebKit/LayoutTests/external/wpt/storage/resources/storagemanager-persisted-worker.js
new file mode 100644
index 0000000..979c8be
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/storage/resources/storagemanager-persisted-worker.js
@@ -0,0 +1,13 @@
+importScripts('/resources/testharness.js');
+
+promise_test(function() {
+  var promise = navigator.storage.persisted();
+  assert_true(promise instanceof Promise,
+              'navigator.storage.persisted() returned a Promise.');
+  return promise.then(function (result) {
+    assert_equals(typeof result, 'boolean',
+                  result + ' should be a boolean');
+  });
+}, 'navigator.storage.persisted returns a promise that resolves.');
+
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persist-worker.https.html b/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persist-worker.https.html
new file mode 100644
index 0000000..9c89a2f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persist-worker.https.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>StorageManager: persist() (worker)</title>
+<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+var worker = new Worker('resources/storagemanager-persist-worker.js');
+fetch_tests_from_worker(worker);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persist.https.html b/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persist.https.html
new file mode 100644
index 0000000..61624fe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persist.https.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>StorageManager: persist()</title>
+<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+promise_test(function() {
+    var promise = navigator.storage.persist();
+    assert_true(promise instanceof Promise,
+        'navigator.storage.persist() returned a Promise.');
+    return promise.then(function(result) {
+        assert_equals(typeof result, 'boolean', result + ' should be boolean');
+    });
+}, 'navigator.storage.persist() returns a promise that resolves.');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persisted-worker.https.html b/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persisted-worker.https.html
new file mode 100644
index 0000000..7500494
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persisted-worker.https.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>StorageManager: persisted() (worker)</title>
+<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persisted">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+var worker = new Worker('resources/storagemanager-persisted-worker.js');
+fetch_tests_from_worker(worker);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persisted.https.html b/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persisted.https.html
new file mode 100644
index 0000000..1d88c11b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/storage/storagemanager-persisted.https.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>StorageManager: persist()</title>
+<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+promise_test(function() {
+    var promise = navigator.storage.persisted();
+    assert_true(promise instanceof Promise,
+        'navigator.storage.persisted() returned a Promise.');
+    return promise.then(function (result) {
+        assert_equals(typeof result, 'boolean', result + ' should be boolean');
+    });
+}, 'navigator.storage.persisted() returns a promise that resolves.');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-canvas-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-canvas-expected.txt
index 292b39a..e534171 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-canvas-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-canvas-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Test Results
 solid on solid	alpha on solid	solid on alpha	alpha on alpha
 source-over				
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-image-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-image-expected.txt
index 6a84b9e..db4cbb3 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-image-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-image-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Test Results
 solid on solid	alpha on solid	solid on alpha	alpha on alpha
 source-over				
diff --git a/third_party/WebKit/LayoutTests/fast/css/counters/counter-traverse-table-cell-expected.txt b/third_party/WebKit/LayoutTests/fast/css/counters/counter-traverse-table-cell-expected.txt
index 2186b92..4b1e555 100644
--- a/third_party/WebKit/LayoutTests/fast/css/counters/counter-traverse-table-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css/counters/counter-traverse-table-cell-expected.txt
@@ -1 +1,2 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 This tests that we don't crash when using the CSS counters feature.  
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Element/offsetLeft-offsetTop-body-quirk-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Element/offsetLeft-offsetTop-body-quirk-expected.txt
index 89d26cf..568beb4 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Element/offsetLeft-offsetTop-body-quirk-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Element/offsetLeft-offsetTop-body-quirk-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 static: body: (0, 0) child: (27, 27)
 relative: body: (0, 0) child: (17, 17)
 fixed: body: (0, 0) child: (17, 17)
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Element/offsetLeft-offsetTop-html-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Element/offsetLeft-offsetTop-html-expected.txt
index 5e3da62..07884717 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Element/offsetLeft-offsetTop-html-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Element/offsetLeft-offsetTop-html-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 control: (0, 0)
 static: (10, 10)
 absolute: (20, 10)
diff --git a/third_party/WebKit/LayoutTests/fast/events/constructors/track-event-constructor-expected.txt b/third_party/WebKit/LayoutTests/fast/events/constructors/track-event-constructor-expected.txt
index 74a01c9a..2a0d8d3a6 100644
--- a/third_party/WebKit/LayoutTests/fast/events/constructors/track-event-constructor-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/events/constructors/track-event-constructor-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 This tests the constructor for the TrackEvent DOM class.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/events/drag-and-drop-autoscroll-inner-frame-expected.txt b/third_party/WebKit/LayoutTests/fast/events/drag-and-drop-autoscroll-inner-frame-expected.txt
index bc4f50d..4683904 100644
--- a/third_party/WebKit/LayoutTests/fast/events/drag-and-drop-autoscroll-inner-frame-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/events/drag-and-drop-autoscroll-inner-frame-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Check autoscroll within an inner frame by drag-and-drop
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/events/resize-subframe-expected.txt b/third_party/WebKit/LayoutTests/fast/events/resize-subframe-expected.txt
index 9c7032118..fc99a4e3 100644
--- a/third_party/WebKit/LayoutTests/fast/events/resize-subframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/events/resize-subframe-expected.txt
@@ -1,2 +1,3 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 ALERT: PASS
 
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/gesture/long-press-focuses-frame-expected.txt b/third_party/WebKit/LayoutTests/fast/events/touch/gesture/long-press-focuses-frame-expected.txt
index 79cf179f..5c13fc0 100644
--- a/third_party/WebKit/LayoutTests/fast/events/touch/gesture/long-press-focuses-frame-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/events/touch/gesture/long-press-focuses-frame-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/files/null-origin-string-expected.txt b/third_party/WebKit/LayoutTests/fast/files/null-origin-string-expected.txt
index a117861..415ccd9 100644
--- a/third_party/WebKit/LayoutTests/fast/files/null-origin-string-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/files/null-origin-string-expected.txt
@@ -1,2 +1,3 @@
+CONSOLE WARNING: line 30: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE MESSAGE: line 1: Started reading...
 PASS if no crash.
diff --git a/third_party/WebKit/LayoutTests/fast/frames/content-opacity-1-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/content-opacity-1-expected.txt
index 270de6a0..fb16425f 100644
--- a/third_party/WebKit/LayoutTests/fast/frames/content-opacity-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/frames/content-opacity-1-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/fast/frames/negative-remaining-length-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/negative-remaining-length-crash-expected.txt
index 8b13789..6e41aad 100644
--- a/third_party/WebKit/LayoutTests/fast/frames/negative-remaining-length-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/frames/negative-remaining-length-crash-expected.txt
@@ -1 +1,2 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 
diff --git a/third_party/WebKit/LayoutTests/fast/loader/simultaneous-reloads-assert-expected.txt b/third_party/WebKit/LayoutTests/fast/loader/simultaneous-reloads-assert-expected.txt
index d911ebb7..181979e 100644
--- a/third_party/WebKit/LayoutTests/fast/loader/simultaneous-reloads-assert-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/loader/simultaneous-reloads-assert-expected.txt
@@ -1,3 +1,4 @@
 ALERT: If you do not hit an assertion failure when running this test with a debug build and you get a SUCCESS message, then you pass the test.
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 ALERT: SUCCESS
 
diff --git a/third_party/WebKit/LayoutTests/fast/loader/stateobjects/pushstate-in-data-url-denied-expected.txt b/third_party/WebKit/LayoutTests/fast/loader/stateobjects/pushstate-in-data-url-denied-expected.txt
index d8a96f92..14ac789 100644
--- a/third_party/WebKit/LayoutTests/fast/loader/stateobjects/pushstate-in-data-url-denied-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/loader/stateobjects/pushstate-in-data-url-denied-expected.txt
@@ -1,2 +1,3 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 ALERT: PASS: data URLs cannot be manipulated via pushState.
 
diff --git a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-hidden-iframe-expected.txt b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-hidden-iframe-expected.txt
index 25061c5..1e28fae0 100644
--- a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-hidden-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-hidden-iframe-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 This is link_1.
 
 
diff --git a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-hidden-iframe-zero-size-expected.txt b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-hidden-iframe-zero-size-expected.txt
index 0019f62..195ec453 100644
--- a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-hidden-iframe-zero-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-hidden-iframe-zero-size-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 This is link_1.
 
 
diff --git a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-nested-expected.txt b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-nested-expected.txt
index 6f67f45..f58c98af 100644
--- a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-nested-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-nested-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Link
 
 Link
diff --git a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-no-focusable-content-expected.txt b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-no-focusable-content-expected.txt
index 3348dcd1..0c77c6e 100644
--- a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-no-focusable-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-no-focusable-content-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 a
 
 
diff --git a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-no-scrollable-content-expected.txt b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-no-scrollable-content-expected.txt
index cf213f6..bfa9010 100644
--- a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-no-scrollable-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-no-scrollable-content-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 a
 
 
diff --git a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-recursive-offset-parent-expected.txt b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-recursive-offset-parent-expected.txt
index 3f78909b..122c3a9f 100644
--- a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-recursive-offset-parent-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-recursive-offset-parent-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Link
 
 PASS successfullyParsed is true
diff --git a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-with-offscreen-focusable-element-expected.txt b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-with-offscreen-focusable-element-expected.txt
index c296742..09d33bb 100644
--- a/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-with-offscreen-focusable-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/spatial-navigation/snav-iframe-with-offscreen-focusable-element-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 
 
 PASS successfullyParsed is true
diff --git a/third_party/WebKit/LayoutTests/fullscreen/full-screen-iframe-without-allow-attribute-allowed-from-parent-expected.txt b/third_party/WebKit/LayoutTests/fullscreen/full-screen-iframe-without-allow-attribute-allowed-from-parent-expected.txt
index c6343a5..1689b406 100644
--- a/third_party/WebKit/LayoutTests/fullscreen/full-screen-iframe-without-allow-attribute-allowed-from-parent-expected.txt
+++ b/third_party/WebKit/LayoutTests/fullscreen/full-screen-iframe-without-allow-attribute-allowed-from-parent-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Test entering full screen security restrictions. An iframe without an allow attribute is still permitted to fullscreen if the request comes from the containing document.
 
 To test manually, press any key - the page should enter full screen mode.
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/download.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/download.html
index 7529945..65ea094a 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/download.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/download.html
@@ -18,7 +18,7 @@
 
     function responseReceived(requestId, time, resourceType, response)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/download\.zzz/.exec(request.url())) {
             InspectorTest.addResult("Received response for download.zzz");
             InspectorTest.addResult("SUCCESS");
@@ -28,14 +28,14 @@
 
     function loadingFinished(requestId, finishTime)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/download\.zzz/.exec(request.url()))
             InspectorTest.completeTest();
     }
 
     function loadingFailed(requestId, time, localizedDescription, canceled)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/download\.zzz/.exec(request.url()))
             InspectorTest.completeTest();
     }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-datareceived.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-datareceived.html
index 3e9c9ab0..42a0d45 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-datareceived.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-datareceived.html
@@ -21,7 +21,7 @@
     var encodedBytesReceived = 0;
     function responseReceived(requestId, frameId, loaderId, time, resourceType, response)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/resource\.php/.exec(request.url())) {
             InspectorTest.addResult("Received response.");
             encodedBytesReceived += response.encodedDataLength;
@@ -30,7 +30,7 @@
 
     function loadingFinished(requestId, finishTime, encodedDataLength)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/resource\.php/.exec(request.url())) {
             InspectorTest.assertEquals(encodedBytesReceived, encodedDataLength, "Data length mismatch");
             InspectorTest.addResult("SUCCESS");
@@ -40,7 +40,7 @@
 
     function loadingFailed(requestId, time, localizedDescription, canceled)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/resource\.php/.exec(request.url())) {
             InspectorTest.addResult("Loading failed!");
             InspectorTest.completeTest();
@@ -50,7 +50,7 @@
     function dataReceived(requestId, time, dataLength, encodedDataLength)
     {
         InspectorTest.addSniffer(SDK.NetworkDispatcher.prototype, "dataReceived", dataReceived);
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/resource\.php/.exec(request.url()))
             encodedBytesReceived += encodedDataLength;
     }
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-data-received-async-response-type-blob.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-data-received-async-response-type-blob.html
index d49d86da..4db5357 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-data-received-async-response-type-blob.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xhr-data-received-async-response-type-blob.html
@@ -13,7 +13,7 @@
 
     function dataReceived(requestId, time, dataLength, encodedDataLength)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/resource\.php/.exec(request.url())) {
             InspectorTest.addResult("Received data for resource.php");
             InspectorTest.addResult("SUCCESS");
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xsl-content.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xsl-content.html
index a75e785..4181f7b 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xsl-content.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/network-xsl-content.html
@@ -21,7 +21,7 @@
 
     function loadingFinished(requestId)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         request.requestContent().then(contentReceived.bind(this, request));
     }
     function contentReceived(request, content)
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/request-name-path.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/request-name-path.html
index c4ae8ed9..8048eb4 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/request-name-path.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/request-name-path.html
@@ -15,7 +15,7 @@
         if (targetUrl)
             mainTarget.setInspectedURL(targetUrl);
         InspectorTest.addResult("Dumping request name and path for url: " + url);
-        var request = new SDK.NetworkRequest(mainTarget, 0, url);
+        var request = new SDK.NetworkRequest(InspectorTest.networkManager, 0, url);
         InspectorTest.addResult("    name = " + request.name());
         InspectorTest.addResult("    path = " + request.path());
         InspectorTest.addResult("    targetUrl = " + (targetUrl ? targetUrl : currentTargetURL));
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/waterfall-images.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/waterfall-images.html
index eb029afc..15432bce 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/waterfall-images.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/waterfall-images.html
@@ -237,7 +237,7 @@
   }
 
   function makeRequest(requestData) {
-    var request = new SDK.NetworkRequest(SDK.targetManager.mainTarget(), (++requestIds).toString(), requestData.url);
+    var request = new SDK.NetworkRequest(InspectorTest.networkManager, (++requestIds).toString(), requestData.url);
     request.setResourceType(requestData.type);
     request.setIssueTime(requestData.issueTime, requestData.wallIssueTime);
     request.timing = requestData.timing;
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network/x-frame-options-deny.html b/third_party/WebKit/LayoutTests/http/tests/inspector/network/x-frame-options-deny.html
index 033ab7a..b2eadbcb 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/network/x-frame-options-deny.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network/x-frame-options-deny.html
@@ -18,7 +18,7 @@
 
     function responseReceived(requestId, time, resourceType, response)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/x-frame-options-deny\.cgi/.exec(request.url())) {
             InspectorTest.addResult("Received response for x-frame-options-deny.cgi");
             InspectorTest.addResult("SUCCESS");
@@ -28,14 +28,14 @@
 
     function loadingFinished(requestId, finishTime)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/x-frame-options-deny\.cgi/.exec(request.url()))
             InspectorTest.completeTest();
     }
 
     function loadingFailed(requestId, time, localizedDescription, canceled)
     {
-        var request = InspectorTest.networkLog.requestForId(InspectorTest.mainTarget, requestId);
+        var request = InspectorTest.networkLog.requestForId(InspectorTest.networkManager, requestId);
         if (/x-frame-options-deny\.cgi/.exec(request.url())) {
             InspectorTest.addResult("TODO(mkwst): This started failing when we moved XFO to the browser.");
             InspectorTest.completeTest();
diff --git a/third_party/WebKit/LayoutTests/http/tests/local/absolute-url-strip-whitespace-expected.txt b/third_party/WebKit/LayoutTests/http/tests/local/absolute-url-strip-whitespace-expected.txt
index 7ef22e9..dfd51a52 100644
--- a/third_party/WebKit/LayoutTests/http/tests/local/absolute-url-strip-whitespace-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/local/absolute-url-strip-whitespace-expected.txt
@@ -1 +1,2 @@
-PASS
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
+FAIL, script did not run.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute-expected.txt
new file mode 100644
index 0000000..dd27ac26
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute-expected.txt
@@ -0,0 +1,15 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
+This is a testharness.js-based test.
+PASS <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?data=1&#10;b"> 
+PASS <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=2&#10;b&lt;c"> 
+PASS       <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=3        b&lt;c      ">     
+FAIL <img id="dangling" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABnAQMAAACQMjadAAAAA1BMVEX///+nxBvIAAAAEUlEQVQ4y2MYBaNgFIwCegAABG0AAd5G4RkAAAAASUVORK5CYII="> assert_equals: Height expected 0 but got 103
+PASS <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?4&img=&lt;b"> 
+PASS <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?5&data=&amp;#10;b"> 
+PASS <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?6&img=&amp;lt;b"> 
+PASS <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?7&img=&amp;#10;b&amp;lt;c"> 
+PASS       <img id="dangling" src="        http://127.0.0.1:8000/security/resources/abe.png?8      ">      <input type=hidden name=csrf value=sekrit>     
+PASS       <img id="dangling" src="      http://127.0.0.1:8000/security/resources/abe.png?9&img=&amp;lt;      ">      <input type=hidden name=csrf value=sekrit>     
+PASS       <img id="dangling" src="      http://127.0.0.1:8000/security/resources/abe.png?10&img=&amp;#10;      ">      <input type=hidden name=csrf value=sekrit>     
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute.html b/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute.html
index 7c3639e..3c03d51 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute.html
+++ b/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute.html
@@ -16,12 +16,14 @@
   var abeSizedPngWithNewline = abeSizedPng.replace("i", "i\n");
 
   var should_block = [
-    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a${rawNewline}b${rawBrace}c">`,
+    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?data=1${rawNewline}b">`,
+    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=2${rawNewline}b${rawBrace}c">`,
     `
-      <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a
+      <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=3
         b${rawBrace}c
       ">
     `,
+    `<img id="dangling" src="${abeSizedPngWithNewline}">`,
   ];
 
   should_block.forEach(markup => {
@@ -32,35 +34,30 @@
   });
 
   var should_load = [
-
-    // `data:` and `javascript:` URLs don't check the content:
-    `<img id="dangling" src="${abeSizedPngWithNewline}">`,
-
-    // Just one or the other isn't enough:
-    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?data=a${rawNewline}b">`,
-    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a${rawBrace}b">`,
+    // Brace alone doesn't block:
+    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?4&img=${rawBrace}b">`,
 
     // Entity-escaped characters don't trigger blocking:
-    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?data=a${escapedNewline}b">`,
-    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a${escapedBrace}b">`,
-    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a${escapedNewline}b${escapedBrace}c">`,
+    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?5&data=${escapedNewline}b">`,
+    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?6&img=${escapedBrace}b">`,
+    `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?7&img=${escapedNewline}b${escapedBrace}c">`,
 
     // Leading and trailing whitespace is stripped:
     `
       <img id="dangling" src="
-        http://127.0.0.1:8000/security/resources/abe.png
+        http://127.0.0.1:8000/security/resources/abe.png?8
       ">
       <input type=hidden name=csrf value=sekrit>
     `,
     `
       <img id="dangling" src="
-      http://127.0.0.1:8000/security/resources/abe.png?img=${escapedBrace}
+      http://127.0.0.1:8000/security/resources/abe.png?9&img=${escapedBrace}
       ">
       <input type=hidden name=csrf value=sekrit>
     `,
     `
       <img id="dangling" src="
-      http://127.0.0.1:8000/security/resources/abe.png?img=${escapedNewline}
+      http://127.0.0.1:8000/security/resources/abe.png?10&img=${escapedNewline}
       ">
       <input type=hidden name=csrf value=sekrit>
     `,
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/document-all-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/document-all-expected.txt
index ca9071d1..44c56277 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/document-all-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/document-all-expected.txt
@@ -1,2 +1,3 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 ALERT: true
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/no-indexeddb-from-sandbox-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/no-indexeddb-from-sandbox-expected.txt
index e391647..3fb9246 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/no-indexeddb-from-sandbox-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/no-indexeddb-from-sandbox-expected.txt
@@ -1,2 +1,3 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE MESSAGE: line 1: PASS: indexedDB.open() threw a SECURITY_ERR!
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/no-popup-from-sandbox-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/no-popup-from-sandbox-expected.txt
index 3df45730..35ec840 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/no-popup-from-sandbox-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/no-popup-from-sandbox-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE ERROR: line 1: Blocked opening 'about:blank' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.
 CONSOLE MESSAGE: line 1: PASS
 To run this test outside of DumpRenderTree, please disable your popup blocker!
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/no-popup-from-sandbox-top-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/no-popup-from-sandbox-top-expected.txt
index 007894b..b63c4d7f 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/no-popup-from-sandbox-top-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/no-popup-from-sandbox-top-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE ERROR: line 1: Unsafe JavaScript attempt to initiate navigation for frame with URL 'http://127.0.0.1:8000/security/no-popup-from-sandbox-top.html' from frame with URL 'data:text/html,       <script>       var win = window.open('about:blank', '_top');       console.log(win ? 'FAIL' : 'PASS');       </script>'. The frame attempting navigation of the top-level window is sandboxed, but the flag of 'allow-top-navigation' or 'allow-top-navigation-by-user-activation' is not set.
 
 CONSOLE MESSAGE: line 1: PASS
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-can-navigate-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-can-navigate-expected.txt
index c1b12c5..9d9f590 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-can-navigate-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-can-navigate-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 To run this test outside of DumpRenderTree, please disable your popup blocker!
 
 This test passes if it doesn't hang.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-control-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-control-expected.txt
index c58943b..43a1631 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-control-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-control-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE MESSAGE: line 1: /PASS/
 To run this test outside of DumpRenderTree, please disable your popup blocker!
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-expected.txt
index 89b29a71..7e64c99c 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-is-sandboxed-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE ERROR: line 1: Blocked form submission to 'javascript:alert(/FAIL/)' because the form's frame is sandboxed and the 'allow-forms' permission is not set.
 To run this test outside of DumpRenderTree, please disable your popup blocker!
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-when-allowed-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-when-allowed-expected.txt
index 7f3be17..da508271 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-when-allowed-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/popup-allowed-by-sandbox-when-allowed-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE MESSAGE: line 1: PASS
 To run this test outside of DumpRenderTree, please disable your popup blocker!
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/sandboxed-opener-can-close-window-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/sandboxed-opener-can-close-window-expected.txt
index 2d8d1cf..26ecb629 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/sandboxed-opener-can-close-window-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/sandboxed-opener-can-close-window-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 To run this test outside of DumpRenderTree, please disable your popup blocker!
 
 This test passes if it doesn't hang.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/window-named-proto-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/window-named-proto-expected.txt
index 415dc9e..2d0ed3f8 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/window-named-proto-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/window-named-proto-expected.txt
@@ -1,2 +1,3 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE ERROR: line 2: Uncaught TypeError: Cannot read property 'innerHTML' of null
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/window-named-valueOf-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/window-named-valueOf-expected.txt
index 61813406..b7bbfad 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/window-named-valueOf-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/window-named-valueOf-expected.txt
@@ -1 +1,2 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 This passes if it doesn't alert the contents of innocent-victim.  
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/extendable-event-async-waituntil.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/extendable-event-async-waituntil.html
deleted file mode 100644
index 5a7b1c3..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/extendable-event-async-waituntil.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
-<script src="resources/test-helpers.js"></script>
-<script>
-promise_test(function(t) {
-    var script = 'resources/extendable-event-async-waituntil.js';
-    var scope = 'resources/async-waituntil';
-    var worker;
-
-    return service_worker_unregister_and_register(t, script, scope)
-      .then(function(registration) {
-          worker = registration.installing;
-          return wait_for_state(t, worker, 'activated');
-        })
-      .then(function() {
-          var channel = new MessageChannel();
-          var saw_message = new Promise(function(resolve) {
-              channel.port1.onmessage = function(e) { resolve(e.data); }
-            });
-          worker.postMessage({port: channel.port2}, [channel.port2]);
-          return saw_message;
-        })
-      .then(function(message) {
-          assert_equals(message, 'PASS');
-          return service_worker_unregister_and_done(t, scope);
-        })
-  }, 'Calling waitUntil asynchronously throws an exception');
-</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/extendable-event-waituntil.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/extendable-event-waituntil.html
deleted file mode 100644
index 4a5d7dd..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/extendable-event-waituntil.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE html>
-<title>ExtendableEvent: waitUntil</title>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
-<script src="resources/test-helpers.js"></script>
-<script>
-function runTest(test, scope, onRegister) {
-  var script = 'resources/extendable-event-waituntil.js?' + scope;
-  service_worker_unregister_and_register(test, script, scope)
-    .then(function(registration) {
-        onRegister(registration.installing);
-      });
-}
-
-// Sends a SYN to the worker and asynchronously listens for an ACK; sets
-// |obj.synced| to true once ack'd.
-function syncWorker(test, worker, obj) {
-  var channel = new MessageChannel();
-  channel.port1.onmessage = test.step_func(function(e) {
-      var message = e.data;
-      assert_equals(message, 'SYNC',
-                    'Should receive sync message from worker.');
-      obj.synced = true;
-      channel.port1.postMessage('ACK');
-    });
-  worker.postMessage({port: channel.port2}, [channel.port2]);
-}
-
-async_test(function(t) {
-    // Passing scope as the test switch for worker script.
-    var scope = 'resources/install-fulfilled';
-    var onRegister = function(worker) {
-        var obj = {};
-        wait_for_state(t, worker, 'installed')
-          .then(function() {
-              assert_true(
-                obj.synced,
-                'state should be "installed" after the waitUntil promise ' +
-                    'for "oninstall" is fulfilled.');
-              service_worker_unregister_and_done(t, scope);
-            })
-          .catch(unreached_rejection(t));
-        syncWorker(t, worker, obj);
-      };
-    runTest(t, scope, onRegister);
-  }, 'Test install event waitUntil fulfilled');
-
-async_test(function(t) {
-    var scope = 'resources/install-multiple-fulfilled';
-    var onRegister = function(worker) {
-        var obj1 = {};
-        var obj2 = {};
-        wait_for_state(t, worker, 'installed')
-          .then(function() {
-              assert_true(
-                obj1.synced && obj2.synced,
-                'state should be "installed" after all waitUntil promises ' +
-                    'for "oninstall" are fulfilled.');
-              service_worker_unregister_and_done(t, scope);
-            })
-          .catch(unreached_rejection(t));
-        syncWorker(t, worker, obj1);
-        syncWorker(t, worker, obj2);
-      };
-    runTest(t, scope, onRegister);
-  }, 'Test ExtendableEvent multiple waitUntil fulfilled.');
-
-async_test(function(t) {
-    var scope = 'resources/install-reject-precedence';
-    var onRegister = function(worker) {
-        wait_for_state(t, worker, 'redundant')
-          .then(function() {
-              service_worker_unregister_and_done(t, scope);
-            })
-          .catch(unreached_rejection(t));
-      };
-    runTest(t, scope, onRegister);
-  }, 'Test ExtendableEvent waitUntil reject precedence.');
-
-async_test(function(t) {
-    var scope = 'resources/activate-fulfilled';
-    var onRegister = function(worker) {
-        var obj = {};
-        wait_for_state(t, worker, 'activating')
-          .then(function() {
-              syncWorker(t, worker, obj);
-              return wait_for_state(t, worker, 'activated');
-            })
-          .then(function() {
-              assert_true(
-                obj.synced,
-                'state should be "activated" after the waitUntil promise ' +
-                    'for "onactivate" is fulfilled.');
-              service_worker_unregister_and_done(t, scope);
-            })
-          .catch(unreached_rejection(t));
-      };
-    runTest(t, scope, onRegister);
-  }, 'Test activate event waitUntil fulfilled');
-
-async_test(function(t) {
-    var scope = 'resources/install-rejected';
-    var onRegister = function(worker) {
-        wait_for_state(t, worker, 'redundant')
-          .then(function() {
-              service_worker_unregister_and_done(t, scope);
-            })
-          .catch(unreached_rejection(t));
-      };
-    runTest(t, scope, onRegister);
-  }, 'Test install event waitUntil rejected');
-
-async_test(function(t) {
-    var scope = 'resources/activate-rejected';
-    var onRegister = function(worker) {
-        wait_for_state(t, worker, 'activated')
-          .then(function() {
-              service_worker_unregister_and_done(t, scope);
-            })
-          .catch(unreached_rejection(t));
-      };
-    runTest(t, scope, onRegister);
-  }, 'Test activate event waitUntil rejected.');
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/extendable-event-waituntil.js b/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/extendable-event-waituntil.js
deleted file mode 100644
index 48fdf1b9..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/extendable-event-waituntil.js
+++ /dev/null
@@ -1,75 +0,0 @@
-var pendingPorts = [];
-var portResolves = [];
-
-onmessage = function(e) {
-  var message = e.data;
-  if ('port' in message) {
-    var resolve = self.portResolves.shift();
-    if (resolve)
-      resolve(message.port);
-    else
-      self.pendingPorts.push(message.port);
-  }
-};
-
-function fulfillPromise() {
-  return new Promise(function(resolve) {
-      // Make sure the oninstall/onactivate callback returns first.
-      Promise.resolve().then(function() {
-          var port = self.pendingPorts.shift();
-          if (port)
-            resolve(port);
-          else
-            self.portResolves.push(resolve);
-        });
-    }).then(function(port) {
-        port.postMessage('SYNC');
-        return new Promise(function(resolve) {
-            port.onmessage = function(e) {
-              if (e.data == 'ACK')
-                resolve();
-            };
-          });
-      });
-}
-
-function rejectPromise() {
-  return new Promise(function(resolve, reject) {
-      // Make sure the oninstall/onactivate callback returns first.
-      Promise.resolve().then(reject);
-    });
-}
-
-function stripScopeName(url) {
-  return url.split('/').slice(-1)[0];
-}
-
-oninstall = function(e) {
-  switch (stripScopeName(self.location.href)) {
-    case 'install-fulfilled':
-      e.waitUntil(fulfillPromise());
-      break;
-    case 'install-rejected':
-      e.waitUntil(rejectPromise());
-      break;
-    case 'install-multiple-fulfilled':
-      e.waitUntil(fulfillPromise());
-      e.waitUntil(fulfillPromise());
-      break;
-    case 'install-reject-precedence':
-      e.waitUntil(fulfillPromise());
-      e.waitUntil(rejectPromise());
-      break;
-  }
-};
-
-onactivate = function(e) {
-  switch (stripScopeName(self.location.href)) {
-    case 'activate-fulfilled':
-      e.waitUntil(fulfillPromise());
-      break;
-    case 'activate-rejected':
-      e.waitUntil(rejectPromise());
-      break;
-  }
-};
diff --git a/third_party/WebKit/LayoutTests/http/tests/storage/durability-basics.html b/third_party/WebKit/LayoutTests/http/tests/storage/durability-basics.html
deleted file mode 100644
index 00fd1270..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/storage/durability-basics.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<title>navigator.storage methods return promises that are fulfilled</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-
-test(function() { assert_true(!!navigator.storage); },
-    "These tests requires navigator.storage");
-
-promise_test(function() {
-    var promise = navigator.storage.persist();
-    assert_true(promise instanceof Promise,
-        "navigator.storage.persist() returned a Promise.");
-    return promise.then(function (result) {
-        // Layout tests get canned results, not the value per spec. So testing
-        // their values here would only be testing our test plumbing. But we can
-        // test that the type of the returned value is correct.
-        assert_equals(typeof result, "boolean", result + " should be boolean");
-    });
-}, "navigator.storage.persist returns a promise that resolves.");
-
-promise_test(function() {
-    var promise = navigator.storage.persisted();
-    assert_true(promise instanceof Promise,
-        "navigator.storage.persisted() returned a Promise.");
-    return promise.then(function (result) {
-        // See comment above about why the result value isn't being tested here.
-        assert_equals(typeof result, "boolean", result + " should be boolean");
-    });
-}, "navigator.storage.persisted returns a promise that resolves.");
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/storage/durability-workers.html b/third_party/WebKit/LayoutTests/http/tests/storage/durability-workers.html
deleted file mode 100644
index 88da7e4..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/storage/durability-workers.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<title>navigator.storage methods work from workers</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-var worker = new Worker('resources/durability-worker.js');
-fetch_tests_from_worker(worker);
-</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/storage/resources/durability-worker.js b/third_party/WebKit/LayoutTests/http/tests/storage/resources/durability-worker.js
deleted file mode 100644
index 79224a31..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/storage/resources/durability-worker.js
+++ /dev/null
@@ -1,21 +0,0 @@
-importScripts("/resources/testharness.js");
-
-test(function() { assert_true("storage" in navigator); },
-    "These worker tests require navigator.storage");
-
-test(function() { assert_false("persist" in navigator.storage); },
-    "navigator.storage.persist should not exist in workers");
-
-promise_test(function() {
-    var promise = navigator.storage.persisted();
-    assert_true(promise instanceof Promise,
-        "navigator.storage.persisted() returned a Promise.");
-    return promise.then(function (result) {
-        // Layout tests get canned results, not the value per spec. So testing
-        // their values here would only be testing our test plumbing. But we can
-        // test that the type of the returned value is correct.
-        assert_equals(typeof result, "boolean", result + " should be a boolean");
-    });
-}, "navigator.storage.persisted returns a promise that resolves.");
-
-done();
diff --git a/third_party/WebKit/LayoutTests/http/tests/wasm/wasm_response_apis.html b/third_party/WebKit/LayoutTests/http/tests/wasm/wasm_response_apis.html
new file mode 100644
index 0000000..b6b1d4fb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/wasm/wasm_response_apis.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="wasm_response_apis.js"></script>
+<script>
+  promise_test(TestStreamedCompile, "test streamed compile");
+  promise_test(TestShortFormStreamedCompile, "test streamed compile with promise parameter");
+  promise_test(NegativeTestStreamedCompilePromise, "promise must produce a Response");
+  promise_test(BlankResponse, "blank response");
+  promise_test(FromArrayBuffer, "from array buffer");
+  promise_test(FromInvalidArrayBuffer, "from an invalid array buffer");
+</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/wasm/wasm_response_apis.js b/third_party/WebKit/LayoutTests/http/tests/wasm/wasm_response_apis.js
new file mode 100644
index 0000000..dc2ebcb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/wasm/wasm_response_apis.js
@@ -0,0 +1,48 @@
+// 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.
+
+
+function TestStreamedCompile() {
+  return fetch('incrementer.wasm')
+    .then(WebAssembly.compile)
+    .then(m => new WebAssembly.Instance(m))
+    .then(i => assert_equals(5, i.exports.increment(4)));
+}
+
+function TestShortFormStreamedCompile() {
+  return WebAssembly.compile(fetch('incrementer.wasm'))
+    .then(m => new WebAssembly.Instance(m))
+    .then(i => assert_equals(5, i.exports.increment(4)));
+}
+
+function NegativeTestStreamedCompilePromise() {
+  return WebAssembly.compile(new Promise((resolve, reject)=>{resolve(5);}))
+    .then(assert_unreached,
+          e => assert_true(e instanceof TypeError));
+}
+
+function BlankResponse() {
+  return WebAssembly.compile(new Response())
+    .then(assert_unreached,
+          e => assert_true(e instanceof TypeError));
+}
+
+function FromArrayBuffer() {
+  return fetch('incrementer.wasm')
+    .then(r => r.arrayBuffer())
+    .then(arr => new Response(arr))
+    .then(WebAssembly.compile)
+    .then(m => new WebAssembly.Instance(m))
+    .then(i => assert_equals(6, i.exports.increment(5)));
+}
+
+function FromInvalidArrayBuffer() {
+  var arr = new ArrayBuffer(10);
+  var view = new Uint8Array(arr);
+  for (var i = 0; i < view.length; ++i) view[i] = i;
+
+  return WebAssembly.compile(new Response(arr))
+    .then(assert_unreached,
+          e => assert_true(e instanceof Error));
+}
diff --git a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url-expected.txt b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url-expected.txt
index 4f7bafa8..f2353ff 100644
--- a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 CONSOLE WARNING: line 1: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
 PASS: Cross-domain access allowed.
 HTTP_ORIGIN: null
diff --git a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/newline-in-request-uri-expected.txt b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/newline-in-request-uri-expected.txt
index 87f0768..b88c102 100644
--- a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/newline-in-request-uri-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/newline-in-request-uri-expected.txt
@@ -1,5 +1,7 @@
 CONSOLE WARNING: line 10: Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
+CONSOLE WARNING: line 11: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
+CONSOLE ERROR: line 11: Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'http://127.0.0.1:8000/xmlhttprequest/resources/print-headers.cgi'.
 Test for bug 22731: Newline in XMLHttpRequest URL can be used to remove HTTP headers (e.g. Host:).
 
-LF SUCCESS
-CR SUCCESS
+LF FAIL: test did not run
+CR FAIL: test did not run
diff --git a/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/linkifier.html b/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/linkifier.html
index acac9f0b..7637a68 100644
--- a/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/linkifier.html
+++ b/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/linkifier.html
@@ -73,7 +73,7 @@
     function uiSourceCodeScriptFormatted()
     {
         InspectorTest.addResult("pretty printed location: " + link.textContent);
-        scriptFormatter._discardFormattedUISourceCodeScript(UI.panels.sources.visibleView.uiSourceCode(), true);
+        Sources.sourceFormatter.discardFormattedUISourceCode(UI.panels.sources.visibleView.uiSourceCode());
         InspectorTest.addResult("reverted location: " + link.textContent);
 
         var count1 = liveLocationsCount();
diff --git a/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/script-formatter-breakpoints-1.html b/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/script-formatter-breakpoints-1.html
index d0d6fbb..2d95bf1 100644
--- a/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/script-formatter-breakpoints-1.html
+++ b/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/script-formatter-breakpoints-1.html
@@ -78,7 +78,7 @@
             function pausedInF1Again(callFrames)
             {
                 InspectorTest.dumpBreakpointSidebarPane("while paused in pretty printed");
-                scriptFormatter._discardFormattedUISourceCodeScript(panel.visibleView.uiSourceCode(), true);
+                Sources.sourceFormatter.discardFormattedUISourceCode(panel.visibleView.uiSourceCode());
                 InspectorTest.waitBreakpointSidebarPane().then(onBreakpointsUpdated);
             }
 
diff --git a/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/script-formatter-breakpoints-4.html b/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/script-formatter-breakpoints-4.html
index 62be74c4..fe0dd799 100644
--- a/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/script-formatter-breakpoints-4.html
+++ b/third_party/WebKit/LayoutTests/inspector-enabled/sources/debugger/script-formatter-breakpoints-4.html
@@ -61,7 +61,7 @@
                 var formattedSourceFrame = panel.visibleView;
                 InspectorTest.removeBreakpoint(formattedSourceFrame, 13);
                 InspectorTest.addResult("Unformatting.");
-                scriptFormatter._discardFormattedUISourceCodeScript(panel.visibleView.uiSourceCode(), true);
+                Sources.sourceFormatter.discardFormattedUISourceCode(panel.visibleView.uiSourceCode());
                 var breakpoints = Bindings.breakpointManager._storage._setting.get();
                 InspectorTest.assertEquals(breakpoints.length, 0, "There should not be any breakpoints in the storage.");
                 next();
diff --git a/third_party/WebKit/LayoutTests/inspector/network/network-filter-updated-requests.html b/third_party/WebKit/LayoutTests/inspector/network/network-filter-updated-requests.html
index 16ecdf6..610b327 100644
--- a/third_party/WebKit/LayoutTests/inspector/network/network-filter-updated-requests.html
+++ b/third_party/WebKit/LayoutTests/inspector/network/network-filter-updated-requests.html
@@ -11,11 +11,11 @@
     target._resourceCategoryFilterUI._toggleTypeFilter(categoryName, false);
     InspectorTest.addResult("Clicked '" + categoryName + "' button.");
 
-    var requestFoo = new SDK.NetworkRequest(SDK.targetManager.mainTarget(), "", "", "", "", "");
+    var requestFoo = new SDK.NetworkRequest(InspectorTest.networkManager, "", "", "", "", "");
     requestFoo.setResourceType(types.Script);
     requestFoo.setRequestId("foo");
     target._appendRequest(requestFoo);
-    var requestBar = new SDK.NetworkRequest(SDK.targetManager.mainTarget(), "", "", "", "", "");
+    var requestBar = new SDK.NetworkRequest(InspectorTest.networkManager, "", "", "", "", "");
     requestBar.setResourceType(types.Script);
     requestBar.setRequestId("bar");
     target._appendRequest(requestBar);
diff --git a/third_party/WebKit/LayoutTests/inspector/network/network-status-non-http.html b/third_party/WebKit/LayoutTests/inspector/network/network-status-non-http.html
index 8ef89af..649c948 100644
--- a/third_party/WebKit/LayoutTests/inspector/network/network-status-non-http.html
+++ b/third_party/WebKit/LayoutTests/inspector/network/network-status-non-http.html
@@ -16,7 +16,7 @@
         var urls = document.evaluate("//tbody/tr/td[position()=1]/@title", dataGrid, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
         var outputStrings = [];
 
-        for (var request of NetworkLog.networkLog.requestsForTarget(SDK.targetManager.mainTarget())) {
+        for (var request of NetworkLog.networkLog.requestsForManager(InspectorTest.networkManager)) {
             var line = request.displayName + ":" + request.statusCode + " " + request.statusText
             if (request.failed)
                 line += "(failed)";
diff --git a/third_party/WebKit/LayoutTests/inspector/network/network-update-calculator-for-all-requests.html b/third_party/WebKit/LayoutTests/inspector/network/network-update-calculator-for-all-requests.html
index 95163ab..b4f6e9c 100644
--- a/third_party/WebKit/LayoutTests/inspector/network/network-update-calculator-for-all-requests.html
+++ b/third_party/WebKit/LayoutTests/inspector/network/network-update-calculator-for-all-requests.html
@@ -11,7 +11,7 @@
 
     function appendRequest(id, type, startTime, endTime)
     {
-        var request = new SDK.NetworkRequest(SDK.targetManager.mainTarget(), "", "", "", "", "");
+        var request = new SDK.NetworkRequest(InspectorTest.networkManager, "", "", "", "", "");
         request.setResourceType(type);
         request.setRequestId(id);
         request.setIssueTime(startTime);
diff --git a/third_party/WebKit/LayoutTests/inspector/screen-orientation-override-expected.txt b/third_party/WebKit/LayoutTests/inspector/screen-orientation-override-expected.txt
index e954faa..ee35baa 100644
--- a/third_party/WebKit/LayoutTests/inspector/screen-orientation-override-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/screen-orientation-override-expected.txt
@@ -1,8 +1,3 @@
-CONSOLE MESSAGE: line 25: angle: 0; type: portrait-primary
-CONSOLE MESSAGE: line 25: angle: 180; type: portrait-secondary
-CONSOLE MESSAGE: line 25: angle: 90; type: landscape-primary
-CONSOLE MESSAGE: line 25: angle: 270; type: landscape-secondary
-CONSOLE MESSAGE: line 25: angle: 0; type: landscape-primary
 
 Running: initial
 
diff --git a/third_party/WebKit/LayoutTests/inspector/screen-orientation-override.html b/third_party/WebKit/LayoutTests/inspector/screen-orientation-override.html
index 84c5d3e..f8bc5de2 100644
--- a/third_party/WebKit/LayoutTests/inspector/screen-orientation-override.html
+++ b/third_party/WebKit/LayoutTests/inspector/screen-orientation-override.html
@@ -3,8 +3,10 @@
 <script src="../http/tests/inspector/inspector-test.js"></script>
 <script>
 
-if (window.testRunner)
+if (window.testRunner) {
     window.testRunner.disableMockScreenOrientation();
+    window.testRunner.setDumpConsoleMessages(false);
+}
 
 var windowOrientationChangeEvent = false;
 var screenOrientationChangeEvent = false;
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2.html
index dbed5bd94..1e5c669 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2.html
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2.html
@@ -49,7 +49,7 @@
                     .then(() => InspectorTest.dumpBreakpointSidebarPane("while paused in raw"))
                     .then(() => InspectorTest.resumeExecution(next));
                 InspectorTest.removeBreakpoint(formattedSourceFrame, 3);
-                scriptFormatter._discardFormattedUISourceCodeScript(panel.visibleView.uiSourceCode(), true);
+                Sources.sourceFormatter.discardFormattedUISourceCode(panel.visibleView.uiSourceCode());
             }
         }
     ]);
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html
index bac561bf..f95a0e3 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html
@@ -49,7 +49,7 @@
                     .then(() => InspectorTest.dumpBreakpointSidebarPane("while paused in raw"))
                     .then(() => InspectorTest.resumeExecution(next));
                 // No need to remove breakpoint since formattedUISourceCode was removed.
-                scriptFormatter._discardFormattedUISourceCodeScript(panel.visibleView.uiSourceCode(), true);
+                Sources.sourceFormatter.discardFormattedUISourceCode(panel.visibleView.uiSourceCode());
             }
         }
     ]);
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
index bbe89d1ef..d3c0ec2 100644
--- a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 {
   "layers": [
     {
diff --git a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
index 272f337..0b85a81 100644
--- a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 {
   "bounds": [785, 933],
   "children": [
diff --git a/third_party/WebKit/LayoutTests/platform/linux/animations/skew-notsequential-compositor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/animations/skew-notsequential-compositor-expected.png
index f1fb3b5..f62d684b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/animations/skew-notsequential-compositor-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/animations/skew-notsequential-compositor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/frames/frameset-style-recalc-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/frames/frameset-style-recalc-expected.txt
index 8dde2be..ccd8f62d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/frames/frameset-style-recalc-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/frames/frameset-style-recalc-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/selection-hard-linebreak-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/text/selection-hard-linebreak-expected.txt
index 3fe7f1a5..29c7132e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/selection-hard-linebreak-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/selection-hard-linebreak-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
index 97e19398..81109b1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 {
   "layers": [
     {
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
index 97e19398..81109b1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 {
   "layers": [
     {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/animations/skew-notsequential-compositor-expected.png b/third_party/WebKit/LayoutTests/platform/mac/animations/skew-notsequential-compositor-expected.png
index f1fb3b5..f62d684b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/animations/skew-notsequential-compositor-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/animations/skew-notsequential-compositor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.png
index 20c0624..8b8cf3d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/frames/frameset-style-recalc-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/frames/frameset-style-recalc-expected.txt
index a9bd29e..3369ae7 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/frames/frameset-style-recalc-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/frames/frameset-style-recalc-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/win/animations/skew-notsequential-compositor-expected.png b/third_party/WebKit/LayoutTests/platform/win/animations/skew-notsequential-compositor-expected.png
index f9c7afc..e7bda3a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/animations/skew-notsequential-compositor-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/animations/skew-notsequential-compositor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/frames/frameset-style-recalc-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/frames/frameset-style-recalc-expected.txt
index 55265c98..96acac2 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/frames/frameset-style-recalc-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/frames/frameset-style-recalc-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
index 911d579b..e5c8188 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 {
   "layers": [
     {
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
index 911d579b..e5c8188 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 {
   "layers": [
     {
diff --git a/third_party/WebKit/LayoutTests/plugins/createScriptableObject-before-start-expected.txt b/third_party/WebKit/LayoutTests/plugins/createScriptableObject-before-start-expected.txt
index 83a7a2f..df3f12d 100644
--- a/third_party/WebKit/LayoutTests/plugins/createScriptableObject-before-start-expected.txt
+++ b/third_party/WebKit/LayoutTests/plugins/createScriptableObject-before-start-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 Test for http://bugs.webkit.org/show_bug.cgi?id=12050 REGRESSION: Assertion failure in -[WebBaseNetscapePluginView willCallPlugInFunction] (plugin).
 
 No ASSERT means test PASS.
diff --git a/third_party/WebKit/LayoutTests/printing/subframes-percentage-height-expected.txt b/third_party/WebKit/LayoutTests/printing/subframes-percentage-height-expected.txt
index 92de9dd5..1c028157 100644
--- a/third_party/WebKit/LayoutTests/printing/subframes-percentage-height-expected.txt
+++ b/third_party/WebKit/LayoutTests/printing/subframes-percentage-height-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 layer at (0,0) size 1066x799
   LayoutView at (0,0) size 1066x799
 layer at (0,0) size 1066x400
diff --git a/third_party/WebKit/LayoutTests/svg/custom/g-outside-svg-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/g-outside-svg-expected.txt
index 03938ca..d0f1de7 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/g-outside-svg-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/g-outside-svg-expected.txt
@@ -1,2 +1,3 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 The SVG in the below frame should not render or crash.
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/large-image-pattern-crash-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/large-image-pattern-crash-expected.txt
index 886a96b8..00e3afa9 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/large-image-pattern-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/large-image-pattern-crash-expected.txt
@@ -1,2 +1,3 @@
+CONSOLE WARNING: Resource requests whose URLs contain raw newline characters are deprecated, and may be blocked in M60, around August 2017. Please remove newlines from places like element attribute values in order to continue loading those resources. See https://www.chromestatus.com/features/5735596811091968 for more details.
 PASS: did not crash.
 
diff --git a/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-automation.html b/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-automation.html
index 04b9946d..b001ef42 100644
--- a/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-automation.html
+++ b/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-automation.html
@@ -5,7 +5,7 @@
     <script src="../../resources/testharness.js"></script>
     <script src="../../resources/testharnessreport.js"></script> 
     <script src="../resources/audit-util.js"></script>
-    <script src="../resources/audio-testing.js"></script>
+    <script src="../resources/audit.js"></script>
     <script src="../resources/biquad-filters.js"></script>
     <script src="../resources/audioparam-testing.js"></script>
   </head>
@@ -128,22 +128,22 @@
         return {filter: f, source: b};
       }
 
-      function createFilterVerifier(filterCreator, threshold, parameters, input, message) {
+      function createFilterVerifier(should, filterCreator, threshold, parameters, input, message) {
         return function (resultBuffer) {
           var actual = resultBuffer.getChannelData(0);
           var coefs = generateFilterCoefficients(filterCreator, parameters, automationEndTime);
 
           reference = timeVaryingFilter(input, coefs);
 
-          Should(message, actual, {
-            verbose: true
-          }).beCloseToArray(reference, threshold);
+          should(actual, message).beCloseToArray(reference, {
+            absoluteThreshold: threshold
+          });
         };
       }
 
       // Automate just the frequency parameter.  A bandpass filter is used where the center
       // frequency is swept across the source (which is a simple tone).
-      audit.defineTask("automate-freq", function (done) {
+      audit.define("automate-freq", (task, should) => {
         var context = new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate);
 
         // Center frequency of bandpass filter and also the frequency of the test tone.
@@ -167,14 +167,15 @@
         f.frequency.linearRampToValueAtTime(parameters.freq[1], automationEndTime);
 
         context.startRendering()
-          .then(createFilterVerifier(createBandpassFilter, 4.6455e-6, parameters, b.getChannelData(0),
+          .then(createFilterVerifier(should, createBandpassFilter, 4.6455e-6,
+            parameters, b.getChannelData(0),
             "Output of bandpass filter with frequency automation"))
-          .then(done);
+          .then(() => task.done());
       });
 
       // Automate just the Q parameter.  A bandpass filter is used where the Q of the filter is
       // swept.
-      audit.defineTask("automate-q", function (done) {
+      audit.define("automate-q", (task, should) => {
         var context = new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate);
 
         // The frequency of the test tone.
@@ -199,14 +200,15 @@
         f.Q.linearRampToValueAtTime(parameters.Q[1], automationEndTime);
 
         context.startRendering()
-          .then(createFilterVerifier(createBandpassFilter, 9.8348e-7, parameters, b.getChannelData(0),
+          .then(createFilterVerifier(should, createBandpassFilter, 9.8348e-7,
+            parameters, b.getChannelData(0),
             "Output of bandpass filter with Q automation"))
-          .then(done);
+          .then(() => task.done());
       });
 
       // Automate just the gain of the lowshelf filter.  A test tone will be in the lowshelf part of
       // the filter.  The output will vary as the gain of the lowshelf is changed.
-      audit.defineTask("automate-gain", function (done) {
+      audit.define("automate-gain", (task, should) => {
         var context = new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate);
 
         // Frequency of the test tone.
@@ -229,14 +231,15 @@
         f.gain.linearRampToValueAtTime(parameters.gain[1], automationEndTime);
 
         context.startRendering()
-          .then(createFilterVerifier(createLowShelfFilter, 2.7657e-5, parameters, b.getChannelData(0),
+          .then(createFilterVerifier(should, createLowShelfFilter, 2.7657e-5,
+            parameters, b.getChannelData(0),
             "Output of lowshelf filter with gain automation"))
-          .then(done);
+          .then(() => task.done());
       });
 
       // Automate just the detune parameter.  Basically the same test as for the frequncy parameter
       // but we just use the detune parameter to modulate the frequency parameter.
-      audit.defineTask("automate-detune", function (done) {
+      audit.define("automate-detune", (task, should) => {
         var context = new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate);
         var centerFreq = 10*440;
         var parameters = {
@@ -253,14 +256,15 @@
         f.detune.linearRampToValueAtTime(parameters.detune[1], automationEndTime);
 
         context.startRendering()
-          .then(createFilterVerifier(createBandpassFilter, 3.1471e-5, parameters, b.getChannelData(0),
+          .then(createFilterVerifier(should, createBandpassFilter, 3.1471e-5,
+            parameters, b.getChannelData(0),
             "Output of bandpass filter with detune automation"))
-          .then(done);
+          .then(() => task.done());
       });
 
       // Automate all of the filter parameters at once.  This is a basic check that everything is
       // working.  A peaking filter is used because it uses all of the parameters.
-      audit.defineTask("automate-all", function (done) {
+      audit.define("automate-all", (task, should) => {
         var context = new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate);
         var graph = configureGraph(context, 10*440);
         var f = graph.filter;
@@ -289,9 +293,10 @@
         f.detune.linearRampToValueAtTime(parameters.detune[1], automationEndTime);
 
         context.startRendering()
-          .then(createFilterVerifier(createPeakingFilter, 6.2907e-4, parameters, b.getChannelData(0),
+          .then(createFilterVerifier(should, createPeakingFilter, 6.2907e-4,
+            parameters, b.getChannelData(0),
             "Output of peaking filter with automation of all parameters"))
-          .then(done);
+          .then(() => task.done());
       });
 
       // Test that modulation of the frequency parameter of the filter works.  A sinusoid of 440 Hz
@@ -299,7 +304,7 @@
       // the filter is modulated by a sinusoid at 103 Hz, and the frequency modulation varies from
       // 116 to 412 Hz.  (This test was taken from the description in
       // https://github.com/WebAudio/web-audio-api/issues/509#issuecomment-94731355)
-      audit.defineTask("modulation", function (done) {
+      audit.define("modulation", (task, should) => {
         var context = new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate);
 
         // Create a graph with the sinusoidal source at 440 Hz as the input to a biquad filter.
@@ -353,19 +358,17 @@
              reference = timeVaryingFilter(b.getChannelData(0),
                {b0: b0, b1: b1, b2: b2, a1: a1, a2: a2});
 
-             Should("Output of bandpass filter with sinusoidal modulation of bandpass center frequency",
-               actual)
-               .beCloseToArray(reference, 3.9787e-5);
+             should(actual,
+                 "Output of bandpass filter with sinusoidal modulation of bandpass center frequency"
+               )
+               .beCloseToArray(reference, {
+                 absoluteThreshold: 3.9787e-5
+               });
            })
-          .then(done);
+          .then(() => task.done());
       });
 
-      // All done!
-      audit.defineTask("finish", function (done) {
-        done();
-      });
-
-      audit.runTasks();
+      audit.run();
     </script>
   </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/webaudio/Convolver/convolver-channels.html b/third_party/WebKit/LayoutTests/webaudio/Convolver/convolver-channels.html
index d61758a..87ad6a7c 100644
--- a/third_party/WebKit/LayoutTests/webaudio/Convolver/convolver-channels.html
+++ b/third_party/WebKit/LayoutTests/webaudio/Convolver/convolver-channels.html
@@ -4,7 +4,7 @@
     <script src="../../resources/testharness.js"></script>
     <script src="../../resources/testharnessreport.js"></script> 
     <script src="../resources/audit-util.js"></script>
-    <script src="../resources/audio-testing.js"></script>
+    <script src="../resources/audit.js"></script>
     <title>Test Supported Number of Channels for ConvolverNode</title>
   </head>
 
@@ -13,7 +13,7 @@
 
       var audit = Audit.createTaskRunner();
 
-      audit.defineTask("channel-count-test", function (done) {
+      audit.define("channel-count-test", (task, should) => {
         // Just need a context to create nodes on, so any allowed length and rate is ok.
         var context = new OfflineAudioContext(1, 1, 48000);
 
@@ -26,27 +26,18 @@
 
           if (count == 1 || count == 2 || count == 4) {
             // These are the only valid channel counts for the buffer.
-            success = Should(message, function () {
-              convolver.buffer = buffer;
-            }).notThrow() && success;
+            should(() => convolver.buffer = buffer, message)
+              .notThrow();
           } else {
-            success = Should(message, function () {
-              convolver.buffer = buffer;
-            }).throw("NotSupportedError") && success;
+            should(() => convolver.buffer = buffer, message)
+              .throw("NotSupportedError");
           }
         }
 
-        Should("Multiple channels for the convolver were handled", success)
-          .summarize("correctly", "incorrectly");
-
-        done();
+        task.done();
       });      
 
-      audit.defineTask("finish", function (done) {
-        done();
-      });
-
-      audit.runTasks();
+      audit.run();
     </script>
   </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/webaudio/Convolver/convolver-response-4-chan.html b/third_party/WebKit/LayoutTests/webaudio/Convolver/convolver-response-4-chan.html
index 843c81e..34a0486 100644
--- a/third_party/WebKit/LayoutTests/webaudio/Convolver/convolver-response-4-chan.html
+++ b/third_party/WebKit/LayoutTests/webaudio/Convolver/convolver-response-4-chan.html
@@ -96,6 +96,51 @@
                 .then(() => task.done());
           });
 
+      audit.define(
+        {
+          label: 'delayed buffer set',
+          description: 'Delayed set of 4-channel response'
+        },
+        (task, should) => {
+          // Don't really care about the output for this test.  It's to verify
+          // we don't crash in a debug build when setting the convolver buffer
+          // after creating the graph.
+          let context = new OfflineAudioContext(1, renderFrames, sampleRate);
+          let src = new OscillatorNode(context);
+          let convolver = new ConvolverNode(context, {
+            disableNormalization: true
+          });
+          let buffer = new AudioBuffer({
+            numberOfChannels: 4,
+            length: 4,
+            sampleRate: context.sampleRate
+          });
+
+          // Impulse responses for the convolver aren't important, as long as
+          // it's not all zeroes.
+          for (let k = 0; k < buffer.numberOfChannels; ++k) {
+            buffer.getChannelData(k).fill(1);
+          }
+
+          src.connect(convolver).connect(context.destination);
+
+          // Set the buffer after a few render quanta have passed.  The actual
+          // value must be least one, but is otherwise arbitrary.
+          context.suspend(512 / context.sampleRate)
+            .then(() => convolver.buffer = buffer)
+            .then(() => context.resume());
+
+         src.start();
+         context.startRendering()
+           .then(audioBuffer => {
+             // Just make sure output is not silent.
+             should(audioBuffer.getChannelData(0),
+                 'Output with delayed setting of convolver buffer')
+               .notBeConstantValueOf(0);
+           })
+           .then(() => task.done());
+        });
+
       function fourChannelResponseTest(options, should) {
         // Create an 4-channel offline context.  The first two channels are for
         // the stereo output of the convolver and the next two channels are for
diff --git a/third_party/WebKit/LayoutTests/webaudio/audio-scheduled-source-basic.html b/third_party/WebKit/LayoutTests/webaudio/audio-scheduled-source-basic.html
index d67350d..751effe 100644
--- a/third_party/WebKit/LayoutTests/webaudio/audio-scheduled-source-basic.html
+++ b/third_party/WebKit/LayoutTests/webaudio/audio-scheduled-source-basic.html
@@ -36,22 +36,17 @@
 
             // AudioScheduledSourceNode must have these properties.
             for (p in expectedProperties) {
-              should(
-                  AudioScheduledSourceNode.prototype.hasOwnProperty(
-                      expectedProperties[p]),
-                  'AudioScheduledSourceNode.' + expectedProperties[p])
-                  .beTrue();
+              should(AudioScheduledSourceNode.prototype,
+                     'AudioScheduledSourceNode.prototype')
+                  .haveOwnProperty(expectedProperties[p]);
             }
 
             // ConstantSource and Oscillator must not
             var nodes = ['ConstantSourceNode', 'OscillatorNode'];
             for (n in nodes) {
               for (p in expectedProperties) {
-                should(
-                    window[nodes[n]].prototype.hasOwnProperty(
-                        expectedProperties[p]),
-                    nodes[n] + '.' + expectedProperties[p])
-                    .beFalse();
+                should(window[nodes[n]].prototype, nodes[n] + '.prototype')
+                    .notHaveOwnProperty(expectedProperties[p]);
               }
             }
 
@@ -59,18 +54,15 @@
             // have the others.
             for (p in expectedProperties) {
               if (expectedProperties[p] !== 'start') {
-                should(
-                    AudioBufferSourceNode.prototype.hasOwnProperty(
-                        expectedProperties[p]),
-                    'AudioBufferSourceNode.' + expectedProperties[p])
-                    .beFalse();
+                should(AudioBufferSourceNode.prototype,
+                       'AudioBufferSourceNode.prototype')
+                    .notHaveOwnProperty(expectedProperties[p]);
               }
             }
 
-            should(
-                AudioBufferSourceNode.prototype.hasOwnProperty('start'),
-                'AudioBufferSourceNode.start')
-                .beTrue();
+            should(AudioBufferSourceNode.prototype,
+                   'AudioBufferSourceNode.prototype')
+                .haveOwnProperty('start');
 
             task.done();
           });
diff --git a/third_party/WebKit/LayoutTests/webaudio/resources/audit.js b/third_party/WebKit/LayoutTests/webaudio/resources/audit.js
index f73cd58..4fa4535 100644
--- a/third_party/WebKit/LayoutTests/webaudio/resources/audit.js
+++ b/third_party/WebKit/LayoutTests/webaudio/resources/audit.js
@@ -977,6 +977,76 @@
                           '${actual} ' + passDetail,
                           '${actual} ' + failDetail);
     }
+
+    /**
+     * Check if |expected| property is truly owned by |actual| object.
+     *
+     * @example
+     *   should(BaseAudioContext.prototype,
+     *          'BaseAudioContext.prototype').haveOwnProperty('createGain');
+     *
+     * @result
+     *   "PASS   BaseAudioContext.prototype has an own property of
+     *       'createGain'."
+     */
+    haveOwnProperty () {
+      this._processArguments(arguments);
+
+      return this._assert(
+          this._actual.hasOwnProperty(this._expected),
+          '${actual} has an own property of "${expected}".',
+          '${actual} does not own the property of "${expected}".');
+    }
+
+
+    /**
+     * Check if |expected| property is not owned by |actual| object.
+     *
+     * @example
+     *   should(BaseAudioContext.prototype,
+     *          'BaseAudioContext.prototype')
+     *       .notHaveOwnProperty('startRendering');
+     *
+     * @result
+     *   "PASS   BaseAudioContext.prototype does not have an own property of
+     *       'startRendering'."
+     */
+    notHaveOwnProperty () {
+      this._processArguments(arguments);
+
+      return this._assert(
+          !this._actual.hasOwnProperty(this._expected),
+          '${actual} does not have an own property of "${expected}".',
+          '${actual} has an own the property of "${expected}".')
+    }
+
+
+    /**
+     * Check if an object is inherited from a class. This looks up the entire
+     * prototype chain of a given object and tries to find a match.
+     *
+     * @example
+     *   should(sourceNode, 'A buffer source node')
+     *       .inheritFrom('AudioScheduledSourceNode');
+     *
+     * @result
+     *   "PASS   A buffer source node inherits from 'AudioScheduledSourceNode'."
+     */
+    inheritFrom () {
+      this._processArguments(arguments);
+
+      let prototypes = [];
+      let currentPrototype = Object.getPrototypeOf(this._actual);
+      while (currentPrototype) {
+        prototypes.push(currentPrototype.constructor.name);
+        currentPrototype = Object.getPrototypeOf(currentPrototype);
+      }
+
+      return this._assert(
+          prototypes.includes(this._expected),
+          '${actual} inherits from "${expected}".',
+          '${actual} does not inherit from "${expected}".');
+    }
   }
 
 
diff --git a/third_party/WebKit/LayoutTests/webaudio/unit-tests/audit-expected.txt b/third_party/WebKit/LayoutTests/webaudio/unit-tests/audit-expected.txt
index fc77c59..015e0a7 100644
--- a/third_party/WebKit/LayoutTests/webaudio/unit-tests/audit-expected.txt
+++ b/third_party/WebKit/LayoutTests/webaudio/unit-tests/audit-expected.txt
@@ -36,10 +36,14 @@
 PASS   1 is equal to 1. 
 PASS   should(1).beEqualTo(1) is true. 
 PASS   The message is truthful! 
+PASS   BaseAudioContext.prototype has an own property of "createGain". 
+PASS   BaseAudioContext.prototype does not have an own property of "startRendering". 
+PASS   An AudioBufferSourceNode inherits from "AudioScheduledSourceNode". 
+PASS   An AudioBufferSourceNode inherits from "AudioNode". 
 PASS   Decoding audio data with no argument rejected correctly with TypeError: Failed to execute 'decodeAudioData' on 'BaseAudioContext': 1 argument required, but only 0 present.. 
 PASS   Suspending OAC with no argument rejected correctly with TypeError. 
 PASS   Start OAC rendering resolved correctly. 
-PASS < [basic] All assertions passed. (total 22 assertions) 
+PASS < [basic] All assertions passed. (total 26 assertions) 
 PASS > [load-file-in-should] Test Audit.loadFileFromUrl() within |should| assertion. 
 PASS   Loading file within should().beResolved() resolved correctly. 
 PASS < [load-file-in-should] All assertions passed. (total 1 assertions) 
diff --git a/third_party/WebKit/LayoutTests/webaudio/unit-tests/audit.html b/third_party/WebKit/LayoutTests/webaudio/unit-tests/audit.html
index 5c56e6a..a219d30 100644
--- a/third_party/WebKit/LayoutTests/webaudio/unit-tests/audit.html
+++ b/third_party/WebKit/LayoutTests/webaudio/unit-tests/audit.html
@@ -36,6 +36,18 @@
         should(should(1).beEqualTo(1), 'should(1).beEqualTo(1)').beTrue();
         should(true, 'The message is').message('truthful!', 'false!');
 
+        should(BaseAudioContext.prototype, 'BaseAudioContext.prototype')
+            .haveOwnProperty('createGain');
+        should(BaseAudioContext.prototype, 'BaseAudioContext.prototype')
+            .notHaveOwnProperty('startRendering');
+
+        let ac = new AudioContext();
+        let sourceNode = new AudioBufferSourceNode(ac);
+        should(sourceNode, 'An AudioBufferSourceNode')
+            .inheritFrom('AudioScheduledSourceNode');
+        should(sourceNode, 'An AudioBufferSourceNode')
+            .inheritFrom('AudioNode');
+
         let oac = new OfflineAudioContext(1, 128, 44100);
         Promise.all([
             should(oac.startRendering(), 'Start OAC rendering').beResolved(),
diff --git a/third_party/WebKit/OWNERS b/third_party/WebKit/OWNERS
index 10be8916..60a1066 100644
--- a/third_party/WebKit/OWNERS
+++ b/third_party/WebKit/OWNERS
@@ -1,12 +1,10 @@
 # Blink API OWNERS
 file://third_party/WebKit/API_OWNERS
 
-# For .gyp* / *.gn* changes only.
+# For *.gn* changes only.
 dpranke@chromium.org
 thakis@chromium.org
 
-per-file .gitignore=*
-per-file DEPS=*
 per-file PRESUBMIT*.py=dpranke@chromium.org
 per-file PRESUBMIT*.py=thakis@chromium.org
 
diff --git a/third_party/WebKit/Source/SpecMapping.md b/third_party/WebKit/Source/SpecMapping.md
index ac54be9..e217562 100644
--- a/third_party/WebKit/Source/SpecMapping.md
+++ b/third_party/WebKit/Source/SpecMapping.md
@@ -28,9 +28,9 @@
 using `SecurityOrigin::isSameSchemeHostPort`.
 
 The [Suborigins spec](https://w3c.github.io/webappsec-suborigins/) extends
-HTML's definition of origins. To check for same-origin and same-origin domain
-use `SecurityOrigin::canAccessCheckSuborigins` and
-`SecurityOrigin::isSameSchemeHostPortAndSuborigin`.
+HTML's definition of origins. To check for same-origin corresponds to
+`SecurityOrigin::isSameSchemeHostPortAndSuborigin` while the check for same-origin
+domain already takes the suborigin into account.
 
 ### [Window object](https://html.spec.whatwg.org/#window)
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/BindingSecurity.cpp b/third_party/WebKit/Source/bindings/core/v8/BindingSecurity.cpp
index 516ef4d..9dcfbd9 100644
--- a/third_party/WebKit/Source/bindings/core/v8/BindingSecurity.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/BindingSecurity.cpp
@@ -60,7 +60,7 @@
 
   const SecurityOrigin* accessingOrigin =
       accessingWindow->document()->getSecurityOrigin();
-  if (!accessingOrigin->canAccessCheckSuborigins(targetFrameOrigin))
+  if (!accessingOrigin->canAccess(targetFrameOrigin))
     return false;
 
   // Notify the loader's client if the initial document has been accessed.
@@ -241,7 +241,7 @@
   SECURITY_CHECK(!(targetWindow && targetWindow->frame()) ||
                  targetWindow == targetWindow->frame()->domWindow());
 
-  if (!accessingOrigin->canAccessCheckSuborigins(targetOrigin))
+  if (!accessingOrigin->canAccess(targetOrigin))
     return false;
 
   // Note that there is no need to call back
diff --git a/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImplTest.cpp b/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImplTest.cpp
index 3e2e56c..d9d8c393 100644
--- a/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImplTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImplTest.cpp
@@ -7,8 +7,10 @@
 #include <utility>
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/IDLTypes.h"
+#include "bindings/core/v8/TestSequenceCallback.h"
 #include "bindings/core/v8/ToV8.h"
 #include "bindings/core/v8/V8BindingForTesting.h"
+#include "bindings/core/v8/V8Internals.h"
 #include "platform/wtf/Vector.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -21,6 +23,29 @@
   return blink::ToV8(value, scope->context()->Global(), scope->isolate());
 }
 
+TEST(NativeValueTraitsImplTest, IDLInterface) {
+  V8TestingScope scope;
+  {
+    DummyExceptionStateForTesting exceptionState;
+    Internals* internals = NativeValueTraits<Internals>::nativeValue(
+        scope.isolate(), v8::Number::New(scope.isolate(), 42), exceptionState);
+    EXPECT_TRUE(exceptionState.hadException());
+    EXPECT_EQ("Unable to convert value to Internals.",
+              exceptionState.message());
+    EXPECT_EQ(nullptr, internals);
+  }
+  {
+    DummyExceptionStateForTesting exceptionState;
+    TestSequenceCallback* callbackFunction =
+        NativeValueTraits<TestSequenceCallback>::nativeValue(
+            scope.isolate(), v8::Undefined(scope.isolate()), exceptionState);
+    EXPECT_TRUE(exceptionState.hadException());
+    EXPECT_EQ("Unable to convert value to TestSequenceCallback.",
+              exceptionState.message());
+    EXPECT_EQ(nullptr, callbackFunction);
+  }
+}
+
 void ThrowException(v8::Local<v8::Name>,
                     const v8::PropertyCallbackInfo<v8::Value>& info) {
   info.GetIsolate()->ThrowException(v8String(info.GetIsolate(), "bogus!"));
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptState.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptState.cpp
index 13598e6..37b5c5b 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptState.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptState.cpp
@@ -70,8 +70,4 @@
   return toExecutionContext(context());
 }
 
-void ScriptState::setExecutionContext(ExecutionContext*) {
-  ASSERT_NOT_REACHED();
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptState.h b/third_party/WebKit/Source/bindings/core/v8/ScriptState.h
index 7935856..f78576ef 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptState.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptState.h
@@ -137,7 +137,6 @@
   v8::Isolate* isolate() const { return m_isolate; }
   DOMWrapperWorld& world() const { return *m_world; }
   virtual ExecutionContext* getExecutionContext() const;
-  virtual void setExecutionContext(ExecutionContext*);
 
   // This can return an empty handle if the v8::Context is gone.
   v8::Local<v8::Context> context() const {
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.cpp b/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.cpp
index 692c798..f19b6e5 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.cpp
@@ -29,11 +29,6 @@
   return m_executionContext;
 }
 
-void ScriptStateForTesting::setExecutionContext(
-    ExecutionContext* executionContext) {
-  m_executionContext = executionContext;
-}
-
 V8TestingScope::V8TestingScope()
     : m_holder(DummyPageHolder::create()),
       m_handleScope(isolate()),
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.h b/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.h
index 09f41f5..8299477 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.h
@@ -25,7 +25,6 @@
   static PassRefPtr<ScriptStateForTesting> create(v8::Local<v8::Context>,
                                                   PassRefPtr<DOMWrapperWorld>);
   ExecutionContext* getExecutionContext() const override;
-  void setExecutionContext(ExecutionContext*) override;
 
  private:
   ScriptStateForTesting(v8::Local<v8::Context>, PassRefPtr<DOMWrapperWorld>);
diff --git a/third_party/WebKit/Source/bindings/modules/v8/ModuleBindingsInitializer.cpp b/third_party/WebKit/Source/bindings/modules/v8/ModuleBindingsInitializer.cpp
index a74c96a..529cb9ef 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/ModuleBindingsInitializer.cpp
+++ b/third_party/WebKit/Source/bindings/modules/v8/ModuleBindingsInitializer.cpp
@@ -7,6 +7,7 @@
 #include "bindings/core/v8/V8PerIsolateData.h"
 #include "bindings/modules/v8/ConditionalFeaturesForModules.h"
 #include "bindings/modules/v8/SerializedScriptValueForModulesFactory.h"
+#include "bindings/modules/v8/wasm/WasmResponseExtensions.h"
 
 namespace blink {
 
@@ -19,6 +20,7 @@
   initPartialInterfacesInModules();
   SerializedScriptValueFactory::initialize(
       new SerializedScriptValueForModulesFactory);
+  WasmResponseExtensions::initialize(V8PerIsolateData::mainThreadIsolate());
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/modules/v8/v8.gni b/third_party/WebKit/Source/bindings/modules/v8/v8.gni
index 9a668b0..5b082cf 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/v8.gni
+++ b/third_party/WebKit/Source/bindings/modules/v8/v8.gni
@@ -22,6 +22,8 @@
                     "V8BindingForModules.cpp",
                     "V8BindingForModules.h",
                     "V8ServiceWorkerMessageEventInternal.h",
+                    "wasm/WasmResponseExtensions.cpp",
+                    "wasm/WasmResponseExtensions.h",
                     "WebGLAny.cpp",
                     "WebGLAny.h",
                   ],
diff --git a/third_party/WebKit/Source/bindings/modules/v8/wasm/WasmResponseExtensions.cpp b/third_party/WebKit/Source/bindings/modules/v8/wasm/WasmResponseExtensions.cpp
new file mode 100644
index 0000000..a2a8dc1d
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/modules/v8/wasm/WasmResponseExtensions.cpp
@@ -0,0 +1,234 @@
+// 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 "bindings/modules/v8/wasm/WasmResponseExtensions.h"
+
+#include "bindings/core/v8/ExceptionState.h"
+#include "bindings/core/v8/ScriptPromise.h"
+#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "bindings/core/v8/ScriptState.h"
+#include "bindings/modules/v8/V8Response.h"
+#include "modules/fetch/BodyStreamBuffer.h"
+#include "modules/fetch/FetchDataLoader.h"
+#include "platform/heap/Handle.h"
+#include "wtf/RefPtr.h"
+
+namespace blink {
+
+namespace {
+
+class FetchDataLoaderAsWasmModule final : public FetchDataLoader,
+                                          public BytesConsumer::Client {
+  USING_GARBAGE_COLLECTED_MIXIN(FetchDataLoaderAsWasmModule);
+
+ public:
+  FetchDataLoaderAsWasmModule(ScriptPromiseResolver* resolver,
+                              ScriptState* scriptState)
+      : m_resolver(resolver),
+        m_builder(scriptState->isolate()),
+        m_scriptState(scriptState) {}
+
+  void start(BytesConsumer* consumer,
+             FetchDataLoader::Client* client) override {
+    DCHECK(!m_consumer);
+    DCHECK(!m_client);
+    m_client = client;
+    m_consumer = consumer;
+    m_consumer->setClient(this);
+    onStateChange();
+  }
+
+  void onStateChange() override {
+    while (true) {
+      // {buffer} is owned by {m_consumer}.
+      const char* buffer = nullptr;
+      size_t available = 0;
+      BytesConsumer::Result result = m_consumer->beginRead(&buffer, &available);
+
+      if (result == BytesConsumer::Result::ShouldWait)
+        return;
+      if (result == BytesConsumer::Result::Ok) {
+        if (available > 0) {
+          DCHECK_NE(buffer, nullptr);
+          m_builder.OnBytesReceived(reinterpret_cast<const uint8_t*>(buffer),
+                                    available);
+        }
+        result = m_consumer->endRead(available);
+      }
+      switch (result) {
+        case BytesConsumer::Result::ShouldWait:
+          NOTREACHED();
+          return;
+        case BytesConsumer::Result::Ok: {
+          break;
+        }
+        case BytesConsumer::Result::Done: {
+          v8::Isolate* isolate = m_scriptState->isolate();
+          ScriptState::Scope scope(m_scriptState.get());
+
+          {
+            // The TryCatch destructor will clear the exception. We
+            // scope the block here to ensure tight control over the
+            // lifetime of the exception.
+            v8::TryCatch trycatch(isolate);
+            v8::Local<v8::WasmCompiledModule> module;
+            if (m_builder.Finish().ToLocal(&module)) {
+              DCHECK(!trycatch.HasCaught());
+              ScriptValue scriptValue(m_scriptState.get(), module);
+              m_resolver->resolve(scriptValue);
+            } else {
+              DCHECK(trycatch.HasCaught());
+              m_resolver->reject(trycatch.Exception());
+            }
+          }
+
+          m_client->didFetchDataLoadedCustomFormat();
+          return;
+        }
+        case BytesConsumer::Result::Error: {
+          // TODO(mtrofin): do we need an abort on the wasm side?
+          // Something like "m_outStream->abort()" maybe?
+          return rejectPromise();
+        }
+      }
+    }
+  }
+
+  void cancel() override {
+    m_consumer->cancel();
+    return rejectPromise();
+  }
+
+  DEFINE_INLINE_TRACE() {
+    visitor->trace(m_consumer);
+    visitor->trace(m_resolver);
+    visitor->trace(m_client);
+    FetchDataLoader::trace(visitor);
+    BytesConsumer::Client::trace(visitor);
+  }
+
+ private:
+  // TODO(mtrofin): replace with spec-ed error types, once spec clarifies
+  // what they are.
+  void rejectPromise() {
+    m_resolver->reject(V8ThrowException::createTypeError(
+        m_scriptState->isolate(), "Could not download wasm module"));
+  }
+  Member<BytesConsumer> m_consumer;
+  Member<ScriptPromiseResolver> m_resolver;
+  Member<FetchDataLoader::Client> m_client;
+  v8::WasmModuleObjectBuilder m_builder;
+  const RefPtr<ScriptState> m_scriptState;
+};
+
+// TODO(mtrofin): WasmDataLoaderClient is necessary so we may provide an
+// argument to BodyStreamBuffer::startLoading, however, it fulfills
+// a very small role. Consider refactoring to avoid it.
+class WasmDataLoaderClient final
+    : public GarbageCollectedFinalized<WasmDataLoaderClient>,
+      public FetchDataLoader::Client {
+  WTF_MAKE_NONCOPYABLE(WasmDataLoaderClient);
+  USING_GARBAGE_COLLECTED_MIXIN(WasmDataLoaderClient);
+
+ public:
+  explicit WasmDataLoaderClient() {}
+  void didFetchDataLoadedCustomFormat() override {}
+  void didFetchDataLoadFailed() override { NOTREACHED(); }
+};
+
+// This callback may be entered as a promise is resolved, or directly
+// from the overload callback.
+// See
+// https://github.com/WebAssembly/design/blob/master/Web.md#webassemblycompile
+void compileFromResponseCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  ExceptionState exceptionState(args.GetIsolate(),
+                                ExceptionState::ExecutionContext, "WebAssembly",
+                                "compile");
+  ExceptionToRejectPromiseScope rejectPromiseScope(args, exceptionState);
+
+  ScriptState* scriptState = ScriptState::forReceiverObject(args);
+  if (!scriptState->getExecutionContext()) {
+    v8SetReturnValue(args, ScriptPromise().v8Value());
+    return;
+  }
+
+  if (args.Length() < 1 || !args[0]->IsObject() ||
+      !V8Response::hasInstance(args[0], args.GetIsolate())) {
+    v8SetReturnValue(
+        args, ScriptPromise::reject(
+                  scriptState, V8ThrowException::createTypeError(
+                                   scriptState->isolate(),
+                                   "Promise argument must be called with a "
+                                   "Promise<Response> object"))
+                  .v8Value());
+    return;
+  }
+
+  Response* response = V8Response::toImpl(v8::Local<v8::Object>::Cast(args[0]));
+  ScriptPromise promise;
+  if (response->isBodyLocked() || response->bodyUsed()) {
+    promise = ScriptPromise::reject(
+        scriptState,
+        V8ThrowException::createTypeError(
+            scriptState->isolate(),
+            "Cannot compile WebAssembly.Module from an already read Response"));
+  } else {
+    ScriptPromiseResolver* resolver =
+        ScriptPromiseResolver::create(scriptState);
+    if (response->bodyBuffer()) {
+      promise = resolver->promise();
+      response->bodyBuffer()->startLoading(
+          new FetchDataLoaderAsWasmModule(resolver, scriptState),
+          new WasmDataLoaderClient());
+    } else {
+      promise = ScriptPromise::reject(
+          scriptState,
+          V8ThrowException::createTypeError(
+              scriptState->isolate(), "Response object has a null body."));
+    }
+  }
+  v8SetReturnValue(args, promise.v8Value());
+}
+
+// See https://crbug.com/708238 for tracking avoiding the hand-generated code.
+bool wasmCompileOverload(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() < 1 || !args[0]->IsObject())
+    return false;
+
+  if (!args[0]->IsPromise() &&
+      !V8Response::hasInstance(args[0], args.GetIsolate()))
+    return false;
+
+  v8::Isolate* isolate = args.GetIsolate();
+  ScriptState* scriptState = ScriptState::forReceiverObject(args);
+
+  v8::Local<v8::Function> compileCallback =
+      v8::Function::New(isolate, compileFromResponseCallback);
+
+  ScriptPromiseResolver* scriptPromiseResolver =
+      ScriptPromiseResolver::create(scriptState);
+  // treat either case of parameter as
+  // Promise.resolve(parameter)
+  // as per https://www.w3.org/2001/tag/doc/promises-guide#resolve-arguments
+
+  // Ending with:
+  //    return Promise.resolve(parameter).then(compileCallback);
+  ScriptPromise parameterAsPromise = scriptPromiseResolver->promise();
+  v8SetReturnValue(args, ScriptPromise::cast(scriptState, args[0])
+                             .then(compileCallback)
+                             .v8Value());
+
+  // resolve the first parameter promise.
+  scriptPromiseResolver->resolve(ScriptValue::from(scriptState, args[0]));
+  return true;
+}
+
+}  // namespace
+
+void WasmResponseExtensions::initialize(v8::Isolate* isolate) {
+  isolate->SetWasmCompileCallback(wasmCompileOverload);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/modules/v8/wasm/WasmResponseExtensions.h b/third_party/WebKit/Source/bindings/modules/v8/wasm/WasmResponseExtensions.h
new file mode 100644
index 0000000..c465c10
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/modules/v8/wasm/WasmResponseExtensions.h
@@ -0,0 +1,25 @@
+// 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.
+
+#ifndef WasmResponseExtensions_h
+#define WasmResponseExtensions_h
+
+#include "modules/ModulesExport.h"
+#include "v8/include/v8.h"
+#include "wtf/Allocator.h"
+
+namespace blink {
+
+// Injects Web Platform - specific overloads for WebAssembly APIs.
+// See https://github.com/WebAssembly/design/blob/master/Web.md
+class MODULES_EXPORT WasmResponseExtensions {
+  STATIC_ONLY(WasmResponseExtensions);
+
+ public:
+  static void initialize(v8::Isolate*);
+};
+
+}  // namespace blink
+
+#endif  // WasmResponseextensions_h
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_callback_function.py b/third_party/WebKit/Source/bindings/scripts/v8_callback_function.py
index 1bbd2cb..37be007 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_callback_function.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_callback_function.py
@@ -39,6 +39,11 @@
         argument.idl_type.add_includes_for_type(callback_function.extended_attributes)
 
     context = {
+        # While both |callback_function_name| and |cpp_class| are identical at
+        # the moment, the two are being defined because their values may change
+        # in the future (e.g. if we support [ImplementedAs=] in callback
+        # functions).
+        'callback_function_name': callback_function.name,
         'cpp_class': callback_function.name,
         'cpp_includes': sorted(includes),
         'forward_declarations': sorted(forward_declarations),
diff --git a/third_party/WebKit/Source/bindings/templates/callback_function.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/callback_function.cpp.tmpl
index 50e3b25..8390f85 100644
--- a/third_party/WebKit/Source/bindings/templates/callback_function.cpp.tmpl
+++ b/third_party/WebKit/Source/bindings/templates/callback_function.cpp.tmpl
@@ -81,7 +81,10 @@
 }
 
 {{cpp_class}}* NativeValueTraits<{{cpp_class}}>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return {{cpp_class}}::create(ScriptState::current(isolate), value);
+  {{cpp_class}}* nativeValue = {{cpp_class}}::create(ScriptState::current(isolate), value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to {{callback_function_name}}.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/templates/interface.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/interface.cpp.tmpl
index 7ed4d7fc..e840b30e 100644
--- a/third_party/WebKit/Source/bindings/templates/interface.cpp.tmpl
+++ b/third_party/WebKit/Source/bindings/templates/interface.cpp.tmpl
@@ -892,7 +892,10 @@
 {##############################################################################}
 {% block native_value_traits %}
 {{cpp_class}}* NativeValueTraits<{{cpp_class}}>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return {{v8_class}}::toImplWithTypeCheck(isolate, value);
+  {{cpp_class}}* nativeValue = {{v8_class}}::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to {{interface_name}}.");
+  return nativeValue;
 }
 
 {% endblock %}
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/AnyCallbackFunctionOptionalAnyArg.cpp b/third_party/WebKit/Source/bindings/tests/results/core/AnyCallbackFunctionOptionalAnyArg.cpp
index 25c98c8..e383a0b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/AnyCallbackFunctionOptionalAnyArg.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/AnyCallbackFunctionOptionalAnyArg.cpp
@@ -83,7 +83,10 @@
 }
 
 AnyCallbackFunctionOptionalAnyArg* NativeValueTraits<AnyCallbackFunctionOptionalAnyArg>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return AnyCallbackFunctionOptionalAnyArg::create(ScriptState::current(isolate), value);
+  AnyCallbackFunctionOptionalAnyArg* nativeValue = AnyCallbackFunctionOptionalAnyArg::create(ScriptState::current(isolate), value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to AnyCallbackFunctionOptionalAnyArg.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/LongCallbackFunction.cpp b/third_party/WebKit/Source/bindings/tests/results/core/LongCallbackFunction.cpp
index ba29c67..334b6d9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/LongCallbackFunction.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/LongCallbackFunction.cpp
@@ -87,7 +87,10 @@
 }
 
 LongCallbackFunction* NativeValueTraits<LongCallbackFunction>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return LongCallbackFunction::create(ScriptState::current(isolate), value);
+  LongCallbackFunction* nativeValue = LongCallbackFunction::create(ScriptState::current(isolate), value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to LongCallbackFunction.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/StringSequenceCallbackFunctionLongSequenceArg.cpp b/third_party/WebKit/Source/bindings/tests/results/core/StringSequenceCallbackFunctionLongSequenceArg.cpp
index 53fe12a6..a23b6550 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/StringSequenceCallbackFunctionLongSequenceArg.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/StringSequenceCallbackFunctionLongSequenceArg.cpp
@@ -86,7 +86,10 @@
 }
 
 StringSequenceCallbackFunctionLongSequenceArg* NativeValueTraits<StringSequenceCallbackFunctionLongSequenceArg>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return StringSequenceCallbackFunctionLongSequenceArg::create(ScriptState::current(isolate), value);
+  StringSequenceCallbackFunctionLongSequenceArg* nativeValue = StringSequenceCallbackFunctionLongSequenceArg::create(ScriptState::current(isolate), value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to StringSequenceCallbackFunctionLongSequenceArg.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
index 66bb1291..b5360df 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
@@ -80,7 +80,10 @@
 }
 
 TestArrayBuffer* NativeValueTraits<TestArrayBuffer>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8ArrayBuffer::toImplWithTypeCheck(isolate, value);
+  TestArrayBuffer* nativeValue = V8ArrayBuffer::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to ArrayBuffer.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
index 55221da5..7086d60 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
@@ -100,7 +100,10 @@
 }
 
 TestArrayBufferView* NativeValueTraits<TestArrayBufferView>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8ArrayBufferView::toImplWithTypeCheck(isolate, value);
+  TestArrayBufferView* nativeValue = V8ArrayBufferView::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to ArrayBufferView.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
index 33295e7f..9a92e8c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
@@ -80,7 +80,10 @@
 }
 
 TestDataView* NativeValueTraits<TestDataView>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8DataView::toImplWithTypeCheck(isolate, value);
+  TestDataView* nativeValue = V8DataView::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to DataView.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
index 6b87d44..2dd8521 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
@@ -131,7 +131,10 @@
 }
 
 SVGTestInterface* NativeValueTraits<SVGTestInterface>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8SVGTestInterface::toImplWithTypeCheck(isolate, value);
+  SVGTestInterface* nativeValue = V8SVGTestInterface::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to SVGTestInterface.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
index f83f346..6a547f22 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
@@ -335,7 +335,10 @@
 }
 
 TestCallbackFunctions* NativeValueTraits<TestCallbackFunctions>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestCallbackFunctions::toImplWithTypeCheck(isolate, value);
+  TestCallbackFunctions* nativeValue = V8TestCallbackFunctions::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestCallbackFunctions.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
index 212e44cf..e22d7d9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
@@ -198,7 +198,10 @@
 }
 
 TestConstants* NativeValueTraits<TestConstants>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestConstants::toImplWithTypeCheck(isolate, value);
+  TestConstants* nativeValue = V8TestConstants::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestConstants.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
index 18c7780..504eb3db 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
@@ -171,7 +171,10 @@
 }
 
 TestException* NativeValueTraits<TestException>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestException::toImplWithTypeCheck(isolate, value);
+  TestException* nativeValue = V8TestException::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestException.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
index a0cac5e..1c69f50 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
@@ -214,7 +214,10 @@
 }
 
 TestIntegerIndexed* NativeValueTraits<TestIntegerIndexed>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestIntegerIndexed::toImplWithTypeCheck(isolate, value);
+  TestIntegerIndexed* nativeValue = V8TestIntegerIndexed::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestIntegerIndexed.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
index d68aba31..fdbef25 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
@@ -235,7 +235,10 @@
 }
 
 TestIntegerIndexedGlobal* NativeValueTraits<TestIntegerIndexedGlobal>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestIntegerIndexedGlobal::toImplWithTypeCheck(isolate, value);
+  TestIntegerIndexedGlobal* nativeValue = V8TestIntegerIndexedGlobal::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestIntegerIndexedGlobal.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
index 5d0aa01..c615d190 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
@@ -235,7 +235,10 @@
 }
 
 TestIntegerIndexedPrimaryGlobal* NativeValueTraits<TestIntegerIndexedPrimaryGlobal>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestIntegerIndexedPrimaryGlobal::toImplWithTypeCheck(isolate, value);
+  TestIntegerIndexedPrimaryGlobal* nativeValue = V8TestIntegerIndexedPrimaryGlobal::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestIntegerIndexedPrimaryGlobal.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
index 35e8fab2..02f56e6 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
@@ -2970,7 +2970,10 @@
 }
 
 TestInterfaceImplementation* NativeValueTraits<TestInterfaceImplementation>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterface::toImplWithTypeCheck(isolate, value);
+  TestInterfaceImplementation* nativeValue = V8TestInterface::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterface.");
+  return nativeValue;
 }
 
 void V8TestInterface::preparePrototypeAndInterfaceObject(v8::Local<v8::Context> context, const DOMWrapperWorld& world, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
index 2f6cec9..b71d025 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
@@ -664,7 +664,10 @@
 }
 
 TestInterface2* NativeValueTraits<TestInterface2>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterface2::toImplWithTypeCheck(isolate, value);
+  TestInterface2* nativeValue = V8TestInterface2::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterface2.");
+  return nativeValue;
 }
 
 InstallTemplateFunction V8TestInterface2::installV8TestInterface2TemplateFunction =
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
index 50eca5c..39e7588 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
@@ -221,7 +221,10 @@
 }
 
 TestInterface3* NativeValueTraits<TestInterface3>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterface3::toImplWithTypeCheck(isolate, value);
+  TestInterface3* nativeValue = V8TestInterface3::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterface3.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
index d9b4cdda..6ccef11 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
@@ -555,7 +555,10 @@
 }
 
 TestInterfaceCheckSecurity* NativeValueTraits<TestInterfaceCheckSecurity>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceCheckSecurity::toImplWithTypeCheck(isolate, value);
+  TestInterfaceCheckSecurity* nativeValue = V8TestInterfaceCheckSecurity::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceCheckSecurity.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
index fea54928..23eb195 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
@@ -443,7 +443,10 @@
 }
 
 TestInterfaceConstructor* NativeValueTraits<TestInterfaceConstructor>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceConstructor::toImplWithTypeCheck(isolate, value);
+  TestInterfaceConstructor* nativeValue = V8TestInterfaceConstructor::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceConstructor.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
index a49cec8..651610f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
@@ -267,7 +267,10 @@
 }
 
 TestInterfaceConstructor2* NativeValueTraits<TestInterfaceConstructor2>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceConstructor2::toImplWithTypeCheck(isolate, value);
+  TestInterfaceConstructor2* nativeValue = V8TestInterfaceConstructor2::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceConstructor2.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
index 355dce07..42bdd801 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
@@ -120,7 +120,10 @@
 }
 
 TestInterfaceConstructor3* NativeValueTraits<TestInterfaceConstructor3>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceConstructor3::toImplWithTypeCheck(isolate, value);
+  TestInterfaceConstructor3* nativeValue = V8TestInterfaceConstructor3::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceConstructor3.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
index 9ea7b4c8..8526d68 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
@@ -153,7 +153,10 @@
 }
 
 TestInterfaceConstructor4* NativeValueTraits<TestInterfaceConstructor4>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceConstructor4::toImplWithTypeCheck(isolate, value);
+  TestInterfaceConstructor4* nativeValue = V8TestInterfaceConstructor4::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceConstructor4.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
index 0143066..cabe2b4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
@@ -101,7 +101,10 @@
 }
 
 TestInterfaceCustomConstructor* NativeValueTraits<TestInterfaceCustomConstructor>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceCustomConstructor::toImplWithTypeCheck(isolate, value);
+  TestInterfaceCustomConstructor* nativeValue = V8TestInterfaceCustomConstructor::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceCustomConstructor.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
index e9aaa0c4..715856f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
@@ -133,7 +133,10 @@
 }
 
 TestInterfaceDocument* NativeValueTraits<TestInterfaceDocument>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceDocument::toImplWithTypeCheck(isolate, value);
+  TestInterfaceDocument* nativeValue = V8TestInterfaceDocument::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceDocument.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
index 3c09298..7376770 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
@@ -84,7 +84,10 @@
 }
 
 TestInterfaceEmpty* NativeValueTraits<TestInterfaceEmpty>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceEmpty::toImplWithTypeCheck(isolate, value);
+  TestInterfaceEmpty* nativeValue = V8TestInterfaceEmpty::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceEmpty.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
index 596675e..d5a0573c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
@@ -163,7 +163,10 @@
 }
 
 TestInterfaceEventInitConstructor* NativeValueTraits<TestInterfaceEventInitConstructor>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceEventInitConstructor::toImplWithTypeCheck(isolate, value);
+  TestInterfaceEventInitConstructor* nativeValue = V8TestInterfaceEventInitConstructor::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceEventInitConstructor.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
index 0cf77d3..a8d734ae 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
@@ -160,7 +160,10 @@
 }
 
 TestInterfaceEventTarget* NativeValueTraits<TestInterfaceEventTarget>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceEventTarget::toImplWithTypeCheck(isolate, value);
+  TestInterfaceEventTarget* nativeValue = V8TestInterfaceEventTarget::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceEventTarget.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
index ae0f2300..a461e7c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
@@ -414,7 +414,10 @@
 }
 
 TestInterfaceGarbageCollected* NativeValueTraits<TestInterfaceGarbageCollected>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceGarbageCollected::toImplWithTypeCheck(isolate, value);
+  TestInterfaceGarbageCollected* nativeValue = V8TestInterfaceGarbageCollected::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceGarbageCollected.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
index 33d6f46b..44bd0bc 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
@@ -236,7 +236,10 @@
 }
 
 TestInterfaceNamedConstructor* NativeValueTraits<TestInterfaceNamedConstructor>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceNamedConstructor::toImplWithTypeCheck(isolate, value);
+  TestInterfaceNamedConstructor* nativeValue = V8TestInterfaceNamedConstructor::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceNamedConstructor.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
index af24a78..b0f751f8 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
@@ -171,7 +171,10 @@
 }
 
 TestInterfaceNamedConstructor2* NativeValueTraits<TestInterfaceNamedConstructor2>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceNamedConstructor2::toImplWithTypeCheck(isolate, value);
+  TestInterfaceNamedConstructor2* nativeValue = V8TestInterfaceNamedConstructor2::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceNamedConstructor2.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
index 52511f3..4a96236 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
@@ -400,7 +400,10 @@
 }
 
 TestInterfaceNode* NativeValueTraits<TestInterfaceNode>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceNode::toImplWithTypeCheck(isolate, value);
+  TestInterfaceNode* nativeValue = V8TestInterfaceNode::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceNode.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
index 95a45e0..0db3e10 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
@@ -316,7 +316,10 @@
 }
 
 TestInterfaceOriginTrialEnabled* NativeValueTraits<TestInterfaceOriginTrialEnabled>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceOriginTrialEnabled::toImplWithTypeCheck(isolate, value);
+  TestInterfaceOriginTrialEnabled* nativeValue = V8TestInterfaceOriginTrialEnabled::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceOriginTrialEnabled.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
index 4c1f4dc1..4f89602 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
@@ -381,7 +381,10 @@
 }
 
 TestInterfaceSecureContext* NativeValueTraits<TestInterfaceSecureContext>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterfaceSecureContext::toImplWithTypeCheck(isolate, value);
+  TestInterfaceSecureContext* nativeValue = V8TestInterfaceSecureContext::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterfaceSecureContext.");
+  return nativeValue;
 }
 
 void V8TestInterfaceSecureContext::preparePrototypeAndInterfaceObject(v8::Local<v8::Context> context, const DOMWrapperWorld& world, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
index 5ec366fc..d3001bf 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
@@ -256,7 +256,10 @@
 }
 
 TestNode* NativeValueTraits<TestNode>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestNode::toImplWithTypeCheck(isolate, value);
+  TestNode* nativeValue = V8TestNode::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestNode.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
index 1d5d84bb4..83c57a5 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -12294,7 +12294,10 @@
 }
 
 TestObject* NativeValueTraits<TestObject>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestObject::toImplWithTypeCheck(isolate, value);
+  TestObject* nativeValue = V8TestObject::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestObject.");
+  return nativeValue;
 }
 
 void V8TestObject::preparePrototypeAndInterfaceObject(v8::Local<v8::Context> context, const DOMWrapperWorld& world, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
index 9ba73767..318c2b0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
@@ -213,7 +213,10 @@
 }
 
 TestSpecialOperations* NativeValueTraits<TestSpecialOperations>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestSpecialOperations::toImplWithTypeCheck(isolate, value);
+  TestSpecialOperations* nativeValue = V8TestSpecialOperations::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestSpecialOperations.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
index dd55044..502da94 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
@@ -127,7 +127,10 @@
 }
 
 TestSpecialOperationsNotEnumerable* NativeValueTraits<TestSpecialOperationsNotEnumerable>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestSpecialOperationsNotEnumerable::toImplWithTypeCheck(isolate, value);
+  TestSpecialOperationsNotEnumerable* nativeValue = V8TestSpecialOperationsNotEnumerable::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestSpecialOperationsNotEnumerable.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
index fafb6e3..bcc8cc7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
@@ -531,7 +531,10 @@
 }
 
 TestTypedefs* NativeValueTraits<TestTypedefs>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestTypedefs::toImplWithTypeCheck(isolate, value);
+  TestTypedefs* nativeValue = V8TestTypedefs::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestTypedefs.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
index b7a9d71..8e46b47 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
@@ -73,7 +73,10 @@
 }
 
 TestUint8ClampedArray* NativeValueTraits<TestUint8ClampedArray>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8Uint8ClampedArray::toImplWithTypeCheck(isolate, value);
+  TestUint8ClampedArray* nativeValue = V8Uint8ClampedArray::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to Uint8ClampedArray.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunction.cpp b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunction.cpp
index ab58b878..c577056a 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunction.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunction.cpp
@@ -79,7 +79,10 @@
 }
 
 VoidCallbackFunction* NativeValueTraits<VoidCallbackFunction>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return VoidCallbackFunction::create(ScriptState::current(isolate), value);
+  VoidCallbackFunction* nativeValue = VoidCallbackFunction::create(ScriptState::current(isolate), value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to VoidCallbackFunction.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionInterfaceArg.cpp b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionInterfaceArg.cpp
index a0781ed9..c69f2c1 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionInterfaceArg.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionInterfaceArg.cpp
@@ -81,7 +81,10 @@
 }
 
 VoidCallbackFunctionInterfaceArg* NativeValueTraits<VoidCallbackFunctionInterfaceArg>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return VoidCallbackFunctionInterfaceArg::create(ScriptState::current(isolate), value);
+  VoidCallbackFunctionInterfaceArg* nativeValue = VoidCallbackFunctionInterfaceArg::create(ScriptState::current(isolate), value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to VoidCallbackFunctionInterfaceArg.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionTypedef.cpp b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionTypedef.cpp
index 03c882e5..39017479 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionTypedef.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/VoidCallbackFunctionTypedef.cpp
@@ -82,7 +82,10 @@
 }
 
 VoidCallbackFunctionTypedef* NativeValueTraits<VoidCallbackFunctionTypedef>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return VoidCallbackFunctionTypedef::create(ScriptState::current(isolate), value);
+  VoidCallbackFunctionTypedef* nativeValue = VoidCallbackFunctionTypedef::create(ScriptState::current(isolate), value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to VoidCallbackFunctionTypedef.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
index 52d41b5..91c2a43f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
@@ -878,7 +878,10 @@
 }
 
 TestInterface5Implementation* NativeValueTraits<TestInterface5Implementation>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return V8TestInterface5::toImplWithTypeCheck(isolate, value);
+  TestInterface5Implementation* nativeValue = V8TestInterface5::toImplWithTypeCheck(isolate, value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to TestInterface5.");
+  return nativeValue;
 }
 
 void V8TestInterface5::preparePrototypeAndInterfaceObject(v8::Local<v8::Context> context, const DOMWrapperWorld& world, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) {
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/VoidCallbackFunctionModules.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/VoidCallbackFunctionModules.cpp
index 59b0fcd..1a41198 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/VoidCallbackFunctionModules.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/VoidCallbackFunctionModules.cpp
@@ -79,7 +79,10 @@
 }
 
 VoidCallbackFunctionModules* NativeValueTraits<VoidCallbackFunctionModules>::nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState) {
-  return VoidCallbackFunctionModules::create(ScriptState::current(isolate), value);
+  VoidCallbackFunctionModules* nativeValue = VoidCallbackFunctionModules::create(ScriptState::current(isolate), value);
+  if (!nativeValue)
+    exceptionState.throwTypeError("Unable to convert value to VoidCallbackFunctionModules.");
+  return nativeValue;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/css/CSSStyleSheet.cpp b/third_party/WebKit/Source/core/css/CSSStyleSheet.cpp
index e6d8576..5c13fc66 100644
--- a/third_party/WebKit/Source/core/css/CSSStyleSheet.cpp
+++ b/third_party/WebKit/Source/core/css/CSSStyleSheet.cpp
@@ -256,10 +256,10 @@
     return true;
   if (document->getSecurityOrigin()->canRequestNoSuborigin(baseURL))
     return true;
-  if (m_allowRuleAccessFromOrigin &&
-      document->getSecurityOrigin()->canAccessCheckSuborigins(
-          m_allowRuleAccessFromOrigin.get()))
+  if (m_allowRuleAccessFromOrigin && document->getSecurityOrigin()->canAccess(
+                                         m_allowRuleAccessFromOrigin.get())) {
     return true;
+  }
   return false;
 }
 
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index 2d23e78..e98e4b9 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -5047,9 +5047,6 @@
         UseCounter::count(
             *this,
             UseCounter::DocumentCompleteURLHTTPContainingNewlineAndLessThan);
-
-        if (RuntimeEnabledFeatures::restrictCompleteURLCharacterSetEnabled())
-          return KURL();
       }
     } else {
       UseCounter::count(
diff --git a/third_party/WebKit/Source/core/editing/CaretDisplayItemClientTest.cpp b/third_party/WebKit/Source/core/editing/CaretDisplayItemClientTest.cpp
index 2887d045..2118b281 100644
--- a/third_party/WebKit/Source/core/editing/CaretDisplayItemClientTest.cpp
+++ b/third_party/WebKit/Source/core/editing/CaretDisplayItemClientTest.cpp
@@ -36,17 +36,19 @@
     return document().view()->frame().selection();
   }
 
-  const DisplayItemClient& caretDisplayItemClient() const {
+  const DisplayItemClient& getCaretDisplayItemClient() const {
     return selection().caretDisplayItemClientForTesting();
   }
 
   const LayoutBlock* caretLayoutBlock() const {
-    return static_cast<const CaretDisplayItemClient&>(caretDisplayItemClient())
+    return static_cast<const CaretDisplayItemClient&>(
+               getCaretDisplayItemClient())
         .m_layoutBlock;
   }
 
   const LayoutBlock* previousCaretLayoutBlock() const {
-    return static_cast<const CaretDisplayItemClient&>(caretDisplayItemClient())
+    return static_cast<const CaretDisplayItemClient&>(
+               getCaretDisplayItemClient())
         .m_previousLayoutBlock;
   }
 
@@ -88,7 +90,7 @@
   updateAllLifecyclePhases();
   EXPECT_TRUE(block->shouldPaintCursorCaret());
 
-  LayoutRect caretVisualRect = caretDisplayItemClient().visualRect();
+  LayoutRect caretVisualRect = getCaretDisplayItemClient().visualRect();
   EXPECT_EQ(1, caretVisualRect.width());
   EXPECT_EQ(block->location(), caretVisualRect.location());
 
@@ -115,7 +117,7 @@
   updateAllLifecyclePhases();
   EXPECT_TRUE(block->shouldPaintCursorCaret());
 
-  LayoutRect newCaretVisualRect = caretDisplayItemClient().visualRect();
+  LayoutRect newCaretVisualRect = getCaretDisplayItemClient().visualRect();
   EXPECT_EQ(caretVisualRect.size(), newCaretVisualRect.size());
   EXPECT_EQ(caretVisualRect.y(), newCaretVisualRect.y());
   EXPECT_LT(caretVisualRect.x(), newCaretVisualRect.x());
@@ -144,7 +146,7 @@
   selection().setSelection(SelectionInDOMTree());
   updateAllLifecyclePhases();
   EXPECT_FALSE(block->shouldPaintCursorCaret());
-  EXPECT_EQ(LayoutRect(), caretDisplayItemClient().visualRect());
+  EXPECT_EQ(LayoutRect(), getCaretDisplayItemClient().visualRect());
 
   rasterInvalidations =
       &getRasterInvalidationTracking()->trackedRasterInvalidations;
@@ -174,7 +176,7 @@
   // Focus the body.
   document().body()->focus();
   updateAllLifecyclePhases();
-  LayoutRect caretVisualRect1 = caretDisplayItemClient().visualRect();
+  LayoutRect caretVisualRect1 = getCaretDisplayItemClient().visualRect();
   EXPECT_EQ(1, caretVisualRect1.width());
   EXPECT_EQ(block1->visualRect().location(), caretVisualRect1.location());
   EXPECT_TRUE(block1->shouldPaintCursorCaret());
@@ -187,7 +189,7 @@
                                .build());
   updateAllLifecyclePhases();
 
-  LayoutRect caretVisualRect2 = caretDisplayItemClient().visualRect();
+  LayoutRect caretVisualRect2 = getCaretDisplayItemClient().visualRect();
   EXPECT_EQ(1, caretVisualRect2.width());
   EXPECT_EQ(block2->visualRect().location(), caretVisualRect2.location());
   EXPECT_FALSE(block1->shouldPaintCursorCaret());
@@ -215,7 +217,7 @@
                                .build());
   updateAllLifecyclePhases();
 
-  EXPECT_EQ(caretVisualRect1, caretDisplayItemClient().visualRect());
+  EXPECT_EQ(caretVisualRect1, getCaretDisplayItemClient().visualRect());
   EXPECT_TRUE(block1->shouldPaintCursorCaret());
   EXPECT_FALSE(block2->shouldPaintCursorCaret());
 
@@ -303,7 +305,7 @@
   updateAllLifecyclePhases();
   const auto* block = toLayoutBlock(document().body()->layoutObject());
 
-  LayoutRect caretVisualRect = caretDisplayItemClient().visualRect();
+  LayoutRect caretVisualRect = getCaretDisplayItemClient().visualRect();
   EXPECT_EQ(1, caretVisualRect.width());
   EXPECT_EQ(block->location(), caretVisualRect.location());
 
@@ -317,7 +319,7 @@
   selection().setCaretVisible(true);
   updateAllLifecyclePhases();
 
-  LayoutRect newCaretVisualRect = caretDisplayItemClient().visualRect();
+  LayoutRect newCaretVisualRect = getCaretDisplayItemClient().visualRect();
   EXPECT_EQ(caretVisualRect.size(), newCaretVisualRect.size());
   EXPECT_EQ(caretVisualRect.y(), newCaretVisualRect.y());
   EXPECT_LT(caretVisualRect.x(), newCaretVisualRect.x());
@@ -363,17 +365,19 @@
 
   EXPECT_TRUE(editorBlock->shouldPaintCursorCaret());
   EXPECT_EQ(editorBlock, caretLayoutBlock());
-  EXPECT_EQ(LayoutRect(116, 105, 1, 1), caretDisplayItemClient().visualRect());
+  EXPECT_EQ(LayoutRect(116, 105, 1, 1),
+            getCaretDisplayItemClient().visualRect());
 
   // Composite container.
   container->setAttribute(HTMLNames::styleAttr, "will-change: transform");
   updateAllLifecyclePhases();
-  EXPECT_EQ(LayoutRect(50, 50, 1, 1), caretDisplayItemClient().visualRect());
+  EXPECT_EQ(LayoutRect(50, 50, 1, 1), getCaretDisplayItemClient().visualRect());
 
   // Uncomposite container.
   container->setAttribute(HTMLNames::styleAttr, "");
   updateAllLifecyclePhases();
-  EXPECT_EQ(LayoutRect(116, 105, 1, 1), caretDisplayItemClient().visualRect());
+  EXPECT_EQ(LayoutRect(116, 105, 1, 1),
+            getCaretDisplayItemClient().visualRect());
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/EditingUtilities.cpp b/third_party/WebKit/Source/core/editing/EditingUtilities.cpp
index 85b3719..51dc725 100644
--- a/third_party/WebKit/Source/core/editing/EditingUtilities.cpp
+++ b/third_party/WebKit/Source/core/editing/EditingUtilities.cpp
@@ -1834,6 +1834,13 @@
   return offset < textNode->length() && textNode->data()[offset] == '\n';
 }
 
+bool elementCannotHaveEndTag(const Node& node) {
+  if (!node.isHTMLElement())
+    return false;
+
+  return !toHTMLElement(node).shouldSerializeEndTag();
+}
+
 // Modifies selections that have an end point at the edge of a table
 // that contains the other endpoint so that they don't confuse
 // code that iterates over selected paragraphs.
diff --git a/third_party/WebKit/Source/core/editing/EditingUtilities.h b/third_party/WebKit/Source/core/editing/EditingUtilities.h
index 28fc78a..33419aa 100644
--- a/third_party/WebKit/Source/core/editing/EditingUtilities.h
+++ b/third_party/WebKit/Source/core/editing/EditingUtilities.h
@@ -379,6 +379,8 @@
 
 bool canMergeLists(Element* firstList, Element* secondList);
 
+bool elementCannotHaveEndTag(const Node&);
+
 // -------------------------------------------------------------------------
 // VisibleSelection
 // -------------------------------------------------------------------------
diff --git a/third_party/WebKit/Source/core/editing/serializers/MarkupAccumulator.cpp b/third_party/WebKit/Source/core/editing/serializers/MarkupAccumulator.cpp
index bb9b4a5b..74c4706 100644
--- a/third_party/WebKit/Source/core/editing/serializers/MarkupAccumulator.cpp
+++ b/third_party/WebKit/Source/core/editing/serializers/MarkupAccumulator.cpp
@@ -37,6 +37,7 @@
 #include "core/dom/DocumentFragment.h"
 #include "core/dom/DocumentType.h"
 #include "core/dom/ProcessingInstruction.h"
+#include "core/editing/EditingUtilities.h"
 #include "core/editing/Editor.h"
 #include "core/html/HTMLElement.h"
 #include "core/html/HTMLTemplateElement.h"
@@ -84,13 +85,6 @@
   }
 }
 
-static bool elementCannotHaveEndTag(const Node& node) {
-  if (!node.isHTMLElement())
-    return false;
-
-  return !toHTMLElement(node).shouldSerializeEndTag();
-}
-
 void MarkupAccumulator::appendEndMarkup(StringBuilder& result,
                                         const Element& element) {
   m_formatter.appendEndMarkup(result, element);
diff --git a/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp b/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp
index b75932dc..ea8f5cb 100644
--- a/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp
+++ b/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp
@@ -37,6 +37,7 @@
 #include "core/dom/DocumentFragment.h"
 #include "core/dom/DocumentType.h"
 #include "core/dom/ProcessingInstruction.h"
+#include "core/editing/EditingUtilities.h"
 #include "core/editing/Editor.h"
 #include "core/html/HTMLElement.h"
 #include "core/html/HTMLTemplateElement.h"
@@ -178,13 +179,6 @@
   }
 }
 
-static bool elementCannotHaveEndTag(const Node& node) {
-  if (!node.isHTMLElement())
-    return false;
-
-  return !toHTMLElement(node).shouldSerializeEndTag();
-}
-
 void MarkupFormatter::appendEndMarkup(StringBuilder& result,
                                       const Element& element) {
   if (shouldSelfClose(element) ||
diff --git a/third_party/WebKit/Source/core/frame/DOMWindow.cpp b/third_party/WebKit/Source/core/frame/DOMWindow.cpp
index 831460a2..0507b7d1 100644
--- a/third_party/WebKit/Source/core/frame/DOMWindow.cpp
+++ b/third_party/WebKit/Source/core/frame/DOMWindow.cpp
@@ -137,9 +137,10 @@
     // FIXME: The name canAccess seems to be a roundabout way to ask "can
     // execute script".  Can we name the SecurityOrigin function better to make
     // this more clear?
-    if (callingWindow.document()->getSecurityOrigin()->canAccessCheckSuborigins(
-            frame()->securityContext()->getSecurityOrigin()))
+    if (callingWindow.document()->getSecurityOrigin()->canAccess(
+            frame()->securityContext()->getSecurityOrigin())) {
       return false;
+    }
   }
 
   callingWindow.printErrorMessage(
@@ -270,8 +271,7 @@
   // It's possible for a remote frame to be same origin with respect to a
   // local frame, but it must still be treated as a disallowed cross-domain
   // access. See https://crbug.com/601629.
-  ASSERT(frame()->isRemoteFrame() ||
-         !activeOrigin->canAccessCheckSuborigins(targetOrigin));
+  DCHECK(frame()->isRemoteFrame() || !activeOrigin->canAccess(targetOrigin));
 
   String message = "Blocked a frame with origin \"" + activeOrigin->toString() +
                    "\" from accessing a frame with origin \"" +
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.cpp b/third_party/WebKit/Source/core/frame/Deprecation.cpp
index 5de1b12..90782d2 100644
--- a/third_party/WebKit/Source/core/frame/Deprecation.cpp
+++ b/third_party/WebKit/Source/core/frame/Deprecation.cpp
@@ -424,6 +424,16 @@
                                    "the 'script-src' directive for Workers",
                                    M60, "5922594955984896");
 
+    case UseCounter::CanRequestURLHTTPContainingNewline:
+      return String::format(
+          "Resource requests whose URLs contain raw newline characters are "
+          "deprecated, and may be blocked in %s. Please remove newlines from "
+          "places like element attribute values in order to continue loading "
+          "those resources. See "
+          "https://www.chromestatus.com/features/5735596811091968 for more "
+          "details.",
+          milestoneString(M60));
+
     // Features that aren't deprecated don't have a deprecation message.
     default:
       return String();
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index 63783f9..c9cc3b5 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1527,6 +1527,8 @@
     MenuItemElementIconAttribute = 1911,
     WebkitCSSMatrixSetMatrixValue = 1912,
     WebkitCSSMatrixConstructFromString = 1913,
+    CanRequestURLHTTPContainingNewline = 1914,
+    CanRequestURLNonHTTPContainingNewline = 1915,
 
     // Add new features immediately above this line. Don't change assigned
     // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp
index 6afd03c..c95f01f 100644
--- a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp
+++ b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp
@@ -45,6 +45,36 @@
   return isASCIIAlphanumeric(c) || c == '-';
 }
 
+ContentSecurityPolicyHashAlgorithm convertHashAlgorithmToCSPHashAlgorithm(
+    HashAlgorithm algorithm) {
+  switch (algorithm) {
+    case HashAlgorithmSha1:
+      // Sha1 is not supported.
+      return ContentSecurityPolicyHashAlgorithmNone;
+    case HashAlgorithmSha256:
+      return ContentSecurityPolicyHashAlgorithmSha256;
+    case HashAlgorithmSha384:
+      return ContentSecurityPolicyHashAlgorithmSha384;
+    case HashAlgorithmSha512:
+      return ContentSecurityPolicyHashAlgorithmSha512;
+  }
+  NOTREACHED();
+  return ContentSecurityPolicyHashAlgorithmNone;
+}
+
+// IntegrityMetadata (from SRI) has base64-encoded digest values, but CSP uses
+// binary format. This converts from the former to the latter.
+bool parseBase64Digest(String base64, DigestValue& hash) {
+  Vector<char> hashVector;
+  // We accept base64url-encoded data here by normalizing it to base64.
+  if (!base64Decode(normalizeToBase64(base64), hashVector))
+    return false;
+  if (hashVector.isEmpty() || hashVector.size() > kMaxDigestSize)
+    return false;
+  hash.append(reinterpret_cast<uint8_t*>(hashVector.data()), hashVector.size());
+  return true;
+}
+
 }  // namespace
 
 CSPDirectiveList::CSPDirectiveList(ContentSecurityPolicy* policy,
@@ -178,6 +208,24 @@
   return directive && directive->allowNonce(nonce);
 }
 
+bool CSPDirectiveList::areAllMatchingHashesPresent(
+    SourceListDirective* directive,
+    const IntegrityMetadataSet& hashes) const {
+  if (!directive || hashes.isEmpty())
+    return false;
+  for (const std::pair<WTF::String, HashAlgorithm>& hash : hashes) {
+    // Convert the hash from integrity metadata format to CSP format.
+    CSPHashValue cspHash;
+    cspHash.first = convertHashAlgorithmToCSPHashAlgorithm(hash.second);
+    if (!parseBase64Digest(hash.first, cspHash.second))
+      return false;
+    // All integrity hashes must be listed in the CSP.
+    if (!directive->allowHash(cspHash))
+      return false;
+  }
+  return true;
+}
+
 bool CSPDirectiveList::checkHash(SourceListDirective* directive,
                                  const CSPHashValue& hashValue) const {
   return !directive || directive->allowHash(hashValue);
@@ -633,20 +681,23 @@
 bool CSPDirectiveList::allowScriptFromSource(
     const KURL& url,
     const String& nonce,
+    const IntegrityMetadataSet& hashes,
     ParserDisposition parserDisposition,
     ResourceRequest::RedirectStatus redirectStatus,
     SecurityViolationReportingPolicy reportingPolicy) const {
-  if (isMatchingNoncePresent(operativeDirective(m_scriptSrc.get()), nonce))
+  SourceListDirective* directive = operativeDirective(m_scriptSrc.get());
+  if (isMatchingNoncePresent(directive, nonce))
     return true;
   if (parserDisposition == NotParserInserted && allowDynamic())
     return true;
+  if (areAllMatchingHashesPresent(directive, hashes))
+    return true;
   return reportingPolicy == SecurityViolationReportingPolicy::Report
              ? checkSourceAndReportViolation(
-                   operativeDirective(m_scriptSrc.get()), url,
+                   directive, url,
                    ContentSecurityPolicy::DirectiveType::ScriptSrc,
                    redirectStatus)
-             : checkSource(operativeDirective(m_scriptSrc.get()), url,
-                           redirectStatus);
+             : checkSource(directive, url, redirectStatus);
 }
 
 bool CSPDirectiveList::allowObjectFromSource(
diff --git a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.h b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.h
index d1a122b..e61167a 100644
--- a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.h
+++ b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.h
@@ -78,6 +78,7 @@
 
   bool allowScriptFromSource(const KURL&,
                              const String& nonce,
+                             const IntegrityMetadataSet& hashes,
                              ParserDisposition,
                              ResourceRequest::RedirectStatus,
                              SecurityViolationReportingPolicy) const;
@@ -242,6 +243,8 @@
   bool checkEval(SourceListDirective*) const;
   bool checkDynamic(SourceListDirective*) const;
   bool isMatchingNoncePresent(SourceListDirective*, const String&) const;
+  bool areAllMatchingHashesPresent(SourceListDirective*,
+                                   const IntegrityMetadataSet&) const;
   bool checkHash(SourceListDirective*, const CSPHashValue&) const;
   bool checkHashedAttributes(SourceListDirective*) const;
   bool checkSource(SourceListDirective*,
diff --git a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveListTest.cpp b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveListTest.cpp
index 86f819e..5546fc54 100644
--- a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveListTest.cpp
+++ b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveListTest.cpp
@@ -4,6 +4,7 @@
 
 #include "core/frame/csp/CSPDirectiveList.h"
 
+#include "core/frame/SubresourceIntegrity.h"
 #include "core/frame/csp/ContentSecurityPolicy.h"
 #include "core/frame/csp/SourceListDirective.h"
 #include "platform/loader/fetch/ResourceRequest.h"
@@ -165,7 +166,7 @@
         createList(test.list, ContentSecurityPolicyHeaderTypeReport);
     EXPECT_EQ(test.expected,
               directiveList->allowScriptFromSource(
-                  scriptSrc, String(), ParserInserted,
+                  scriptSrc, String(), IntegrityMetadataSet(), ParserInserted,
                   ResourceRequest::RedirectStatus::NoRedirect,
                   SecurityViolationReportingPolicy::SuppressReporting));
 
@@ -174,7 +175,7 @@
         createList(test.list, ContentSecurityPolicyHeaderTypeEnforce);
     EXPECT_EQ(test.expected,
               directiveList->allowScriptFromSource(
-                  scriptSrc, String(), ParserInserted,
+                  scriptSrc, String(), IntegrityMetadataSet(), ParserInserted,
                   ResourceRequest::RedirectStatus::NoRedirect,
                   SecurityViolationReportingPolicy::SuppressReporting));
   }
@@ -222,7 +223,150 @@
                    ContentSecurityPolicyHeaderTypeReport);
     EXPECT_EQ(test.expected,
               directiveList->allowScriptFromSource(
-                  resource, String(test.nonce), ParserInserted,
+                  resource, String(test.nonce), IntegrityMetadataSet(),
+                  ParserInserted, ResourceRequest::RedirectStatus::NoRedirect,
+                  SecurityViolationReportingPolicy::SuppressReporting));
+
+    // Enforce 'script-src'
+    directiveList = createList(String("script-src ") + test.list,
+                               ContentSecurityPolicyHeaderTypeEnforce);
+    EXPECT_EQ(test.expected,
+              directiveList->allowScriptFromSource(
+                  resource, String(test.nonce), IntegrityMetadataSet(),
+                  ParserInserted, ResourceRequest::RedirectStatus::NoRedirect,
+                  SecurityViolationReportingPolicy::SuppressReporting));
+
+    // Report-only 'style-src'
+    directiveList = createList(String("style-src ") + test.list,
+                               ContentSecurityPolicyHeaderTypeReport);
+    EXPECT_EQ(test.expected,
+              directiveList->allowStyleFromSource(
+                  resource, String(test.nonce),
+                  ResourceRequest::RedirectStatus::NoRedirect,
+                  SecurityViolationReportingPolicy::SuppressReporting));
+
+    // Enforce 'style-src'
+    directiveList = createList(String("style-src ") + test.list,
+                               ContentSecurityPolicyHeaderTypeEnforce);
+    EXPECT_EQ(test.expected,
+              directiveList->allowStyleFromSource(
+                  resource, String(test.nonce),
+                  ResourceRequest::RedirectStatus::NoRedirect,
+                  SecurityViolationReportingPolicy::SuppressReporting));
+
+    // Report-only 'style-src'
+    directiveList = createList(String("default-src ") + test.list,
+                               ContentSecurityPolicyHeaderTypeReport);
+    EXPECT_EQ(test.expected,
+              directiveList->allowScriptFromSource(
+                  resource, String(test.nonce), IntegrityMetadataSet(),
+                  ParserInserted, ResourceRequest::RedirectStatus::NoRedirect,
+                  SecurityViolationReportingPolicy::SuppressReporting));
+    EXPECT_EQ(test.expected,
+              directiveList->allowStyleFromSource(
+                  resource, String(test.nonce),
+                  ResourceRequest::RedirectStatus::NoRedirect,
+                  SecurityViolationReportingPolicy::SuppressReporting));
+
+    // Enforce 'style-src'
+    directiveList = createList(String("default-src ") + test.list,
+                               ContentSecurityPolicyHeaderTypeEnforce);
+    EXPECT_EQ(test.expected,
+              directiveList->allowScriptFromSource(
+                  resource, String(test.nonce), IntegrityMetadataSet(),
+                  ParserInserted, ResourceRequest::RedirectStatus::NoRedirect,
+                  SecurityViolationReportingPolicy::SuppressReporting));
+    EXPECT_EQ(test.expected,
+              directiveList->allowStyleFromSource(
+                  resource, String(test.nonce),
+                  ResourceRequest::RedirectStatus::NoRedirect,
+                  SecurityViolationReportingPolicy::SuppressReporting));
+  }
+}
+
+TEST_F(CSPDirectiveListTest, AllowScriptFromSourceWithHash) {
+  struct TestCase {
+    const char* list;
+    const char* url;
+    const char* integrity;
+    bool expected;
+  } cases[] = {
+      // Doesn't affect lists without hashes.
+      {"https://example.com", "https://example.com/file", "sha256-yay", true},
+      {"https://example.com", "https://example.com/file", "sha256-boo", true},
+      {"https://example.com", "https://example.com/file", "", true},
+      {"https://example.com", "https://not.example.com/file", "sha256-yay",
+       false},
+      {"https://example.com", "https://not.example.com/file", "sha256-boo",
+       false},
+      {"https://example.com", "https://not.example.com/file", "", false},
+
+      // Doesn't affect URLs that match the whitelist.
+      {"https://example.com 'sha256-yay'", "https://example.com/file",
+       "sha256-yay", true},
+      {"https://example.com 'sha256-yay'", "https://example.com/file",
+       "sha256-boo", true},
+      {"https://example.com 'sha256-yay'", "https://example.com/file", "",
+       true},
+
+      // Does affect URLs that don't match the whitelist.
+      {"https://example.com 'sha256-yay'", "https://not.example.com/file",
+       "sha256-yay", true},
+      {"https://example.com 'sha256-yay'", "https://not.example.com/file",
+       "sha256-boo", false},
+      {"https://example.com 'sha256-yay'", "https://not.example.com/file", "",
+       false},
+
+      // Both algorithm and digest must match.
+      {"'sha256-yay'", "https://a.com/file", "sha384-yay", false},
+
+      // Sha-1 is not supported, but -384 and -512 are.
+      {"'sha1-yay'", "https://a.com/file", "sha1-yay", false},
+      {"'sha384-yay'", "https://a.com/file", "sha384-yay", true},
+      {"'sha512-yay'", "https://a.com/file", "sha512-yay", true},
+
+      // Unknown (or future) hash algorithms don't work.
+      {"'asdf256-yay'", "https://a.com/file", "asdf256-yay", false},
+
+      // But they also don't interfere.
+      {"'sha256-yay'", "https://a.com/file", "sha256-yay asdf256-boo", true},
+
+      // Additional whitelisted hashes in the CSP don't interfere.
+      {"'sha256-yay' 'sha384-boo'", "https://a.com/file", "sha256-yay", true},
+      {"'sha256-yay' 'sha384-boo'", "https://a.com/file", "sha384-boo", true},
+
+      // All integrity hashes must appear in the CSP (and match).
+      {"'sha256-yay'", "https://a.com/file", "sha256-yay sha384-boo", false},
+      {"'sha384-boo'", "https://a.com/file", "sha256-yay sha384-boo", false},
+      {"'sha256-yay' 'sha384-boo'", "https://a.com/file",
+       "sha256-yay sha384-yay", false},
+      {"'sha256-yay' 'sha384-boo'", "https://a.com/file",
+       "sha256-boo sha384-boo", false},
+      {"'sha256-yay' 'sha384-boo'", "https://a.com/file",
+       "sha256-yay sha384-boo", true},
+
+      // At least one integrity hash must be present.
+      {"'sha256-yay'", "https://a.com/file", "", false},
+  };
+
+  for (const auto& test : cases) {
+    SCOPED_TRACE(testing::Message()
+                 << "List: `" << test.list << "`, URL: `" << test.url
+                 << "`, Integrity: `" << test.integrity << "`");
+    KURL resource = KURL(KURL(), test.url);
+
+    IntegrityMetadataSet integrityMetadata;
+    ASSERT_EQ(SubresourceIntegrity::IntegrityParseValidResult,
+              SubresourceIntegrity::parseIntegrityAttribute(test.integrity,
+                                                            integrityMetadata));
+
+    // Report-only 'script-src'
+    Member<CSPDirectiveList> directiveList =
+        createList(String("script-src ") + test.list,
+                   ContentSecurityPolicyHeaderTypeReport);
+    EXPECT_EQ(test.expected,
+              directiveList->allowScriptFromSource(
+                  resource, String(), integrityMetadata, ParserInserted,
                   ResourceRequest::RedirectStatus::NoRedirect,
                   SecurityViolationReportingPolicy::SuppressReporting));
 
@@ -231,53 +375,7 @@
                                ContentSecurityPolicyHeaderTypeEnforce);
     EXPECT_EQ(test.expected,
               directiveList->allowScriptFromSource(
-                  resource, String(test.nonce), ParserInserted,
-                  ResourceRequest::RedirectStatus::NoRedirect,
-                  SecurityViolationReportingPolicy::SuppressReporting));
-
-    // Report-only 'style-src'
-    directiveList = createList(String("style-src ") + test.list,
-                               ContentSecurityPolicyHeaderTypeReport);
-    EXPECT_EQ(test.expected,
-              directiveList->allowStyleFromSource(
-                  resource, String(test.nonce),
-                  ResourceRequest::RedirectStatus::NoRedirect,
-                  SecurityViolationReportingPolicy::SuppressReporting));
-
-    // Enforce 'style-src'
-    directiveList = createList(String("style-src ") + test.list,
-                               ContentSecurityPolicyHeaderTypeEnforce);
-    EXPECT_EQ(test.expected,
-              directiveList->allowStyleFromSource(
-                  resource, String(test.nonce),
-                  ResourceRequest::RedirectStatus::NoRedirect,
-                  SecurityViolationReportingPolicy::SuppressReporting));
-
-    // Report-only 'style-src'
-    directiveList = createList(String("default-src ") + test.list,
-                               ContentSecurityPolicyHeaderTypeReport);
-    EXPECT_EQ(test.expected,
-              directiveList->allowScriptFromSource(
-                  resource, String(test.nonce), ParserInserted,
-                  ResourceRequest::RedirectStatus::NoRedirect,
-                  SecurityViolationReportingPolicy::SuppressReporting));
-    EXPECT_EQ(test.expected,
-              directiveList->allowStyleFromSource(
-                  resource, String(test.nonce),
-                  ResourceRequest::RedirectStatus::NoRedirect,
-                  SecurityViolationReportingPolicy::SuppressReporting));
-
-    // Enforce 'style-src'
-    directiveList = createList(String("default-src ") + test.list,
-                               ContentSecurityPolicyHeaderTypeEnforce);
-    EXPECT_EQ(test.expected,
-              directiveList->allowScriptFromSource(
-                  resource, String(test.nonce), ParserInserted,
-                  ResourceRequest::RedirectStatus::NoRedirect,
-                  SecurityViolationReportingPolicy::SuppressReporting));
-    EXPECT_EQ(test.expected,
-              directiveList->allowStyleFromSource(
-                  resource, String(test.nonce),
+                  resource, String(), integrityMetadata, ParserInserted,
                   ResourceRequest::RedirectStatus::NoRedirect,
                   SecurityViolationReportingPolicy::SuppressReporting));
   }
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
index afbe2531..4a391d9 100644
--- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
+++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
@@ -495,12 +495,14 @@
 template <bool (CSPDirectiveList::*allowFromURLWithNonceAndParser)(
     const KURL&,
     const String& nonce,
+    const IntegrityMetadataSet& hashes,
     ParserDisposition parserDisposition,
     RedirectStatus,
     SecurityViolationReportingPolicy) const>
 bool isAllowedByAll(const CSPDirectiveListVector& policies,
                     const KURL& url,
                     const String& nonce,
+                    const IntegrityMetadataSet& hashes,
                     ParserDisposition parserDisposition,
                     RedirectStatus redirectStatus,
                     SecurityViolationReportingPolicy reportingPolicy) {
@@ -521,7 +523,7 @@
   bool isAllowed = true;
   for (const auto& policy : policies) {
     isAllowed &= (policy.get()->*allowFromURLWithNonceAndParser)(
-        url, nonce, parserDisposition, redirectStatus, reportingPolicy);
+        url, nonce, hashes, parserDisposition, redirectStatus, reportingPolicy);
   }
   return isAllowed;
 }
@@ -698,6 +700,7 @@
 bool ContentSecurityPolicy::allowScriptFromSource(
     const KURL& url,
     const String& nonce,
+    const IntegrityMetadataSet& hashes,
     ParserDisposition parserDisposition,
     RedirectStatus redirectStatus,
     SecurityViolationReportingPolicy reportingPolicy) const {
@@ -709,7 +712,7 @@
             : UseCounter::ScriptWithCSPBypassingSchemeNotParserInserted);
   }
   return isAllowedByAll<&CSPDirectiveList::allowScriptFromSource>(
-      m_policies, url, nonce, parserDisposition, redirectStatus,
+      m_policies, url, nonce, hashes, parserDisposition, redirectStatus,
       reportingPolicy);
 }
 
@@ -779,8 +782,9 @@
     case WebURLRequest::RequestContextImport:
     case WebURLRequest::RequestContextScript:
     case WebURLRequest::RequestContextXSLT:
-      return allowScriptFromSource(url, nonce, parserDisposition,
-                                   redirectStatus, reportingPolicy);
+      return allowScriptFromSource(url, nonce, integrityMetadata,
+                                   parserDisposition, redirectStatus,
+                                   reportingPolicy);
     case WebURLRequest::RequestContextManifest:
       return allowManifestFromSource(url, redirectStatus, reportingPolicy);
     case WebURLRequest::RequestContextServiceWorker:
@@ -901,7 +905,8 @@
             m_policies, url, redirectStatus,
             SecurityViolationReportingPolicy::SuppressReporting) &&
         !isAllowedByAll<&CSPDirectiveList::allowScriptFromSource>(
-            m_policies, url, AtomicString(), NotParserInserted, redirectStatus,
+            m_policies, url, AtomicString(), IntegrityMetadataSet(),
+            NotParserInserted, redirectStatus,
             SecurityViolationReportingPolicy::SuppressReporting)) {
       UseCounter::count(*document,
                         UseCounter::WorkerAllowedByChildBlockedByScript);
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
index 84ad9bb..b45692a 100644
--- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
+++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
@@ -228,6 +228,7 @@
   bool allowScriptFromSource(
       const KURL&,
       const String& nonce,
+      const IntegrityMetadataSet& hashes,
       ParserDisposition,
       RedirectStatus = RedirectStatus::NoRedirect,
       SecurityViolationReportingPolicy =
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicyTest.cpp b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicyTest.cpp
index ebb18ea..ca597451 100644
--- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicyTest.cpp
+++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicyTest.cpp
@@ -130,7 +130,7 @@
   ContentSecurityPolicy* csp2 = ContentSecurityPolicy::create();
   csp2->copyStateFrom(csp.get());
   EXPECT_FALSE(csp2->allowScriptFromSource(
-      exampleUrl, String(), ParserInserted,
+      exampleUrl, String(), IntegrityMetadataSet(), ParserInserted,
       ResourceRequest::RedirectStatus::NoRedirect,
       SecurityViolationReportingPolicy::SuppressReporting));
   EXPECT_TRUE(csp2->allowPluginType(
@@ -161,7 +161,7 @@
   ContentSecurityPolicy* csp2 = ContentSecurityPolicy::create();
   csp2->copyPluginTypesFrom(csp.get());
   EXPECT_TRUE(csp2->allowScriptFromSource(
-      exampleUrl, String(), ParserInserted,
+      exampleUrl, String(), IntegrityMetadataSet(), ParserInserted,
       ResourceRequest::RedirectStatus::NoRedirect,
       SecurityViolationReportingPolicy::SuppressReporting));
   EXPECT_TRUE(csp2->allowPluginType(
@@ -662,7 +662,8 @@
                              ContentSecurityPolicyHeaderTypeEnforce,
                              ContentSecurityPolicyHeaderSourceHTTP);
     EXPECT_EQ(test.allowed, policy->allowScriptFromSource(
-                                resource, String(test.nonce), ParserInserted));
+                                resource, String(test.nonce),
+                                IntegrityMetadataSet(), ParserInserted));
     // If this is expected to generate a violation, we should have sent a
     // report.
     EXPECT_EQ(expectedReports, policy->m_violationReportsSent.size());
@@ -672,8 +673,8 @@
     policy->bindToExecutionContext(document.get());
     policy->didReceiveHeader(test.policy, ContentSecurityPolicyHeaderTypeReport,
                              ContentSecurityPolicyHeaderSourceHTTP);
-    EXPECT_TRUE(policy->allowScriptFromSource(resource, String(test.nonce),
-                                              ParserInserted));
+    EXPECT_TRUE(policy->allowScriptFromSource(
+        resource, String(test.nonce), IntegrityMetadataSet(), ParserInserted));
     // If this is expected to generate a violation, we should have sent a
     // report, even though we don't deny access in `allowScriptFromSource`:
     EXPECT_EQ(expectedReports, policy->m_violationReportsSent.size());
@@ -815,7 +816,8 @@
                              ContentSecurityPolicyHeaderTypeReport,
                              ContentSecurityPolicyHeaderSourceHTTP);
     EXPECT_EQ(test.allowed1, policy->allowScriptFromSource(
-                                 resource, String(test.nonce), ParserInserted));
+                                 resource, String(test.nonce),
+                                 IntegrityMetadataSet(), ParserInserted));
     EXPECT_EQ(expectedReports, policy->m_violationReportsSent.size());
 
     // Report / Enforce
@@ -828,7 +830,8 @@
                              ContentSecurityPolicyHeaderTypeEnforce,
                              ContentSecurityPolicyHeaderSourceHTTP);
     EXPECT_EQ(test.allowed2, policy->allowScriptFromSource(
-                                 resource, String(test.nonce), ParserInserted));
+                                 resource, String(test.nonce),
+                                 IntegrityMetadataSet(), ParserInserted));
     EXPECT_EQ(expectedReports, policy->m_violationReportsSent.size());
 
     // Enforce / Enforce
@@ -840,9 +843,10 @@
     policy->didReceiveHeader(test.policy2,
                              ContentSecurityPolicyHeaderTypeEnforce,
                              ContentSecurityPolicyHeaderSourceHTTP);
-    EXPECT_EQ(test.allowed1 && test.allowed2,
-              policy->allowScriptFromSource(resource, String(test.nonce),
-                                            ParserInserted));
+    EXPECT_EQ(
+        test.allowed1 && test.allowed2,
+        policy->allowScriptFromSource(resource, String(test.nonce),
+                                      IntegrityMetadataSet(), ParserInserted));
     EXPECT_EQ(expectedReports, policy->m_violationReportsSent.size());
 
     // Report / Report
@@ -854,8 +858,8 @@
     policy->didReceiveHeader(test.policy2,
                              ContentSecurityPolicyHeaderTypeReport,
                              ContentSecurityPolicyHeaderSourceHTTP);
-    EXPECT_TRUE(policy->allowScriptFromSource(resource, String(test.nonce),
-                                              ParserInserted));
+    EXPECT_TRUE(policy->allowScriptFromSource(
+        resource, String(test.nonce), IntegrityMetadataSet(), ParserInserted));
     EXPECT_EQ(expectedReports, policy->m_violationReportsSent.size());
   }
 }
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
index 56a560a..3222aeb8 100644
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -1246,6 +1246,7 @@
         createAcceleratedImageBufferSurface(opacityMode, &msaaSampleCount);
     if (surface) {
       buffer()->setSurface(std::move(surface));
+      setNeedsCompositingUpdate();
     }
   }
 }
diff --git a/third_party/WebKit/Source/core/html/media/MediaControls.h b/third_party/WebKit/Source/core/html/media/MediaControls.h
index d22feef7..2066f74e2 100644
--- a/third_party/WebKit/Source/core/html/media/MediaControls.h
+++ b/third_party/WebKit/Source/core/html/media/MediaControls.h
@@ -93,6 +93,7 @@
   virtual void onLoadedMetadata() = 0;
   virtual void onEnteredFullscreen() = 0;
   virtual void onExitedFullscreen() = 0;
+  virtual void onPanelKeypress() = 0;
   virtual void beginScrubbing() = 0;
   virtual void endScrubbing() = 0;
   virtual void updateCurrentTimeDisplay() = 0;
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp
index d49d069c..6f94865 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp
@@ -7,6 +7,7 @@
 #include "core/events/Event.h"
 #include "core/html/HTMLMediaElement.h"
 #include "core/html/media/MediaControls.h"
+#include "core/html/shadow/MediaControlElements.h"
 #include "core/html/track/TextTrackList.h"
 
 namespace blink {
@@ -43,6 +44,12 @@
   textTracks->addEventListener(EventTypeNames::addtrack, this, false);
   textTracks->addEventListener(EventTypeNames::change, this, false);
   textTracks->addEventListener(EventTypeNames::removetrack, this, false);
+
+  // Keypress events.
+  if (m_mediaControls->panelElement()) {
+    m_mediaControls->panelElement()->addEventListener(EventTypeNames::keypress,
+                                                      this, false);
+  }
 }
 
 void MediaControlsMediaEventListener::detach() {
@@ -55,6 +62,11 @@
   textTracks->removeEventListener(EventTypeNames::addtrack, this, false);
   textTracks->removeEventListener(EventTypeNames::change, this, false);
   textTracks->removeEventListener(EventTypeNames::removetrack, this, false);
+
+  if (m_mediaControls->panelElement()) {
+    m_mediaControls->panelElement()->removeEventListener(
+        EventTypeNames::keypress, this, false);
+  }
 }
 
 bool MediaControlsMediaEventListener::operator==(
@@ -127,6 +139,13 @@
     return;
   }
 
+  // Keypress events.
+  if (event->type() == EventTypeNames::keypress) {
+    if (event->currentTarget() == m_mediaControls->panelElement())
+      m_mediaControls->onPanelKeypress();
+    return;
+  }
+
   NOTREACHED();
 }
 
diff --git a/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.cpp b/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.cpp
index 2d251c6..a6e67e1 100644
--- a/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.cpp
+++ b/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.cpp
@@ -88,10 +88,11 @@
   void layoutGridItemForMinSizeComputation(
       LayoutBox&,
       bool overrideSizeHasChanged) const override;
-  void maximizeTracks(Vector<GridTrack>&, LayoutUnit& freeSpace) override;
+  void maximizeTracks(Vector<GridTrack>&,
+                      Optional<LayoutUnit>& freeSpace) override;
   double findUsedFlexFraction(Vector<size_t>& flexibleSizedTracksIndex,
                               GridTrackSizingDirection,
-                              LayoutUnit freeSpace) const override;
+                              Optional<LayoutUnit> freeSpace) const override;
   bool recomputeUsedFlexFractionIfNeeded(
       Vector<size_t>& flexibleSizedTracksIndex,
       double& flexFraction,
@@ -111,10 +112,11 @@
   void layoutGridItemForMinSizeComputation(
       LayoutBox&,
       bool overrideSizeHasChanged) const override;
-  void maximizeTracks(Vector<GridTrack>&, LayoutUnit& freeSpace) override;
+  void maximizeTracks(Vector<GridTrack>&,
+                      Optional<LayoutUnit>& freeSpace) override;
   double findUsedFlexFraction(Vector<size_t>& flexibleSizedTracksIndex,
                               GridTrackSizingDirection,
-                              LayoutUnit freeSpace) const override;
+                              Optional<LayoutUnit> freeSpace) const override;
   bool recomputeUsedFlexFractionIfNeeded(
       Vector<size_t>& flexibleSizedTracksIndex,
       double& flexFraction,
@@ -125,9 +127,10 @@
 };
 
 // TODO(svillar): Repeated in LayoutGrid.
-static LayoutUnit computeMarginLogicalSizeForChild(MarginDirection forDirection,
-                                                   const LayoutGrid* grid,
-                                                   const LayoutBox& child) {
+LayoutUnit GridTrackSizingAlgorithmStrategy::computeMarginLogicalSizeForChild(
+    MarginDirection forDirection,
+    const LayoutGrid* grid,
+    const LayoutBox& child) {
   if (!child.styleRef().hasMargin())
     return LayoutUnit();
 
@@ -147,15 +150,17 @@
   return marginStart + marginEnd;
 }
 
-static bool hasOverrideContainingBlockContentSizeForChild(
-    const LayoutBox& child,
-    GridTrackSizingDirection direction) {
+bool GridTrackSizingAlgorithmStrategy::
+    hasOverrideContainingBlockContentSizeForChild(
+        const LayoutBox& child,
+        GridTrackSizingDirection direction) {
   return direction == ForColumns
              ? child.hasOverrideContainingBlockLogicalWidth()
              : child.hasOverrideContainingBlockLogicalHeight();
 }
 
-static LayoutUnit overrideContainingBlockContentSizeForChild(
+LayoutUnit
+GridTrackSizingAlgorithmStrategy::overrideContainingBlockContentSizeForChild(
     const LayoutBox& child,
     GridTrackSizingDirection direction) {
   return direction == ForColumns
@@ -163,9 +168,10 @@
              : child.overrideContainingBlockContentLogicalHeight();
 }
 
-static bool shouldClearOverrideContainingBlockContentSizeForChild(
-    const LayoutBox& child,
-    GridTrackSizingDirection direction) {
+bool GridTrackSizingAlgorithmStrategy::
+    shouldClearOverrideContainingBlockContentSizeForChild(
+        const LayoutBox& child,
+        GridTrackSizingDirection direction) {
   if (direction == ForColumns) {
     return child.hasRelativeLogicalWidth() ||
            child.styleRef().logicalWidth().isIntrinsicOrAuto();
@@ -174,17 +180,19 @@
          child.styleRef().logicalHeight().isIntrinsicOrAuto();
 }
 
-static void setOverrideContainingBlockContentSizeForChild(
-    LayoutBox& child,
-    GridTrackSizingDirection direction,
-    LayoutUnit size) {
+void GridTrackSizingAlgorithmStrategy::
+    setOverrideContainingBlockContentSizeForChild(
+        LayoutBox& child,
+        GridTrackSizingDirection direction,
+        LayoutUnit size) {
   if (direction == ForColumns)
     child.setOverrideContainingBlockContentLogicalWidth(size);
   else
     child.setOverrideContainingBlockContentLogicalHeight(size);
 }
 
-static GridTrackSizingDirection flowAwareDirectionForChild(
+GridTrackSizingDirection
+GridTrackSizingAlgorithmStrategy::flowAwareDirectionForChild(
     const LayoutGrid* layoutGrid,
     const LayoutBox& child,
     GridTrackSizingDirection direction) {
@@ -446,7 +454,7 @@
 }
 
 void DefiniteSizeStrategy::maximizeTracks(Vector<GridTrack>& tracks,
-                                          LayoutUnit& freeSpace) {
+                                          Optional<LayoutUnit>& freeSpace) {
   size_t tracksSize = tracks.size();
   Vector<GridTrack*> tracksForDistribution(tracksSize);
   for (size_t i = 0; i < tracksSize; ++i) {
@@ -455,7 +463,8 @@
         tracksForDistribution[i]->baseSize());
   }
 
-  distributeSpaceToTracks(tracksForDistribution, freeSpace);
+  DCHECK(freeSpace);
+  distributeSpaceToTracks(tracksForDistribution, freeSpace.value());
 
   for (auto* track : tracksForDistribution)
     track->setBaseSize(track->plannedSize());
@@ -464,10 +473,11 @@
 double DefiniteSizeStrategy::findUsedFlexFraction(
     Vector<size_t>& flexibleSizedTracksIndex,
     GridTrackSizingDirection direction,
-    LayoutUnit freeSpace) const {
+    Optional<LayoutUnit> freeSpace) const {
   GridSpan allTracksSpan = GridSpan::translatedDefiniteGridSpan(
       0, m_algorithm.tracks(direction).size());
-  return findFrUnitSize(allTracksSpan, freeSpace);
+  DCHECK(freeSpace);
+  return findFrUnitSize(allTracksSpan, freeSpace.value());
 }
 
 LayoutUnit IndefiniteSizeStrategy::minLogicalWidthForChild(
@@ -494,7 +504,7 @@
 }
 
 void IndefiniteSizeStrategy::maximizeTracks(Vector<GridTrack>& tracks,
-                                            LayoutUnit&) {
+                                            Optional<LayoutUnit>&) {
   for (auto& track : tracks)
     track.setBaseSize(track.growthLimit());
 }
@@ -507,7 +517,7 @@
 double IndefiniteSizeStrategy::findUsedFlexFraction(
     Vector<size_t>& flexibleSizedTracksIndex,
     GridTrackSizingDirection direction,
-    LayoutUnit freeSpace) const {
+    Optional<LayoutUnit>) const {
   auto allTracks = m_algorithm.tracks(direction);
 
   double flexFraction = 0;
@@ -580,7 +590,7 @@
   return true;
 }
 
-LayoutUnit& GridTrackSizingAlgorithm::freeSpace(
+Optional<LayoutUnit> GridTrackSizingAlgorithm::freeSpace(
     GridTrackSizingDirection direction) {
   return direction == ForRows ? m_freeSpaceRows : m_freeSpaceColumns;
 }
@@ -595,6 +605,14 @@
   return direction == ForColumns ? m_columns : m_rows;
 }
 
+void GridTrackSizingAlgorithm::setFreeSpace(GridTrackSizingDirection direction,
+                                            Optional<LayoutUnit> freeSpace) {
+  if (direction == ForColumns)
+    m_freeSpaceColumns = freeSpace;
+  else
+    m_freeSpaceRows = freeSpace;
+}
+
 GridTrackSize GridTrackSizingAlgorithm::rawGridTrackSize(
     GridTrackSizingDirection direction,
     size_t translatedIndex) const {
@@ -701,7 +719,7 @@
 
   const Length& trackLength = gridLength.length();
   if (trackLength.isSpecified())
-    return valueForLength(trackLength, m_availableSpace.clampNegativeToZero());
+    return valueForLength(trackLength, m_availableSpace.value_or(LayoutUnit()));
 
   DCHECK(trackLength.isMinContent() || trackLength.isAuto() ||
          trackLength.isMaxContent());
@@ -717,7 +735,7 @@
 
   const Length& trackLength = gridLength.length();
   if (trackLength.isSpecified())
-    return valueForLength(trackLength, m_availableSpace.clampNegativeToZero());
+    return valueForLength(trackLength, m_availableSpace.value_or(LayoutUnit()));
 
   DCHECK(trackLength.isMinContent() || trackLength.isAuto() ||
          trackLength.isMaxContent());
@@ -728,7 +746,7 @@
   DCHECK(m_contentSizedTracksIndex.isEmpty());
   DCHECK(m_flexibleSizedTracksIndex.isEmpty());
   Vector<GridTrack>& trackList = tracks(m_direction);
-  bool hasDefiniteFreeSpace = m_sizingOperation == TrackSizing;
+  bool hasDefiniteFreeSpace = !!m_availableSpace;
   size_t numTracks = trackList.size();
   for (size_t i = 0; i < numTracks; ++i) {
     GridTrackSize trackSize = gridTrackSize(m_direction, i);
@@ -741,7 +759,7 @@
       GridLength gridLength = trackSize.fitContentTrackBreadth();
       if (!gridLength.hasPercentage() || hasDefiniteFreeSpace) {
         track.setGrowthLimitCap(valueForLength(
-            gridLength.length(), m_availableSpace.clampNegativeToZero()));
+            gridLength.length(), m_availableSpace.value_or(LayoutUnit())));
       }
     }
 
@@ -779,7 +797,7 @@
       growthLimit =
           std::min(growthLimit,
                    valueForLength(trackSize.fitContentTrackBreadth().length(),
-                                  m_availableSpace));
+                                  m_availableSpace.value_or(LayoutUnit())));
     }
     track.setGrowthLimit(std::max(track.growthLimit(), growthLimit));
   }
@@ -1296,7 +1314,8 @@
   }
 }
 
-void GridTrackSizingAlgorithm::stretchFlexibleTracks(LayoutUnit freeSpace) {
+void GridTrackSizingAlgorithm::stretchFlexibleTracks(
+    Optional<LayoutUnit> freeSpace) {
   double flexFraction = m_strategy->findUsedFlexFraction(
       m_flexibleSizedTracksIndex, m_direction, freeSpace);
 
@@ -1318,7 +1337,10 @@
     if (LayoutUnit increment = increments[i++])
       track.setBaseSize(track.baseSize() + increment);
   }
-  this->freeSpace(m_direction) -= totalGrowth;
+  if (this->freeSpace(m_direction)) {
+    setFreeSpace(m_direction,
+                 this->freeSpace(m_direction).value() - totalGrowth);
+  }
   m_maxContentSize += totalGrowth;
 }
 
@@ -1357,26 +1379,26 @@
 void GridTrackSizingAlgorithm::setup(GridTrackSizingDirection direction,
                                      size_t numTracks,
                                      SizingOperation sizingOperation,
-                                     LayoutUnit availableSpace,
-                                     LayoutUnit freeSpace) {
+                                     Optional<LayoutUnit> availableSpace,
+                                     Optional<LayoutUnit> freeSpace) {
   DCHECK(m_needsSetup);
+  DCHECK_EQ(!!availableSpace, !!freeSpace);
   m_direction = direction;
-  m_availableSpace = availableSpace;
+  m_availableSpace = availableSpace
+                         ? availableSpace.value().clampNegativeToZero()
+                         : availableSpace;
 
   m_sizingOperation = sizingOperation;
-  switch (m_sizingOperation) {
-    case IntrinsicSizeComputation:
-      m_strategy = WTF::makeUnique<IndefiniteSizeStrategy>(*this);
-      break;
-    case TrackSizing:
-      m_strategy = WTF::makeUnique<DefiniteSizeStrategy>(*this);
-      break;
-  }
+
+  if (availableSpace)
+    m_strategy = WTF::makeUnique<DefiniteSizeStrategy>(*this);
+  else
+    m_strategy = WTF::makeUnique<IndefiniteSizeStrategy>(*this);
 
   m_contentSizedTracksIndex.shrink(0);
   m_flexibleSizedTracksIndex.shrink(0);
 
-  this->freeSpace(direction) = freeSpace;
+  setFreeSpace(direction, freeSpace);
   tracks(direction).resize(numTracks);
 
   m_needsSetup = false;
@@ -1387,7 +1409,7 @@
   StateMachine stateMachine(*this);
 
   // Step 1.
-  LayoutUnit initialFreeSpace = freeSpace(m_direction);
+  Optional<LayoutUnit> initialFreeSpace = freeSpace(m_direction);
   initializeTrackSizes();
 
   // Step 2.
@@ -1399,13 +1421,19 @@
   // up to this moment (before maximization) to calculate the grid container
   // intrinsic sizes.
   computeGridContainerIntrinsicSizes();
-  freeSpace(m_direction) -= m_minContentSize;
 
-  if (m_sizingOperation == TrackSizing && freeSpace(m_direction) <= 0)
-    return;
+  if (freeSpace(m_direction)) {
+    LayoutUnit updatedFreeSpace =
+        freeSpace(m_direction).value() - m_minContentSize;
+    setFreeSpace(m_direction, updatedFreeSpace);
+    if (updatedFreeSpace <= 0)
+      return;
+  }
 
   // Step 3.
-  m_strategy->maximizeTracks(tracks(m_direction), freeSpace(m_direction));
+  m_strategy->maximizeTracks(tracks(m_direction), m_direction == ForColumns
+                                                      ? m_freeSpaceColumns
+                                                      : m_freeSpaceRows);
 
   if (m_flexibleSizedTracksIndex.isEmpty())
     return;
diff --git a/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.h b/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.h
index a868405d..5934d26 100644
--- a/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.h
+++ b/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.h
@@ -5,12 +5,13 @@
 #ifndef GridTrackSizingAlgorithm_h
 #define GridTrackSizingAlgorithm_h
 
+#include <memory>
+#include "core/layout/LayoutBox.h"
 #include "core/style/GridPositionsResolver.h"
 #include "core/style/GridTrackSize.h"
 #include "platform/LayoutUnit.h"
 #include "wtf/HashSet.h"
 #include "wtf/Optional.h"
-#include <memory>
 
 namespace blink {
 
@@ -20,6 +21,8 @@
 class GridTrackSizingAlgorithmStrategy;
 class LayoutGrid;
 
+enum MarginDirection;
+
 enum SizingOperation { TrackSizing, IntrinsicSizeComputation };
 
 enum TrackSizeComputationPhase {
@@ -84,8 +87,8 @@
   void setup(GridTrackSizingDirection,
              size_t numTracks,
              SizingOperation,
-             LayoutUnit availableSpace,
-             LayoutUnit freeSpace);
+             Optional<LayoutUnit> availableSpace,
+             Optional<LayoutUnit> freeSpace);
   void run();
   void reset();
 
@@ -100,7 +103,8 @@
   Vector<GridTrack>& tracks(GridTrackSizingDirection);
   const Vector<GridTrack>& tracks(GridTrackSizingDirection) const;
 
-  LayoutUnit& freeSpace(GridTrackSizingDirection);
+  Optional<LayoutUnit> freeSpace(GridTrackSizingDirection);
+  void setFreeSpace(GridTrackSizingDirection, Optional<LayoutUnit>);
 
 #if DCHECK_IS_ON()
   bool tracksAreWiderThanMinTrackBreadth() const;
@@ -164,7 +168,7 @@
   // method at thise level.
   void initializeTrackSizes();
   void resolveIntrinsicTrackSizes();
-  void stretchFlexibleTracks(LayoutUnit freeSpace);
+  void stretchFlexibleTracks(Optional<LayoutUnit> freeSpace);
 
   // State machine.
   void advanceNextState();
@@ -172,10 +176,10 @@
 
   // Data.
   bool m_needsSetup{true};
-  LayoutUnit m_availableSpace;
+  Optional<LayoutUnit> m_availableSpace;
 
-  LayoutUnit m_freeSpaceColumns;
-  LayoutUnit m_freeSpaceRows;
+  Optional<LayoutUnit> m_freeSpaceColumns;
+  Optional<LayoutUnit> m_freeSpaceRows;
 
   // We need to keep both alive in order to properly size grids with orthogonal
   // writing modes.
@@ -231,10 +235,12 @@
   LayoutUnit maxContentForChild(LayoutBox&) const;
   LayoutUnit minSizeForChild(LayoutBox&) const;
 
-  virtual void maximizeTracks(Vector<GridTrack>&, LayoutUnit& freeSpace) = 0;
-  virtual double findUsedFlexFraction(Vector<size_t>& flexibleSizedTracksIndex,
-                                      GridTrackSizingDirection,
-                                      LayoutUnit initialFreeSpace) const = 0;
+  virtual void maximizeTracks(Vector<GridTrack>&,
+                              Optional<LayoutUnit>& freeSpace) = 0;
+  virtual double findUsedFlexFraction(
+      Vector<size_t>& flexibleSizedTracksIndex,
+      GridTrackSizingDirection,
+      Optional<LayoutUnit> initialFreeSpace) const = 0;
   virtual bool recomputeUsedFlexFractionIfNeeded(
       Vector<size_t>& flexibleSizedTracksIndex,
       double& flexFraction,
@@ -268,6 +274,29 @@
                                LayoutUnit& availableLogicalSpace) const;
   const LayoutGrid* layoutGrid() const { return m_algorithm.m_layoutGrid; }
 
+  // Helper functions
+  static LayoutUnit computeMarginLogicalSizeForChild(
+      MarginDirection forDirection,
+      const LayoutGrid*,
+      const LayoutBox& child);
+  static bool hasOverrideContainingBlockContentSizeForChild(
+      const LayoutBox& child,
+      GridTrackSizingDirection);
+  static LayoutUnit overrideContainingBlockContentSizeForChild(
+      const LayoutBox& child,
+      GridTrackSizingDirection);
+  static bool shouldClearOverrideContainingBlockContentSizeForChild(
+      const LayoutBox& child,
+      GridTrackSizingDirection);
+  static void setOverrideContainingBlockContentSizeForChild(
+      LayoutBox& child,
+      GridTrackSizingDirection,
+      LayoutUnit size);
+  static GridTrackSizingDirection flowAwareDirectionForChild(
+      const LayoutGrid*,
+      const LayoutBox& child,
+      GridTrackSizingDirection);
+
   GridTrackSizingAlgorithm& m_algorithm;
 };
 }
diff --git a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp
index b033024..1648629 100644
--- a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp
@@ -164,8 +164,9 @@
   return maxContentFlexFraction;
 }
 
-static int synthesizedBaselineFromContentBox(const LayoutBox& box,
-                                             LineDirectionMode direction) {
+int LayoutFlexibleBox::synthesizedBaselineFromContentBox(
+    const LayoutBox& box,
+    LineDirectionMode direction) {
   if (direction == HorizontalLine) {
     return (box.size().height() - box.borderBottom() - box.paddingBottom() -
             box.verticalScrollbarWidth())
@@ -188,7 +189,8 @@
   return beforeMarginInLineDirection(direction) + baseline;
 }
 
-static const StyleContentAlignmentData& contentAlignmentNormalBehavior() {
+const StyleContentAlignmentData&
+LayoutFlexibleBox::contentAlignmentNormalBehavior() {
   // The justify-content property applies along the main axis, but since
   // flexing in the main axis is controlled by flex, stretch behaves as
   // flex-start (ignoring the specified fallback alignment, if any).
diff --git a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h
index 38f2c5f0..95ba53c 100644
--- a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h
+++ b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h
@@ -56,6 +56,11 @@
       bool firstLine,
       LineDirectionMode,
       LinePositionMode = PositionOnContainingLine) const override;
+
+  static const StyleContentAlignmentData& contentAlignmentNormalBehavior();
+  static int synthesizedBaselineFromContentBox(const LayoutBox&,
+                                               LineDirectionMode);
+
   int firstLineBoxBaseline() const override;
   int inlineBlockBaseline(LineDirectionMode) const override;
   IntSize originAdjustmentForScrollbars() const override;
diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
index fc49a6d..52e08f0d 100644
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
@@ -284,8 +284,8 @@
     // Once grid's indefinite height is resolved, we can compute the
     // available free space for Content Alignment.
     if (!cachedHasDefiniteLogicalHeight()) {
-      m_trackSizingAlgorithm.freeSpace(ForRows) =
-          logicalHeight() - trackBasedLogicalHeight;
+      m_trackSizingAlgorithm.setFreeSpace(
+          ForRows, logicalHeight() - trackBasedLogicalHeight);
     }
 
     // TODO (lajava): We need to compute baselines after step 2 so
@@ -436,7 +436,7 @@
     LayoutUnit& minIntrinsicSize,
     LayoutUnit& maxIntrinsicSize) const {
   algo.setup(direction, numTracks(direction, grid), IntrinsicSizeComputation,
-             LayoutUnit(), LayoutUnit());
+             WTF::nullopt, WTF::nullopt);
   algo.run();
 
   minIntrinsicSize = algo.minContentSize();
@@ -480,7 +480,7 @@
   return LayoutUnit();
 }
 
-static LayoutUnit overrideContainingBlockContentSizeForChild(
+LayoutUnit LayoutGrid::overrideContainingBlockContentSizeForChild(
     const LayoutBox& child,
     GridTrackSizingDirection direction) {
   return direction == ForColumns
@@ -1038,7 +1038,7 @@
   return tracks;
 }
 
-static const StyleContentAlignmentData& contentAlignmentNormalBehavior() {
+const StyleContentAlignmentData& LayoutGrid::contentAlignmentNormalBehavior() {
   static const StyleContentAlignmentData normalBehavior = {
       ContentPositionNormal, ContentDistributionStretch};
   return normalBehavior;
@@ -1046,8 +1046,8 @@
 
 void LayoutGrid::applyStretchAlignmentToTracksIfNeeded(
     GridTrackSizingDirection direction) {
-  LayoutUnit& availableSpace = m_trackSizingAlgorithm.freeSpace(direction);
-  if (availableSpace <= 0 ||
+  Optional<LayoutUnit> freeSpace = m_trackSizingAlgorithm.freeSpace(direction);
+  if (!freeSpace || freeSpace.value() <= 0 ||
       (direction == ForColumns &&
        styleRef().resolvedJustifyContentDistribution(
            contentAlignmentNormalBehavior()) != ContentDistributionStretch) ||
@@ -1071,14 +1071,13 @@
   if (numberOfAutoSizedTracks < 1)
     return;
 
-  LayoutUnit sizeToIncrease = availableSpace / numberOfAutoSizedTracks;
+  LayoutUnit sizeToIncrease = freeSpace.value() / numberOfAutoSizedTracks;
   for (const auto& trackIndex : autoSizedTracksIndex) {
     GridTrack* track = allTracks.data() + trackIndex;
     LayoutUnit baseSize = track->baseSize() + sizeToIncrease;
     track->setBaseSize(baseSize);
   }
-
-  availableSpace = LayoutUnit();
+  m_trackSizingAlgorithm.setFreeSpace(direction, LayoutUnit());
 }
 
 void LayoutGrid::layoutGridItems() {
@@ -1345,7 +1344,8 @@
   size_t numberOfLines = numberOfTracks + 1;
   size_t lastLine = numberOfLines - 1;
   ContentAlignmentData offset = computeContentPositionAndDistributionOffset(
-      direction, m_trackSizingAlgorithm.freeSpace(direction), numberOfTracks);
+      direction, m_trackSizingAlgorithm.freeSpace(direction).value(),
+      numberOfTracks);
   auto& positions = isRowAxis ? m_columnPositions : m_rowPositions;
   positions.resize(numberOfLines);
   auto borderAndPadding =
@@ -1599,8 +1599,8 @@
 
 // TODO(lajava): This logic is shared by LayoutFlexibleBox, so it might be
 // refactored somehow.
-static int synthesizedBaselineFromContentBox(const LayoutBox& box,
-                                             LineDirectionMode direction) {
+int LayoutGrid::synthesizedBaselineFromContentBox(const LayoutBox& box,
+                                                  LineDirectionMode direction) {
   if (direction == HorizontalLine) {
     return (box.size().height() - box.borderBottom() - box.paddingBottom() -
             box.horizontalScrollbarHeight())
@@ -1611,8 +1611,8 @@
       .toInt();
 }
 
-static int synthesizedBaselineFromBorderBox(const LayoutBox& box,
-                                            LineDirectionMode direction) {
+int LayoutGrid::synthesizedBaselineFromBorderBox(const LayoutBox& box,
+                                                 LineDirectionMode direction) {
   return (direction == HorizontalLine ? box.size().height()
                                       : box.size().width())
       .toInt();
diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.h b/third_party/WebKit/Source/core/layout/LayoutGrid.h
index 37f512e5..7eff71a8 100644
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.h
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.h
@@ -269,6 +269,15 @@
 
   size_t numTracks(GridTrackSizingDirection, const Grid&) const;
 
+  static LayoutUnit overrideContainingBlockContentSizeForChild(
+      const LayoutBox& child,
+      GridTrackSizingDirection);
+  static int synthesizedBaselineFromContentBox(const LayoutBox&,
+                                               LineDirectionMode);
+  static int synthesizedBaselineFromBorderBox(const LayoutBox&,
+                                              LineDirectionMode);
+  static const StyleContentAlignmentData& contentAlignmentNormalBehavior();
+
   typedef HashMap<unsigned,
                   std::unique_ptr<BaselineContext>,
                   DefaultHash<unsigned>::Hash,
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc b/third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc
index 123efd1..7eea9c5 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_floats_utils.cc
@@ -127,9 +127,19 @@
       toNGPhysicalBoxFragment(floating_object->fragment.get()));
 
   // Find a layout opportunity that will fit our float.
-  const NGLayoutOpportunity opportunity = FindLayoutOpportunityForFragment(
+  NGLayoutOpportunity opportunity = FindLayoutOpportunityForFragment(
       new_parent_space, float_fragment, floating_object);
-  DCHECK(!opportunity.IsEmpty()) << "Opportunity is empty but it shouldn't be";
+
+  // TODO(glebl): This should check for infinite opportunity instead.
+  if (opportunity.IsEmpty()) {
+    // Because of the implementation specific of the layout opportunity iterator
+    // an empty opportunity can mean 2 things:
+    // - search for layout opportunities is exhausted.
+    // - opportunity has an infinite size. That's because CS is infinite.
+    opportunity = NGLayoutOpportunity(
+        NGLogicalOffset(),
+        NGLogicalSize(float_fragment.InlineSize(), float_fragment.BlockSize()));
+  }
 
   // Calculate the float offset if needed.
   LayoutUnit float_offset;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.h b/third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.h
index cabc6106..7ed9543 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_opportunity_iterator.h
@@ -35,8 +35,9 @@
       const WTF::Optional<NGLogicalOffset>& opt_offset = WTF::nullopt,
       const WTF::Optional<NGLogicalOffset>& opt_leader_point = WTF::nullopt);
 
-  // Gets the next Layout Opportunity or nullptr if the search is exhausted.
+  // Gets the next Layout Opportunity or empty one if the search is exhausted.
   // TODO(chrome-layout-team): Refactor with using C++ <iterator> library.
+  // TODO(glebl): Refactor the iterator to return unique_ptr here.
   const NGLayoutOpportunity Next();
 
   // Offset that specifies the starting point to search layout opportunities.
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
index 15a360b..c363fef4 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
@@ -843,6 +843,18 @@
                                             reportingPolicy))
     return ResourceRequestBlockedReason::MixedContent;
 
+  if (url.whitespaceRemoved()) {
+    Deprecation::countDeprecation(
+        frame()->document(), UseCounter::CanRequestURLHTTPContainingNewline);
+    if (url.protocolIsInHTTPFamily()) {
+      if (RuntimeEnabledFeatures::restrictCanRequestURLCharacterSetEnabled())
+        return ResourceRequestBlockedReason::Other;
+    } else {
+      UseCounter::count(frame()->document(),
+                        UseCounter::CanRequestURLNonHTTPContainingNewline);
+    }
+  }
+
   // Let the client have the final say into whether or not the load should
   // proceed.
   DocumentLoader* documentLoader = masterDocumentLoader();
diff --git a/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp b/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
index 305eb1e..fc6caa2 100644
--- a/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
@@ -182,8 +182,8 @@
           SyntaxError, "The URL '" + urlString + "' is invalid.");
       return;
     }
-    if (!contentSecurityPolicy()->allowScriptFromSource(url, AtomicString(),
-                                                        NotParserInserted)) {
+    if (!contentSecurityPolicy()->allowScriptFromSource(
+            url, AtomicString(), IntegrityMetadataSet(), NotParserInserted)) {
       exceptionState.throwDOMException(
           NetworkError,
           "The script at '" + url.elidedString() + "' failed to load.");
diff --git a/third_party/WebKit/Source/devtools/BUILD.gn b/third_party/WebKit/Source/devtools/BUILD.gn
index 0f3a75e..14ff3a8 100644
--- a/third_party/WebKit/Source/devtools/BUILD.gn
+++ b/third_party/WebKit/Source/devtools/BUILD.gn
@@ -551,6 +551,7 @@
   "front_end/sources/ScriptFormatterEditorAction.js",
   "front_end/sources/serviceWorkersSidebar.css",
   "front_end/sources/SimpleHistoryManager.js",
+  "front_end/sources/SourceFormatter.js",
   "front_end/sources/SourceMapNamesResolver.js",
   "front_end/sources/SourcesNavigator.js",
   "front_end/sources/sourcesPanel.css",
diff --git a/third_party/WebKit/Source/devtools/front_end/accessibility/AccessibilityModel.js b/third_party/WebKit/Source/devtools/front_end/accessibility/AccessibilityModel.js
index 92dcc89..5fe56b5 100644
--- a/third_party/WebKit/Source/devtools/front_end/accessibility/AccessibilityModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/accessibility/AccessibilityModel.js
@@ -4,13 +4,12 @@
 /**
  * @unrestricted
  */
-Accessibility.AccessibilityNode = class extends SDK.SDKObject {
+Accessibility.AccessibilityNode = class {
   /**
    * @param {!Accessibility.AccessibilityModel} accessibilityModel
    * @param {!Protocol.Accessibility.AXNode} payload
    */
   constructor(accessibilityModel, payload) {
-    super(accessibilityModel.target());
     this._accessibilityModel = accessibilityModel;
     this._agent = accessibilityModel._agent;
 
@@ -19,7 +18,7 @@
     if (payload.backendDOMNodeId) {
       accessibilityModel._setAXNodeForBackendDOMNodeId(payload.backendDOMNodeId, this);
       this._backendDOMNodeId = payload.backendDOMNodeId;
-      this._deferredDOMNode = new SDK.DeferredDOMNode(this.target(), payload.backendDOMNodeId);
+      this._deferredDOMNode = new SDK.DeferredDOMNode(accessibilityModel.target(), payload.backendDOMNodeId);
     } else {
       this._backendDOMNodeId = null;
       this._deferredDOMNode = null;
@@ -38,6 +37,13 @@
   }
 
   /**
+   * @return {!Accessibility.AccessibilityModel}
+   */
+  accessibilityModel() {
+    return this._accessibilityModel;
+  }
+
+  /**
    * @return {boolean}
    */
   ignored() {
diff --git a/third_party/WebKit/Source/devtools/front_end/accessibility/AccessibilityNodeView.js b/third_party/WebKit/Source/devtools/front_end/accessibility/AccessibilityNodeView.js
index 9e8664c..0fea753 100644
--- a/third_party/WebKit/Source/devtools/front_end/accessibility/AccessibilityNodeView.js
+++ b/third_party/WebKit/Source/devtools/front_end/accessibility/AccessibilityNodeView.js
@@ -213,7 +213,8 @@
    * @param {number} index
    */
   appendRelatedNode(relatedNode, index) {
-    var deferredNode = new SDK.DeferredDOMNode(this._axNode.target(), relatedNode.backendDOMNodeId);
+    var deferredNode =
+        new SDK.DeferredDOMNode(this._axNode.accessibilityModel().target(), relatedNode.backendDOMNodeId);
     var nodeTreeElement = new Accessibility.AXRelatedNodeSourceTreeElement({deferredNode: deferredNode}, relatedNode);
     this.appendChild(nodeTreeElement);
   }
@@ -222,7 +223,8 @@
    * @param {!Protocol.Accessibility.AXRelatedNode} relatedNode
    */
   appendRelatedNodeInline(relatedNode) {
-    var deferredNode = new SDK.DeferredDOMNode(this._axNode.target(), relatedNode.backendDOMNodeId);
+    var deferredNode =
+        new SDK.DeferredDOMNode(this._axNode.accessibilityModel().target(), relatedNode.backendDOMNodeId);
     var linkedNode = new Accessibility.AXRelatedNodeElement({deferredNode: deferredNode}, relatedNode);
     this.listItemElement.appendChild(linkedNode.render());
   }
@@ -331,7 +333,8 @@
    * @param {string} idref
    */
   appendRelatedNodeWithIdref(relatedNode, index, idref) {
-    var deferredNode = new SDK.DeferredDOMNode(this._axNode.target(), relatedNode.backendDOMNodeId);
+    var deferredNode =
+        new SDK.DeferredDOMNode(this._axNode.accessibilityModel().target(), relatedNode.backendDOMNodeId);
     var nodeTreeElement =
         new Accessibility.AXRelatedNodeSourceTreeElement({deferredNode: deferredNode, idref: idref}, relatedNode);
     this.appendChild(nodeTreeElement);
diff --git a/third_party/WebKit/Source/devtools/front_end/audits/AuditController.js b/third_party/WebKit/Source/devtools/front_end/audits/AuditController.js
index ca17a15c..1771d4c 100644
--- a/third_party/WebKit/Source/devtools/front_end/audits/AuditController.js
+++ b/third_party/WebKit/Source/devtools/front_end/audits/AuditController.js
@@ -71,7 +71,8 @@
       resultCallback(mainResourceURL, results);
     }
 
-    var requests = NetworkLog.networkLog.requestsForTarget(target).slice();
+    var networkManager = target.model(SDK.NetworkManager);
+    var requests = networkManager ? NetworkLog.networkLog.requestsForManager(networkManager).slice() : [];
     var compositeProgress = new Common.CompositeProgress(this._progress);
     var subprogresses = [];
     for (var i = 0; i < categories.length; ++i)
diff --git a/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js b/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js
index 80b52d1..547cbaf 100644
--- a/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js
+++ b/third_party/WebKit/Source/devtools/front_end/bindings/NetworkProject.js
@@ -61,14 +61,14 @@
 /**
  * @unrestricted
  */
-Bindings.NetworkProject = class extends SDK.SDKObject {
+Bindings.NetworkProject = class {
   /**
    * @param {!SDK.Target} target
    * @param {!Workspace.Workspace} workspace
    * @param {?SDK.ResourceTreeModel} resourceTreeModel
    */
   constructor(target, workspace, resourceTreeModel) {
-    super(target);
+    this._target = target;
     this._workspace = workspace;
     /** @type {!Map<string, !Bindings.ContentProviderBasedProject>} */
     this._workspaceProjects = new Map();
@@ -171,7 +171,7 @@
    * @return {!Bindings.ContentProviderBasedProject}
    */
   _workspaceProject(frameId, isContentScripts) {
-    var projectId = Bindings.NetworkProject.projectId(this.target(), frameId, isContentScripts);
+    var projectId = Bindings.NetworkProject.projectId(this._target, frameId, isContentScripts);
     var projectType = isContentScripts ? Workspace.projectTypes.ContentScripts : Workspace.projectTypes.Network;
 
     var project = this._workspaceProjects.get(projectId);
@@ -180,7 +180,7 @@
 
     project = new Bindings.ContentProviderBasedProject(
         this._workspace, projectId, projectType, '', false /* isServiceProject */);
-    project[Bindings.NetworkProject._targetSymbol] = this.target();
+    project[Bindings.NetworkProject._targetSymbol] = this._target;
     project[Bindings.NetworkProject._frameSymbol] =
         frameId && this._resourceTreeModel ? this._resourceTreeModel.frameForId(frameId) : null;
     this._workspaceProjects.set(projectId, project);
@@ -217,7 +217,7 @@
    */
   _removeFileForURL(url, frameId, isContentScript) {
     var project =
-        this._workspaceProjects.get(Bindings.NetworkProject.projectId(this.target(), frameId, isContentScript));
+        this._workspaceProjects.get(Bindings.NetworkProject.projectId(this._target, frameId, isContentScript));
     if (!project)
       return;
     project.removeFile(url);
@@ -364,7 +364,7 @@
       return;
 
     // Never load document twice.
-    var projectId = Bindings.NetworkProject.projectId(this.target(), resource.frameId, false);
+    var projectId = Bindings.NetworkProject.projectId(this._target, resource.frameId, false);
     var project = this._workspaceProjects.get(projectId);
     if (project && project.uiSourceCodeForURL(resource.url))
       return;
@@ -410,7 +410,7 @@
   }
 
   _suspendStateChanged() {
-    if (this.target().targetManager().allTargetsSuspended())
+    if (this._target.targetManager().allTargetsSuspended())
       this._reset();
     else
       this._populate();
@@ -426,7 +426,7 @@
     var url = contentProvider.contentURL();
     var project = this._workspaceProject(frameId, isContentScript);
     var uiSourceCode = project.createUISourceCode(url, contentProvider.contentType());
-    uiSourceCode[Bindings.NetworkProject._targetSymbol] = this.target();
+    uiSourceCode[Bindings.NetworkProject._targetSymbol] = this._target;
     return uiSourceCode;
   }
 
@@ -443,7 +443,7 @@
   _dispose() {
     this._reset();
     Common.EventTarget.removeEventListeners(this._eventListeners);
-    delete this.target()[Bindings.NetworkProject._networkProjectSymbol];
+    delete this._target[Bindings.NetworkProject._networkProjectSymbol];
   }
 
   _reset() {
diff --git a/third_party/WebKit/Source/devtools/front_end/bindings/StylesSourceMapping.js b/third_party/WebKit/Source/devtools/front_end/bindings/StylesSourceMapping.js
index 0fd18fc..e3c34c6 100644
--- a/third_party/WebKit/Source/devtools/front_end/bindings/StylesSourceMapping.js
+++ b/third_party/WebKit/Source/devtools/front_end/bindings/StylesSourceMapping.js
@@ -145,8 +145,6 @@
    * @param {!Common.Event} event
    */
   _unbindAllUISourceCodes(event) {
-    if (event.data.target() !== this._cssModel.target())
-      return;
     for (var styleFile of this._styleFiles.values())
       styleFile.dispose();
     this._styleFiles.clear();
diff --git a/third_party/WebKit/Source/devtools/front_end/console_model/ConsoleModel.js b/third_party/WebKit/Source/devtools/front_end/console_model/ConsoleModel.js
index 4e64cf59..86d6747 100644
--- a/third_party/WebKit/Source/devtools/front_end/console_model/ConsoleModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/console_model/ConsoleModel.js
@@ -453,7 +453,8 @@
     this.scriptId = scriptId || null;
     this.workerId = workerId || null;
 
-    this.request = (target && requestId) ? NetworkLog.networkLog.requestForId(target, requestId) : null;
+    var networkManager = (target && requestId) ? target.model(SDK.NetworkManager) : null;
+    this.request = (networkManager && requestId) ? NetworkLog.networkLog.requestForId(networkManager, requestId) : null;
 
     if (this.request) {
       var initiator = this.request.initiator();
diff --git a/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionServer.js b/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionServer.js
index ab810bc7..5c945f0 100644
--- a/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionServer.js
+++ b/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionServer.js
@@ -932,7 +932,7 @@
     else if (options.scriptExecutionContext)
       contextSecurityOrigin = options.scriptExecutionContext;
 
-    var runtimeModel = frame.target().model(SDK.RuntimeModel);
+    var runtimeModel = frame.resourceTreeModel().target().model(SDK.RuntimeModel);
     var executionContexts = runtimeModel ? runtimeModel.executionContexts() : [];
     if (contextSecurityOrigin) {
       for (var i = 0; i < executionContexts.length; ++i) {
diff --git a/third_party/WebKit/Source/devtools/front_end/main/Main.js b/third_party/WebKit/Source/devtools/front_end/main/Main.js
index d7d545e..d8aa132 100644
--- a/third_party/WebKit/Source/devtools/front_end/main/Main.js
+++ b/third_party/WebKit/Source/devtools/front_end/main/Main.js
@@ -105,7 +105,6 @@
     Runtime.experiments.register('objectPreviews', 'Object previews', true);
     Runtime.experiments.register('persistence2', 'Persistence 2.0');
     Runtime.experiments.register('persistenceValidation', 'Validate persistence bindings');
-    Runtime.experiments.register('requestBlocking', 'Request blocking', true);
     Runtime.experiments.register('timelineShowAllEvents', 'Show all events on Timeline', true);
     Runtime.experiments.register('timelineShowAllProcesses', 'Show all processes on Timeline', true);
     Runtime.experiments.register('timelinePaintTimingMarkers', 'Show paint timing markers on Timeline', true);
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js
index 57b80e79..aafd190d 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js
@@ -724,8 +724,10 @@
   }
 
   dispose() {
-    if (this._linkifiedInitiatorAnchor)
-      this.parentView().linkifier.disposeAnchor(this._request.target(), this._linkifiedInitiatorAnchor);
+    if (this._linkifiedInitiatorAnchor) {
+      this.parentView().linkifier.disposeAnchor(
+          this._request.networkManager().target(), this._linkifiedInitiatorAnchor);
+    }
   }
 
   /**
@@ -783,7 +785,7 @@
     iconElement.classList.add(this._request.resourceType().name());
 
     cell.appendChild(iconElement);
-    cell.createTextChild(this._request.target().decorateLabel(this._request.name()));
+    cell.createTextChild(this._request.networkManager().target().decorateLabel(this._request.name()));
     this._appendSubtitle(cell, this._request.path());
     cell.title = this._request.url();
   }
@@ -875,7 +877,8 @@
       case SDK.NetworkRequest.InitiatorType.Script:
         if (!this._linkifiedInitiatorAnchor) {
           this._linkifiedInitiatorAnchor = this.parentView().linkifier.linkifyScriptLocation(
-              request.target(), initiator.scriptId, initiator.url, initiator.lineNumber, initiator.columnNumber);
+              request.networkManager().target(), initiator.scriptId, initiator.url, initiator.lineNumber,
+              initiator.columnNumber);
           this._linkifiedInitiatorAnchor.title = '';
         }
         cell.appendChild(this._linkifiedInitiatorAnchor);
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
index d55d1852..5b19f71c6 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
@@ -29,7 +29,7 @@
  */
 /**
  * @implements {UI.Searchable}
- * @implements {SDK.TargetManager.Observer}
+ * @implements {SDK.SDKModelObserver<!SDK.NetworkManager>}
  * @unrestricted
  */
 Network.NetworkLogView = class extends UI.VBox {
@@ -110,7 +110,7 @@
     Common.moduleSetting('networkColorCodeResourceTypes')
         .addChangeListener(this._invalidateAllItems.bind(this, false), this);
 
-    SDK.targetManager.observeTargets(this);
+    SDK.targetManager.observeModels(SDK.NetworkManager, this);
     SDK.targetManager.addModelListener(
         SDK.NetworkManager, SDK.NetworkManager.Events.RequestStarted, this._onRequestStarted, this);
     SDK.targetManager.addModelListener(
@@ -389,11 +389,11 @@
 
   /**
    * @override
-   * @param {!SDK.Target} target
+   * @param {!SDK.NetworkManager} networkManager
    */
-  targetAdded(target) {
-    if (!target.parentTarget()) {
-      var resourceTreeModel = target.model(SDK.ResourceTreeModel);
+  modelAdded(networkManager) {
+    if (!networkManager.target().parentTarget()) {
+      var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel);
       if (resourceTreeModel) {
         resourceTreeModel.addEventListener(
             SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
@@ -402,16 +402,16 @@
             SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this);
       }
     }
-    NetworkLog.networkLog.requestsForTarget(target).forEach(this._appendRequest.bind(this));
+    NetworkLog.networkLog.requestsForManager(networkManager).forEach(this._appendRequest.bind(this));
   }
 
   /**
    * @override
-   * @param {!SDK.Target} target
+   * @param {!SDK.NetworkManager} networkManager
    */
-  targetRemoved(target) {
-    if (!target.parentTarget()) {
-      var resourceTreeModel = target.model(SDK.ResourceTreeModel);
+  modelRemoved(networkManager) {
+    if (!networkManager.target().parentTarget()) {
+      var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel);
       if (resourceTreeModel) {
         resourceTreeModel.removeEventListener(
             SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
@@ -605,7 +605,8 @@
         selectedRequestsNumber++;
         selectedTransferSize += requestTransferSize;
       }
-      if (request.url() === request.target().inspectedURL() && request.resourceType() === Common.resourceTypes.Document)
+      if (request.url() === request.networkManager().target().inspectedURL() &&
+          request.resourceType() === Common.resourceTypes.Document)
         baseTime = request.startTime;
       if (request.endTime > maxTime)
         maxTime = request.endTime;
@@ -1038,7 +1039,8 @@
 
     // Pick provisional load requests.
     var requestsToPick = [];
-    var requests = NetworkLog.networkLog.requestsForTarget(frame.target());
+    var networkManager = frame.resourceTreeModel().target().model(SDK.NetworkManager);
+    var requests = networkManager ? NetworkLog.networkLog.requestsForManager(networkManager) : [];
     for (var i = 0; i < requests.length; ++i) {
       var request = requests[i];
       if (request.loaderId === loaderId)
@@ -1118,7 +1120,7 @@
     contextMenu.appendItem(Common.UIString.capitalize('Clear ^browser ^cache'), this._clearBrowserCache.bind(this));
     contextMenu.appendItem(Common.UIString.capitalize('Clear ^browser ^cookies'), this._clearBrowserCookies.bind(this));
 
-    if (request && Runtime.experiments.isEnabled('requestBlocking')) {  // Disabled until ready.
+    if (request) {
       contextMenu.appendSeparator();
 
       const maxBlockedURLLength = 20;
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js
index 6508efe8..e206ff06 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js
@@ -585,7 +585,7 @@
       box: anchor.boxInWindow(),
       show: popover => {
         var content = Components.DOMPresentationUtils.buildStackTracePreviewContents(
-            anchor.request.target(), this._popupLinkifier, initiator.stack);
+            anchor.request.networkManager().target(), this._popupLinkifier, initiator.stack);
         popover.contentElement.appendChild(content);
         return Promise.resolve(true);
       },
diff --git a/third_party/WebKit/Source/devtools/front_end/network/module.json b/third_party/WebKit/Source/devtools/front_end/network/module.json
index dcf1268..d8b62a36 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/network/module.json
@@ -81,8 +81,7 @@
             "title": "Request blocking",
             "persistence": "closeable",
             "order": 60,
-            "className": "Network.BlockedURLsPane",
-            "experiment": "requestBlocking"
+            "className": "Network.BlockedURLsPane"
         },
         {
             "type": "view",
diff --git a/third_party/WebKit/Source/devtools/front_end/network_group_lookup/NetworkProductGroupLookup.js b/third_party/WebKit/Source/devtools/front_end/network_group_lookup/NetworkProductGroupLookup.js
index 95edcda..356b4a1 100644
--- a/third_party/WebKit/Source/devtools/front_end/network_group_lookup/NetworkProductGroupLookup.js
+++ b/third_party/WebKit/Source/devtools/front_end/network_group_lookup/NetworkProductGroupLookup.js
@@ -61,7 +61,7 @@
    * @return {?*}
    */
   groupForRequest(request) {
-    var resourceTreeModel = request.target().model(SDK.ResourceTreeModel);
+    var resourceTreeModel = request.networkManager().target().model(SDK.ResourceTreeModel);
     if (!resourceTreeModel)
       return null;
     var frame = resourceTreeModel.frameForId(request.frameId);
diff --git a/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js b/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js
index fa2663b..638f68d2 100644
--- a/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js
+++ b/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js
@@ -35,9 +35,9 @@
   constructor() {
     /** @type {!Array<!SDK.NetworkRequest>} */
     this._requests = [];
-    /** @type {!Map<!SDK.Target, !Map<string, !SDK.NetworkRequest>>} */
-    this._requestsByTargetAndId = new Map();
-    /** @type {!Map<!SDK.Target, !NetworkLog.PageLoad>} */
+    /** @type {!Map<!SDK.NetworkManager, !Map<string, !SDK.NetworkRequest>>} */
+    this._requestsByManagerAndId = new Map();
+    /** @type {!Map<!SDK.NetworkManager, !NetworkLog.PageLoad>} */
     this._currentPageLoad = new Map();
     SDK.targetManager.observeModels(SDK.NetworkManager, this);
   }
@@ -63,7 +63,7 @@
     }
 
     networkManager[NetworkLog.NetworkLog._events] = eventListeners;
-    this._requestsByTargetAndId.set(networkManager.target(), new Map());
+    this._requestsByManagerAndId.set(networkManager, new Map());
   }
 
   /**
@@ -71,7 +71,7 @@
    * @param {!SDK.NetworkManager} networkManager
    */
   modelRemoved(networkManager) {
-    this._requestsByTargetAndId.delete(networkManager.target());
+    this._requestsByManagerAndId.delete(networkManager);
     Common.EventTarget.removeEventListeners(networkManager[NetworkLog.NetworkLog._events]);
   }
 
@@ -91,21 +91,21 @@
   }
 
   /**
-   * @param {!SDK.Target} target
+   * @param {!SDK.NetworkManager} networkManager
    * @return {!Array<!SDK.NetworkRequest>}
    */
-  requestsForTarget(target) {
-    var map = this._requestsByTargetAndId.get(target);
+  requestsForManager(networkManager) {
+    var map = this._requestsByManagerAndId.get(networkManager);
     return map ? Array.from(map.values()) : [];
   }
 
   /**
+   * @param {!SDK.NetworkManager} networkManager
    * @param {string} url
-   * @param {!SDK.Target} target
    * @return {?SDK.NetworkRequest}
    */
-  _requestForURLInTarget(url, target) {
-    var map = this._requestsByTargetAndId.get(target);
+  _requestByManagerAndURL(networkManager, url) {
+    var map = this._requestsByManagerAndId.get(networkManager);
     if (!map)
       return null;
     for (var request of map.values()) {
@@ -182,7 +182,7 @@
   initiatorGraphForRequest(request) {
     /** @type {!Set<!SDK.NetworkRequest>} */
     var initiated = new Set();
-    var map = this._requestsByTargetAndId.get(request.target());
+    var map = this._requestsByManagerAndId.get(request.networkManager());
     if (map) {
       for (var otherRequest of map.values()) {
         if (this._initiatorChain(otherRequest).has(request))
@@ -223,7 +223,8 @@
     if (request[NetworkLog.NetworkLog._initiatorDataSymbol].request !== undefined)
       return request[NetworkLog.NetworkLog._initiatorDataSymbol].request;
     var url = this.initiatorInfoForRequest(request).url;
-    request[NetworkLog.NetworkLog._initiatorDataSymbol].request = this._requestForURLInTarget(url, request.target());
+    request[NetworkLog.NetworkLog._initiatorDataSymbol].request =
+        this._requestByManagerAndURL(request.networkManager(), url);
     return request[NetworkLog.NetworkLog._initiatorDataSymbol].request;
   }
 
@@ -240,12 +241,15 @@
    */
   _onMainFrameNavigated(event) {
     var mainFrame = /** @type {!SDK.ResourceTreeFrame} */ (event.data);
-    var target = mainFrame.target();
-    this._currentPageLoad.delete(target);
-    var oldRequests = this.requestsForTarget(target);
-    this._requests = this._requests.filter(request => request.target() !== target);
+    var networkManager = mainFrame.resourceTreeModel().target().model(SDK.NetworkManager);
+    if (!networkManager)
+      return;
+
+    this._currentPageLoad.delete(networkManager);
+    var oldRequests = this.requestsForManager(networkManager);
+    this._requests = this._requests.filter(request => request.networkManager() !== networkManager);
     var idMap = new Map();
-    this._requestsByTargetAndId.set(target, idMap);
+    this._requestsByManagerAndId.set(networkManager, idMap);
 
     // Preserve requests from the new session.
     var currentPageLoad = null;
@@ -260,7 +264,7 @@
       }
     }
     if (currentPageLoad)
-      this._currentPageLoad.set(target, currentPageLoad);
+      this._currentPageLoad.set(networkManager, currentPageLoad);
   }
 
   /**
@@ -269,8 +273,8 @@
   _onRequestStarted(event) {
     var request = /** @type {!SDK.NetworkRequest} */ (event.data);
     this._requests.push(request);
-    this._requestsByTargetAndId.get(request.target()).set(request.requestId(), request);
-    request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoad.get(request.target());
+    this._requestsByManagerAndId.get(request.networkManager()).set(request.requestId(), request);
+    request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoad.get(request.networkManager());
   }
 
   /**
@@ -286,7 +290,8 @@
    * @param {!Common.Event} event
    */
   _onDOMContentLoaded(resourceTreeModel, event) {
-    var pageLoad = this._currentPageLoad.get(resourceTreeModel.target());
+    var networkManager = resourceTreeModel.target().model(SDK.NetworkManager);
+    var pageLoad = networkManager ? this._currentPageLoad.get(networkManager) : null;
     if (pageLoad)
       pageLoad.contentLoadTime = /** @type {number} */ (event.data);
   }
@@ -295,18 +300,19 @@
    * @param {!Common.Event} event
    */
   _onLoad(event) {
-    var pageLoad = this._currentPageLoad.get(event.data.resourceTreeModel.target());
+    var networkManager = event.data.resourceTreeModel.target().model(SDK.NetworkManager);
+    var pageLoad = networkManager ? this._currentPageLoad.get(networkManager) : null;
     if (pageLoad)
       pageLoad.loadTime = /** @type {number} */ (event.data.loadTime);
   }
 
   /**
-   * @param {!SDK.Target} target
+   * @param {!SDK.NetworkManager} networkManager
    * @param {!Protocol.Network.RequestId} requestId
    * @return {?SDK.NetworkRequest}
    */
-  requestForId(target, requestId) {
-    var map = this._requestsByTargetAndId.get(target);
+  requestForId(networkManager, requestId) {
+    var map = this._requestsByManagerAndId.get(networkManager);
     return map ? (map.get(requestId) || null) : null;
   }
 };
diff --git a/third_party/WebKit/Source/devtools/front_end/resources/ApplicationPanelSidebar.js b/third_party/WebKit/Source/devtools/front_end/resources/ApplicationPanelSidebar.js
index 2c738b0..c68aa70 100644
--- a/third_party/WebKit/Source/devtools/front_end/resources/ApplicationPanelSidebar.js
+++ b/third_party/WebKit/Source/devtools/front_end/resources/ApplicationPanelSidebar.js
@@ -1511,7 +1511,7 @@
    */
   constructor(storagePanel, frame, cookieDomain) {
     super(storagePanel, cookieDomain ? cookieDomain : Common.UIString('Local Files'), false);
-    this._target = frame.target();
+    this._target = frame.resourceTreeModel().target();
     this._cookieDomain = cookieDomain;
     var icon = UI.Icon.create('mediumicon-cookie', 'resource-tree-item');
     this.setLeadingIcons([icon]);
diff --git a/third_party/WebKit/Source/devtools/front_end/resources/ResourcesSection.js b/third_party/WebKit/Source/devtools/front_end/resources/ResourcesSection.js
index 43ecf0d8..de9dee3 100644
--- a/third_party/WebKit/Source/devtools/front_end/resources/ResourcesSection.js
+++ b/third_party/WebKit/Source/devtools/front_end/resources/ResourcesSection.js
@@ -36,7 +36,7 @@
     var parentFrame = frame.parentFrame;
     if (parentFrame)
       return parentFrame;
-    var parentTarget = frame.target().parentTarget();
+    var parentTarget = frame.resourceTreeModel().target().parentTarget();
     if (!parentTarget)
       return null;
     return parentTarget.model(SDK.ResourceTreeModel).mainFrame;
@@ -164,9 +164,8 @@
   set hovered(hovered) {
     if (hovered) {
       this.listItemElement.classList.add('hovered');
-      var domModel = this._frame.target().model(SDK.DOMModel);
-      if (domModel)
-        domModel.highlightFrame(this._frameId);
+      var domModel = this._frame.resourceTreeModel().domModel();
+      domModel.highlightFrame(this._frameId);
     } else {
       this.listItemElement.classList.remove('hovered');
       SDK.DOMModel.hideDOMNodeHighlight();
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js
index 046cb79..ad4ada9e 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkManager.js
@@ -458,8 +458,7 @@
    * @param {!Protocol.Network.Initiator=} initiator
    */
   webSocketCreated(requestId, requestURL, initiator) {
-    var networkRequest =
-        new SDK.NetworkRequest(this._manager.target(), requestId, requestURL, '', '', '', initiator || null);
+    var networkRequest = new SDK.NetworkRequest(this._manager, requestId, requestURL, '', '', '', initiator || null);
     networkRequest.setResourceType(Common.resourceTypes.WebSocket);
     this._startNetworkRequest(networkRequest);
   }
@@ -647,7 +646,7 @@
    * @param {?Protocol.Network.Initiator} initiator
    */
   _createNetworkRequest(requestId, frameId, loaderId, url, documentURL, initiator) {
-    return new SDK.NetworkRequest(this._manager.target(), requestId, url, documentURL, frameId, loaderId, initiator);
+    return new SDK.NetworkRequest(this._manager, requestId, url, documentURL, frameId, loaderId, initiator);
   }
 };
 
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkRequest.js b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkRequest.js
index 45d11b2..4750c08 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkRequest.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkRequest.js
@@ -31,20 +31,20 @@
  * @implements {Common.ContentProvider}
  * @unrestricted
  */
-SDK.NetworkRequest = class extends SDK.SDKObject {
+SDK.NetworkRequest = class extends Common.Object {
   /**
+   * @param {!SDK.NetworkManager} networkManager
    * @param {!Protocol.Network.RequestId} requestId
-   * @param {!SDK.Target} target
    * @param {string} url
    * @param {string} documentURL
    * @param {!Protocol.Page.FrameId} frameId
    * @param {!Protocol.Network.LoaderId} loaderId
    * @param {?Protocol.Network.Initiator} initiator
    */
-  constructor(target, requestId, url, documentURL, frameId, loaderId, initiator) {
-    super(target);
+  constructor(networkManager, requestId, url, documentURL, frameId, loaderId, initiator) {
+    super();
 
-    this._networkManager = /** @type {!SDK.NetworkManager} */ (target.model(SDK.NetworkManager));
+    this._networkManager = networkManager;
     this._requestId = requestId;
     this.setUrl(url);
     this._documentURL = documentURL;
@@ -531,7 +531,7 @@
     } else {
       this._path = this._parsedURL.host + this._parsedURL.folderPathComponents;
 
-      var inspectedURL = this.target().inspectedURL().asParsedURL();
+      var inspectedURL = this._networkManager.target().inspectedURL().asParsedURL();
       this._path = this._path.trimURL(inspectedURL ? inspectedURL.host : '');
       if (this._parsedURL.lastPathComponent || this._parsedURL.queryParams) {
         this._name =
@@ -1034,7 +1034,7 @@
       this._pendingContentCallbacks.length = 0;
       delete this._contentRequested;
     }
-    this.target().networkAgent().getResponseBody(this._requestId, onResourceContent.bind(this));
+    this._networkManager.target().networkAgent().getResponseBody(this._requestId, onResourceContent.bind(this));
   }
 
   /**
@@ -1109,7 +1109,7 @@
   }
 
   replayXHR() {
-    this.target().networkAgent().replayXHR(this._requestId);
+    this._networkManager.target().networkAgent().replayXHR(this._requestId);
   }
 
   /**
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/Resource.js b/third_party/WebKit/Source/devtools/front_end/sdk/Resource.js
index 9c55e71..91e50c8c5 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/Resource.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/Resource.js
@@ -29,9 +29,9 @@
  * @implements {Common.ContentProvider}
  * @unrestricted
  */
-SDK.Resource = class extends SDK.SDKObject {
+SDK.Resource = class {
   /**
-   * @param {!SDK.Target} target
+   * @param {!SDK.ResourceTreeModel} resourceTreeModel
    * @param {?SDK.NetworkRequest} request
    * @param {string} url
    * @param {string} documentURL
@@ -42,8 +42,9 @@
    * @param {?Date} lastModified
    * @param {?number} contentSize
    */
-  constructor(target, request, url, documentURL, frameId, loaderId, type, mimeType, lastModified, contentSize) {
-    super(target);
+  constructor(
+      resourceTreeModel, request, url, documentURL, frameId, loaderId, type, mimeType, lastModified, contentSize) {
+    this._resourceTreeModel = resourceTreeModel;
     this._request = request;
     this.url = url;
     this._documentURL = documentURL;
@@ -223,7 +224,7 @@
     }
 
     if (this.frameId) {
-      this.target().pageAgent().searchInResource(
+      this._resourceTreeModel.target().pageAgent().searchInResource(
           this.frameId, this.url, query, caseSensitive, isRegex, callbackWrapper);
     } else {
       callback([]);
@@ -311,7 +312,8 @@
       contentLoaded.call(this, null, content, this.request.contentEncoded);
     }
 
-    this.target().pageAgent().getResourceContent(this.frameId, this.url, resourceContentLoaded.bind(this));
+    this._resourceTreeModel.target().pageAgent().getResourceContent(
+        this.frameId, this.url, resourceContentLoaded.bind(this));
   }
 
   /**
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/ResourceTreeModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/ResourceTreeModel.js
index fcaa246..d49669a 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/ResourceTreeModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/ResourceTreeModel.js
@@ -93,6 +93,13 @@
     }
   }
 
+  /**
+   * @return {!SDK.DOMModel}
+   */
+  domModel() {
+    return /** @type {!SDK.DOMModel} */ (this.target().model(SDK.DOMModel));
+  }
+
   _fetchResourceTree() {
     /** @type {!Map<string, !SDK.ResourceTreeFrame>} */
     this._frames = new Map();
@@ -261,8 +268,8 @@
       return;
 
     var resource = new SDK.Resource(
-        this.target(), null, url, frame.url, frameId, event.data.loaderId,
-        Common.resourceTypes[event.data.resourceType], event.data.mimeType, event.data.lastModified, null);
+        this, null, url, frame.url, frameId, event.data.loaderId, Common.resourceTypes[event.data.resourceType],
+        event.data.mimeType, event.data.lastModified, null);
     frame.addResource(resource);
   }
 
@@ -337,7 +344,7 @@
   _createResourceFromFramePayload(frame, url, type, mimeType, lastModifiedTime, contentSize) {
     var lastModified = typeof lastModifiedTime === 'number' ? new Date(lastModifiedTime * 1000) : null;
     return new SDK.Resource(
-        this.target(), null, url, frame.url, frame.id, frame.loaderId, type, mimeType, lastModified, contentSize);
+        this, null, url, frame.url, frame.id, frame.loaderId, type, mimeType, lastModified, contentSize);
   }
 
   suspendReload() {
@@ -514,10 +521,10 @@
   }
 
   /**
-   * @return {!SDK.Target}
+   * @return {!SDK.ResourceTreeModel}
    */
-  target() {
-    return this._model.target();
+  resourceTreeModel() {
+    return this._model;
   }
 
   /**
@@ -650,7 +657,7 @@
       return;
     }
     resource = new SDK.Resource(
-        this.target(), request, request.url(), request.documentURL, request.frameId, request.loaderId,
+        this._model, request, request.url(), request.documentURL, request.frameId, request.loaderId,
         request.resourceType(), request.mimeType, null, null);
     this._resourcesMap[resource.url] = resource;
     this._model.dispatchEventToListeners(SDK.ResourceTreeModel.Events.ResourceAdded, resource);
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/SourceMapManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/SourceMapManager.js
index 5a29b7e1..c41b50d 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/SourceMapManager.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/SourceMapManager.js
@@ -5,13 +5,14 @@
 /**
  * @template T
  */
-SDK.SourceMapManager = class extends SDK.SDKObject {
+SDK.SourceMapManager = class extends Common.Object {
   /**
    * @param {!SDK.Target} target
    */
   constructor(target) {
-    super(target);
+    super();
 
+    this._target = target;
     this._isEnabled = true;
 
     /** @type {!Map<!T, string>} */
@@ -51,7 +52,7 @@
    * @param {!Common.Event} event
    */
   _inspectedURLChanged(event) {
-    if (event.data !== this.target())
+    if (event.data !== this._target)
       return;
 
     var clients = Array.from(this._resolvedSourceMapURL.keys());
@@ -105,7 +106,7 @@
   _resolveRelativeURLs(sourceURL, sourceMapURL) {
     // |sourceURL| can be a random string, but is generally an absolute path.
     // Complete it to inspected page url for relative links.
-    var resolvedSourceURL = Common.ParsedURL.completeURL(this.target().inspectedURL(), sourceURL);
+    var resolvedSourceURL = Common.ParsedURL.completeURL(this._target.inspectedURL(), sourceURL);
     var resolvedSourceMapURL = resolvedSourceURL ? Common.ParsedURL.completeURL(resolvedSourceURL, sourceMapURL) : null;
     return {sourceURL: resolvedSourceURL, sourceMapURL: resolvedSourceMapURL};
   }
@@ -157,7 +158,7 @@
       if (!factoryExtension)
         return Promise.resolve(/** @type {?SDK.SourceMap} */ (sourceMap));
       return factoryExtension.instance()
-          .then(factory => factory.editableSourceMap(this.target(), sourceMap))
+          .then(factory => factory.editableSourceMap(this._target, sourceMap))
           .then(map => map || sourceMap)
           .catchException(/** @type {?SDK.SourceMap} */ (null));
     }
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/Target.js b/third_party/WebKit/Source/devtools/front_end/sdk/Target.js
index b29aa14..0865f0e 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/Target.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/Target.js
@@ -209,16 +209,17 @@
   ScreenCapture: 1 << 6,
   Tracing: 1 << 7,
   TouchEmulation: 1 << 8,
+  Security: 1 << 9,
 
   None: 0,
 
-  AllForTests: (1 << 9) - 1
+  AllForTests: (1 << 10) - 1
 };
 
 /**
  * @unrestricted
  */
-SDK.SDKObject = class extends Common.Object {
+SDK.SDKModel = class extends Common.Object {
   /**
    * @param {!SDK.Target} target
    */
@@ -233,18 +234,6 @@
   target() {
     return this._target;
   }
-};
-
-/**
- * @unrestricted
- */
-SDK.SDKModel = class extends SDK.SDKObject {
-  /**
-   * @param {!SDK.Target} target
-   */
-  constructor(target) {
-    super(target);
-  }
 
   /**
    * @return {!Promise}
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js b/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
index 774008ff..9449346 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/TargetManager.js
@@ -333,7 +333,8 @@
 
     var capabilities = SDK.Target.Capability.Browser | SDK.Target.Capability.DOM | SDK.Target.Capability.JS |
         SDK.Target.Capability.Log | SDK.Target.Capability.Network | SDK.Target.Capability.Target |
-        SDK.Target.Capability.ScreenCapture | SDK.Target.Capability.Tracing | SDK.Target.Capability.TouchEmulation;
+        SDK.Target.Capability.ScreenCapture | SDK.Target.Capability.Tracing | SDK.Target.Capability.TouchEmulation |
+        SDK.Target.Capability.Security;
     if (Runtime.queryParam('isSharedWorker')) {
       capabilities = SDK.Target.Capability.Browser | SDK.Target.Capability.Log | SDK.Target.Capability.Network |
           SDK.Target.Capability.Target;
diff --git a/third_party/WebKit/Source/devtools/front_end/security/SecurityModel.js b/third_party/WebKit/Source/devtools/front_end/security/SecurityModel.js
index 563c8a4c..411c70d 100644
--- a/third_party/WebKit/Source/devtools/front_end/security/SecurityModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/security/SecurityModel.js
@@ -17,6 +17,20 @@
   }
 
   /**
+   * @return {!SDK.ResourceTreeModel}
+   */
+  resourceTreeModel() {
+    return /** @type {!SDK.ResourceTreeModel} */ (this.target().model(SDK.ResourceTreeModel));
+  }
+
+  /**
+   * @return {!SDK.NetworkManager}
+   */
+  networkManager() {
+    return /** @type {!SDK.NetworkManager} */ (this.target().model(SDK.NetworkManager));
+  }
+
+  /**
    * @param {!Protocol.Security.SecurityState} a
    * @param {!Protocol.Security.SecurityState} b
    * @return {number}
@@ -50,7 +64,7 @@
   }
 };
 
-SDK.SDKModel.register(Security.SecurityModel, SDK.Target.Capability.None, false);
+SDK.SDKModel.register(Security.SecurityModel, SDK.Target.Capability.Security, false);
 
 /** @enum {symbol} */
 Security.SecurityModel.Events = {
diff --git a/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js b/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
index 2babce0..b0dfa6d 100644
--- a/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
+++ b/third_party/WebKit/Source/devtools/front_end/security/SecurityPanel.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 /**
- * @implements {SDK.TargetManager.Observer}
+ * @implements {SDK.SDKModelObserver<!Security.SecurityModel>}
  * @unrestricted
  */
 Security.SecurityPanel = class extends UI.PanelWithSidebar {
@@ -26,9 +26,7 @@
     /** @type {!Map<!Network.NetworkLogView.MixedContentFilterValues, number>} */
     this._filterRequestCounts = new Map();
 
-    /** @type {!Map<!SDK.Target, !Array<!Common.EventTarget.EventDescriptor>>}*/
-    this._eventListeners = new Map();
-    SDK.targetManager.observeTargets(this, SDK.Target.Capability.Network);
+    SDK.targetManager.observeModels(Security.SecurityModel, this);
   }
 
   /**
@@ -265,7 +263,7 @@
   }
 
   showCertificateViewer() {
-    this._target.model(Security.SecurityModel).showCertificateViewer();
+    this._securityModel.showCertificateViewer();
   }
 
   /**
@@ -279,58 +277,42 @@
 
   /**
    * @override
-   * @param {!SDK.Target} target
+   * @param {!Security.SecurityModel} securityModel
    */
-  targetAdded(target) {
-    if (this._target)
+  modelAdded(securityModel) {
+    if (this._securityModel)
       return;
 
-    var listeners = [];
-    var resourceTreeModel = target.model(SDK.ResourceTreeModel);
-    if (resourceTreeModel) {
-      listeners = listeners.concat([
-        resourceTreeModel.addEventListener(
-            SDK.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavigated, this),
-        resourceTreeModel.addEventListener(
-            SDK.ResourceTreeModel.Events.InterstitialShown, this._onInterstitialShown, this),
-        resourceTreeModel.addEventListener(
-            SDK.ResourceTreeModel.Events.InterstitialHidden, this._onInterstitialHidden, this),
-      ]);
+    this._securityModel = securityModel;
+    var resourceTreeModel = securityModel.resourceTreeModel();
+    var networkManager = securityModel.networkManager();
+    this._eventListeners = [
+      securityModel.addEventListener(
+          Security.SecurityModel.Events.SecurityStateChanged, this._onSecurityStateChanged, this),
+      resourceTreeModel.addEventListener(
+          SDK.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavigated, this),
+      resourceTreeModel.addEventListener(
+          SDK.ResourceTreeModel.Events.InterstitialShown, this._onInterstitialShown, this),
+      resourceTreeModel.addEventListener(
+          SDK.ResourceTreeModel.Events.InterstitialHidden, this._onInterstitialHidden, this),
+      networkManager.addEventListener(SDK.NetworkManager.Events.ResponseReceived, this._onResponseReceived, this),
+      networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished, this._onRequestFinished, this),
+    ];
 
-      if (resourceTreeModel.isInterstitialShowing())
-        this._onInterstitialShown();
-    }
-
-    var networkManager = target.model(SDK.NetworkManager);
-    if (networkManager) {
-      listeners = listeners.concat([
-        networkManager.addEventListener(SDK.NetworkManager.Events.ResponseReceived, this._onResponseReceived, this),
-        networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished, this._onRequestFinished, this),
-      ]);
-    }
-
-    var securityModel = target.model(Security.SecurityModel);
-    if (securityModel) {
-      listeners = listeners.concat([securityModel.addEventListener(
-          Security.SecurityModel.Events.SecurityStateChanged, this._onSecurityStateChanged, this)]);
-    }
-
-    this._target = target;
-    this._eventListeners.set(target, listeners);
+    if (resourceTreeModel.isInterstitialShowing())
+      this._onInterstitialShown();
   }
 
   /**
    * @override
-   * @param {!SDK.Target} target
+   * @param {!Security.SecurityModel} securityModel
    */
-  targetRemoved(target) {
-    if (this._target !== target)
+  modelRemoved(securityModel) {
+    if (this._securityModel !== securityModel)
       return;
 
-    delete this._target;
-
-    Common.EventTarget.removeEventListeners(this._eventListeners.get(target));
-    this._eventListeners.delete(target);
+    delete this._securityModel;
+    Common.EventTarget.removeEventListeners(this._eventListeners);
   }
 
   /**
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js b/third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
index 87f3301..694d370 100644
--- a/third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
+++ b/third_party/WebKit/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
@@ -3,117 +3,13 @@
 // found in the LICENSE file.
 
 /**
- * @implements {Bindings.DebuggerSourceMapping}
- */
-Sources.FormatterScriptMapping = class {
-  /**
-   * @override
-   * @param {!SDK.DebuggerModel.Location} rawLocation
-   * @return {?Workspace.UILocation}
-   */
-  rawLocationToUILocation(rawLocation) {
-    var script = rawLocation.script();
-    var formatData = script && Sources.SourceFormatData._for(script);
-    if (!formatData)
-      return null;
-    var lineNumber = rawLocation.lineNumber;
-    var columnNumber = rawLocation.columnNumber || 0;
-    var formattedLocation = formatData.mapping.originalToFormatted(lineNumber, columnNumber);
-    return formatData.formattedSourceCode.uiLocation(formattedLocation[0], formattedLocation[1]);
-  }
-
-  /**
-   * @override
-   * @param {!Workspace.UISourceCode} uiSourceCode
-   * @param {number} lineNumber
-   * @param {number} columnNumber
-   * @return {?SDK.DebuggerModel.Location}
-   */
-  uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) {
-    var formatData = Sources.SourceFormatData._for(uiSourceCode);
-    if (!formatData)
-      return null;
-    var originalLocation = formatData.mapping.formattedToOriginal(lineNumber, columnNumber);
-    var scripts = Sources.ScriptFormatterEditorAction._scriptsForUISourceCode(formatData.originalSourceCode);
-    if (!scripts.length)
-      return null;
-    return scripts[0].debuggerModel.createRawLocation(scripts[0], originalLocation[0], originalLocation[1]);
-  }
-
-  /**
-   * @override
-   * @return {boolean}
-   */
-  isIdentity() {
-    return false;
-  }
-
-  /**
-   * @override
-   * @param {!Workspace.UISourceCode} uiSourceCode
-   * @param {number} lineNumber
-   * @return {boolean}
-   */
-  uiLineHasMapping(uiSourceCode, lineNumber) {
-    return true;
-  }
-};
-
-Sources.SourceFormatData = class {
-  /**
-   * @param {!Workspace.UISourceCode} originalSourceCode
-   * @param {!Workspace.UISourceCode} formattedSourceCode
-   * @param {!Sources.FormatterSourceMapping} mapping
-   */
-  constructor(originalSourceCode, formattedSourceCode, mapping) {
-    this.originalSourceCode = originalSourceCode;
-    this.formattedSourceCode = formattedSourceCode;
-    this.mapping = mapping;
-  }
-
-  originalPath() {
-    return this.originalSourceCode.project().id() + ':' + this.originalSourceCode.url();
-  }
-
-  /**
-   * @param {!Object} object
-   * @return {?Sources.SourceFormatData}
-   */
-  static _for(object) {
-    return object[Sources.SourceFormatData._formatDataSymbol];
-  }
-};
-
-Sources.SourceFormatData._formatDataSymbol = Symbol('formatData');
-
-/**
  * @implements {Sources.SourcesView.EditorAction}
  * @unrestricted
  */
 Sources.ScriptFormatterEditorAction = class {
   constructor() {
-    this._projectId = 'formatter:';
-    this._project = new Bindings.ContentProviderBasedProject(
-        Workspace.workspace, this._projectId, Workspace.projectTypes.Formatter, 'formatter',
-        true /* isServiceProject */);
-
-    /** @type {!Map<string, !Workspace.UISourceCode>} */
-    this._formattedPaths = new Map();
     /** @type {!Set<string>} */
     this._pathsToFormatOnLoad = new Set();
-    this._scriptMapping = new Sources.FormatterScriptMapping();
-    Workspace.workspace.addEventListener(
-        Workspace.Workspace.Events.UISourceCodeRemoved, this._onUISourceCodeRemoved, this);
-  }
-
-  /**
-   * @param {!Common.Event} event
-   */
-  _onUISourceCodeRemoved(event) {
-    var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data);
-    var formattedUISourceCode = this._formattedPaths.get(uiSourceCode.project().id() + ':' + uiSourceCode.url());
-    if (formattedUISourceCode)
-      this._discardFormattedUISourceCodeScript(formattedUISourceCode, false);
   }
 
   /**
@@ -123,10 +19,9 @@
     var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data);
     this._updateButton(uiSourceCode);
 
-    var path = uiSourceCode.project().id() + ':' + uiSourceCode.url();
-    if (this._isFormatableScript(uiSourceCode) && this._pathsToFormatOnLoad.has(path) &&
-        !this._formattedPaths.get(path))
-      this._formatUISourceCodeScript(uiSourceCode);
+    if (this._isFormatableScript(uiSourceCode) && this._pathsToFormatOnLoad.has(uiSourceCode.url()) &&
+        !Sources.sourceFormatter.hasFormatted(uiSourceCode))
+      this._showFormatted(uiSourceCode);
   }
 
   /**
@@ -138,7 +33,9 @@
 
     if (wasSelected)
       this._updateButton(null);
-    this._discardFormattedUISourceCodeScript(uiSourceCode, true);
+    var original = Sources.sourceFormatter.discardFormattedUISourceCode(uiSourceCode);
+    if (original)
+      this._pathsToFormatOnLoad.delete(original.url());
   }
 
   /**
@@ -189,139 +86,25 @@
    */
   _toggleFormatScriptSource(event) {
     var uiSourceCode = this._sourcesView.currentUISourceCode();
-    if (this._isFormatableScript(uiSourceCode))
-      this._formatUISourceCodeScript(uiSourceCode);
+    if (!this._isFormatableScript(uiSourceCode))
+      return;
+    this._pathsToFormatOnLoad.add(uiSourceCode.url());
+    this._showFormatted(uiSourceCode);
   }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
-   * @param {!Workspace.UISourceCode} formattedUISourceCode
-   * @param {!Sources.FormatterSourceMapping} mapping
-   * @private
    */
-  _showIfNeeded(uiSourceCode, formattedUISourceCode, mapping) {
+  async _showFormatted(uiSourceCode) {
+    var formatData = await Sources.sourceFormatter.format(uiSourceCode);
     if (uiSourceCode !== this._sourcesView.currentUISourceCode())
       return;
     var sourceFrame = this._sourcesView.viewForFile(uiSourceCode);
     var start = [0, 0];
     if (sourceFrame) {
       var selection = sourceFrame.selection();
-      start = mapping.originalToFormatted(selection.startLine, selection.startColumn);
+      start = formatData.mapping.originalToFormatted(selection.startLine, selection.startColumn);
     }
-    this._sourcesView.showSourceLocation(formattedUISourceCode, start[0], start[1]);
-    this._updateButton(formattedUISourceCode);
-  }
-
-  /**
-   * @param {!Workspace.UISourceCode} formattedUISourceCode
-   * @param {boolean} userAction
-   */
-  _discardFormattedUISourceCodeScript(formattedUISourceCode, userAction) {
-    var formatData = Sources.SourceFormatData._for(formattedUISourceCode);
-    if (!formatData)
-      return;
-
-    var path = formatData.originalPath();
-    this._formattedPaths.remove(path);
-    delete formattedUISourceCode[Sources.SourceFormatData._formatDataSymbol];
-    if (userAction)
-      this._pathsToFormatOnLoad.delete(path);
-    var scripts = Sources.ScriptFormatterEditorAction._scriptsForUISourceCode(formatData.originalSourceCode);
-    for (var script of scripts) {
-      delete script[Sources.SourceFormatData._formatDataSymbol];
-      Bindings.debuggerWorkspaceBinding.popSourceMapping(script);
-    }
-    if (scripts[0])
-      Bindings.debuggerWorkspaceBinding.setSourceMapping(scripts[0].debuggerModel, formattedUISourceCode, null);
-    this._project.removeFile(formattedUISourceCode.url());
-  }
-
-  /**
-   * @param {!Workspace.UISourceCode} uiSourceCode
-   * @return {!Array<!SDK.Script>}
-   */
-  static _scriptsForUISourceCode(uiSourceCode) {
-    if (uiSourceCode.contentType() === Common.resourceTypes.Document) {
-      var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
-      var debuggerModel = target && target.model(SDK.DebuggerModel);
-      if (debuggerModel) {
-        var scripts = debuggerModel.scriptsForSourceURL(uiSourceCode.url())
-                          .filter(script => script.isInlineScript() && !script.hasSourceURL);
-        return scripts;
-      }
-    }
-    if (uiSourceCode.contentType().isScript()) {
-      var rawLocation = Bindings.debuggerWorkspaceBinding.uiLocationToRawLocation(uiSourceCode, 0, 0);
-      if (rawLocation)
-        return [rawLocation.script()];
-    }
-    return [];
-  }
-
-  /**
-   * @param {!Workspace.UISourceCode} uiSourceCode
-   */
-  _formatUISourceCodeScript(uiSourceCode) {
-    var formattedUISourceCode = this._formattedPaths.get(uiSourceCode.project().id() + ':' + uiSourceCode.url());
-    if (formattedUISourceCode) {
-      var formatData = Sources.SourceFormatData._for(formattedUISourceCode);
-      if (formatData) {
-        this._showIfNeeded(
-            uiSourceCode, /** @type {!Workspace.UISourceCode} */ (formattedUISourceCode), formatData.mapping);
-        return;
-      }
-    }
-
-    uiSourceCode.requestContent().then(contentLoaded.bind(this));
-
-    /**
-     * @this {Sources.ScriptFormatterEditorAction}
-     * @param {?string} content
-     */
-    function contentLoaded(content) {
-      var highlighterType = Bindings.NetworkProject.uiSourceCodeMimeType(uiSourceCode);
-      Sources.Formatter.format(uiSourceCode.contentType(), highlighterType, content || '', innerCallback.bind(this));
-    }
-
-    /**
-     * @this {Sources.ScriptFormatterEditorAction}
-     * @param {string} formattedContent
-     * @param {!Sources.FormatterSourceMapping} formatterMapping
-     */
-    function innerCallback(formattedContent, formatterMapping) {
-      var formattedURL = uiSourceCode.url() + ':formatted';
-      var contentProvider =
-          Common.StaticContentProvider.fromString(formattedURL, uiSourceCode.contentType(), formattedContent);
-      var formattedUISourceCode = this._project.addContentProvider(formattedURL, contentProvider);
-      var formatData = new Sources.SourceFormatData(uiSourceCode, formattedUISourceCode, formatterMapping);
-      formattedUISourceCode[Sources.SourceFormatData._formatDataSymbol] = formatData;
-
-      var path = formatData.originalPath();
-      this._formattedPaths.set(path, formattedUISourceCode);
-      this._pathsToFormatOnLoad.add(path);
-
-      var scripts = Sources.ScriptFormatterEditorAction._scriptsForUISourceCode(uiSourceCode);
-      if (!scripts)
-        return;
-      for (var script of scripts) {
-        script[Sources.SourceFormatData._formatDataSymbol] = formatData;
-        Bindings.debuggerWorkspaceBinding.pushSourceMapping(script, this._scriptMapping);
-      }
-
-      Bindings.debuggerWorkspaceBinding.setSourceMapping(
-          scripts[0].debuggerModel, formattedUISourceCode, this._scriptMapping);
-
-      for (var decoration of uiSourceCode.allDecorations()) {
-        var range = decoration.range();
-        var startLocation = formatterMapping.originalToFormatted(range.startLine, range.startColumn);
-        var endLocation = formatterMapping.originalToFormatted(range.endLine, range.endColumn);
-
-        formattedUISourceCode.addDecoration(
-            new TextUtils.TextRange(startLocation[0], startLocation[1], endLocation[0], endLocation[1]),
-            /** @type {string} */ (decoration.type()), decoration.data());
-      }
-
-      this._showIfNeeded(uiSourceCode, formattedUISourceCode, formatterMapping);
-    }
+    this._sourcesView.showSourceLocation(formatData.formattedSourceCode, start[0], start[1]);
   }
 };
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/SourceFormatter.js b/third_party/WebKit/Source/devtools/front_end/sources/SourceFormatter.js
new file mode 100644
index 0000000..8c8f8109
--- /dev/null
+++ b/third_party/WebKit/Source/devtools/front_end/sources/SourceFormatter.js
@@ -0,0 +1,225 @@
+// 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.
+
+/**
+ * @implements {Bindings.DebuggerSourceMapping}
+ */
+Sources.FormatterScriptMapping = class {
+  /**
+   * @override
+   * @param {!SDK.DebuggerModel.Location} rawLocation
+   * @return {?Workspace.UILocation}
+   */
+  rawLocationToUILocation(rawLocation) {
+    var script = rawLocation.script();
+    var formatData = script && Sources.SourceFormatData._for(script);
+    if (!formatData)
+      return null;
+    var lineNumber = rawLocation.lineNumber;
+    var columnNumber = rawLocation.columnNumber || 0;
+    var formattedLocation = formatData.mapping.originalToFormatted(lineNumber, columnNumber);
+    return formatData.formattedSourceCode.uiLocation(formattedLocation[0], formattedLocation[1]);
+  }
+
+  /**
+   * @override
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @param {number} lineNumber
+   * @param {number} columnNumber
+   * @return {?SDK.DebuggerModel.Location}
+   */
+  uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) {
+    var formatData = Sources.SourceFormatData._for(uiSourceCode);
+    if (!formatData)
+      return null;
+    var originalLocation = formatData.mapping.formattedToOriginal(lineNumber, columnNumber);
+    var scripts = Sources.SourceFormatter._scriptsForUISourceCode(formatData.originalSourceCode);
+    if (!scripts.length)
+      return null;
+    return scripts[0].debuggerModel.createRawLocation(scripts[0], originalLocation[0], originalLocation[1]);
+  }
+
+  /**
+   * @override
+   * @return {boolean}
+   */
+  isIdentity() {
+    return false;
+  }
+
+  /**
+   * @override
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @param {number} lineNumber
+   * @return {boolean}
+   */
+  uiLineHasMapping(uiSourceCode, lineNumber) {
+    return true;
+  }
+};
+
+Sources.SourceFormatData = class {
+  /**
+   * @param {!Workspace.UISourceCode} originalSourceCode
+   * @param {!Workspace.UISourceCode} formattedSourceCode
+   * @param {!Sources.FormatterSourceMapping} mapping
+   */
+  constructor(originalSourceCode, formattedSourceCode, mapping) {
+    this.originalSourceCode = originalSourceCode;
+    this.formattedSourceCode = formattedSourceCode;
+    this.mapping = mapping;
+  }
+
+  originalPath() {
+    return this.originalSourceCode.project().id() + ':' + this.originalSourceCode.url();
+  }
+
+  /**
+   * @param {!Object} object
+   * @return {?Sources.SourceFormatData}
+   */
+  static _for(object) {
+    return object[Sources.SourceFormatData._formatDataSymbol];
+  }
+};
+
+Sources.SourceFormatData._formatDataSymbol = Symbol('formatData');
+
+Sources.SourceFormatter = class {
+  constructor() {
+    this._projectId = 'formatter:';
+    this._project = new Bindings.ContentProviderBasedProject(
+        Workspace.workspace, this._projectId, Workspace.projectTypes.Formatter, 'formatter',
+        true /* isServiceProject */);
+
+    /** @type {!Map<string, !Workspace.UISourceCode>} */
+    this._formattedPaths = new Map();
+    this._scriptMapping = new Sources.FormatterScriptMapping();
+    Workspace.workspace.addEventListener(
+        Workspace.Workspace.Events.UISourceCodeRemoved, this._onUISourceCodeRemoved, this);
+  }
+
+  /**
+   * @param {!Common.Event} event
+   */
+  _onUISourceCodeRemoved(event) {
+    var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data);
+    var formattedUISourceCode = this._formattedPaths.get(uiSourceCode.project().id() + ':' + uiSourceCode.url());
+    if (formattedUISourceCode)
+      this.discardFormattedUISourceCode(formattedUISourceCode);
+  }
+
+  /**
+   * @param {!Workspace.UISourceCode} formattedUISourceCode
+   * @return {?Workspace.UISourceCode}
+   */
+  discardFormattedUISourceCode(formattedUISourceCode) {
+    var formatData = Sources.SourceFormatData._for(formattedUISourceCode);
+    if (!formatData)
+      return null;
+
+    delete formattedUISourceCode[Sources.SourceFormatData._formatDataSymbol];
+    var scripts = Sources.SourceFormatter._scriptsForUISourceCode(formatData.originalSourceCode);
+    for (var script of scripts) {
+      delete script[Sources.SourceFormatData._formatDataSymbol];
+      Bindings.debuggerWorkspaceBinding.popSourceMapping(script);
+    }
+    if (scripts[0])
+      Bindings.debuggerWorkspaceBinding.setSourceMapping(scripts[0].debuggerModel, formattedUISourceCode, null);
+    this._project.removeFile(formattedUISourceCode.url());
+    this._formattedPaths.remove(formatData.originalPath());
+    return formatData.originalSourceCode;
+  }
+
+  /**
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @return {!Array<!SDK.Script>}
+   */
+  static _scriptsForUISourceCode(uiSourceCode) {
+    if (uiSourceCode.contentType() === Common.resourceTypes.Document) {
+      var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
+      var debuggerModel = target && target.model(SDK.DebuggerModel);
+      if (debuggerModel) {
+        var scripts = debuggerModel.scriptsForSourceURL(uiSourceCode.url())
+                          .filter(script => script.isInlineScript() && !script.hasSourceURL);
+        return scripts;
+      }
+    }
+    if (uiSourceCode.contentType().isScript()) {
+      var rawLocation = Bindings.debuggerWorkspaceBinding.uiLocationToRawLocation(uiSourceCode, 0, 0);
+      if (rawLocation)
+        return [rawLocation.script()];
+    }
+    return [];
+  }
+
+  /**
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @return {boolean}
+   */
+  hasFormatted(uiSourceCode) {
+    return this._formattedPaths.has(uiSourceCode.project().id() + ':' + uiSourceCode.url());
+  }
+
+  /**
+   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @return {!Promise<!Sources.SourceFormatData>}
+   */
+  async format(uiSourceCode) {
+    var formattedUISourceCode = this._formattedPaths.get(uiSourceCode.project().id() + ':' + uiSourceCode.url());
+    if (formattedUISourceCode)
+      return Sources.SourceFormatData._for(formattedUISourceCode);
+
+    var content = await uiSourceCode.requestContent();
+    var highlighterType = Bindings.NetworkProject.uiSourceCodeMimeType(uiSourceCode);
+    var fulfillFormatPromise;
+    var resultPromise = new Promise(fulfill => {
+      fulfillFormatPromise = fulfill;
+    });
+    Sources.Formatter.format(uiSourceCode.contentType(), highlighterType, content || '', innerCallback.bind(this));
+    return resultPromise;
+
+    /**
+     * @this Sources.SourceFormatter
+     * @param {string} formattedContent
+     * @param {!Sources.FormatterSourceMapping} formatterMapping
+     */
+    function innerCallback(formattedContent, formatterMapping) {
+      var formattedURL = uiSourceCode.url() + ':formatted';
+      var contentProvider =
+          Common.StaticContentProvider.fromString(formattedURL, uiSourceCode.contentType(), formattedContent);
+      var formattedUISourceCode = this._project.addContentProvider(formattedURL, contentProvider);
+      var formatData = new Sources.SourceFormatData(uiSourceCode, formattedUISourceCode, formatterMapping);
+      formattedUISourceCode[Sources.SourceFormatData._formatDataSymbol] = formatData;
+
+      var path = formatData.originalPath();
+      this._formattedPaths.set(path, formattedUISourceCode);
+
+      var scripts = Sources.SourceFormatter._scriptsForUISourceCode(uiSourceCode);
+      if (!scripts)
+        return;
+      for (var script of scripts) {
+        script[Sources.SourceFormatData._formatDataSymbol] = formatData;
+        Bindings.debuggerWorkspaceBinding.pushSourceMapping(script, this._scriptMapping);
+      }
+
+      Bindings.debuggerWorkspaceBinding.setSourceMapping(
+          scripts[0].debuggerModel, formattedUISourceCode, this._scriptMapping);
+
+      for (var decoration of uiSourceCode.allDecorations()) {
+        var range = decoration.range();
+        var startLocation = formatterMapping.originalToFormatted(range.startLine, range.startColumn);
+        var endLocation = formatterMapping.originalToFormatted(range.endLine, range.endColumn);
+
+        formattedUISourceCode.addDecoration(
+            new TextUtils.TextRange(startLocation[0], startLocation[1], endLocation[0], endLocation[1]),
+            /** @type {string} */ (decoration.type()), decoration.data());
+      }
+
+      fulfillFormatPromise(formatData);
+    }
+  }
+};
+
+Sources.sourceFormatter = new Sources.SourceFormatter();
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/module.json b/third_party/WebKit/Source/devtools/front_end/sources/module.json
index ce2a582a..0795eb1 100644
--- a/third_party/WebKit/Source/devtools/front_end/sources/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/sources/module.json
@@ -645,6 +645,7 @@
         "ScriptFormatterEditorAction.js",
         "InplaceFormatterEditorAction.js",
         "ScriptFormatter.js",
+        "SourceFormatter.js",
         "OpenFileQuickOpen.js",
         "SourcesView.js",
         "AdvancedSearchView.js",
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/GlassPane.js b/third_party/WebKit/Source/devtools/front_end/ui/GlassPane.js
index c4046f7..d94c4433f 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/GlassPane.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/GlassPane.js
@@ -123,7 +123,7 @@
       return;
     // Deliberately starts with 3000 to hide other z-indexed elements below.
     this.element.style.zIndex = 3000 + 1000 * UI.GlassPane._panes.size;
-    document.body.addEventListener('click', this._onMouseDownBound, true);
+    document.body.addEventListener('mousedown', this._onMouseDownBound, true);
     this._widget.show(document.body);
     UI.GlassPane._panes.add(this);
     this._positionContent();
@@ -133,7 +133,7 @@
     if (!this.isShowing())
       return;
     UI.GlassPane._panes.delete(this);
-    this.element.ownerDocument.body.removeEventListener('click', this._onMouseDownBound, true);
+    this.element.ownerDocument.body.removeEventListener('mousedown', this._onMouseDownBound, true);
     this._widget.detach();
   }
 
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js b/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js
index aa43be9..4ba29b9 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js
@@ -50,10 +50,6 @@
 
     this._glassPane = new UI.GlassPane();
     this._glassPane.setBlockPointerEvents(!this._parentMenu);
-    this._glassPane.setSetOutsideClickCallback(event => {
-      this._discardMenu(true, event);
-      event.consume();
-    });
     this._glassPane.registerRequiredCSS('ui/softContextMenu.css');
     this._glassPane.setContentAnchorBox(anchorBox);
     this._glassPane.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);
@@ -71,6 +67,11 @@
 
     this._glassPane.show(document);
     this._focus();
+
+    if (!this._parentMenu) {
+      this._onBodyMouseDown = event => this._discardMenu(true, event);
+      this._document.body.addEventListener('mousedown', this._onBodyMouseDown, false);
+    }
   }
 
   discard() {
@@ -330,6 +331,10 @@
     if (this._glassPane) {
       this._glassPane.hide();
       delete this._glassPane;
+      if (this._onBodyMouseDown) {
+        this._document.body.removeEventListener('mousedown', this._onBodyMouseDown, false);
+        delete this._onBodyMouseDown;
+      }
     }
     if (this._parentMenu)
       delete this._parentMenu._subMenu;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp
index 63467c0..f608f93 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp
@@ -75,8 +75,8 @@
 }
 
 void AXARIAGrid::addChildren() {
-  ASSERT(!isDetached());
-  ASSERT(!m_haveChildren);
+  DCHECK(!isDetached());
+  DCHECK(!m_haveChildren);
 
   if (!isAXTable()) {
     AXLayoutObject::addChildren();
diff --git a/third_party/WebKit/Source/modules/accessibility/AXImageMapLink.cpp b/third_party/WebKit/Source/modules/accessibility/AXImageMapLink.cpp
index 2d12519a..24e4e82 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXImageMapLink.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXImageMapLink.cpp
@@ -58,7 +58,7 @@
 }
 
 AXObject* AXImageMapLink::computeParent() const {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   if (m_parent)
     return m_parent;
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXInlineTextBox.cpp b/third_party/WebKit/Source/modules/accessibility/AXInlineTextBox.cpp
index e64c722..dabd8ef 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXInlineTextBox.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXInlineTextBox.cpp
@@ -100,7 +100,7 @@
   unsigned len = m_inlineTextBox->len();
   Vector<float> widths;
   m_inlineTextBox->characterWidths(widths);
-  ASSERT(widths.size() == len);
+  DCHECK(widths.size() == len);
   offsets.resize(len);
 
   float widthSoFar = 0;
@@ -132,7 +132,7 @@
 }
 
 AXObject* AXInlineTextBox::computeParent() const {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   if (!m_inlineTextBox || !m_axObjectCache)
     return 0;
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
index d5127706..2579b1a1 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
@@ -168,7 +168,7 @@
     prev = cur;
     if (cur->isLayoutInline()) {
       cur = toLayoutInline(cur)->inlineElementContinuation();
-      ASSERT(cur || !toLayoutInline(prev)->continuation());
+      DCHECK(cur || !toLayoutInline(prev)->continuation());
     } else {
       cur = toLayoutBlockFlow(cur)->inlineElementContinuation();
     }
@@ -183,7 +183,7 @@
 }
 
 static LayoutBoxModelObject* nextContinuation(LayoutObject* layoutObject) {
-  ASSERT(layoutObject);
+  DCHECK(layoutObject);
   if (layoutObject->isLayoutInline() && !layoutObject->isAtomicInlineLevel())
     return toLayoutInline(layoutObject)->continuation();
   if (layoutObject->isLayoutBlockFlow())
@@ -206,7 +206,7 @@
 }
 
 AXLayoutObject::~AXLayoutObject() {
-  ASSERT(isDetached());
+  DCHECK(isDetached());
 }
 
 LayoutBoxModelObject* AXLayoutObject::getLayoutBoxModelObject() const {
@@ -395,7 +395,7 @@
 }
 
 bool AXLayoutObject::isOffScreen() const {
-  ASSERT(m_layoutObject);
+  DCHECK(m_layoutObject);
   IntRect contentRect =
       pixelSnappedIntRect(m_layoutObject->absoluteVisualRect());
   FrameView* view = m_layoutObject->frame()->view();
@@ -405,7 +405,7 @@
 }
 
 bool AXLayoutObject::isReadOnly() const {
-  ASSERT(m_layoutObject);
+  DCHECK(m_layoutObject);
 
   if (isWebArea()) {
     Document& document = m_layoutObject->document();
@@ -506,7 +506,7 @@
 bool AXLayoutObject::computeAccessibilityIsIgnored(
     IgnoredReasons* ignoredReasons) const {
 #if DCHECK_IS_ON()
-  ASSERT(m_initialized);
+  DCHECK(m_initialized);
 #endif
 
   if (!m_layoutObject)
@@ -1449,7 +1449,7 @@
 //
 
 AXObject* AXLayoutObject::computeParent() const {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   if (!m_layoutObject)
     return 0;
 
@@ -1579,11 +1579,11 @@
 }
 
 void AXLayoutObject::addChildren() {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   // If the need to add more children in addition to existing children arises,
   // childrenChanged should have been called, leaving the object with no
   // children.
-  ASSERT(!m_haveChildren);
+  DCHECK(!m_haveChildren);
 
   m_haveChildren = true;
 
@@ -1743,7 +1743,7 @@
   TextAffinity endAffinity = visibleEnd.affinity();
 
   Node* anchorNode = start.anchorNode();
-  ASSERT(anchorNode);
+  DCHECK(anchorNode);
 
   AXLayoutObject* anchorObject = nullptr;
   // Find the closest node that has a corresponding AXObject.
@@ -1761,7 +1761,7 @@
   }
 
   Node* focusNode = end.anchorNode();
-  ASSERT(focusNode);
+  DCHECK(focusNode);
 
   AXLayoutObject* focusObject = nullptr;
   while (focusNode) {
@@ -1779,9 +1779,9 @@
     return AXRange();
 
   int anchorOffset = anchorObject->indexForVisiblePosition(visibleStart);
-  ASSERT(anchorOffset >= 0);
+  DCHECK(anchorOffset >= 0);
   int focusOffset = focusObject->indexForVisiblePosition(visibleEnd);
-  ASSERT(focusOffset >= 0);
+  DCHECK(focusOffset >= 0);
   return AXRange(anchorObject, anchorOffset, startAffinity, focusObject,
                  focusOffset, endAffinity);
 }
@@ -1817,9 +1817,9 @@
   }
 
   int start = indexForVisiblePosition(selection.visibleStart());
-  ASSERT(start >= 0);
+  DCHECK(start >= 0);
   int end = indexForVisiblePosition(selection.visibleEnd());
-  ASSERT(end >= 0);
+  DCHECK(end >= 0);
 
   return AXRange(start, end);
 }
@@ -1849,7 +1849,7 @@
       layout->frame()->selection().computeVisibleSelectionInDOMTreeDeprecated();
   TextControlElement* textControl =
       toLayoutTextControl(layout)->textControlElement();
-  ASSERT(textControl);
+  DCHECK(textControl);
   int start = textControl->selectionStart();
   int end = textControl->selectionEnd();
 
@@ -2459,7 +2459,7 @@
     if (obj) {
       AXImageMapLink* areaObject = toAXImageMapLink(obj);
       areaObject->setParent(this);
-      ASSERT(areaObject->axObjectID() != 0);
+      DCHECK(areaObject->axObjectID() != 0);
       if (!areaObject->accessibilityIsIgnored())
         m_children.push_back(areaObject);
       else
@@ -2475,7 +2475,7 @@
   // If it's a canvas, it won't have laid out children, but it might have
   // accessible fallback content.  Clear m_haveChildren because
   // AXNodeObject::addChildren will expect it to be false.
-  ASSERT(!m_children.size());
+  DCHECK(!m_children.size());
   m_haveChildren = false;
   AXNodeObject::addChildren();
 }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp b/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp
index c4ba92f5..35c9f487 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp
@@ -138,7 +138,7 @@
   // If nameSources is non-null, relatedObjects is used in filling it in, so it
   // must be non-null as well.
   if (nameSources)
-    ASSERT(relatedObjects);
+    DCHECK(relatedObjects);
 
   if (!getNode())
     return String();
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMediaControls.cpp b/third_party/WebKit/Source/modules/accessibility/AXMediaControls.cpp
index 16b35e7..b52ecb11 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXMediaControls.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXMediaControls.cpp
@@ -48,7 +48,7 @@
 
 AXObject* AccessibilityMediaControl::create(LayoutObject* layoutObject,
                                             AXObjectCacheImpl& axObjectCache) {
-  ASSERT(layoutObject->node());
+  DCHECK(layoutObject->node());
 
   switch (mediaControlElementType(layoutObject->node())) {
     case MediaSlider:
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp
index 91dd98e..7030453 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp
@@ -67,7 +67,7 @@
   // There's no reason to clear our AXMenuListPopup child. If we get a
   // call to clearChildren, it's because the options might have changed,
   // so call it on our popup.
-  ASSERT(m_children.size() == 1);
+  DCHECK(m_children.size() == 1);
   m_children[0]->clearChildren();
   m_childrenDirty = false;
 }
@@ -77,7 +77,7 @@
 }
 
 void AXMenuList::addChildren() {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   m_haveChildren = true;
 
   AXObjectCacheImpl& cache = axObjectCache();
@@ -123,8 +123,8 @@
 void AXMenuList::didUpdateActiveOption(int optionIndex) {
   const auto& childObjects = children();
   if (!childObjects.isEmpty()) {
-    ASSERT(childObjects.size() == 1);
-    ASSERT(childObjects[0]->isMenuListPopup());
+    DCHECK(childObjects.size() == 1);
+    DCHECK(childObjects[0]->isMenuListPopup());
 
     if (childObjects[0]->isMenuListPopup()) {
       if (AXMenuListPopup* popup = toAXMenuListPopup(childObjects[0].get()))
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
index 67dd659b..4014fdb 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
@@ -39,7 +39,7 @@
     : AXMockObject(axObjectCache), m_element(element) {}
 
 AXMenuListOption::~AXMenuListOption() {
-  ASSERT(!m_element);
+  DCHECK(!m_element);
 }
 
 void AXMenuListOption::detach() {
@@ -117,12 +117,12 @@
   AXObject* parent = parentObject();
   if (!parent)
     return;
-  ASSERT(parent->isMenuListPopup());
+  DCHECK(parent->isMenuListPopup());
 
   AXObject* grandparent = parent->parentObject();
   if (!grandparent)
     return;
-  ASSERT(grandparent->isMenuList());
+  DCHECK(grandparent->isMenuList());
   grandparent->getRelativeBounds(outContainer, outBoundsInContainer,
                                  outContainerTransform);
 }
@@ -136,7 +136,7 @@
   // If nameSources is non-null, relatedObjects is used in filling it in, so it
   // must be non-null as well.
   if (nameSources)
-    ASSERT(relatedObjects);
+    DCHECK(relatedObjects);
 
   if (!getNode())
     return String();
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp
index 7530e951..b54df405 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp
@@ -61,7 +61,7 @@
 
 AXMenuListOption* AXMenuListPopup::menuListOptionAXObject(
     HTMLElement* element) const {
-  ASSERT(element);
+  DCHECK(element);
   if (!isHTMLOptionElement(*element))
     return 0;
 
@@ -93,7 +93,7 @@
 }
 
 void AXMenuListPopup::addChildren() {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   if (!m_parent)
     return;
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
index 26298b2..aa309181 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
@@ -227,7 +227,7 @@
 }
 
 AXNodeObject::~AXNodeObject() {
-  ASSERT(!m_node);
+  DCHECK(!m_node);
 }
 
 void AXNodeObject::alterSliderValue(bool increase) {
@@ -268,7 +268,7 @@
 #if DCHECK_IS_ON()
   // Double-check that an AXObject is never accessed before
   // it's been initialized.
-  ASSERT(m_initialized);
+  DCHECK(m_initialized);
 #endif
 
   // If this element is within a parent that cannot have children, it should not
@@ -904,7 +904,7 @@
 
 void AXNodeObject::init() {
 #if DCHECK_IS_ON()
-  ASSERT(!m_initialized);
+  DCHECK(!m_initialized);
   m_initialized = true;
 #endif
   m_role = determineAccessibilityRole();
@@ -1876,7 +1876,7 @@
   // If nameSources is non-null, relatedObjects is used in filling it in, so it
   // must be non-null as well.
   if (nameSources)
-    ASSERT(relatedObjects);
+    DCHECK(relatedObjects);
 
   bool foundTextAlternative = false;
 
@@ -2163,7 +2163,7 @@
 }
 
 AXObject* AXNodeObject::computeParent() const {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   if (Node* parentNode = getParentNodeForComputeParent(getNode()))
     return axObjectCache().getOrCreate(parentNode);
 
@@ -2201,11 +2201,11 @@
 }
 
 void AXNodeObject::addChildren() {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   // If the need to add more children in addition to existing children arises,
   // childrenChanged should have been called, leaving the object with no
   // children.
-  ASSERT(!m_haveChildren);
+  DCHECK(!m_haveChildren);
 
   if (!m_node)
     return;
@@ -2254,7 +2254,7 @@
     for (size_t i = 0; i < length; ++i)
       m_children.insert(index + i, children[i]);
   } else {
-    ASSERT(child->parentObject() == this);
+    DCHECK(child->parentObject() == this);
     m_children.insert(index, child);
   }
 }
@@ -2571,7 +2571,7 @@
   // If nameSources is non-null, relatedObjects is used in filling it in, so it
   // must be non-null as well.
   if (nameSources)
-    ASSERT(relatedObjects);
+    DCHECK(relatedObjects);
 
   String textAlternative;
   AXRelatedObjectVector localRelatedObjects;
@@ -2907,7 +2907,7 @@
       nameSources->back().type = nameFrom;
       nameSources->back().nativeSource = AXTextFromNativeHTMLTitleElement;
     }
-    ASSERT(getNode()->isContainerNode());
+    DCHECK(getNode()->isContainerNode());
     Element* title = ElementTraversal::firstChild(
         toContainerNode(*(getNode())), HasTagName(SVGNames::titleTag));
 
@@ -3054,7 +3054,7 @@
   // If descriptionSources is non-null, relatedObjects is used in filling it in,
   // so it must be non-null as well.
   if (descriptionSources)
-    ASSERT(relatedObjects);
+    DCHECK(relatedObjects);
 
   if (!getNode())
     return String();
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
index 5906d71..3d6d1fe 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
@@ -364,7 +364,7 @@
 }
 
 AXObject::~AXObject() {
-  ASSERT(isDetached());
+  DCHECK(isDetached());
   --s_numberOfLiveAXObjects;
 }
 
@@ -1672,7 +1672,7 @@
 }
 
 AccessibilityRole AXObject::ariaRoleToWebCoreRole(const String& value) {
-  ASSERT(!value.isEmpty());
+  DCHECK(!value.isEmpty());
 
   static const ARIARoleMap* roleMap = createARIARoleMap();
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.h b/third_party/WebKit/Source/modules/accessibility/AXObject.h
index 1c47fff..1b3db24 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.h
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.h
@@ -596,7 +596,7 @@
   // The AXObjectCacheImpl that owns this object, and its unique ID within this
   // cache.
   AXObjectCacheImpl& axObjectCache() const {
-    ASSERT(m_axObjectCache);
+    DCHECK(m_axObjectCache);
     return *m_axObjectCache;
   }
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSVGRoot.cpp b/third_party/WebKit/Source/modules/accessibility/AXSVGRoot.cpp
index 67f1075..217bd9d 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXSVGRoot.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXSVGRoot.cpp
@@ -53,7 +53,7 @@
 }
 
 AXObject* AXSVGRoot::computeParent() const {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   // If a parent was set because this is a remote SVG resource, use that
   // but otherwise, we should rely on the standard layout tree for the parent.
   if (m_parent)
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp b/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp
index 3bd3e27..f6708033 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp
@@ -80,8 +80,8 @@
 }
 
 void AXSlider::addChildren() {
-  ASSERT(!isDetached());
-  ASSERT(!m_haveChildren);
+  DCHECK(!isDetached());
+  DCHECK(!m_haveChildren);
 
   m_haveChildren = true;
 
@@ -101,7 +101,7 @@
 
 AXObject* AXSlider::elementAccessibilityHitTest(const IntPoint& point) const {
   if (m_children.size()) {
-    ASSERT(m_children.size() == 1);
+    DCHECK(m_children.size() == 1);
     if (m_children[0]->getBoundsInFrameCoordinates().contains(point))
       return m_children[0].get();
   }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp b/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp
index 89405eca..46207b2 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp
@@ -38,7 +38,7 @@
     : AXMockObject(axObjectCache), m_spinButtonElement(nullptr) {}
 
 AXSpinButton::~AXSpinButton() {
-  ASSERT(!m_spinButtonElement);
+  DCHECK(!m_spinButtonElement);
 }
 
 DEFINE_TRACE(AXSpinButton) {
@@ -68,7 +68,7 @@
 }
 
 void AXSpinButton::addChildren() {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   m_haveChildren = true;
 
   AXSpinButtonPart* incrementor =
@@ -85,7 +85,7 @@
 }
 
 void AXSpinButton::step(int amount) {
-  ASSERT(m_spinButtonElement);
+  DCHECK(m_spinButtonElement);
   if (!m_spinButtonElement)
     return;
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTable.cpp b/third_party/WebKit/Source/modules/accessibility/AXTable.cpp
index 5f14c39..46029d3 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXTable.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXTable.cpp
@@ -364,13 +364,13 @@
 }
 
 void AXTable::addChildren() {
-  ASSERT(!isDetached());
+  DCHECK(!isDetached());
   if (!isAXTable()) {
     AXLayoutObject::addChildren();
     return;
   }
 
-  ASSERT(!m_haveChildren);
+  DCHECK(!m_haveChildren);
 
   m_haveChildren = true;
   if (!m_layoutObject || !m_layoutObject->isTable())
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTableColumn.cpp b/third_party/WebKit/Source/modules/accessibility/AXTableColumn.cpp
index 8b16a25..5d8d72ad 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXTableColumn.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXTableColumn.cpp
@@ -121,8 +121,8 @@
 }
 
 void AXTableColumn::addChildren() {
-  ASSERT(!isDetached());
-  ASSERT(!m_haveChildren);
+  DCHECK(!isDetached());
+  DCHECK(!m_haveChildren);
 
   m_haveChildren = true;
   if (!m_parent || !m_parent->isAXTable())
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTableHeaderContainer.cpp b/third_party/WebKit/Source/modules/accessibility/AXTableHeaderContainer.cpp
index 1953f5b..d4b1b57 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXTableHeaderContainer.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXTableHeaderContainer.cpp
@@ -57,8 +57,8 @@
 }
 
 void AXTableHeaderContainer::addChildren() {
-  ASSERT(!isDetached());
-  ASSERT(!m_haveChildren);
+  DCHECK(!isDetached());
+  DCHECK(!m_haveChildren);
 
   m_haveChildren = true;
   if (!m_parent || !m_parent->isAXTable())
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
index e7f9f3bf..caf941af 100644
--- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
@@ -31,6 +31,7 @@
 #include "platform/graphics/paint/PaintCanvas.h"
 #include "platform/graphics/paint/PaintFlags.h"
 #include "platform/graphics/skia/SkiaUtils.h"
+#include "platform/wtf/CheckedNumeric.h"
 
 namespace blink {
 
@@ -1530,6 +1531,11 @@
     int sw,
     int sh,
     ExceptionState& exceptionState) const {
+  if (!WTF::CheckMul(sw, sh).IsValid<int>()) {
+    exceptionState.throwRangeError("Out of memory at ImageData creation");
+    return nullptr;
+  }
+
   m_usageCounters.numGetImageDataCalls++;
   m_usageCounters.areaGetImageDataCalls += sw * sh;
   if (!originClean())
@@ -1552,6 +1558,12 @@
     sh = -sh;
   }
 
+  if (!WTF::CheckAdd(sx, sw).IsValid<int>() ||
+      !WTF::CheckAdd(sy, sh).IsValid<int>()) {
+    exceptionState.throwRangeError("Out of memory at ImageData creation");
+    return nullptr;
+  }
+
   Optional<ScopedUsHistogramTimer> timer;
   if (imageBuffer() && imageBuffer()->isAccelerated()) {
     DEFINE_THREAD_SAFE_STATIC_LOCAL(
@@ -1574,7 +1586,6 @@
   }
 
   IntRect imageDataRect(sx, sy, sw, sh);
-  DVLOG(1) << sx << ", " << sy << ", " << sw << ", " << sh;
   ImageBuffer* buffer = imageBuffer();
   if (!buffer || isContextLost()) {
     ImageData* result = ImageData::create(imageDataRect.size());
@@ -1611,6 +1622,10 @@
                                           int dirtyWidth,
                                           int dirtyHeight,
                                           ExceptionState& exceptionState) {
+  if (!WTF::CheckMul(dirtyWidth, dirtyHeight).IsValid<int>()) {
+    return;
+  }
+
   m_usageCounters.numPutImageDataCalls++;
   m_usageCounters.areaPutImageDataCalls += dirtyWidth * dirtyHeight;
   if (data->data()->bufferBase()->isNeutered()) {
diff --git a/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp b/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp
index 828b6d0e8..d781b3c 100644
--- a/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp
+++ b/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp
@@ -56,6 +56,11 @@
     m_client->didFetchDataLoadedStream();
   }
 
+  void didFetchDataLoadedCustomFormat() override {
+    m_buffer->endLoading();
+    m_client->didFetchDataLoadedCustomFormat();
+  }
+
   void didFetchDataLoadFailed() override {
     m_buffer->endLoading();
     m_client->didFetchDataLoadFailed();
diff --git a/third_party/WebKit/Source/modules/fetch/FetchDataLoader.h b/third_party/WebKit/Source/modules/fetch/FetchDataLoader.h
index e2b4d83..336e761 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchDataLoader.h
+++ b/third_party/WebKit/Source/modules/fetch/FetchDataLoader.h
@@ -35,17 +35,19 @@
 
     // The method corresponding to createLoaderAs... is called on success.
     virtual void didFetchDataLoadedBlobHandle(PassRefPtr<BlobDataHandle>) {
-      ASSERT_NOT_REACHED();
+      NOTREACHED();
     }
     virtual void didFetchDataLoadedArrayBuffer(DOMArrayBuffer*) {
-      ASSERT_NOT_REACHED();
+      NOTREACHED();
     }
-    virtual void didFetchDataLoadedString(const String&) {
-      ASSERT_NOT_REACHED();
-    }
+    virtual void didFetchDataLoadedString(const String&) { NOTREACHED(); }
     // This is called after all data are read from |handle| and written
     // to |outStream|, and |outStream| is closed or aborted.
-    virtual void didFetchDataLoadedStream() { ASSERT_NOT_REACHED(); }
+    virtual void didFetchDataLoadedStream() { NOTREACHED(); }
+
+    // This function is called when a "custom" FetchDataLoader (none of the
+    // ones listed above) finishes loading.
+    virtual void didFetchDataLoadedCustomFormat() { NOTREACHED(); }
 
     virtual void didFetchDataLoadFailed() = 0;
 
@@ -55,8 +57,7 @@
   static FetchDataLoader* createLoaderAsBlobHandle(const String& mimeType);
   static FetchDataLoader* createLoaderAsArrayBuffer();
   static FetchDataLoader* createLoaderAsString();
-  static FetchDataLoader* createLoaderAsStream(Stream* outStream);
-
+  static FetchDataLoader* createLoaderAsStream(Stream*);
   virtual ~FetchDataLoader() {}
 
   // |consumer| must not have a client when called.
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp
index ede66379..3273092 100644
--- a/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp
@@ -765,6 +765,13 @@
       startHideMediaControlsTimer();
     return;
   }
+
+  // If the user is interacting with the controls via the keyboard, don't hide
+  // the controls. This will fire when the user tabs between controls (focusin)
+  // or when they seek either the timeline or volume sliders (input).
+  if (event->type() == EventTypeNames::focusin ||
+      event->type() == EventTypeNames::input)
+    resetHideMediaControlsTimer();
 }
 
 void MediaControlsImpl::hideMediaControlsTimerFired(TimerBase*) {
@@ -912,6 +919,13 @@
   startHideMediaControlsTimer();
 }
 
+void MediaControlsImpl::onPanelKeypress() {
+  // If the user is interacting with the controls via the keyboard, don't hide
+  // the controls. This is called when the user mutes/unmutes, turns CC on/off,
+  // etc.
+  resetHideMediaControlsTimer();
+}
+
 void MediaControlsImpl::notifyElementSizeChanged(ClientRect* newSize) {
   // Note that this code permits a bad frame on resize, since it is
   // run after the relayout / paint happens.  It would be great to improve
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h b/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h
index 515f9766..80924c4 100644
--- a/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h
@@ -126,6 +126,7 @@
   void onLoadedMetadata() override;
   void onEnteredFullscreen() override;
   void onExitedFullscreen() override;
+  void onPanelKeypress() override;
   Document& ownerDocument() { return document(); }
 
   DECLARE_VIRTUAL_TRACE();
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
index 6b640083..ef94cfe 100644
--- a/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
@@ -24,6 +24,7 @@
 #include "platform/heap/Handle.h"
 #include "platform/testing/EmptyWebMediaPlayer.h"
 #include "platform/testing/HistogramTester.h"
+#include "platform/testing/TestingPlatformSupport.h"
 #include "platform/testing/UnitTestHelpers.h"
 #include "public/platform/WebMouseEvent.h"
 #include "public/platform/WebScreenInfo.h"
@@ -160,7 +161,9 @@
 
 class MediaControlsImplTest : public ::testing::Test {
  protected:
-  virtual void SetUp() {
+  virtual void SetUp() { initializePage(); }
+
+  void initializePage() {
     Page::PageClients clients;
     fillWithEmptyClients(clients);
     clients.chromeClient = new MockChromeClient();
@@ -176,7 +179,7 @@
     m_pageHolder->frame().settings()->setScriptEnabled(true);
   }
 
-  void simulateRouteAvailabe() {
+  void simulateRouteAvailable() {
     m_mediaControls->mediaElement().remoteRouteAvailabilityChanged(
         WebRemotePlaybackAvailability::DeviceAvailable);
   }
@@ -321,7 +324,7 @@
 
   ASSERT_FALSE(isElementVisible(*castButton));
 
-  simulateRouteAvailabe();
+  simulateRouteAvailable();
   ASSERT_TRUE(isElementVisible(*castButton));
 }
 
@@ -335,7 +338,7 @@
   ASSERT_NE(nullptr, castButton);
 
   ASSERT_FALSE(isElementVisible(*castButton));
-  simulateRouteAvailabe();
+  simulateRouteAvailable();
   ASSERT_TRUE(isElementVisible(*castButton));
 
   mediaControls().mediaElement().setBooleanAttribute(
@@ -352,7 +355,7 @@
       mediaControls(), "-internal-media-controls-overlay-cast-button");
   ASSERT_NE(nullptr, castOverlayButton);
 
-  simulateRouteAvailabe();
+  simulateRouteAvailable();
   ASSERT_TRUE(isElementVisible(*castOverlayButton));
 }
 
@@ -362,7 +365,7 @@
   ASSERT_NE(nullptr, castOverlayButton);
 
   ASSERT_FALSE(isElementVisible(*castOverlayButton));
-  simulateRouteAvailabe();
+  simulateRouteAvailable();
   ASSERT_TRUE(isElementVisible(*castOverlayButton));
 
   mediaControls().mediaElement().setBooleanAttribute(
@@ -380,7 +383,7 @@
   ASSERT_NE(nullptr, castOverlayButton);
 
   EXPECT_FALSE(isElementVisible(*castOverlayButton));
-  simulateRouteAvailabe();
+  simulateRouteAvailable();
   EXPECT_TRUE(isElementVisible(*castOverlayButton));
 
   document().settings()->setMediaControlsEnabled(false);
@@ -793,4 +796,46 @@
                                        9 /* (-4m, -2m] */, 1);
 }
 
+TEST_F(MediaControlsImplTest, ControlsRemainVisibleDuringKeyboardInteraction) {
+  ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler>
+      m_platform;
+
+  // DocumentParserTiming has DCHECKS to make sure time > 0.0.
+  m_platform->advanceClockSeconds(1);
+
+  // Need to reinitialize page since we changed the platform.
+  initializePage();
+  ensureSizing();
+
+  Element* panel = mediaControls().panelElement();
+
+  mediaControls().mediaElement().setBooleanAttribute(HTMLNames::controlsAttr,
+                                                     true);
+  mediaControls().mediaElement().setSrc("http://example.com");
+  mediaControls().mediaElement().play();
+
+  // Controls start out visible.
+  EXPECT_TRUE(isElementVisible(*panel));
+
+  // Tabbing between controls prevents controls from hiding.
+  m_platform->runForPeriodSeconds(2);
+  mediaControls().dispatchEvent(Event::create("focusin"));
+  m_platform->runForPeriodSeconds(2);
+  EXPECT_TRUE(isElementVisible(*panel));
+
+  // Seeking on the timeline or volume bar prevents controls from hiding.
+  mediaControls().dispatchEvent(Event::create("input"));
+  m_platform->runForPeriodSeconds(2);
+  EXPECT_TRUE(isElementVisible(*panel));
+
+  // Pressing a key prevents controls from hiding.
+  mediaControls().panelElement()->dispatchEvent(Event::create("keypress"));
+  m_platform->runForPeriodSeconds(2);
+  EXPECT_TRUE(isElementVisible(*panel));
+
+  // Once user interaction stops, controls can hide.
+  m_platform->runForPeriodSeconds(2);
+  EXPECT_FALSE(isElementVisible(*panel));
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/serviceworkers/NavigatorServiceWorker.cpp b/third_party/WebKit/Source/modules/serviceworkers/NavigatorServiceWorker.cpp
index b319462..57aa8f7 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/NavigatorServiceWorker.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/NavigatorServiceWorker.cpp
@@ -57,7 +57,7 @@
     ExceptionState& exceptionState) {
   ExecutionContext* executionContext = scriptState->getExecutionContext();
   DCHECK(!navigator.frame() ||
-         executionContext->getSecurityOrigin()->canAccessCheckSuborigins(
+         executionContext->getSecurityOrigin()->canAccess(
              navigator.frame()->securityContext()->getSecurityOrigin()));
   return NavigatorServiceWorker::from(navigator).serviceWorker(
       navigator.frame(), exceptionState);
@@ -69,7 +69,7 @@
     String& errorMessage) {
   ExecutionContext* executionContext = scriptState->getExecutionContext();
   DCHECK(!navigator.frame() ||
-         executionContext->getSecurityOrigin()->canAccessCheckSuborigins(
+         executionContext->getSecurityOrigin()->canAccess(
              navigator.frame()->securityContext()->getSecurityOrigin()));
   return NavigatorServiceWorker::from(navigator).serviceWorker(
       navigator.frame(), errorMessage);
diff --git a/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp b/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
index 4ff4d91..6ca7fb2 100644
--- a/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
+++ b/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
@@ -81,6 +81,7 @@
   // TODO(lunalu): When FeaturePolicy is ready, take out the check for the
   // runtime flag. Please pay attention to the user gesture code below.
   if (RuntimeEnabledFeatures::featurePolicyEnabled() &&
+      RuntimeEnabledFeatures::featurePolicyExperimentalFeaturesEnabled() &&
       !frame->isFeatureEnabled(blink::WebFeaturePolicyFeature::Vibrate)) {
     frame->domWindow()->printErrorMessage(
         "Navigator.vibrate() is not enabled in feature policy for this "
diff --git a/third_party/WebKit/Source/modules/webaudio/AnalyserNode.cpp b/third_party/WebKit/Source/modules/webaudio/AnalyserNode.cpp
index 3e3e9e7..f1e7ff7 100644
--- a/third_party/WebKit/Source/modules/webaudio/AnalyserNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AnalyserNode.cpp
@@ -141,9 +141,7 @@
 }
 
 void AnalyserHandler::updatePullStatus() {
-#if DCHECK_IS_ON()
   DCHECK(context()->isGraphOwner());
-#endif
 
   if (output(0).isConnected()) {
     // When an AudioBasicInspectorNode is connected to a downstream node, it
diff --git a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.h b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.h
index 63af742..fae3a93 100644
--- a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.h
+++ b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.h
@@ -290,10 +290,10 @@
   void lock() { deferredTaskHandler().lock(); }
   bool tryLock() { return deferredTaskHandler().tryLock(); }
   void unlock() { deferredTaskHandler().unlock(); }
-#if DCHECK_IS_ON()
+
   // Returns true if this thread owns the context's lock.
   bool isGraphOwner() { return deferredTaskHandler().isGraphOwner(); }
-#endif
+
   using AutoLocker = DeferredTaskHandler::AutoLocker;
 
   // Returns the maximum numuber of channels we can support.
diff --git a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
index 71ef965c..0c39337 100644
--- a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
@@ -141,10 +141,20 @@
       context() && context()->hasRealtimeConstraint(), m_normalize));
 
   {
+    // The context must be locked since changing the buffer can
+    // re-configure the number of channels that are output.
+    BaseAudioContext::AutoLocker contextLocker(context());
+
     // Synchronize with process().
     MutexLocker locker(m_processLock);
     m_reverb = std::move(reverb);
     m_buffer = buffer;
+    if (buffer) {
+      // This will propagate the channel count to any nodes connected further
+      // downstream in the graph.
+      output(0).setNumberOfChannels(computeNumberOfOutputChannels(
+          input(0).numberOfChannels(), m_buffer->numberOfChannels()));
+    }
   }
 }
 
@@ -177,6 +187,15 @@
   return std::numeric_limits<double>::infinity();
 }
 
+unsigned ConvolverHandler::computeNumberOfOutputChannels(
+    unsigned inputChannels,
+    unsigned responseChannels) const {
+  // The number of output channels for a Convolver must be one or two.
+  // And can only be one if there's a mono source and a mono response
+  // buffer.
+  return clampTo(std::max(inputChannels, responseChannels), 1, 2);
+}
+
 void ConvolverHandler::setChannelCount(unsigned long channelCount,
                                        ExceptionState& exceptionState) {
   DCHECK(isMainThread());
@@ -205,9 +224,7 @@
 
 void ConvolverHandler::checkNumberOfChannelsForInput(AudioNodeInput* input) {
   DCHECK(context()->isAudioThread());
-#if DCHECK_IS_ON()
   DCHECK(context()->isGraphOwner());
-#endif
 
   DCHECK(input);
   DCHECK_EQ(input, &this->input(0));
@@ -215,10 +232,8 @@
     return;
 
   if (m_buffer) {
-    unsigned numberOfChannels = input->numberOfChannels();
-    unsigned numberOfReverbeChannels = m_buffer->numberOfChannels();
-    unsigned numberOfOutputChannels =
-        std::min(2u, std::max(numberOfChannels, numberOfReverbeChannels));
+    unsigned numberOfOutputChannels = computeNumberOfOutputChannels(
+        input->numberOfChannels(), m_buffer->numberOfChannels());
 
     if (isInitialized() &&
         numberOfOutputChannels != output(0).numberOfChannels()) {
diff --git a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.h b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.h
index ba221ab..ab77e47 100644
--- a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.h
@@ -65,6 +65,12 @@
   double tailTime() const override;
   double latencyTime() const override;
 
+  // Determine how many output channels to use from the number of
+  // input channels and the number of channels in the impulse response
+  // buffer.
+  unsigned computeNumberOfOutputChannels(unsigned inputChannels,
+                                         unsigned responseChannels) const;
+
   std::unique_ptr<Reverb> m_reverb;
   // This Persistent doesn't make a reference cycle including the owner
   // ConvolverNode.
diff --git a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp
index f03fd8605..e68c869 100644
--- a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp
@@ -65,11 +65,15 @@
   m_contextGraphMutex.lock();
 }
 
-#if DCHECK_IS_ON()
 bool DeferredTaskHandler::isGraphOwner() {
+#if DCHECK_IS_ON()
   return m_contextGraphMutex.locked();
-}
+#else
+  // The method is only used inside of DCHECK() so it must be no-op in the
+  // release build. Returning false so we can catch when it happens.
+  return false;
 #endif
+}
 
 void DeferredTaskHandler::addDeferredBreakConnection(AudioHandler& node) {
   DCHECK(isAudioThread());
diff --git a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h
index 4cd4909..8f740150 100644
--- a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h
+++ b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h
@@ -128,10 +128,8 @@
   // MUST NOT be used in the real-time audio context.
   void offlineLock();
 
-#if DCHECK_IS_ON()
   // Returns true if this thread owns the context's lock.
   bool isGraphOwner();
-#endif
 
   class MODULES_EXPORT AutoLocker {
     STACK_ALLOCATED();
diff --git a/third_party/WebKit/Source/modules/webaudio/IIRFilterNode.cpp b/third_party/WebKit/Source/modules/webaudio/IIRFilterNode.cpp
index d8e5c2ed..0c94207 100644
--- a/third_party/WebKit/Source/modules/webaudio/IIRFilterNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/IIRFilterNode.cpp
@@ -88,29 +88,6 @@
     return nullptr;
   }
 
-  // Make sure all coefficents are finite.
-  for (size_t k = 0; k < feedforwardCoef.size(); ++k) {
-    double c = feedforwardCoef[k];
-    if (!std::isfinite(c)) {
-      String name = "feedforward coefficient " + String::number(k);
-      exceptionState.throwDOMException(
-          InvalidStateError,
-          ExceptionMessages::notAFiniteNumber(c, name.ascii().data()));
-      return nullptr;
-    }
-  }
-
-  for (size_t k = 0; k < feedbackCoef.size(); ++k) {
-    double c = feedbackCoef[k];
-    if (!std::isfinite(c)) {
-      String name = "feedback coefficient " + String::number(k);
-      exceptionState.throwDOMException(
-          InvalidStateError,
-          ExceptionMessages::notAFiniteNumber(c, name.ascii().data()));
-      return nullptr;
-    }
-  }
-
   return new IIRFilterNode(context, feedforwardCoef, feedbackCoef);
 }
 
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
index 12135b4..5b1eea80 100644
--- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
+++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -802,7 +802,7 @@
       status: "experimental",
     },
     {
-      name: "RestrictCompleteURLCharacterSet",
+      name: "RestrictCanRequestURLCharacterSet",
       status: "experimental",
     },
     // Handles frame scrolling via the root PaintLayer instead of the FrameView.
diff --git a/third_party/WebKit/Source/platform/audio/AudioArray.h b/third_party/WebKit/Source/platform/audio/AudioArray.h
index 8965c14..a05bf4f 100644
--- a/third_party/WebKit/Source/platform/audio/AudioArray.h
+++ b/third_party/WebKit/Source/platform/audio/AudioArray.h
@@ -58,7 +58,7 @@
     // Although n is a size_t, its true limit is max unsigned because we use
     // unsigned in zeroRange() and copyToRange(). Also check for integer
     // overflow.
-    RELEASE_ASSERT(n <= std::numeric_limits<unsigned>::max() / sizeof(T));
+    CHECK_LE(n, std::numeric_limits<unsigned>::max() / sizeof(T));
 
     unsigned initialSize = sizeof(T) * n;
 
@@ -79,12 +79,12 @@
       static size_t extraAllocationBytes = 0;
 
       // Again, check for integer overflow.
-      RELEASE_ASSERT(initialSize + extraAllocationBytes >= initialSize);
+      CHECK_GE(initialSize + extraAllocationBytes, initialSize);
 
       T* allocation = static_cast<T*>(WTF::Partitions::fastMalloc(
           initialSize + extraAllocationBytes,
           WTF_HEAP_PROFILER_TYPE_NAME(AudioArray<T>)));
-      RELEASE_ASSERT(allocation);
+      CHECK(allocation);
 
       T* alignedData = alignedAddress(allocation, alignment);
 
diff --git a/third_party/WebKit/Source/platform/audio/AudioBus.cpp b/third_party/WebKit/Source/platform/audio/AudioBus.cpp
index 2fbbb68..5d59fc4 100644
--- a/third_party/WebKit/Source/platform/audio/AudioBus.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioBus.cpp
@@ -49,7 +49,7 @@
 PassRefPtr<AudioBus> AudioBus::create(unsigned numberOfChannels,
                                       size_t length,
                                       bool allocate) {
-  ASSERT(numberOfChannels <= MaxBusChannels);
+  DCHECK_LE(numberOfChannels, MaxBusChannels);
   if (numberOfChannels > MaxBusChannels)
     return nullptr;
 
@@ -81,7 +81,7 @@
 }
 
 void AudioBus::resizeSmaller(size_t newLength) {
-  ASSERT(newLength <= m_length);
+  DCHECK_LE(newLength, m_length);
   if (newLength <= m_length)
     m_length = newLength;
 
@@ -479,7 +479,7 @@
   }
 
   unsigned numberOfChannels = this->numberOfChannels();
-  ASSERT(numberOfChannels <= MaxBusChannels);
+  DCHECK_LE(numberOfChannels, MaxBusChannels);
   if (numberOfChannels > MaxBusChannels)
     return;
 
@@ -615,7 +615,8 @@
     bool mixToMono,
     double newSampleRate) {
   // sourceBus's sample-rate must be known.
-  ASSERT(sourceBus && sourceBus->sampleRate());
+  DCHECK(sourceBus);
+  DCHECK(sourceBus->sampleRate());
   if (!sourceBus || !sourceBus->sampleRate())
     return nullptr;
 
diff --git a/third_party/WebKit/Source/platform/audio/AudioChannel.cpp b/third_party/WebKit/Source/platform/audio/AudioChannel.cpp
index 751fc1d..459e85a 100644
--- a/third_party/WebKit/Source/platform/audio/AudioChannel.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioChannel.cpp
@@ -36,7 +36,7 @@
 using namespace VectorMath;
 
 void AudioChannel::resizeSmaller(size_t newLength) {
-  ASSERT(newLength <= m_length);
+  DCHECK_LE(newLength, m_length);
   if (newLength <= m_length)
     m_length = newLength;
 }
diff --git a/third_party/WebKit/Source/platform/audio/AudioDSPKernelProcessor.cpp b/third_party/WebKit/Source/platform/audio/AudioDSPKernelProcessor.cpp
index dcea2266..45bdfd4 100644
--- a/third_party/WebKit/Source/platform/audio/AudioDSPKernelProcessor.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioDSPKernelProcessor.cpp
@@ -67,7 +67,8 @@
 void AudioDSPKernelProcessor::process(const AudioBus* source,
                                       AudioBus* destination,
                                       size_t framesToProcess) {
-  ASSERT(source && destination);
+  DCHECK(source);
+  DCHECK(destination);
   if (!source || !destination)
     return;
 
diff --git a/third_party/WebKit/Source/platform/audio/AudioDelayDSPKernel.cpp b/third_party/WebKit/Source/platform/audio/AudioDelayDSPKernel.cpp
index 2630b916..4324c5c 100644
--- a/third_party/WebKit/Source/platform/audio/AudioDelayDSPKernel.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioDelayDSPKernel.cpp
@@ -45,7 +45,8 @@
       m_maxDelayTime(maxDelayTime),
       m_writeIndex(0),
       m_firstTime(true) {
-  ASSERT(maxDelayTime > 0.0 && !std::isnan(maxDelayTime));
+  DCHECK_GT(maxDelayTime, 0.0);
+  DCHECK(!std::isnan(maxDelayTime));
   if (maxDelayTime <= 0.0 || std::isnan(maxDelayTime))
     return;
 
@@ -91,7 +92,8 @@
   if (!bufferLength)
     return;
 
-  ASSERT(source && destination);
+  DCHECK(source);
+  DCHECK(destination);
   if (!source || !destination)
     return;
 
diff --git a/third_party/WebKit/Source/platform/audio/AudioResamplerKernel.cpp b/third_party/WebKit/Source/platform/audio/AudioResamplerKernel.cpp
index 3a948618..973a1cb6 100644
--- a/third_party/WebKit/Source/platform/audio/AudioResamplerKernel.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioResamplerKernel.cpp
@@ -46,7 +46,7 @@
 float* AudioResamplerKernel::getSourcePointer(
     size_t framesToProcess,
     size_t* numberOfSourceFramesNeededP) {
-  ASSERT(framesToProcess <= MaxFramesToProcess);
+  DCHECK_LE(framesToProcess, MaxFramesToProcess);
 
   // Calculate the next "virtual" index.  After process() is called,
   // m_virtualReadIndex will equal this value.
@@ -75,7 +75,7 @@
 }
 
 void AudioResamplerKernel::process(float* destination, size_t framesToProcess) {
-  ASSERT(framesToProcess <= MaxFramesToProcess);
+  DCHECK_LE(framesToProcess, MaxFramesToProcess);
 
   float* source = m_sourceBuffer.data();
 
@@ -92,11 +92,11 @@
   double virtualReadIndex = m_virtualReadIndex;
 
   // Sanity check source buffer access.
-  ASSERT(framesToProcess > 0);
-  ASSERT(virtualReadIndex >= 0 &&
-         1 + static_cast<unsigned>(virtualReadIndex +
-                                   (framesToProcess - 1) * rate) <
-             m_sourceBuffer.size());
+  DCHECK_GT(framesToProcess, 0u);
+  DCHECK_GE(virtualReadIndex, 0);
+  DCHECK_LT(1 + static_cast<unsigned>(virtualReadIndex +
+                                      (framesToProcess - 1) * rate),
+            m_sourceBuffer.size());
 
   // Do the linear interpolation.
   int n = framesToProcess;
diff --git a/third_party/WebKit/Source/platform/audio/AudioUtilities.cpp b/third_party/WebKit/Source/platform/audio/AudioUtilities.cpp
index 77000c25..7d66756 100644
--- a/third_party/WebKit/Source/platform/audio/AudioUtilities.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioUtilities.cpp
@@ -36,7 +36,7 @@
 }
 
 float linearToDecibels(float linear) {
-  ASSERT(linear >= 0);
+  DCHECK_GE(linear, 0);
 
   return 20 * log10f(linear);
 }
@@ -47,7 +47,7 @@
 }
 
 size_t timeToSampleFrame(double time, double sampleRate) {
-  ASSERT(time >= 0);
+  DCHECK_GE(time, 0);
   double frame = round(time * sampleRate);
 
   // Just return the largest possible size_t value if necessary.
diff --git a/third_party/WebKit/Source/platform/audio/DirectConvolver.cpp b/third_party/WebKit/Source/platform/audio/DirectConvolver.cpp
index 1cf4ce5..3b2d84c 100644
--- a/third_party/WebKit/Source/platform/audio/DirectConvolver.cpp
+++ b/third_party/WebKit/Source/platform/audio/DirectConvolver.cpp
@@ -50,13 +50,13 @@
                               const float* sourceP,
                               float* destP,
                               size_t framesToProcess) {
-  ASSERT(framesToProcess == m_inputBlockSize);
+  DCHECK_EQ(framesToProcess, m_inputBlockSize);
   if (framesToProcess != m_inputBlockSize)
     return;
 
   // Only support kernelSize <= m_inputBlockSize
   size_t kernelSize = convolutionKernel->size();
-  ASSERT(kernelSize <= m_inputBlockSize);
+  DCHECK_LE(kernelSize, m_inputBlockSize);
   if (kernelSize > m_inputBlockSize)
     return;
 
diff --git a/third_party/WebKit/Source/platform/audio/DynamicsCompressor.cpp b/third_party/WebKit/Source/platform/audio/DynamicsCompressor.cpp
index 38d1da6..074a05a 100644
--- a/third_party/WebKit/Source/platform/audio/DynamicsCompressor.cpp
+++ b/third_party/WebKit/Source/platform/audio/DynamicsCompressor.cpp
@@ -51,7 +51,7 @@
 }
 
 void DynamicsCompressor::setParameterValue(unsigned parameterID, float value) {
-  ASSERT(parameterID < ParamLast);
+  DCHECK_LT(parameterID, static_cast<unsigned>(ParamLast));
   if (parameterID < ParamLast)
     m_parameters[parameterID] = value;
 }
@@ -84,7 +84,7 @@
 }
 
 float DynamicsCompressor::parameterValue(unsigned parameterID) {
-  ASSERT(parameterID < ParamLast);
+  DCHECK_LT(parameterID, static_cast<unsigned>(ParamLast));
   return m_parameters[parameterID];
 }
 
@@ -100,7 +100,8 @@
   unsigned numberOfChannels = destinationBus->numberOfChannels();
   unsigned numberOfSourceChannels = sourceBus->numberOfChannels();
 
-  ASSERT(numberOfChannels == m_numberOfChannels && numberOfSourceChannels);
+  DCHECK_EQ(numberOfChannels, m_numberOfChannels);
+  DCHECK(numberOfSourceChannels);
 
   if (numberOfChannels != m_numberOfChannels || !numberOfSourceChannels) {
     destinationBus->zero();
diff --git a/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp b/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp
index cd62be4..7004855 100644
--- a/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp
+++ b/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp
@@ -216,7 +216,7 @@
     float releaseZone2,
     float releaseZone3,
     float releaseZone4) {
-  ASSERT(m_preDelayBuffers.size() == numberOfChannels);
+  DCHECK_EQ(m_preDelayBuffers.size(), numberOfChannels);
 
   float sampleRate = this->sampleRate();
 
diff --git a/third_party/WebKit/Source/platform/audio/HRTFDatabase.cpp b/third_party/WebKit/Source/platform/audio/HRTFDatabase.cpp
index 2787305..7da4c3e 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFDatabase.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFDatabase.cpp
@@ -76,7 +76,7 @@
             static_cast<float>(jj) / static_cast<float>(InterpolationFactor);
         m_elevations[i + jj] = HRTFElevation::createByInterpolatingSlices(
             m_elevations[i].get(), m_elevations[j].get(), x, sampleRate);
-        ASSERT(m_elevations[i + jj].get());
+        DCHECK(m_elevations[i + jj].get());
       }
     }
   }
diff --git a/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.cpp b/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.cpp
index ff73e21..d8cd48fd 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.cpp
@@ -52,7 +52,7 @@
 
   RefPtr<HRTFDatabaseLoader> loader = getLoaderMap().at(sampleRate);
   if (loader) {
-    ASSERT(sampleRate == loader->databaseSampleRate());
+    DCHECK_EQ(sampleRate, loader->databaseSampleRate());
     return loader.release();
   }
 
diff --git a/third_party/WebKit/Source/platform/audio/HRTFElevation.cpp b/third_party/WebKit/Source/platform/audio/HRTFElevation.cpp
index bf0df80..af42a3e 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFElevation.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFElevation.cpp
@@ -309,11 +309,13 @@
     HRTFElevation* hrtfElevation2,
     float x,
     float sampleRate) {
-  ASSERT(hrtfElevation1 && hrtfElevation2);
+  DCHECK(hrtfElevation1);
+  DCHECK(hrtfElevation2);
   if (!hrtfElevation1 || !hrtfElevation2)
     return nullptr;
 
-  ASSERT(x >= 0.0 && x < 1.0);
+  DCHECK_GE(x, 0.0);
+  DCHECK_LT(x, 1.0);
 
   std::unique_ptr<HRTFKernelList> kernelListL =
       WTF::makeUnique<HRTFKernelList>(NumberOfTotalAzimuths);
diff --git a/third_party/WebKit/Source/platform/audio/HRTFKernel.cpp b/third_party/WebKit/Source/platform/audio/HRTFKernel.cpp
index 32e5a4f..f6277e1 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFKernel.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFKernel.cpp
@@ -53,8 +53,8 @@
     return 0;
 
   // Check for power-of-2.
-  ASSERT(1UL << static_cast<unsigned>(log2(analysisFFTSize)) ==
-         analysisFFTSize);
+  DCHECK_EQ(1UL << static_cast<unsigned>(log2(analysisFFTSize)),
+            analysisFFTSize);
 
   FFTFrame estimationFrame(analysisFFTSize);
   estimationFrame.doFFT(impulseP);
@@ -83,7 +83,7 @@
   // Quick fade-out (apply window) at truncation point
   unsigned numberOfFadeOutFrames = static_cast<unsigned>(
       sampleRate / 4410);  // 10 sample-frames @44.1KHz sample-rate
-  ASSERT(numberOfFadeOutFrames < truncatedResponseLength);
+  DCHECK_LT(numberOfFadeOutFrames, truncatedResponseLength);
   if (numberOfFadeOutFrames < truncatedResponseLength) {
     for (unsigned i = truncatedResponseLength - numberOfFadeOutFrames;
          i < truncatedResponseLength; ++i) {
@@ -116,16 +116,18 @@
     HRTFKernel* kernel1,
     HRTFKernel* kernel2,
     float x) {
-  ASSERT(kernel1 && kernel2);
+  DCHECK(kernel1);
+  DCHECK(kernel2);
   if (!kernel1 || !kernel2)
     return nullptr;
 
-  ASSERT(x >= 0.0 && x < 1.0);
+  DCHECK_GE(x, 0.0);
+  DCHECK_LT(x, 1.0);
   x = clampTo(x, 0.0f, 1.0f);
 
   float sampleRate1 = kernel1->sampleRate();
   float sampleRate2 = kernel2->sampleRate();
-  ASSERT(sampleRate1 == sampleRate2);
+  DCHECK_EQ(sampleRate1, sampleRate2);
   if (sampleRate1 != sampleRate2)
     return nullptr;
 
diff --git a/third_party/WebKit/Source/platform/audio/HRTFPanner.cpp b/third_party/WebKit/Source/platform/audio/HRTFPanner.cpp
index 0861ebc2..efc2f8b 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFPanner.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFPanner.cpp
@@ -210,7 +210,7 @@
 
   // This algorithm currently requires that we process in power-of-two size
   // chunks at least AudioUtilities::kRenderQuantumFrames.
-  ASSERT(1UL << static_cast<int>(log2(framesToProcess)) == framesToProcess);
+  DCHECK_EQ(1UL << static_cast<int>(log2(framesToProcess)), framesToProcess);
   DCHECK_GE(framesToProcess, AudioUtilities::kRenderQuantumFrames);
 
   const unsigned framesPerSegment = AudioUtilities::kRenderQuantumFrames;
@@ -240,10 +240,10 @@
       return;
     }
 
-    ASSERT(frameDelayL1 / sampleRate() < MaxDelayTimeSeconds &&
-           frameDelayR1 / sampleRate() < MaxDelayTimeSeconds);
-    ASSERT(frameDelayL2 / sampleRate() < MaxDelayTimeSeconds &&
-           frameDelayR2 / sampleRate() < MaxDelayTimeSeconds);
+    DCHECK_LT(frameDelayL1 / sampleRate(), MaxDelayTimeSeconds);
+    DCHECK_LT(frameDelayR1 / sampleRate(), MaxDelayTimeSeconds);
+    DCHECK_LT(frameDelayL2 / sampleRate(), MaxDelayTimeSeconds);
+    DCHECK_LT(frameDelayR2 / sampleRate(), MaxDelayTimeSeconds);
 
     // Crossfade inter-aural delays based on transitions.
     double frameDelayL =
diff --git a/third_party/WebKit/Source/platform/audio/IIRFilter.cpp b/third_party/WebKit/Source/platform/audio/IIRFilter.cpp
index 2dca1b1..c914a6d 100644
--- a/third_party/WebKit/Source/platform/audio/IIRFilter.cpp
+++ b/third_party/WebKit/Source/platform/audio/IIRFilter.cpp
@@ -65,7 +65,7 @@
 
   // Sanity check to see if the feedback coefficients have been scaled
   // appropriately. It must be EXACTLY 1!
-  ASSERT(feedback[0] == 1);
+  DCHECK_EQ(feedback[0], 1);
 
   int feedbackLength = m_feedback->size();
   int feedforwardLength = m_feedforward->size();
diff --git a/third_party/WebKit/Source/platform/audio/MultiChannelResampler.cpp b/third_party/WebKit/Source/platform/audio/MultiChannelResampler.cpp
index 9e3e3be..175af08f 100644
--- a/third_party/WebKit/Source/platform/audio/MultiChannelResampler.cpp
+++ b/third_party/WebKit/Source/platform/audio/MultiChannelResampler.cpp
@@ -74,7 +74,7 @@
       return;
 
     // Copy the channel data from what we received from m_multiChannelProvider.
-    ASSERT(m_currentChannel <= m_numberOfChannels);
+    DCHECK_LE(m_currentChannel, m_numberOfChannels);
     if (m_currentChannel < m_numberOfChannels) {
       memcpy(bus->channel(0)->mutableData(),
              m_multiChannelBus->channel(m_currentChannel)->data(),
diff --git a/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.cpp b/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.cpp
index 3cb3469..3d1f3e78 100644
--- a/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.cpp
+++ b/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.cpp
@@ -61,7 +61,7 @@
     m_fftConvolver = WTF::makeUnique<FFTConvolver>(fftSize);
   } else {
     DCHECK(!stageOffset);
-    ASSERT(stageLength <= fftSize / 2);
+    DCHECK_LE(stageLength, fftSize / 2);
 
     m_directKernel = WTF::wrapUnique(new AudioFloatArray(fftSize / 2));
     m_directKernel->copyToRange(impulseResponse, 0, stageLength);
@@ -77,7 +77,7 @@
   // this out...
   size_t halfSize = fftSize / 2;
   if (!m_directMode) {
-    ASSERT(totalDelay >= halfSize);
+    DCHECK_GE(totalDelay, halfSize);
     if (totalDelay >= halfSize)
       totalDelay -= halfSize;
   }
@@ -177,7 +177,7 @@
     memcpy(preDelayedDestination, source, sizeof(float) * framesToProcess);
     m_preReadWriteIndex += framesToProcess;
 
-    ASSERT(m_preReadWriteIndex <= m_preDelayLength);
+    DCHECK_LE(m_preReadWriteIndex, m_preDelayLength);
     if (m_preReadWriteIndex >= m_preDelayLength)
       m_preReadWriteIndex = 0;
   }
diff --git a/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.cpp b/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.cpp
index ef1f7fa..8838bdd 100644
--- a/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.cpp
+++ b/third_party/WebKit/Source/platform/audio/ReverbInputBuffer.cpp
@@ -44,7 +44,7 @@
          sizeof(float) * numberOfFrames);
 
   m_writeIndex += numberOfFrames;
-  ASSERT(m_writeIndex <= bufferLength);
+  DCHECK_LE(m_writeIndex, bufferLength);
 
   if (m_writeIndex >= bufferLength)
     m_writeIndex = 0;
diff --git a/third_party/WebKit/Source/platform/audio/SincResampler.cpp b/third_party/WebKit/Source/platform/audio/SincResampler.cpp
index 7705c19..6d358ee 100644
--- a/third_party/WebKit/Source/platform/audio/SincResampler.cpp
+++ b/third_party/WebKit/Source/platform/audio/SincResampler.cpp
@@ -156,7 +156,8 @@
 
   // Consumes samples from the in-memory buffer.
   void provideInput(AudioBus* bus, size_t framesToProcess) override {
-    ASSERT(m_source && bus);
+    DCHECK(m_source);
+    DCHECK(bus);
     if (!m_source || !bus)
       return;
 
diff --git a/third_party/WebKit/Source/platform/audio/android/FFTFrameOpenMAXDLAndroid.cpp b/third_party/WebKit/Source/platform/audio/android/FFTFrameOpenMAXDLAndroid.cpp
index 366e6142..9fc2c676 100644
--- a/third_party/WebKit/Source/platform/audio/android/FFTFrameOpenMAXDLAndroid.cpp
+++ b/third_party/WebKit/Source/platform/audio/android/FFTFrameOpenMAXDLAndroid.cpp
@@ -35,9 +35,7 @@
 
 namespace blink {
 
-#if DCHECK_IS_ON()
 const unsigned kMaxFFTPow2Size = 15;
-#endif
 
 // Normal constructor: allocates for a given fftSize.
 FFTFrame::FFTFrame(unsigned fftSize)
@@ -49,7 +47,7 @@
       m_inverseContext(nullptr),
       m_complexData(fftSize) {
   // We only allow power of two.
-  ASSERT(1UL << m_log2FFTSize == m_FFTSize);
+  DCHECK_EQ(1UL << m_log2FFTSize, m_FFTSize);
 
   m_forwardContext = contextForSize(m_log2FFTSize);
   m_inverseContext = contextForSize(m_log2FFTSize);
@@ -143,7 +141,7 @@
 
 OMXFFTSpec_R_F32* FFTFrame::contextForSize(unsigned log2FFTSize) {
   DCHECK(log2FFTSize);
-  ASSERT(log2FFTSize <= kMaxFFTPow2Size);
+  DCHECK_LE(log2FFTSize, kMaxFFTPow2Size);
   int bufSize;
   OMXResult status = omxSP_FFTGetBufSize_R_F32(log2FFTSize, &bufSize);
 
diff --git a/third_party/WebKit/Source/platform/audio/ffmpeg/FFTFrameFFMPEG.cpp b/third_party/WebKit/Source/platform/audio/ffmpeg/FFTFrameFFMPEG.cpp
index 8c6c046..f46ac8c2 100644
--- a/third_party/WebKit/Source/platform/audio/ffmpeg/FFTFrameFFMPEG.cpp
+++ b/third_party/WebKit/Source/platform/audio/ffmpeg/FFTFrameFFMPEG.cpp
@@ -42,11 +42,9 @@
 
 namespace blink {
 
-#if DCHECK_IS_ON()
 // Max FFT size for FFMPEG.  WebAudio currently only uses FFTs up to size 15
 // (2^15 points).
 const int kMaxFFTPow2Size = 16;
-#endif
 
 // Normal constructor: allocates for a given fftSize.
 FFTFrame::FFTFrame(unsigned fftSize)
@@ -58,7 +56,7 @@
       m_inverseContext(nullptr),
       m_complexData(fftSize) {
   // We only allow power of two.
-  ASSERT(1UL << m_log2FFTSize == m_FFTSize);
+  DCHECK_EQ(1UL << m_log2FFTSize, m_FFTSize);
 
   m_forwardContext = contextForSize(fftSize, DFT_R2C);
   m_inverseContext = contextForSize(fftSize, IDFT_C2R);
@@ -157,7 +155,7 @@
   // by sharing the FFTFrames on a per-thread basis.
   DCHECK(fftSize);
   int pow2size = static_cast<int>(log2(fftSize));
-  ASSERT(pow2size < kMaxFFTPow2Size);
+  DCHECK_LT(pow2size, kMaxFFTPow2Size);
 
   RDFTContext* context = av_rdft_init(pow2size, (RDFTransformType)trans);
   return context;
diff --git a/third_party/WebKit/Source/platform/audio/ipp/FFTFrameIPP.cpp b/third_party/WebKit/Source/platform/audio/ipp/FFTFrameIPP.cpp
index f745e050..367707c 100644
--- a/third_party/WebKit/Source/platform/audio/ipp/FFTFrameIPP.cpp
+++ b/third_party/WebKit/Source/platform/audio/ipp/FFTFrameIPP.cpp
@@ -47,8 +47,8 @@
       m_imagData(fftSize / 2),
       m_complexData(fftSize) {
   // We only allow power of two.
-  ASSERT(1UL << m_log2FFTSize == m_FFTSize);
-  ASSERT(m_log2FFTSize <= maximumFFTPower2Size);
+  DCHECK_EQ(1UL << m_log2FFTSize, m_FFTSize);
+  DCHECK_LE(m_log2FFTSize, maximumFFTPower2Size);
 
   ippsDFTInitAlloc_R_32f(&m_DFTSpec, m_FFTSize, IPP_FFT_NODIV_BY_ANY,
                          ippAlgHintFast);
diff --git a/third_party/WebKit/Source/platform/audio/mac/FFTFrameMac.cpp b/third_party/WebKit/Source/platform/audio/mac/FFTFrameMac.cpp
index 47562dc1..f57f096 100644
--- a/third_party/WebKit/Source/platform/audio/mac/FFTFrameMac.cpp
+++ b/third_party/WebKit/Source/platform/audio/mac/FFTFrameMac.cpp
@@ -49,7 +49,7 @@
   m_log2FFTSize = static_cast<unsigned>(log2(fftSize));
 
   // We only allow power of two
-  ASSERT(1UL << m_log2FFTSize == m_FFTSize);
+  DCHECK_EQ(1UL << m_log2FFTSize, m_FFTSize);
 
   // Lazily create and share fftSetup with other frames
   m_FFTSetup = fftSetupForSize(fftSize);
@@ -116,7 +116,7 @@
   }
 
   int pow2size = static_cast<int>(log2(fftSize));
-  ASSERT(pow2size < kMaxFFTPow2Size);
+  DCHECK_LT(pow2size, kMaxFFTPow2Size);
   if (!fftSetups[pow2size])
     fftSetups[pow2size] = vDSP_create_fftsetup(pow2size, FFT_RADIX2);
 
diff --git a/third_party/WebKit/Source/platform/graphics/ExpensiveCanvasHeuristicParameters.h b/third_party/WebKit/Source/platform/graphics/ExpensiveCanvasHeuristicParameters.h
index a53210d..340d96c 100644
--- a/third_party/WebKit/Source/platform/graphics/ExpensiveCanvasHeuristicParameters.h
+++ b/third_party/WebKit/Source/platform/graphics/ExpensiveCanvasHeuristicParameters.h
@@ -98,7 +98,7 @@
   // acceleration on the destination first. If that does not succeed,
   // we disable acceleration on the source canvas. Either way, future
   // readbacks are prevented.
-  EnableAccelerationToAvoidReadbacks = 0,
+  EnableAccelerationToAvoidReadbacks = 1,
 
 };  // enum
 
diff --git a/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp b/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp
index 0442195..f9ca955 100644
--- a/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp
+++ b/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp
@@ -231,6 +231,12 @@
   if (isUnique() || other->isUnique())
     return false;
 
+  if (hasSuborigin() != other->hasSuborigin())
+    return false;
+
+  if (hasSuborigin() && suborigin()->name() != other->suborigin()->name())
+    return false;
+
   // document.domain handling, as per
   // https://html.spec.whatwg.org/multipage/browsers.html#dom-document-domain:
   //
@@ -257,17 +263,6 @@
   return canAccess;
 }
 
-bool SecurityOrigin::canAccessCheckSuborigins(
-    const SecurityOrigin* other) const {
-  if (hasSuborigin() != other->hasSuborigin())
-    return false;
-
-  if (hasSuborigin() && suborigin()->name() != other->suborigin()->name())
-    return false;
-
-  return canAccess(other);
-}
-
 bool SecurityOrigin::passesFileCheck(const SecurityOrigin* other) const {
   ASSERT(isLocal() && other->isLocal());
 
diff --git a/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.h b/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.h
index a88e255..838e219 100644
--- a/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.h
+++ b/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.h
@@ -102,19 +102,9 @@
   // SecurityOrigin. For example, call this function before allowing
   // script from one security origin to read or write objects from
   // another SecurityOrigin.
-  bool canAccess(const SecurityOrigin*) const;
-
-  // Same as canAccess, except that it adds an additional check to make sure
-  // that the SecurityOrigins have the same suborigin name. If you're not
-  // familiar with Suborigins, you probably want canAccess() for now.
-  // Suborigins is a spec in progress, and where it should be enforced is
-  // still in flux. See https://crbug.com/336894 for more details.
   //
-  // TODO(jww): Once the Suborigin spec has become more settled, and we are
-  // confident in the correctness of our implementation, canAccess should be
-  // made to check the suborigin and this should be turned into
-  // canAccessBypassSuborigin check, which should be the exceptional case.
-  bool canAccessCheckSuborigins(const SecurityOrigin*) const;
+  // This takes suborigins into account.
+  bool canAccess(const SecurityOrigin*) const;
 
   // Returns true if this SecurityOrigin can read content retrieved from
   // the given URL. For example, call this function before issuing
@@ -122,11 +112,10 @@
   bool canRequest(const KURL&) const;
 
   // Same as canRequest, except that it adds an additional check to make sure
-  // that the SecurityOrigin does not have a suborigin name. Like with
-  // canAccessCheckSuborigins() above, if you're not familiar with
-  // Suborigins, you probably want canRequest() for now. Suborigins is a spec
-  // in progress, and where it should be enforced is still in flux. See
-  // https://crbug.com/336894 for more details.
+  // that the SecurityOrigin does not have a suborigin name. If you're not
+  // familiar with Suborigins, you probably want canRequest() for now.
+  // Suborigins is a spec in progress, and where it should be enforced is still
+  // in flux. See https://crbug.com/336894 for more details.
   //
   // TODO(jww): Once the Suborigin spec has become more settled, and we are
   // confident in the correctness of our implementation, canRequest should be
diff --git a/third_party/WebKit/Source/platform/weborigin/SecurityOriginTest.cpp b/third_party/WebKit/Source/platform/weborigin/SecurityOriginTest.cpp
index 11521af..c8eb945 100644
--- a/third_party/WebKit/Source/platform/weborigin/SecurityOriginTest.cpp
+++ b/third_party/WebKit/Source/platform/weborigin/SecurityOriginTest.cpp
@@ -334,17 +334,16 @@
 
   struct TestCase {
     bool canAccess;
-    bool canAccessCheckSuborigins;
     const char* origin1;
     const char* origin2;
   };
 
   TestCase tests[] = {
-      {true, true, "https://foobar.com", "https://foobar.com"},
-      {false, false, "https://foobar.com", "https://bazbar.com"},
-      {true, false, "https://foobar.com", "https-so://name.foobar.com"},
-      {true, false, "https-so://name.foobar.com", "https://foobar.com"},
-      {true, true, "https-so://name.foobar.com", "https-so://name.foobar.com"},
+      {true, "https://foobar.com", "https://foobar.com"},
+      {false, "https://foobar.com", "https://bazbar.com"},
+      {false, "https://foobar.com", "https-so://name.foobar.com"},
+      {false, "https-so://name.foobar.com", "https://foobar.com"},
+      {true, "https-so://name.foobar.com", "https-so://name.foobar.com"},
   };
 
   for (size_t i = 0; i < WTF_ARRAY_LENGTH(tests); ++i) {
@@ -353,8 +352,6 @@
     RefPtr<SecurityOrigin> origin2 =
         SecurityOrigin::createFromString(tests[i].origin2);
     EXPECT_EQ(tests[i].canAccess, origin1->canAccess(origin2.get()));
-    EXPECT_EQ(tests[i].canAccessCheckSuborigins,
-              origin1->canAccessCheckSuborigins(origin2.get()));
   }
 }
 
diff --git a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
index 919b58b..6a39c13 100644
--- a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
+++ b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
@@ -203,9 +203,11 @@
 
 void WebFrameWidgetImpl::resizeVisualViewport(const WebSize& newSize) {
   // TODO(alexmos, kenrb): resizing behavior such as this should be changed
-  // to use Page messages.  https://crbug.com/599688.
-  page()->visualViewport().setSize(newSize);
-  page()->visualViewport().clampToBoundaries();
+  // to use Page messages.  This uses the visual viewport size to set size on
+  // both the WebViewImpl size and the Page's VisualViewport. If there are
+  // multiple OOPIFs on a page, this will currently be set redundantly by
+  // each of them. See https://crbug.com/599688.
+  view()->resize(newSize);
 
   view()->didUpdateFullscreenSize();
 }
diff --git a/third_party/WebKit/Tools/OWNERS b/third_party/WebKit/Tools/OWNERS
index c04522f..5c5aa17 100644
--- a/third_party/WebKit/Tools/OWNERS
+++ b/third_party/WebKit/Tools/OWNERS
@@ -1,6 +1,9 @@
 dpranke@chromium.org
-jochen@chromium.org
-peter@chromium.org
-tony@chromium.org
+jeffcarp@chromium.org
+qyearsley@chromium.org
+tansell@chromium.org
+tkent@chromium.org
+wangxianzhu@chromium.org
 
+# TEAM: blink-infra@chromium.org
 # COMPONENT: Blink>Infra
diff --git a/third_party/WebKit/Tools/Scripts/OWNERS b/third_party/WebKit/Tools/Scripts/OWNERS
deleted file mode 100644
index 72e8ffc..0000000
--- a/third_party/WebKit/Tools/Scripts/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/third_party/WebKit/public/BUILD.gn b/third_party/WebKit/public/BUILD.gn
index 03fd0e4..febc9f15 100644
--- a/third_party/WebKit/public/BUILD.gn
+++ b/third_party/WebKit/public/BUILD.gn
@@ -747,9 +747,6 @@
   visibility_blink = [ ":mojo_bindings_blink" ]
   sources = [
     "platform/modules/document_metadata/copyless_paste.mojom",
-
-    # The following file will be removed once the downstream is updated.
-    "platform/modules/document_metadata/copyless_paste-deprecated.mojom",
     "platform/modules/installation/installation.mojom",
     "platform/modules/installedapp/installed_app_provider.mojom",
     "platform/modules/installedapp/related_application.mojom",
diff --git a/third_party/WebKit/public/platform/modules/document_metadata/copyless_paste-deprecated.mojom b/third_party/WebKit/public/platform/modules/document_metadata/copyless_paste-deprecated.mojom
deleted file mode 100644
index 6d8f3b6..0000000
--- a/third_party/WebKit/public/platform/modules/document_metadata/copyless_paste-deprecated.mojom
+++ /dev/null
@@ -1,36 +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.
-
-module blink.mojom;
-
-import "url/mojo/url.mojom";
-
-// Due to the restriction of AppIndexing, all elements should be of the
-// same type. Non-array values are converted to arrays of one element.
-union Values {
-  array<bool> bool_values;
-  array<int64> long_values;
-  array<string> string_values;
-  array<Entity> entity_values;
-};
-
-// Key-value pair for the attributes of an |Entity|.
-struct Property {
-  string name;
-  Values values;
-};
-
-// Top-level metadata entry using schema.org vocabulary.
-// Tree structure of entities is possible.
-// Ref: https://developers.google.com/schemas/formats/json-ld
-struct Entity {
-  string type;  // Correspond to the "@type" key, defined in JSON-LD.
-  array<Property> properties;
-};
-
-struct WebPage {
-  url.mojom.Url url;
-  string title;
-  array<Entity> entities;
-};
diff --git a/third_party/libvpx/README.chromium b/third_party/libvpx/README.chromium
index 6848b8a..8d18a4a3 100644
--- a/third_party/libvpx/README.chromium
+++ b/third_party/libvpx/README.chromium
@@ -5,9 +5,9 @@
 License File: source/libvpx/LICENSE
 Security Critical: yes
 
-Date: Wednesday March 29 2017
+Date: Friday April 07 2017
 Branch: master
-Commit: 32b3d2f174f69f1484e024b276aff9226a751d4f
+Commit: 6af42f5102ad7c00d3fed389b186663a88d812ee
 
 Description:
 Contains the sources used to compile libvpx binaries used by Google Chrome and
diff --git a/third_party/libvpx/source/config/vpx_version.h b/third_party/libvpx/source/config/vpx_version.h
index 491209c1..eb2eb3d8 100644
--- a/third_party/libvpx/source/config/vpx_version.h
+++ b/third_party/libvpx/source/config/vpx_version.h
@@ -1,7 +1,7 @@
 #define VERSION_MAJOR  1
 #define VERSION_MINOR  6
 #define VERSION_PATCH  1
-#define VERSION_EXTRA  "409-g32b3d2f17"
+#define VERSION_EXTRA  "433-g6af42f510"
 #define VERSION_PACKED ((VERSION_MAJOR<<16)|(VERSION_MINOR<<8)|(VERSION_PATCH))
-#define VERSION_STRING_NOSP "v1.6.1-409-g32b3d2f17"
-#define VERSION_STRING      " v1.6.1-409-g32b3d2f17"
+#define VERSION_STRING_NOSP "v1.6.1-433-g6af42f510"
+#define VERSION_STRING      " v1.6.1-433-g6af42f510"
diff --git a/third_party/polymer/v1_0/bower.json b/third_party/polymer/v1_0/bower.json
index 720d993e..be512b27 100644
--- a/third_party/polymer/v1_0/bower.json
+++ b/third_party/polymer/v1_0/bower.json
@@ -53,7 +53,7 @@
     "paper-radio-button": "PolymerElements/paper-radio-button#1.3.1",
     "paper-radio-group": "PolymerElements/paper-radio-group#1.2.0",
     "paper-ripple": "PolymerElements/paper-ripple#1.0.9",
-    "paper-slider": "PolymerElements/paper-slider#1.0.13",
+    "paper-slider": "PolymerElements/paper-slider#1.0.15",
     "paper-spinner": "PolymerElements/paper-spinner#1.2.0",
     "paper-styles": "PolymerElements/paper-styles#1.1.4",
     "paper-tabs": "PolymerElements/paper-tabs#1.6.2",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/bower.json b/third_party/polymer/v1_0/components-chromium/paper-slider/bower.json
index abca1a4..8062b3ce 100644
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/bower.json
+++ b/third_party/polymer/v1_0/components-chromium/paper-slider/bower.json
@@ -1,6 +1,6 @@
 {
   "name": "paper-slider",
-  "version": "1.0.13",
+  "version": "1.0.15",
   "description": "A material design-style slider",
   "license": "http://polymer.github.io/LICENSE.txt",
   "authors": "The Polymer Authors",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider-extracted.js b/third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider-extracted.js
index b555b0a..d5f02d6 100644
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider-extracted.js
+++ b/third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider-extracted.js
@@ -114,8 +114,10 @@
       },
 
       keyBindings: {
-        'left down pagedown home': '_decrementKey',
-        'right up pageup end': '_incrementKey'
+        'left': '_leftKey',
+        'right': '_rightKey',
+        'down pagedown home': '_decrementKey',
+        'up pageup end': '_incrementKey'
       },
 
       /**
@@ -213,7 +215,9 @@
           this._trackStart(event);
         }
 
-        var dx = Math.min(this._maxx, Math.max(this._minx, event.detail.dx));
+        var direction = this._isRTL ? -1 : 1;
+        var dx = Math.min(
+            this._maxx, Math.max(this._minx, event.detail.dx * direction));
         this._x = this._startx + dx;
 
         var immediateValue = this._calcStep(this._calcKnobPosition(this._x / this._w));
@@ -251,6 +255,9 @@
         this._w = this.$.sliderBar.offsetWidth;
         var rect = this.$.sliderBar.getBoundingClientRect();
         var ratio = (event.detail.x - rect.left) / this._w;
+        if (this._isRTL) {
+          ratio = 1 - ratio;
+        }
         var prevRatio = this.ratio;
 
         this._setTransiting(true);
@@ -292,6 +299,9 @@
         if (steps > maxMarkers) {
           steps = maxMarkers;
         }
+        if (steps < 0 || !isFinite(steps)) {
+          steps = 0;
+        }
         this._setMarkers(new Array(steps));
       },
 
@@ -315,6 +325,27 @@
         });
       },
 
+      get _isRTL() {
+        if (this.__isRTL === undefined) {
+          this.__isRTL = window.getComputedStyle(this)['direction'] === 'rtl';
+        }
+        return this.__isRTL;
+      },
+
+      _leftKey: function(event) {
+        if (this._isRTL)
+          this._incrementKey(event);
+        else
+          this._decrementKey(event);
+      },
+
+      _rightKey: function(event) {
+        if (this._isRTL)
+          this._decrementKey(event);
+        else
+          this._incrementKey(event);
+      },
+
       _incrementKey: function(event) {
         if (!this.disabled) {
           if (event.detail.key === 'end') {
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider.html b/third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider.html
index a53a0bb..ab7e2dc7 100644
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider.html
+++ b/third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider.html
@@ -88,6 +88,11 @@
       :host(:focus) {
         outline: none;
       }
+        
+      :host-context([dir="rtl"]) #sliderContainer {
+        -webkit-transform: scaleX(-1);
+        transform: scaleX(-1);
+      }
 
       #sliderContainer {
         position: relative;
diff --git a/third_party/polymer/v1_0/components_summary.txt b/third_party/polymer/v1_0/components_summary.txt
index 8c1c7a4b..98995c2 100644
--- a/third_party/polymer/v1_0/components_summary.txt
+++ b/third_party/polymer/v1_0/components_summary.txt
@@ -1,353 +1,353 @@
 Name: font-roboto
-Repository: https://github.com/PolymerElements/font-roboto.git
+Repository: git://github.com/PolymerElements/font-roboto.git
 Tree: v1.0.1
 Revision: 21ce9b51a417fa9995cf6606e886aba0728f70a1
 Tree link: https://github.com/PolymerElements/font-roboto/tree/v1.0.1
 
 Name: iron-a11y-announcer
-Repository: https://github.com/PolymerElements/iron-a11y-announcer.git
+Repository: git://github.com/PolymerElements/iron-a11y-announcer.git
 Tree: v1.0.5
 Revision: 2432d39a1693ccd728cbe7eb55810063737d3403
 Tree link: https://github.com/PolymerElements/iron-a11y-announcer/tree/v1.0.5
 
 Name: iron-a11y-keys
-Repository: https://github.com/PolymerElements/iron-a11y-keys.git
+Repository: git://github.com/PolymerElements/iron-a11y-keys.git
 Tree: v1.0.7
 Revision: 7830e675c3d0df6e7a7377d64fc3d6e6ae0e65a5
 Tree link: https://github.com/PolymerElements/iron-a11y-keys/tree/v1.0.7
 
 Name: iron-a11y-keys-behavior
-Repository: https://github.com/PolymerElements/iron-a11y-keys-behavior.git
+Repository: git://github.com/PolymerElements/iron-a11y-keys-behavior.git
 Tree: v1.1.9
 Revision: 26243e0f8687b8ea3d95eed3cefb7661a388dbce
 Tree link: https://github.com/PolymerElements/iron-a11y-keys-behavior/tree/v1.1.9
 
 Name: iron-autogrow-textarea
-Repository: https://github.com/PolymerElements/iron-autogrow-textarea.git
+Repository: git://github.com/PolymerElements/iron-autogrow-textarea.git
 Tree: v1.0.13
 Revision: 399cfdbb3fac0c7b61d14a8cf8402c0195b0ff04
 Tree link: https://github.com/PolymerElements/iron-autogrow-textarea/tree/v1.0.13
 
 Name: iron-behaviors
-Repository: https://github.com/PolymerElements/iron-behaviors.git
+Repository: git://github.com/PolymerElements/iron-behaviors.git
 Tree: v1.0.17
 Revision: ef8e89b5f0aa4e8a6b51ca6491ea453bf395f94f
 Tree link: https://github.com/PolymerElements/iron-behaviors/tree/v1.0.17
 
 Name: iron-checked-element-behavior
-Repository: https://github.com/PolymerElements/iron-checked-element-behavior.git
+Repository: git://github.com/PolymerElements/iron-checked-element-behavior.git
 Tree: v1.0.5
 Revision: c70add47a9af62d30746587e8a1303fb390787c6
 Tree link: https://github.com/PolymerElements/iron-checked-element-behavior/tree/v1.0.5
 
 Name: iron-collapse
-Repository: https://github.com/PolymerElements/iron-collapse.git
+Repository: git://github.com/PolymerElements/iron-collapse.git
 Tree: v1.2.1
 Revision: 5f994b1ac109925f6849b134e479229a16a752db
 Tree link: https://github.com/PolymerElements/iron-collapse/tree/v1.2.1
 
 Name: iron-dropdown
-Repository: https://github.com/PolymerElements/iron-dropdown.git
+Repository: git://github.com/PolymerElements/iron-dropdown.git
 Tree: v1.5.2
 Revision: c5dbb9404ee56e00a0e893b95b1253be5181ae2b
 Tree link: https://github.com/PolymerElements/iron-dropdown/tree/v1.5.2
 
 Name: iron-fit-behavior
-Repository: https://github.com/PolymerElements/iron-fit-behavior.git
+Repository: git://github.com/PolymerElements/iron-fit-behavior.git
 Tree: v1.2.5
 Revision: 8bc774b9376882ae5ba09f9e007764c6ee9fbbca
 Tree link: https://github.com/PolymerElements/iron-fit-behavior/tree/v1.2.5
 
 Name: iron-flex-layout
-Repository: https://github.com/PolymerElements/iron-flex-layout.git
+Repository: git://github.com/PolymerElements/iron-flex-layout.git
 Tree: v1.3.1
 Revision: 6d88f29f3a7181daa2a5c7f678de44f0a0e6a717
 Tree link: https://github.com/PolymerElements/iron-flex-layout/tree/v1.3.1
 
 Name: iron-form-element-behavior
-Repository: https://github.com/PolymerElements/iron-form-element-behavior.git
+Repository: git://github.com/PolymerElements/iron-form-element-behavior.git
 Tree: v1.0.6
 Revision: cf9e09ded62daf3363852ce98260aaad1ed0fae1
 Tree link: https://github.com/PolymerElements/iron-form-element-behavior/tree/v1.0.6
 
 Name: iron-icon
-Repository: https://github.com/PolymerElements/iron-icon.git
+Repository: git://github.com/PolymerElements/iron-icon.git
 Tree: v1.0.10
 Revision: f4e146da4982ff96bb25db85290c09e8de4ec734
 Tree link: https://github.com/PolymerElements/iron-icon/tree/v1.0.10
 
 Name: iron-icons
-Repository: https://github.com/PolymerElements/iron-icons.git
+Repository: git://github.com/PolymerElements/iron-icons.git
 Tree: v1.1.3
 Revision: c13869b57a9464dfc3a1f26e89858f8be37e7441
 Tree link: https://github.com/PolymerElements/iron-icons/tree/v1.1.3
 
 Name: iron-iconset-svg
-Repository: https://github.com/PolymerElements/iron-iconset-svg.git
+Repository: git://github.com/PolymerElements/iron-iconset-svg.git
 Tree: v1.0.11
 Revision: 9ecdf97d854d36b7715c7b250bdab9b3d5cfaa26
 Tree link: https://github.com/PolymerElements/iron-iconset-svg/tree/v1.0.11
 
 Name: iron-input
-Repository: https://github.com/PolymerElements/iron-input.git
+Repository: git://github.com/PolymerElements/iron-input.git
 Tree: 1.0.10
 Revision: 01d17407672ad8033ee447c9c7a65162f13c8f49
 Tree link: https://github.com/PolymerElements/iron-input/tree/1.0.10
 
 Name: iron-list
-Repository: https://github.com/PolymerElements/iron-list.git
+Repository: git://github.com/PolymerElements/iron-list.git
 Tree: v1.4.4
 Revision: 93490bcb5baba88d642d1f550dad3ed52b2c864f
 Tree link: https://github.com/PolymerElements/iron-list/tree/v1.4.4
 
 Name: iron-location
-Repository: https://github.com/PolymerElements/iron-location.git
+Repository: git://github.com/PolymerElements/iron-location.git
 Tree: v0.8.8
 Revision: ab65525d349f13c467653a200711202eeae17ff0
 Tree link: https://github.com/PolymerElements/iron-location/tree/v0.8.8
 
 Name: iron-media-query
-Repository: https://github.com/PolymerElements/iron-media-query.git
+Repository: git://github.com/PolymerElements/iron-media-query.git
 Tree: v1.0.8
 Revision: 3f916be171af7a3e03eb019acdfea71055d3c744
 Tree link: https://github.com/PolymerElements/iron-media-query/tree/v1.0.8
 
 Name: iron-menu-behavior
-Repository: https://github.com/PolymerElements/iron-menu-behavior.git
+Repository: git://github.com/PolymerElements/iron-menu-behavior.git
 Tree: v1.3.0
 Revision: 707791b8166d9233a582fee5b2df0f6eaea40973
 Tree link: https://github.com/PolymerElements/iron-menu-behavior/tree/v1.3.0
 
 Name: iron-meta
-Repository: https://github.com/PolymerElements/iron-meta.git
+Repository: git://github.com/PolymerElements/iron-meta.git
 Tree: v1.1.2
 Revision: bae96531b63ea6d4ce982f5592248aea849c0f5a
 Tree link: https://github.com/PolymerElements/iron-meta/tree/v1.1.2
 
 Name: iron-overlay-behavior
-Repository: https://github.com/PolymerElements/iron-overlay-behavior.git
+Repository: git://github.com/PolymerElements/iron-overlay-behavior.git
 Tree: v1.10.2
 Revision: 27558b9ceeba7c670999818fc50eebe7e044ed5c
 Tree link: https://github.com/PolymerElements/iron-overlay-behavior/tree/v1.10.2
 
 Name: iron-pages
-Repository: https://github.com/PolymerElements/iron-pages.git
+Repository: git://github.com/PolymerElements/iron-pages.git
 Tree: v1.0.8
 Revision: 1399d2d51a0ce50edd2c79a6d37419967509bf2c
 Tree link: https://github.com/PolymerElements/iron-pages/tree/v1.0.8
 
 Name: iron-range-behavior
-Repository: https://github.com/PolymerElements/iron-range-behavior.git
+Repository: git://github.com/PolymerElements/iron-range-behavior.git
 Tree: v1.0.6
 Revision: 1317604307387599725b80b63cbd293102ea2db0
 Tree link: https://github.com/PolymerElements/iron-range-behavior/tree/v1.0.6
 
 Name: iron-resizable-behavior
-Repository: https://github.com/PolymerElements/iron-resizable-behavior.git
+Repository: git://github.com/PolymerElements/iron-resizable-behavior.git
 Tree: v1.0.5
 Revision: 354f287922e497b79797348b31596eebaccb9761
 Tree link: https://github.com/PolymerElements/iron-resizable-behavior/tree/v1.0.5
 
 Name: iron-scroll-target-behavior
-Repository: https://github.com/PolymerElements/iron-scroll-target-behavior.git
+Repository: git://github.com/PolymerElements/iron-scroll-target-behavior.git
 Tree: v1.1.0
 Revision: eb6a4c81b13d2437360a2d56d99f99d63277ce5d
 Tree link: https://github.com/PolymerElements/iron-scroll-target-behavior/tree/v1.1.0
 
 Name: iron-scroll-threshold
-Repository: https://github.com/PolymerElements/iron-scroll-threshold.git
+Repository: git://github.com/PolymerElements/iron-scroll-threshold.git
 Tree: v1.0.2
 Revision: 3b0ded11ea87703a4f1ef48cea93226fb0e71ef1
 Tree link: https://github.com/PolymerElements/iron-scroll-threshold/tree/v1.0.2
 
 Name: iron-selector
-Repository: https://github.com/PolymerElements/iron-selector.git
+Repository: git://github.com/PolymerElements/iron-selector.git
 Tree: v1.5.2
 Revision: 18e8e12dcd9a4560de480562f65935feed334b86
 Tree link: https://github.com/PolymerElements/iron-selector/tree/v1.5.2
 
 Name: iron-test-helpers
-Repository: https://github.com/PolymerElements/iron-test-helpers.git
+Repository: git://github.com/PolymerElements/iron-test-helpers.git
 Tree: v1.2.5
 Revision: a6a123f1330e8e146def1b947b4db0b951003fc0
 Tree link: https://github.com/PolymerElements/iron-test-helpers/tree/v1.2.5
 
 Name: iron-validatable-behavior
-Repository: https://github.com/PolymerElements/iron-validatable-behavior.git
+Repository: git://github.com/PolymerElements/iron-validatable-behavior.git
 Tree: v1.1.1
 Revision: 2ecd3f411e298733b29f1660f75cb9b03ea31d77
 Tree link: https://github.com/PolymerElements/iron-validatable-behavior/tree/v1.1.1
 
 Name: neon-animation
-Repository: https://github.com/PolymerElements/neon-animation.git
+Repository: git://github.com/PolymerElements/neon-animation.git
 Tree: v1.2.4
 Revision: bd4f50c9a84023363e80513e10456a18232b21a7
 Tree link: https://github.com/PolymerElements/neon-animation/tree/v1.2.4
 
 Name: paper-behaviors
-Repository: https://github.com/PolymerElements/paper-behaviors.git
+Repository: git://github.com/PolymerElements/paper-behaviors.git
 Tree: v1.0.12
 Revision: 424919089ce3a68dfac1de17e6a56f4e09048e95
 Tree link: https://github.com/PolymerElements/paper-behaviors/tree/v1.0.12
 
 Name: paper-button
-Repository: https://github.com/PolymerElements/paper-button.git
+Repository: git://github.com/PolymerElements/paper-button.git
 Tree: v1.0.13
 Revision: 649ac0c09fa74b5af258cb6debebba811024f7cc
 Tree link: https://github.com/PolymerElements/paper-button/tree/v1.0.13
 
 Name: paper-checkbox
-Repository: https://github.com/PolymerElements/paper-checkbox.git
+Repository: git://github.com/PolymerElements/paper-checkbox.git
 Tree: v1.4.0
 Revision: 1d1c9439fe3a056356233e04171fd9c62f0857fb
 Tree link: https://github.com/PolymerElements/paper-checkbox/tree/v1.4.0
 
 Name: paper-dialog
-Repository: https://github.com/PolymerElements/paper-dialog.git
+Repository: git://github.com/PolymerElements/paper-dialog.git
 Tree: v1.1.0
 Revision: 7f31fa918fbd562b516eb262f1ed527dcaf7b7c0
 Tree link: https://github.com/PolymerElements/paper-dialog/tree/v1.1.0
 
 Name: paper-dialog-behavior
-Repository: https://github.com/PolymerElements/paper-dialog-behavior.git
+Repository: git://github.com/PolymerElements/paper-dialog-behavior.git
 Tree: v1.2.7
 Revision: decc77ca55c0381cf01d7409ddf1eb966543e84e
 Tree link: https://github.com/PolymerElements/paper-dialog-behavior/tree/v1.2.7
 
 Name: paper-drawer-panel
-Repository: https://github.com/PolymerElements/paper-drawer-panel.git
+Repository: git://github.com/PolymerElements/paper-drawer-panel.git
 Tree: v1.0.10
 Revision: 34c1d82dc3048dff33c83047bfaa95414e36d673
 Tree link: https://github.com/PolymerElements/paper-drawer-panel/tree/v1.0.10
 
 Name: paper-dropdown-menu
-Repository: https://github.com/PolymerElements/paper-dropdown-menu.git
+Repository: git://github.com/PolymerElements/paper-dropdown-menu.git
 Tree: v1.4.1
 Revision: d4178271f56b2237870e5761d3717ee6d99b3ab4
 Tree link: https://github.com/PolymerElements/paper-dropdown-menu/tree/v1.4.1
 
 Name: paper-fab
-Repository: https://github.com/PolymerElements/paper-fab.git
+Repository: git://github.com/PolymerElements/paper-fab.git
 Tree: v1.2.0
 Revision: 691638ca9b922411926b916a592f01a5f25c1af8
 Tree link: https://github.com/PolymerElements/paper-fab/tree/v1.2.0
 
 Name: paper-header-panel
-Repository: https://github.com/PolymerElements/paper-header-panel.git
+Repository: git://github.com/PolymerElements/paper-header-panel.git
 Tree: v1.1.6
 Revision: 3bf4e4f22eb12dd98039bad0eaaa942c2e869961
 Tree link: https://github.com/PolymerElements/paper-header-panel/tree/v1.1.6
 
 Name: paper-icon-button
-Repository: https://github.com/PolymerElements/paper-icon-button.git
+Repository: git://github.com/PolymerElements/paper-icon-button.git
 Tree: v1.1.2
 Revision: 0a6c65f73765d6f6ae6cfe90ddc9905a2cf45f20
 Tree link: https://github.com/PolymerElements/paper-icon-button/tree/v1.1.2
 
 Name: paper-input
-Repository: https://github.com/PolymerElements/paper-input.git
+Repository: git://github.com/PolymerElements/paper-input.git
 Tree: v1.1.21
 Revision: 2628898fe8541df9df66bb353417c2ee168e7c6a
 Tree link: https://github.com/PolymerElements/paper-input/tree/v1.1.21
 
 Name: paper-item
-Repository: https://github.com/PolymerElements/paper-item.git
+Repository: git://github.com/PolymerElements/paper-item.git
 Tree: v1.2.1
 Revision: 1eab91333b318ae19e315866575b2dddd38e6abc
 Tree link: https://github.com/PolymerElements/paper-item/tree/v1.2.1
 
 Name: paper-listbox
-Repository: https://github.com/PolymerelEments/paper-listbox.git
+Repository: git://github.com/PolymerelEments/paper-listbox.git
 Tree: v1.1.2
 Revision: b0fde50f57db3e8e4926e9d046be9d3c159a2bff
 Tree link: https://github.com/PolymerelEments/paper-listbox/tree/v1.1.2
 
 Name: paper-material
-Repository: https://github.com/PolymerElements/paper-material.git
+Repository: git://github.com/PolymerElements/paper-material.git
 Tree: v1.0.6
 Revision: 6aef0896fcbc25f9f5bd1dd55f7679e6ab7f92ad
 Tree link: https://github.com/PolymerElements/paper-material/tree/v1.0.6
 
 Name: paper-menu
-Repository: https://github.com/PolymerElements/paper-menu.git
+Repository: git://github.com/PolymerElements/paper-menu.git
 Tree: v1.2.2
 Revision: f31a1dbc5b594a84c8c01eca0f23f9bcb8f6ba76
 Tree link: https://github.com/PolymerElements/paper-menu/tree/v1.2.2
 
 Name: paper-menu-button
-Repository: https://github.com/PolymerElements/paper-menu-button.git
+Repository: git://github.com/PolymerElements/paper-menu-button.git
 Tree: v1.5.2
 Revision: 0f43421bc76ca863b16b82b8e4c67efb0267b818
 Tree link: https://github.com/PolymerElements/paper-menu-button/tree/v1.5.2
 
 Name: paper-progress
-Repository: https://github.com/PolymerElements/paper-progress.git
+Repository: git://github.com/PolymerElements/paper-progress.git
 Tree: v1.0.10
 Revision: dfdde2b02947fb2dfd3f2d303ec17f7f4919348c
 Tree link: https://github.com/PolymerElements/paper-progress/tree/v1.0.10
 
 Name: paper-radio-button
-Repository: https://github.com/PolymerElements/paper-radio-button.git
+Repository: git://github.com/PolymerElements/paper-radio-button.git
 Tree: v1.3.1
 Revision: 3a961e367e3d25d7e192fca0c1496af0f3feab44
 Tree link: https://github.com/PolymerElements/paper-radio-button/tree/v1.3.1
 
 Name: paper-radio-group
-Repository: https://github.com/PolymerElements/paper-radio-group.git
+Repository: git://github.com/PolymerElements/paper-radio-group.git
 Tree: v1.2.0
 Revision: 1505d1a57fbeabcb779de3e9f0e9857acd8b5f13
 Tree link: https://github.com/PolymerElements/paper-radio-group/tree/v1.2.0
 
 Name: paper-ripple
-Repository: https://github.com/PolymerElements/paper-ripple.git
+Repository: git://github.com/PolymerElements/paper-ripple.git
 Tree: v1.0.9
 Revision: 2ec18bb9e80320bf20619e1359791fb632e9c768
 Tree link: https://github.com/PolymerElements/paper-ripple/tree/v1.0.9
 
 Name: paper-slider
-Repository: https://github.com/PolymerElements/paper-slider.git
-Tree: v1.0.13
-Revision: ed9d5b512be1591b402e8a9c4961145576f8cc02
-Tree link: https://github.com/PolymerElements/paper-slider/tree/v1.0.13
+Repository: git://github.com/PolymerElements/paper-slider.git
+Tree: v1.0.15
+Revision: b678296daa93526adc8bf4b75628a7a5759bdeea
+Tree link: https://github.com/PolymerElements/paper-slider/tree/v1.0.15
 
 Name: paper-spinner
-Repository: https://github.com/PolymerElements/paper-spinner.git
+Repository: git://github.com/PolymerElements/paper-spinner.git
 Tree: v1.2.0
 Revision: 66dc50a940aa9a3a067137defe1712aa85de6f35
 Tree link: https://github.com/PolymerElements/paper-spinner/tree/v1.2.0
 
 Name: paper-styles
-Repository: https://github.com/PolymerElements/paper-styles.git
+Repository: git://github.com/PolymerElements/paper-styles.git
 Tree: v1.1.4
 Revision: 885bbd74db88dab4fb5dc229cdf994c55fb2b31b
 Tree link: https://github.com/PolymerElements/paper-styles/tree/v1.1.4
 
 Name: paper-tabs
-Repository: https://github.com/PolymerElements/paper-tabs.git
+Repository: git://github.com/PolymerElements/paper-tabs.git
 Tree: v1.6.2
 Revision: fc3df3875f97cbcee8cfa8f4895d86a4fd2925c7
 Tree link: https://github.com/PolymerElements/paper-tabs/tree/v1.6.2
 
 Name: paper-toggle-button
-Repository: https://github.com/PolymerElements/paper-toggle-button.git
+Repository: git://github.com/PolymerElements/paper-toggle-button.git
 Tree: v1.3.0
 Revision: 2f279868a9c8965aba76017c7ee6008ac4879f6a
 Tree link: https://github.com/PolymerElements/paper-toggle-button/tree/v1.3.0
 
 Name: paper-toolbar
-Repository: https://github.com/PolymerElements/paper-toolbar.git
+Repository: git://github.com/PolymerElements/paper-toolbar.git
 Tree: v1.1.6
 Revision: 39b8ad381bd4ba7834ed8f30a938b49810b9204f
 Tree link: https://github.com/PolymerElements/paper-toolbar/tree/v1.1.6
 
 Name: paper-tooltip
-Repository: https://github.com/PolymerElements/paper-tooltip.git
+Repository: git://github.com/PolymerElements/paper-tooltip.git
 Tree: v1.1.3
 Revision: 05fe3cfcb0e7e6853fa337344227f74a2ec7e07e
 Tree link: https://github.com/PolymerElements/paper-tooltip/tree/v1.1.3
 
 Name: polymer
-Repository: https://github.com/Polymer/polymer.git
+Repository: git://github.com/Polymer/polymer.git
 Tree: v1.8.1
 Revision: d89302fc3755b04ad4171f431e719a08b5b816f3
 Tree link: https://github.com/Polymer/polymer/tree/v1.8.1
diff --git a/third_party/web-animations-js/sources/.bower.json b/third_party/web-animations-js/sources/.bower.json
index 60acaf7..b3fb204 100644
--- a/third_party/web-animations-js/sources/.bower.json
+++ b/third_party/web-animations-js/sources/.bower.json
@@ -35,7 +35,7 @@
     "tag": "2.2.2",
     "commit": "8cf9e3567c8a30e905e6a2aefb2ebf4120da6859"
   },
-  "_source": "https://github.com/web-animations/web-animations-js.git",
+  "_source": "git://github.com/web-animations/web-animations-js.git",
   "_target": "2.2.2",
   "_originalSource": "web-animations/web-animations-js"
 }
\ No newline at end of file
diff --git a/tools/OWNERS b/tools/OWNERS
index ac607d4..f096352 100644
--- a/tools/OWNERS
+++ b/tools/OWNERS
@@ -9,6 +9,12 @@
 scottmg@chromium.org
 thakis@chromium.org
 
+# These aren't actually great contact points for this directory, but
+# changes in this directory are rare and most changes happen in better-owned
+# subdirectories.
+#
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Build
 
 per-file bisect*.py=anantha@chromium.org
 per-file bisect*.py=prasadv@chromium.org
diff --git a/tools/blink_rename_merge_helper/COMPONENTS b/tools/blink_rename_merge_helper/COMPONENTS
index 36fab43..e39eb87 100644
--- a/tools/blink_rename_merge_helper/COMPONENTS
+++ b/tools/blink_rename_merge_helper/COMPONENTS
@@ -1,6 +1,10 @@
 {
   "pylib": "2af6a38142b87bc78f57f65030de579820406c4b",
-  "bin-win32": "9ad5d617cc0f709a9d03835db20b038e16a620c5",
   "bin-darwin": "be347b71b679958e1983fb230e05f3460f82cf5a",
-  "bin-linux*": "278ad33e61b43948af8d1040b5bd9a1c9f7b9f4a"
+  "include-darwin": "1a5693595308ffc3c2cd826ac21e538aeafe5345",
+  "lib-darwin": "29baf57b55dd0ab060baf0cd6461a7e0fa0105f4",
+  "bin-linux*": "278ad33e61b43948af8d1040b5bd9a1c9f7b9f4a",
+  "lib-linux*": "508b0ba0de0b4191a54360330f74cea8afd5ee93",
+  "bin-win32": "9ad5d617cc0f709a9d03835db20b038e16a620c5",
+  "lib-win32": "afb47503a4fd442c353ddaba6f17a81e6aa5a20f"
 }
diff --git a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
index 5ee01b9..c245ea0 100644
--- a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
+++ b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
@@ -668,8 +668,9 @@
                                               "compositorElementId",
                                               "constructionStack",
                                               "counterDirectives",
-                                              "counterMaps"
+                                              "counterMaps",
                                               "document",
+                                              "dragOperation",
                                               "element",
                                               "emptyChromeClient",
                                               "emptyEditorClient",
@@ -702,6 +703,7 @@
                                               "lineEndings",
                                               "lineJoin",
                                               "listItems",
+                                              "locationInBackingMap",
                                               "matchedProperties",
                                               "midpointState",
                                               "modifiers",
diff --git a/tools/clang/scripts/run_tool.py b/tools/clang/scripts/run_tool.py
index 53c7d0f..37ff3cc 100755
--- a/tools/clang/scripts/run_tool.py
+++ b/tools/clang/scripts/run_tool.py
@@ -195,6 +195,9 @@
       action='store_true',
       help='regenerate the compile database before running the tool')
   parser.add_argument(
+      '--shard',
+      metavar='<n>-of-<count>')
+  parser.add_argument(
       'compile_database',
       help='path to the directory that contains the compile database')
   parser.add_argument(
@@ -226,6 +229,19 @@
                         for f in git_filenames
                         if os.path.splitext(f)[1] in extensions]
 
+  if args.shard:
+    total_length = len(source_filenames)
+    match = re.match(r'(\d+)-of-(\d+)$', args.shard)
+    # Input is 1-based, but modular arithmetic is 0-based.
+    shard_number = int(match.group(1)) - 1
+    shard_count = int(match.group(2))
+    source_filenames = [
+        f[1] for f in enumerate(sorted(source_filenames))
+        if f[0] % shard_count == shard_number
+    ]
+    print 'Shard %d-of-%d will process %d entries out of %d' % (
+        shard_number, shard_count, len(source_filenames), total_length)
+
   dispatcher = _CompilerDispatcher(args.tool, args.tool_args,
                                    args.compile_database,
                                    source_filenames)
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index 2ea0d6d..44fc0d9 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -647,9 +647,6 @@
       '-DCMAKE_SHARED_LINKER_FLAGS=' + ' '.join(ldflags),
       '-DCMAKE_MODULE_LINKER_FLAGS=' + ' '.join(ldflags),
       '-DCMAKE_INSTALL_PREFIX=' + LLVM_BUILD_DIR,
-      # TODO(thakis): Remove this once official builds pass -Wl,--build-id
-      # explicitly, https://crbug.com/622775
-      '-DENABLE_LINKER_BUILD_ID=ON',
       '-DCHROMIUM_TOOLS_SRC=%s' % os.path.join(CHROMIUM_DIR, 'tools', 'clang'),
       '-DCHROMIUM_TOOLS=%s' % ';'.join(chrome_tools)]
 
diff --git a/tools/git/mass-rename.py b/tools/git/mass-rename.py
index 21fbef7..d6aa8efe4 100755
--- a/tools/git/mass-rename.py
+++ b/tools/git/mass-rename.py
@@ -28,13 +28,18 @@
   out, _ = popen.communicate()
   if popen.returncode != 0:
     return 1
-  for line in out.splitlines():
+  lines = out.splitlines()
+  for item, line in enumerate(lines, 1):
+    # Print progress
+    print '[%d/%d]' % (item, len(lines)),
+
     parts = line.split('\t')
     if len(parts) != 3:
       print 'Skipping: %s -- not a rename?' % parts
       continue
     attrs, fro, to = parts
     if attrs.split()[4].startswith('R'):
+      print 'Moving: %s' % fro
       subprocess.check_call([
         sys.executable,
         os.path.join(BASE_DIR, 'move_source_file.py'),
diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index 8a8cf528..76ebc562 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -37,9 +37,41 @@
 
 namespace {
 
+std::string EscapeString(const std::string& value) {
+  std::string result;
+  for (char c : value) {
+    switch (c) {
+      case '\n':
+        result += "&#10;";
+        break;
+      case '\r':
+        result += "&#13;";
+        break;
+      case '\t':
+        result += "&#9;";
+        break;
+      case '"':
+        result += "&quot;";
+        break;
+      case '<':
+        result += "&lt;";
+        break;
+      case '>':
+        result += "&gt;";
+        break;
+      case '&':
+        result += "&amp;";
+        break;
+      default:
+        result += c;
+    }
+  }
+  return result;
+}
+
 struct SemicolonSeparatedWriter {
   void operator()(const std::string& value, std::ostream& out) const {
-    out << value + ';';
+    out << EscapeString(value) + ';';
   }
 };
 
diff --git a/tools/mb/OWNERS b/tools/mb/OWNERS
index 2140fa5..f7dae03 100644
--- a/tools/mb/OWNERS
+++ b/tools/mb/OWNERS
@@ -1,4 +1,8 @@
-brettw@chromium.org
-phajdan.jr@chromium.org
 dpranke@chromium.org
+jbudorick@chromium.org
+phajdan.jr@chromium.org
 scottmg@chromium.org
+tansell@chromium.org
+
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Build
diff --git a/tools/md_browser/OWNERS b/tools/md_browser/OWNERS
index 3fc266c..5279ad8 100644
--- a/tools/md_browser/OWNERS
+++ b/tools/md_browser/OWNERS
@@ -1,2 +1,5 @@
 dpranke@chromium.org
 nodir@chromium.org
+
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Build
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index bdae8ad..ca44f8bf 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -15628,6 +15628,28 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
+<action name="StatusArea_StickyKeysDisabled">
+  <owner>minch@chromium.org</owner>
+  <description>Ash system menu: Accessibility: Disable sticky keys</description>
+</action>
+
+<action name="StatusArea_StickyKeysEnabled">
+  <owner>minch@chromium.org</owner>
+  <description>Ash system menu: Accessibility: Enable sticky keys</description>
+</action>
+
+<action name="StatusArea_TapDraggingDisabled">
+  <owner>minch@chromium.org</owner>
+  <description>
+    Ash system menu: Accessibility: Disable tap dragging
+  </description>
+</action>
+
+<action name="StatusArea_TapDraggingEnabled">
+  <owner>minch@chromium.org</owner>
+  <description>Ash system menu: Accessibility: Enable tap dragging</description>
+</action>
+
 <action name="StatusArea_Tracing_Default_Selected">
   <owner>bruthig@chromium.org</owner>
   <owner>tbuckley@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 96cbcd3..4f5b1f4 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -10669,6 +10669,25 @@
   </summary>
 </histogram>
 
+<histogram name="DataUse.FavIcon.Downstream" units="bytes">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the downstream network data use of favicon requests. Logged when the
+    request is completed or redirected. Zero bytes are recorded when the request
+    is served from cache.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.FavIcon.Downstream.Non200Response" units="bytes">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the downstream network data use of favicon requests with non 200
+    response code. Logged when the request is completed or redirected.
+  </summary>
+</histogram>
+
 <histogram name="DataUse.MessageSize" units="bytes">
   <owner>amohammadkhan@chromium.org</owner>
   <owner>bengr@chromium.org</owner>
@@ -84652,6 +84671,7 @@
   <int value="1" label="QUIC_STREAM_FACTORY"/>
   <int value="2" label="HTTP_STREAM_FACTORY_IMPL_JOB_ALT"/>
   <int value="3" label="HTTP_STREAM_FACTORY_IMPL_JOB_MAIN"/>
+  <int value="4" label="QUIC_HTTP_STREAM"/>
 </enum>
 
 <enum name="BrotliFilterDecodingStatus" type="int">
@@ -95043,6 +95063,8 @@
   <int value="1911" label="MenuItemElementIconAttribute"/>
   <int value="1912" label="WebkitCSSMatrixSetMatrixValue"/>
   <int value="1913" label="WebkitCSSMatrixConstructFromString"/>
+  <int value="1914" label="CanRequestURLHTTPContainingNewline"/>
+  <int value="1915" label="CanRequestURLNonHTTPContainingNewline"/>
 </enum>
 
 <enum name="FetchRequestMode" type="int">
@@ -101208,6 +101230,7 @@
   <int value="-378180863" label="disable-panels"/>
   <int value="-378033324" label="disable-win32k-renderer-lockdown"/>
   <int value="-364325011" label="enable-files-quick-view"/>
+  <int value="-364267715" label="disable-native-cups"/>
   <int value="-362022976" label="disable-quirks-client"/>
   <int value="-361948582" label="material-security-verbose"/>
   <int value="-360038744" label="invert-viewport-scroll-order"/>
@@ -106879,6 +106902,7 @@
   <int value="1360443600" label="PPB_OpenGLES2FramebufferMultisample;1.0"/>
   <int value="1374404330" label="PPB_BrokerTrusted;0.3"/>
   <int value="1374976378" label="PPB_OpenGLES2Query;1.0"/>
+  <int value="1388412013" label="PPB_AudioOutput(Dev);0.1"/>
   <int value="1423820530" label="PPB_ContentDecryptor_Private;0.14"/>
   <int value="1437724812" label="PPB_AudioConfig;1.0"/>
   <int value="1443771913" label="PPB_NetAddress;1.0"/>
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py
index 38abb4f..927965e 100755
--- a/tools/perf/core/perf_data_generator.py
+++ b/tools/perf/core/perf_data_generator.py
@@ -481,7 +481,7 @@
 
 
 def generate_isolate_script_entry(swarming_dimensions, test_args,
-    isolate_name, step_name, ignore_swarming_task_failure,
+    isolate_name, step_name, ignore_task_failure,
     override_compile_targets=None,
     swarming_timeout=None):
   result = {
@@ -498,7 +498,7 @@
       'can_use_on_swarming_builders': True,
       'expiration': 10 * 60 * 60, # 10 hour timeout for now (crbug.com/699312)
       'hard_timeout': swarming_timeout if swarming_timeout else 7200,
-      'ignore_swarming_task_failure': ignore_swarming_task_failure,
+      'ignore_task_failure': ignore_task_failure,
       'io_timeout': 3600,
       'dimension_sets': swarming_dimensions,
     }
@@ -521,18 +521,18 @@
   # When this is enabled on more than just windows machines we will need
   # --device=android
 
-  ignore_swarming_task_failure = False
+  ignore_task_failure = False
   step_name = benchmark_name
   if browser == 'reference':
     test_args.append('--output-trace-tag=_ref')
     step_name += '.reference'
     # We ignore the failures on reference builds since there is little we can do
     # to fix them except waiting for the reference build to update.
-    ignore_swarming_task_failure = True
+    ignore_task_failure = True
 
   return generate_isolate_script_entry(
       swarming_dimensions, test_args, 'telemetry_perf_tests',
-      step_name, ignore_swarming_task_failure=ignore_swarming_task_failure,
+      step_name, ignore_task_failure=ignore_task_failure,
       override_compile_targets=['telemetry_perf_tests'],
       swarming_timeout=BENCHMARK_SWARMING_TIMEOUTS.get(benchmark_name))
 
@@ -575,7 +575,7 @@
   return [
     generate_isolate_script_entry(
         [get_swarming_dimension(dimension, shard)], [], name, name,
-        ignore_swarming_task_failure=False)
+        ignore_task_failure=False)
     for name, shard in dimension['perf_tests']
   ]
 
diff --git a/tools/perf/core/perf_data_generator_unittest.py b/tools/perf/core/perf_data_generator_unittest.py
index 8d358773..4aad5c30 100644
--- a/tools/perf/core/perf_data_generator_unittest.py
+++ b/tools/perf/core/perf_data_generator_unittest.py
@@ -78,7 +78,7 @@
         'args': ['speedometer', '-v', '--upload-results',
                  '--output-format=chartjson', '--browser=release'],
         'swarming': {
-          'ignore_swarming_task_failure': False,
+          'ignore_task_failure': False,
           'dimension_sets': [{'os': 'SkyNet', 'id': 'T-850', 'pool': 'T-RIP'}],
           'hard_timeout': 7200,
           'can_use_on_swarming_builders': True,
@@ -100,7 +100,7 @@
                  '--output-format=chartjson', '--browser=reference',
                  '--output-trace-tag=_ref'],
         'swarming': {
-          'ignore_swarming_task_failure': True,
+          'ignore_task_failure': True,
           'dimension_sets': [{'os': 'SkyNet', 'id': 'T-850', 'pool': 'T-RIP'}],
           'hard_timeout': 7200,
           'can_use_on_swarming_builders': True,
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc
index b72f5e8..4e830355 100644
--- a/ui/accessibility/platform/ax_platform_node_base.cc
+++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -23,9 +23,7 @@
 
 gfx::Rect AXPlatformNodeBase::GetBoundsInScreen() const {
   CHECK(delegate_);
-  gfx::Rect bounds = gfx::ToEnclosingRect(GetData().location);
-  bounds.Offset(delegate_->GetGlobalCoordinateOffset());
-  return bounds;
+  return delegate_->GetScreenBoundsRect();
 }
 
 gfx::NativeViewAccessible AXPlatformNodeBase::GetParent() {
diff --git a/ui/accessibility/platform/ax_platform_node_delegate.h b/ui/accessibility/platform/ax_platform_node_delegate.h
index ab6de02..6960a44 100644
--- a/ui/accessibility/platform/ax_platform_node_delegate.h
+++ b/ui/accessibility/platform/ax_platform_node_delegate.h
@@ -49,8 +49,8 @@
   // Get the child of a node given a 0-based index.
   virtual gfx::NativeViewAccessible ChildAtIndex(int index) = 0;
 
-  // Get the offset to convert local coordinates to screen global coordinates.
-  virtual gfx::Vector2d GetGlobalCoordinateOffset() = 0;
+  // Get the bounds of this node in screen coordinates.
+  virtual gfx::Rect GetScreenBoundsRect() const = 0;
 
   // Do a *synchronous* hit test of the given location in global screen
   // coordinates, and the node within this node's subtree (inclusive) that's
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index bcfc909fc..c3535613 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -263,10 +263,9 @@
 STDMETHODIMP AXPlatformNodeWin::accLocation(
     LONG* x_left, LONG* y_top, LONG* width, LONG* height, VARIANT var_id) {
   COM_OBJECT_VALIDATE_VAR_ID_4_ARGS(var_id, x_left, y_top, width, height);
-  gfx::Rect bounds = gfx::ToEnclosingRect(GetData().location);
-  bounds += delegate_->GetGlobalCoordinateOffset();
+  gfx::Rect bounds = delegate_->GetScreenBoundsRect();
   *x_left = bounds.x();
-  *y_top  = bounds.y();
+  *y_top = bounds.y();
   *width  = bounds.width();
   *height = bounds.height();
 
diff --git a/ui/accessibility/platform/test_ax_node_wrapper.cc b/ui/accessibility/platform/test_ax_node_wrapper.cc
index 7e52077..6f918c29 100644
--- a/ui/accessibility/platform/test_ax_node_wrapper.cc
+++ b/ui/accessibility/platform/test_ax_node_wrapper.cc
@@ -5,6 +5,7 @@
 #include "base/containers/hash_tables.h"
 #include "ui/accessibility/ax_action_data.h"
 #include "ui/accessibility/platform/test_ax_node_wrapper.h"
+#include "ui/gfx/geometry/rect_conversions.h"
 
 namespace ui {
 
@@ -100,8 +101,10 @@
       nullptr;
 }
 
-gfx::Vector2d TestAXNodeWrapper::GetGlobalCoordinateOffset() {
-  return g_offset;
+gfx::Rect TestAXNodeWrapper::GetScreenBoundsRect() const {
+  gfx::RectF bounds = GetData().location;
+  bounds.Offset(g_offset);
+  return gfx::ToEnclosingRect(bounds);
 }
 
 gfx::NativeViewAccessible TestAXNodeWrapper::HitTestSync(int x, int y) {
diff --git a/ui/accessibility/platform/test_ax_node_wrapper.h b/ui/accessibility/platform/test_ax_node_wrapper.h
index a781a0c..4d3f2b9 100644
--- a/ui/accessibility/platform/test_ax_node_wrapper.h
+++ b/ui/accessibility/platform/test_ax_node_wrapper.h
@@ -34,7 +34,7 @@
   gfx::NativeViewAccessible GetParent() override;
   int GetChildCount() override;
   gfx::NativeViewAccessible ChildAtIndex(int index) override;
-  gfx::Vector2d GetGlobalCoordinateOffset() override;
+  gfx::Rect GetScreenBoundsRect() const override;
   gfx::NativeViewAccessible HitTestSync(int x, int y) override;
   gfx::NativeViewAccessible GetFocus() override;
   gfx::AcceleratedWidget GetTargetForNativeAccessibilityEvent() override;
diff --git a/ui/aura/env.cc b/ui/aura/env.cc
index 115f7e5..62475fd6 100644
--- a/ui/aura/env.cc
+++ b/ui/aura/env.cc
@@ -49,6 +49,11 @@
 
   for (EnvObserver& observer : observers_)
     observer.OnWillDestroyEnv();
+
+#if defined(USE_OZONE)
+  ui::OzonePlatform::Shutdown();
+#endif
+
   DCHECK_EQ(this, lazy_tls_ptr.Pointer()->Get());
   lazy_tls_ptr.Pointer()->Set(NULL);
 }
diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc
index 3c3e14f..0513496 100644
--- a/ui/aura/gestures/gesture_recognizer_unittest.cc
+++ b/ui/aura/gestures/gesture_recognizer_unittest.cc
@@ -4690,5 +4690,65 @@
   EXPECT_FALSE(queued_delegate->tap_down());
 }
 
+// Test for crbug/698843. Checks whether the events are routed to the correct
+// consumer in the event of TransferEventsTo() function call.
+TEST_F(GestureRecognizerTest, TransferEventsToRoutesAckCorrectly) {
+  std::unique_ptr<QueueTouchEventDelegate> delegate_1(
+      new QueueTouchEventDelegate(host()->dispatcher()));
+  TimedEvents tes;
+  const int kTouchId = 7;
+  gfx::Rect bounds(0, 0, 1000, 1000);
+
+  std::unique_ptr<aura::Window> window_1(CreateTestWindowWithDelegate(
+      delegate_1.get(), -1234, bounds, root_window()));
+
+  delegate_1->set_window(window_1.get());
+
+  delegate_1->Reset();
+  ui::TouchEvent press(
+      ui::ET_TOUCH_PRESSED, gfx::Point(512, 512), tes.Now(),
+      ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, kTouchId));
+  DispatchEventUsingWindowDispatcher(&press);
+
+  // Create a new consumer and Touch event delegate.
+  std::unique_ptr<QueueTouchEventDelegate> delegate_2(
+      new QueueTouchEventDelegate(host()->dispatcher()));
+  std::unique_ptr<aura::Window> window_2(CreateTestWindowWithDelegate(
+      delegate_2.get(), -2345, bounds, root_window()));
+  delegate_2->set_window(window_2.get());
+
+  // Transfer event sequence from previous window to the new window.
+  ui::GestureRecognizer::Get()->TransferEventsTo(
+      window_1.get(), window_2.get(),
+      ui::GestureRecognizer::ShouldCancelTouches::DontCancel);
+
+  delegate_1->Reset();
+  delegate_1->ReceivedAck();
+
+  // ACK for events that were dispatched before the transfer should go to the
+  // original consumer. See crbug/698843 for more details.
+  EXPECT_2_EVENTS(delegate_1->events(), ui::ET_GESTURE_BEGIN,
+                  ui::ET_GESTURE_TAP_DOWN);
+
+  delegate_1->Reset();
+
+  ui::TouchEvent release(
+      ui::ET_TOUCH_RELEASED, gfx::Point(550, 512), tes.LeapForward(50),
+      ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, kTouchId));
+  DispatchEventUsingWindowDispatcher(&release);
+
+  // Events dispatched after the transfer should go to the new window.
+  EXPECT_0_EVENTS(delegate_1->events());
+
+  delegate_2->ReceivedAck();
+
+  // The event sequence transfer should mean that the new window receives the
+  // gesture sequence state.
+  EXPECT_3_EVENTS(delegate_2->events(), ui::ET_GESTURE_SHOW_PRESS,
+                  ui::ET_GESTURE_TAP, ui::ET_GESTURE_END);
+
+  EXPECT_TRUE(delegate_2->tap());
+}
+
 }  // namespace test
 }  // namespace aura
diff --git a/ui/aura/mus/client_surface_embedder.cc b/ui/aura/mus/client_surface_embedder.cc
index eea5416..e04a77b2 100644
--- a/ui/aura/mus/client_surface_embedder.cc
+++ b/ui/aura/mus/client_surface_embedder.cc
@@ -30,51 +30,78 @@
 };
 }  // namespace
 
-ClientSurfaceEmbedder::ClientSurfaceEmbedder(Window* window) : window_(window) {
+ClientSurfaceEmbedder::ClientSurfaceEmbedder(
+    Window* window,
+    const gfx::Insets& client_area_insets)
+    : window_(window), client_area_insets_(client_area_insets) {
   surface_layer_ = base::MakeUnique<ui::Layer>(ui::LAYER_TEXTURED);
-  surface_layer_->SetVisible(true);
+  surface_layer_->SetMasksToBounds(true);
   // The frame provided by the parent window->layer() needs to show through
   // the surface layer.
   surface_layer_->SetFillsBoundsOpaquely(false);
 
-  clip_layer_ = base::MakeUnique<ui::Layer>(ui::LAYER_NOT_DRAWN);
-  clip_layer_->SetFillsBoundsOpaquely(false);
-
-  clip_layer_->Add(surface_layer_.get());
-  window_->layer()->Add(clip_layer_.get());
+  window_->layer()->Add(surface_layer_.get());
 
   // Window's layer may contain content from this client (the embedder), e.g.
   // this is the case with window decorations provided by Window Manager.
   // This content should appear underneath the content of the embedded client.
-  window_->layer()->StackAtTop(clip_layer_.get());
-
-  // We can't set this on window's layer, because that would clip the window
-  // shadow.
-  clip_layer_->SetMasksToBounds(true);
+  window_->layer()->StackAtTop(surface_layer_.get());
 }
 
 ClientSurfaceEmbedder::~ClientSurfaceEmbedder() = default;
 
 void ClientSurfaceEmbedder::SetPrimarySurfaceInfo(
     const cc::SurfaceInfo& surface_info) {
-  // TODO(mfomitchev): Currently the frame size may not match the window size.
-  // In the future the surface id will be created by Ash (and used with the
-  // surface layer) when the window resize happens, which will ensure that the
-  // surface size matches the window size (unless a timeout occurs).
-  gfx::Size frame_size = surface_info.size_in_pixels();
-  surface_layer_->SetBounds(
-      gfx::Rect(0, 0, frame_size.width(), frame_size.height()));
-  // Clip to window bounds.
-  clip_layer_->SetBounds(
-      gfx::Rect(0, 0, window_->bounds().width(), window_->bounds().height()));
-
   surface_layer_->SetShowPrimarySurface(
       surface_info, make_scoped_refptr(new StubSurfaceReferenceFactory));
+  surface_layer_->SetBounds(gfx::Rect(window_->bounds().size()));
 }
 
 void ClientSurfaceEmbedder::SetFallbackSurfaceInfo(
     const cc::SurfaceInfo& surface_info) {
   surface_layer_->SetFallbackSurface(surface_info);
+  UpdateSizeAndGutters();
+}
+
+void ClientSurfaceEmbedder::UpdateSizeAndGutters() {
+  surface_layer_->SetBounds(gfx::Rect(window_->bounds().size()));
+  // TODO(fsamuel): Fix this for high DPI.
+  gfx::Size fallback_surface_size(
+      surface_layer_->GetFallbackSurfaceInfo()
+          ? surface_layer_->GetFallbackSurfaceInfo()->size_in_pixels()
+          : gfx::Size());
+  gfx::Rect window_bounds(window_->bounds());
+  if (fallback_surface_size.width() < window_bounds.width()) {
+    right_gutter_ = base::MakeUnique<ui::Layer>(ui::LAYER_SOLID_COLOR);
+    // TODO(fsamuel): Use the embedded client's background color.
+    right_gutter_->SetColor(SK_ColorWHITE);
+    int width = window_bounds.width() - fallback_surface_size.width();
+    // The right gutter also includes the bottom-right corner, if necessary.
+    int height = window_bounds.height() - client_area_insets_.height();
+    right_gutter_->SetBounds(
+        gfx::Rect(client_area_insets_.left() + fallback_surface_size.width(),
+                  client_area_insets_.top(), width, height));
+    window_->layer()->Add(right_gutter_.get());
+  } else {
+    right_gutter_.reset();
+  }
+
+  // Only create a bottom gutter if a fallback surface is available. Otherwise,
+  // the right gutter will fill the whole window until a fallback is available.
+  if (!fallback_surface_size.IsEmpty() &&
+      fallback_surface_size.height() < window_bounds.height()) {
+    bottom_gutter_ = base::MakeUnique<ui::Layer>(ui::LAYER_SOLID_COLOR);
+    // TODO(fsamuel): Use the embedded client's background color.
+    bottom_gutter_->SetColor(SK_ColorWHITE);
+    int width = fallback_surface_size.width();
+    int height = window_bounds.height() - fallback_surface_size.height();
+    bottom_gutter_->SetBounds(
+        gfx::Rect(0, fallback_surface_size.height(), width, height));
+    window_->layer()->Add(bottom_gutter_.get());
+  } else {
+    bottom_gutter_.reset();
+  }
+  window_->layer()->StackAtTop(surface_layer_.get());
 }
 
 }  // namespace aura
diff --git a/ui/aura/mus/client_surface_embedder.h b/ui/aura/mus/client_surface_embedder.h
index 58d0bf9..c469789 100644
--- a/ui/aura/mus/client_surface_embedder.h
+++ b/ui/aura/mus/client_surface_embedder.h
@@ -5,11 +5,16 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "ui/gfx/geometry/insets.h"
 
 namespace cc {
 class SurfaceInfo;
 }
 
+namespace gfx {
+class Insets;
+}
+
 namespace ui {
 class Layer;
 }
@@ -23,7 +28,9 @@
 // layer, and updating them when the client submits new surfaces.
 class ClientSurfaceEmbedder {
  public:
-  explicit ClientSurfaceEmbedder(Window* window);
+  // TODO(fsamuel): Insets might differ when the window is maximized. We should
+  // deal with that case as well.
+  ClientSurfaceEmbedder(Window* window, const gfx::Insets& client_area_insets);
   ~ClientSurfaceEmbedder();
 
   // Updates the clip layer and primary SurfaceInfo of the surface layer based
@@ -34,6 +41,14 @@
   // updated.
   void SetFallbackSurfaceInfo(const cc::SurfaceInfo& surface_info);
 
+  // Update the surface layer size and the right and bottom gutter layers for
+  // the current window size.
+  void UpdateSizeAndGutters();
+
+  ui::Layer* RightGutterForTesting() { return right_gutter_.get(); }
+
+  ui::Layer* BottomGutterForTesting() { return bottom_gutter_.get(); }
+
  private:
   // The window which embeds the client.
   Window* window_;
@@ -41,8 +56,11 @@
   // Contains the client's content.
   std::unique_ptr<ui::Layer> surface_layer_;
 
-  // Used for clipping the surface layer to the window bounds.
-  std::unique_ptr<ui::Layer> clip_layer_;
+  // Used for showing a gutter when the content is not available.
+  std::unique_ptr<ui::Layer> right_gutter_;
+  std::unique_ptr<ui::Layer> bottom_gutter_;
+
+  gfx::Insets client_area_insets_;
 
   DISALLOW_COPY_AND_ASSIGN(ClientSurfaceEmbedder);
 };
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc
index a6c5ed0..1420228 100644
--- a/ui/aura/mus/window_port_mus.cc
+++ b/ui/aura/mus/window_port_mus.cc
@@ -44,7 +44,7 @@
     : WindowMus(window_mus_type), window_tree_client_(client) {}
 
 WindowPortMus::~WindowPortMus() {
-  SetPrimarySurfaceInfo(cc::SurfaceInfo());
+  client_surface_embedder_.reset();
 
   // DESTROY is only scheduled from DestroyFromServer(), meaning if DESTROY is
   // present then the server originated the change.
@@ -328,8 +328,8 @@
 
 void WindowPortMus::SetFallbackSurfaceInfo(
     const cc::SurfaceInfo& surface_info) {
-  DCHECK(client_surface_embedder_);
-  client_surface_embedder_->SetFallbackSurfaceInfo(surface_info);
+  fallback_surface_info_ = surface_info;
+  UpdateClientSurfaceEmbedder();
 }
 
 void WindowPortMus::DestroyFromServer() {
@@ -477,8 +477,6 @@
   change_data.visible = visible;
   if (!RemoveChangeByTypeAndData(ServerChangeType::VISIBLE, change_data))
     window_tree_client_->OnWindowMusSetVisible(this, visible);
-  // We should only embed a client if its visible.
-  UpdateClientSurfaceEmbedder();
 }
 
 void WindowPortMus::OnDidChangeBounds(const gfx::Rect& old_bounds,
@@ -487,6 +485,8 @@
   change_data.bounds_in_dip = new_bounds;
   if (!RemoveChangeByTypeAndData(ServerChangeType::BOUNDS, change_data))
     window_tree_client_->OnWindowMusBoundsChanged(this, old_bounds, new_bounds);
+  if (client_surface_embedder_)
+    client_surface_embedder_->UpdateSizeAndGutters();
 }
 
 std::unique_ptr<ui::PropertyData> WindowPortMus::OnWillChangeProperty(
@@ -536,13 +536,18 @@
 }
 
 void WindowPortMus::UpdateClientSurfaceEmbedder() {
-  if (!client_surface_embedder_ && primary_surface_info_.is_valid())
-    client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>(window_);
+  bool embeds_surface = window_mus_type() == WindowMusType::TOP_LEVEL_IN_WM ||
+                        window_mus_type() == WindowMusType::EMBED_IN_OWNER;
+  if (!embeds_surface)
+    return;
 
-  if (primary_surface_info_.is_valid() && window_->IsVisible())
-    client_surface_embedder_->SetPrimarySurfaceInfo(primary_surface_info_);
-  else
-    client_surface_embedder_.reset();
+  if (!client_surface_embedder_) {
+    client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>(
+        window_, window_tree_client_->normal_client_area_insets_);
+  }
+
+  client_surface_embedder_->SetPrimarySurfaceInfo(primary_surface_info_);
+  client_surface_embedder_->SetFallbackSurfaceInfo(fallback_surface_info_);
 }
 
 }  // namespace aura
diff --git a/ui/aura/mus/window_port_mus.h b/ui/aura/mus/window_port_mus.h
index e079d1a..ae26188 100644
--- a/ui/aura/mus/window_port_mus.h
+++ b/ui/aura/mus/window_port_mus.h
@@ -54,6 +54,10 @@
     return client_surface_embedder_.get();
   }
 
+  const cc::SurfaceInfo& PrimarySurfaceInfoForTesting() const {
+    return primary_surface_info_;
+  }
+
   void SetTextInputState(mojo::TextInputStatePtr state);
   void SetImeVisibility(bool visible, mojo::TextInputStatePtr state);
 
@@ -276,6 +280,7 @@
   base::Closure pending_compositor_frame_sink_request_;
 
   cc::SurfaceInfo primary_surface_info_;
+  cc::SurfaceInfo fallback_surface_info_;
 
   cc::LocalSurfaceId local_surface_id_;
   cc::LocalSurfaceIdAllocator local_surface_id_allocator_;
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc
index 6609d539..e96dc13 100644
--- a/ui/aura/mus/window_tree_client.cc
+++ b/ui/aura/mus/window_tree_client.cc
@@ -278,14 +278,16 @@
   SetWindowTree(std::move(window_tree));
 }
 
-void WindowTreeClient::ConnectAsWindowManager() {
+void WindowTreeClient::ConnectAsWindowManager(
+    bool automatically_create_display_roots) {
   DCHECK(window_manager_delegate_);
 
   ui::mojom::WindowManagerWindowTreeFactoryPtr factory;
   connector_->BindInterface(ui::mojom::kServiceName, &factory);
   ui::mojom::WindowTreePtr window_tree;
   factory->CreateWindowTree(MakeRequest(&window_tree),
-                            binding_.CreateInterfacePtrAndBind());
+                            binding_.CreateInterfacePtrAndBind(),
+                            automatically_create_display_roots);
   SetWindowTree(std::move(window_tree));
 }
 
@@ -1694,6 +1696,7 @@
 void WindowTreeClient::SetFrameDecorationValues(
     ui::mojom::FrameDecorationValuesPtr values) {
   if (window_manager_internal_client_) {
+    normal_client_area_insets_ = values->normal_client_area_insets;
     window_manager_internal_client_->WmSetFrameDecorationValues(
         std::move(values));
   }
diff --git a/ui/aura/mus/window_tree_client.h b/ui/aura/mus/window_tree_client.h
index a8b1f136..6b85cc9e 100644
--- a/ui/aura/mus/window_tree_client.h
+++ b/ui/aura/mus/window_tree_client.h
@@ -113,7 +113,8 @@
   void ConnectViaWindowTreeFactory();
 
   // Establishes the connection by way of WindowManagerWindowTreeFactory.
-  void ConnectAsWindowManager();
+  // See mojom for details on |automatically_create_display_roots|.
+  void ConnectAsWindowManager(bool automatically_create_display_roots = true);
 
   service_manager::Connector* connector() { return connector_; }
   ui::Gpu* gpu() { return gpu_.get(); }
@@ -608,6 +609,8 @@
   // Set to true once OnWmDisplayAdded() is called.
   bool got_initial_displays_ = false;
 
+  gfx::Insets normal_client_area_insets_;
+
   base::WeakPtrFactory<WindowTreeClient> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(WindowTreeClient);
diff --git a/ui/aura/mus/window_tree_client_unittest.cc b/ui/aura/mus/window_tree_client_unittest.cc
index 448df88..c5496f2 100644
--- a/ui/aura/mus/window_tree_client_unittest.cc
+++ b/ui/aura/mus/window_tree_client_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "cc/base/switches.h"
 #include "cc/surfaces/surface_info.h"
 #include "mojo/public/cpp/bindings/map.h"
 #include "services/ui/public/cpp/property_type_converters.h"
@@ -23,6 +24,7 @@
 #include "ui/aura/client/focus_client.h"
 #include "ui/aura/client/transient_window_client.h"
 #include "ui/aura/mus/capture_synchronizer.h"
+#include "ui/aura/mus/client_surface_embedder.h"
 #include "ui/aura/mus/focus_synchronizer.h"
 #include "ui/aura/mus/property_converter.h"
 #include "ui/aura/mus/window_mus.h"
@@ -101,6 +103,23 @@
 using WindowTreeClientWmTest = test::AuraMusWmTestBase;
 using WindowTreeClientClientTest = test::AuraMusClientTestBase;
 
+// WindowTreeClientWmTest with --enable-surface-synchronization.
+class WindowTreeClientWmTestSurfaceSync : public WindowTreeClientWmTest {
+ public:
+  WindowTreeClientWmTestSurfaceSync() {}
+  ~WindowTreeClientWmTestSurfaceSync() override {}
+
+  // WindowTreeClientWmTest:
+  void SetUp() override {
+    base::CommandLine::ForCurrentProcess()->AppendSwitch(
+        cc::switches::kEnableSurfaceSynchronization);
+    WindowTreeClientWmTest::SetUp();
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientWmTestSurfaceSync);
+};
+
 // WindowTreeClientWmTest with --force-device-scale-factor=2.
 class WindowTreeClientWmTestHighDPI : public WindowTreeClientWmTest {
  public:
@@ -144,46 +163,6 @@
   DISALLOW_COPY_AND_ASSIGN(WindowTreeClientClientTestHighDPI);
 };
 
-// Verifies that a ClientSurfaceEmbedder will only be allocated if a window
-// is visible that embeds a WindowTreeClient.
-TEST_F(WindowTreeClientWmTest, ClientSurfaceEmbedderIfVisible) {
-  Window window(nullptr);
-  // TOP_LEVEL_IN_WM and EMBED_IN_OWNER windows allocate cc::LocalSurfaceIds
-  // when their sizes change.
-  window.SetProperty(aura::client::kEmbedType,
-                     aura::client::WindowEmbedType::EMBED_IN_OWNER);
-  window.Init(ui::LAYER_NOT_DRAWN);
-
-  WindowMus* window_mus = WindowMus::Get(&window);
-  const cc::SurfaceId surface_id(
-      cc::FrameSinkId(1, 1),
-      cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
-  constexpr float device_scale_factor = 1.f;
-  constexpr gfx::Size size(100, 100);
-
-  window_mus->SetPrimarySurfaceInfo(
-      cc::SurfaceInfo(surface_id, device_scale_factor, size));
-
-  WindowPortMus* window_port_mus = WindowPortMus::Get(&window);
-  ASSERT_NE(nullptr, window_port_mus);
-  EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
-
-  // Showing the window results in the creation of a ClientSurfaceEmbedder.
-  window.Show();
-  EXPECT_NE(nullptr, window_port_mus->client_surface_embedder());
-
-  // Hiding it again removes the ClientSurfaceEmbedder.
-  window.Hide();
-  EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
-
-  // Setting an invalid cc::SurfaceInfo also eliminates the
-  // ClientSurfaceEmbedder.
-  window.Show();
-  EXPECT_NE(nullptr, window_port_mus->client_surface_embedder());
-  window_mus->SetPrimarySurfaceInfo(cc::SurfaceInfo());
-  EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
-}
-
 // Verifies bounds are reverted if the server replied that the change failed.
 TEST_F(WindowTreeClientWmTest, SetBoundsFailed) {
   Window window(nullptr);
@@ -225,8 +204,9 @@
 }
 
 // Verifies that a ClientSurfaceEmbedder is created for a window once it has
-// a bounds, a valid FrameSinkId and is visible.
-TEST_F(WindowTreeClientWmTest, ClientSurfaceEmbedderOnValidEmbedding) {
+// a bounds, and a valid FrameSinkId.
+TEST_F(WindowTreeClientWmTestSurfaceSync,
+       ClientSurfaceEmbedderOnValidEmbedding) {
   Window window(nullptr);
   // TOP_LEVEL_IN_WM and EMBED_IN_OWNER windows allocate cc::LocalSurfaceIds
   // when their sizes change.
@@ -234,29 +214,47 @@
                      aura::client::WindowEmbedType::EMBED_IN_OWNER);
   window.Init(ui::LAYER_NOT_DRAWN);
 
+  // The window will allocate a cc::LocalSurfaceId once it has a bounds.
+  WindowMus* window_mus = WindowMus::Get(&window);
+  ASSERT_NE(nullptr, window_mus);
+  EXPECT_FALSE(window_mus->GetLocalSurfaceId().is_valid());
   const gfx::Rect new_bounds(gfx::Rect(0, 0, 100, 100));
   ASSERT_NE(new_bounds, window.bounds());
   window.SetBounds(new_bounds);
   EXPECT_EQ(new_bounds, window.bounds());
-  WindowMus* window_mus = WindowMus::Get(&window);
-  ASSERT_NE(nullptr, window_mus);
   EXPECT_TRUE(window_mus->GetLocalSurfaceId().is_valid());
 
-  // An ClientSurfaceEmbedder isn't created UNTIL the window is visible and has
+  // An ClientSurfaceEmbedder isn't created UNTIL the window has a bounds and
   // a valid FrameSinkId.
   WindowPortMus* window_port_mus = WindowPortMus::Get(&window);
   ASSERT_NE(nullptr, window_port_mus);
   EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
 
-  // The window is now visible, but doesn't yet have a FrameSinkId.
-  window.Show();
-  EXPECT_EQ(nullptr, window_port_mus->client_surface_embedder());
-
   // Now that the window has a valid FrameSinkId, it can embed the client in a
   // CompositorFrame.
   window_tree_client()->OnFrameSinkIdAllocated(server_id(&window),
                                                cc::FrameSinkId(1, 1));
-  EXPECT_NE(nullptr, window_port_mus->client_surface_embedder());
+  ClientSurfaceEmbedder* client_surface_embedder =
+      window_port_mus->client_surface_embedder();
+  ASSERT_NE(nullptr, client_surface_embedder);
+
+  // Until the fallback surface fills the window, we will have gutter.
+  ui::Layer* right_gutter = client_surface_embedder->RightGutterForTesting();
+  ASSERT_NE(nullptr, right_gutter);
+  EXPECT_EQ(gfx::Rect(100, 100), right_gutter->bounds());
+  // We don't have a bottom gutter if the fallback surface size is (0, 0) as the
+  // right gutter will fill the whole area.
+  ASSERT_EQ(nullptr, client_surface_embedder->BottomGutterForTesting());
+
+  // When a SurfaceInfo arrives from the window server, we use it as the
+  // fallback SurfaceInfo. Here we issue the PrimarySurfaceInfo back to the
+  // client lib. This should cause the gutter to go away, eliminating overdraw.
+  window_tree_client()->OnWindowSurfaceChanged(
+      server_id(&window), window_port_mus->PrimarySurfaceInfoForTesting());
+
+  // The gutter is gone.
+  ASSERT_EQ(nullptr, client_surface_embedder->BottomGutterForTesting());
+  ASSERT_EQ(nullptr, client_surface_embedder->RightGutterForTesting());
 }
 
 // Verifies that the cc::LocalSurfaceId generated by an embedder changes when
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index bbbc7af..57fd1cc 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -686,6 +686,12 @@
     mirror->dest()->SetFallbackSurface(surface_info);
 }
 
+const cc::SurfaceInfo* Layer::GetFallbackSurfaceInfo() const {
+  if (surface_layer_)
+    return &surface_layer_->fallback_surface_info();
+  return nullptr;
+}
+
 void Layer::SetShowSolidColorContent() {
   DCHECK_EQ(type_, LAYER_SOLID_COLOR);
 
diff --git a/ui/compositor/layer.h b/ui/compositor/layer.h
index bbb0962..a97525d 100644
--- a/ui/compositor/layer.h
+++ b/ui/compositor/layer.h
@@ -303,6 +303,9 @@
   // display compositor, the fallback surface will be used.
   void SetFallbackSurface(const cc::SurfaceInfo& surface_info);
 
+  // Returns the fallback SurfaceInfo set by SetFallbackSurface.
+  const cc::SurfaceInfo* GetFallbackSurfaceInfo() const;
+
   bool has_external_content() {
     return texture_layer_.get() || surface_layer_.get();
   }
diff --git a/ui/events/BUILD.gn b/ui/events/BUILD.gn
index 26937014..873bb19 100644
--- a/ui/events/BUILD.gn
+++ b/ui/events/BUILD.gn
@@ -407,6 +407,7 @@
         "blink/web_input_event_unittest.cc",
         "devices/mojo/device_struct_traits_unittest.cc",
         "gestures/blink/web_gesture_curve_impl_unittest.cc",
+        "mojo/struct_traits_unittest.cc",
       ]
       deps += [
         "//cc",
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc
index c3515978..6c061fd 100644
--- a/ui/events/blink/input_handler_proxy_unittest.cc
+++ b/ui/events/blink/input_handler_proxy_unittest.cc
@@ -181,6 +181,7 @@
   MOCK_METHOD1(ScrollBy, cc::InputHandlerScrollResult(cc::ScrollState*));
   MOCK_METHOD1(ScrollEnd, void(cc::ScrollState*));
   MOCK_METHOD0(FlingScrollBegin, cc::InputHandler::ScrollStatus());
+  MOCK_METHOD0(ScrollingShouldSwitchtoMainThread, bool());
 
   std::unique_ptr<cc::SwapPromiseMonitor> CreateLatencyInfoSwapPromiseMonitor(
       ui::LatencyInfo* latency) override {
@@ -198,8 +199,6 @@
     return false;
   }
 
-  bool ScrollingShouldSwitchtoMainThread() override { return false; }
-
   void BindToClient(cc::InputHandlerClient* client,
                     bool touchpad_and_wheel_scroll_latching_enabled) override {}
 
@@ -371,14 +370,17 @@
     : public testing::Test,
       public testing::WithParamInterface<InputHandlerProxyTestType> {
  public:
-  InputHandlerProxyTest()
+  InputHandlerProxyTest(bool touchpad_and_wheel_scroll_latching_enabled = true)
       : synchronous_root_scroll_(GetParam() == ROOT_SCROLL_SYNCHRONOUS_HANDLER),
         install_synchronous_handler_(
             GetParam() == ROOT_SCROLL_SYNCHRONOUS_HANDLER ||
             GetParam() == CHILD_SCROLL_SYNCHRONOUS_HANDLER),
-        expected_disposition_(InputHandlerProxy::DID_HANDLE) {
+        expected_disposition_(InputHandlerProxy::DID_HANDLE),
+        touchpad_and_wheel_scroll_latching_enabled_(
+            touchpad_and_wheel_scroll_latching_enabled) {
     input_handler_.reset(
-        new TestInputHandlerProxy(&mock_input_handler_, &mock_client_, false));
+        new TestInputHandlerProxy(&mock_input_handler_, &mock_client_,
+                                  touchpad_and_wheel_scroll_latching_enabled_));
     scroll_result_did_scroll_.did_scroll = true;
     scroll_result_did_not_scroll_.did_scroll = false;
 
@@ -396,9 +398,7 @@
     gesture_.sourceDevice = blink::WebGestureDeviceTouchpad;
   }
 
-  ~InputHandlerProxyTest() {
-    input_handler_.reset();
-  }
+  virtual ~InputHandlerProxyTest() { input_handler_.reset(); }
 
 // This is defined as a macro so the line numbers can be traced back to the
 // correct spot when it fails.
@@ -481,6 +481,14 @@
   }
 
  protected:
+  void GestureFlingAnimatesTouchpad();
+  void DidReceiveInputEvent_ForFling();
+  void GestureScrollStarted();
+  void GestureFlingPassiveListener();
+  void GestureFlingStartedTouchpad();
+  void GestureFlingStopsAtContentEdge();
+  void GestureFlingTransferResetsTouchpad();
+
   const bool synchronous_root_scroll_;
   const bool install_synchronous_handler_;
   testing::StrictMock<MockInputHandler> mock_input_handler_;
@@ -493,9 +501,17 @@
   base::HistogramTester histogram_tester_;
   cc::InputHandlerScrollResult scroll_result_did_scroll_;
   cc::InputHandlerScrollResult scroll_result_did_not_scroll_;
+  bool touchpad_and_wheel_scroll_latching_enabled_;
 };
 
-class InputHandlerProxyEventQueueTest : public testing::Test {
+class InputHandlerProxyWithoutWheelScrollLatchingTest
+    : public InputHandlerProxyTest {
+ public:
+  InputHandlerProxyWithoutWheelScrollLatchingTest()
+      : InputHandlerProxyTest(false) {}
+};
+
+class InputHandlerProxyEventQueueTest : public testing::TestWithParam<bool> {
  public:
   InputHandlerProxyEventQueueTest() : weak_ptr_factory_(this) {
     feature_list_.InitAndEnableFeature(features::kVsyncAlignedInputEvents);
@@ -504,9 +520,10 @@
   ~InputHandlerProxyEventQueueTest() { input_handler_proxy_.reset(); }
 
   void SetUp() override {
+    bool wheel_scroll_latching_enabled = GetParam();
     event_disposition_recorder_.clear();
     input_handler_proxy_ = base::MakeUnique<TestInputHandlerProxy>(
-        &mock_input_handler_, &mock_client_, false);
+        &mock_input_handler_, &mock_client_, wheel_scroll_latching_enabled);
     if (input_handler_proxy_->compositor_event_queue_)
       input_handler_proxy_->compositor_event_queue_ =
           base::MakeUnique<CompositorThreadEventQueue>();
@@ -627,7 +644,7 @@
   VERIFY_AND_RESET_MOCKS();
 }
 
-TEST_P(InputHandlerProxyTest, GestureScrollStarted) {
+void InputHandlerProxyTest::GestureScrollStarted() {
   // We shouldn't send any events to the widget for this gesture.
   expected_disposition_ = InputHandlerProxy::DID_HANDLE;
   VERIFY_AND_RESET_MOCKS();
@@ -649,6 +666,8 @@
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
       .WillOnce(testing::Return(scroll_result_did_not_scroll_));
+  EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
+      .WillOnce(testing::Return(false));
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
 
   // Mark the event as handled if scroll happens.
@@ -673,6 +692,12 @@
 
   VERIFY_AND_RESET_MOCKS();
 }
+TEST_P(InputHandlerProxyTest, GestureScrollStarted) {
+  GestureScrollStarted();
+}
+TEST_P(InputHandlerProxyWithoutWheelScrollLatchingTest, GestureScrollStarted) {
+  GestureScrollStarted();
+}
 
 TEST_P(InputHandlerProxyTest, GestureScrollOnMainThread) {
   // We should send all events to the widget for this gesture.
@@ -957,14 +982,25 @@
   VERIFY_AND_RESET_MOCKS();
 }
 
-TEST_P(InputHandlerProxyTest, GestureFlingStartedTouchpad) {
+void InputHandlerProxyTest::GestureFlingStartedTouchpad() {
   // We shouldn't send any events to the widget for this gesture.
   expected_disposition_ = InputHandlerProxy::DID_HANDLE;
   VERIFY_AND_RESET_MOCKS();
 
+  EXPECT_CALL(mock_input_handler_, ScrollBegin(::testing::_, ::testing::_))
+      .WillOnce(testing::Return(kImplThreadScrollState));
+
+  // HandleGestureScrollBegin will set gesture_scroll_on_impl_thread_.
+  gesture_.setType(WebInputEvent::GestureScrollBegin);
+  EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
+  EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
+
+  VERIFY_AND_RESET_MOCKS();
+
   EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
       .WillOnce(testing::Return(kImplThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
 
   gesture_.setType(WebInputEvent::GestureFlingStart);
@@ -974,10 +1010,24 @@
 
   VERIFY_AND_RESET_MOCKS();
 
+  if (touchpad_and_wheel_scroll_latching_enabled_) {
+    // The fling cancellation shouldn't get deferred because velocityX is less
+    // than minimum.
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(1);
+  }
   // Verify that a GestureFlingCancel during an animation cancels it.
   gesture_.setType(WebInputEvent::GestureFlingCancel);
   gesture_.sourceDevice = blink::WebGestureDeviceTouchpad;
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
+
+  VERIFY_AND_RESET_MOCKS();
+}
+TEST_P(InputHandlerProxyTest, GestureFlingStartedTouchpad) {
+  GestureFlingStartedTouchpad();
+}
+TEST_P(InputHandlerProxyWithoutWheelScrollLatchingTest,
+       GestureFlingStartedTouchpad) {
+  GestureFlingStartedTouchpad();
 }
 
 TEST_P(InputHandlerProxyTest, GestureFlingTouchpadScrollLatchingEnabled) {
@@ -1070,6 +1120,8 @@
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_x, testing::Lt(0))))
       .WillOnce(testing::Return(scroll_result_did_not_scroll_));
+  EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
+      .WillOnce(testing::Return(false));
 
   // When scroll latching is enabled, ScrollEnd gets called when the last
   // ScrollBy did not scroll.
@@ -1133,11 +1185,21 @@
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
 }
 
-TEST_P(InputHandlerProxyTest, GestureFlingAnimatesTouchpad) {
+void InputHandlerProxyTest::GestureFlingAnimatesTouchpad() {
   // We shouldn't send any events to the widget for this gesture.
   expected_disposition_ = InputHandlerProxy::DID_HANDLE;
   VERIFY_AND_RESET_MOCKS();
 
+  EXPECT_CALL(mock_input_handler_, ScrollBegin(::testing::_, ::testing::_))
+      .WillOnce(testing::Return(kImplThreadScrollState));
+
+  // HandleGestureScrollBegin will set gesture_scroll_on_impl_thread_.
+  gesture_.setType(WebInputEvent::GestureScrollBegin);
+  EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
+  EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
+
+  VERIFY_AND_RESET_MOCKS();
+
   // On the fling start, we should schedule an animation but not actually start
   // scrolling.
   gesture_.setType(WebInputEvent::GestureFlingStart);
@@ -1155,7 +1217,8 @@
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
       .WillOnce(testing::Return(kImplThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
 
   VERIFY_AND_RESET_MOCKS();
@@ -1178,13 +1241,16 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kImplThreadScrollState));
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kImplThreadScrollState));
+  }
   EXPECT_CALL(
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_x, testing::Lt(0))))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
 
@@ -1198,10 +1264,20 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kMainThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollBy(testing::_)).Times(0);
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0);
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kMainThreadScrollState));
+    EXPECT_CALL(mock_input_handler_, ScrollBy(testing::_)).Times(0);
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0);
+  } else {
+    EXPECT_CALL(
+        mock_input_handler_,
+        ScrollBy(testing::Property(&cc::ScrollState::delta_x, testing::Lt(0))))
+        .WillOnce(testing::Return(scroll_result_did_not_scroll_));
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+    EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
+        .WillOnce(testing::Return(true));
+  }
   // Expected wheel fling animation parameters:
   // *) fling_delta and fling_point should match the original GestureFlingStart
   // event
@@ -1247,12 +1323,29 @@
 
   VERIFY_AND_RESET_MOCKS();
 }
+TEST_P(InputHandlerProxyTest, GestureFlingAnimatesTouchpad) {
+  GestureFlingAnimatesTouchpad();
+}
+TEST_P(InputHandlerProxyWithoutWheelScrollLatchingTest,
+       GestureFlingAnimatesTouchpad) {
+  GestureFlingAnimatesTouchpad();
+}
 
-TEST_P(InputHandlerProxyTest, GestureFlingPassiveListener) {
+void InputHandlerProxyTest::GestureFlingPassiveListener() {
   // We shouldn't send any events to the widget for this gesture.
   expected_disposition_ = InputHandlerProxy::DID_HANDLE;
   VERIFY_AND_RESET_MOCKS();
 
+  EXPECT_CALL(mock_input_handler_, ScrollBegin(::testing::_, ::testing::_))
+      .WillOnce(testing::Return(kImplThreadScrollState));
+
+  // HandleGestureScrollBegin will set gesture_scroll_on_impl_thread_.
+  gesture_.setType(WebInputEvent::GestureScrollBegin);
+  EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
+  EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
+
+  VERIFY_AND_RESET_MOCKS();
+
   // On the fling start, we should schedule an animation but not actually start
   // scrolling.
   gesture_.setType(WebInputEvent::GestureFlingStart);
@@ -1267,7 +1360,8 @@
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
       .WillOnce(testing::Return(kImplThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
 
   VERIFY_AND_RESET_MOCKS();
@@ -1291,8 +1385,10 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kPassive));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kImplThreadScrollState));
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kImplThreadScrollState));
+  }
   EXPECT_CALL(
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_x, testing::Lt(0))))
@@ -1308,7 +1404,8 @@
   EXPECT_CALL(mock_client_, DispatchNonBlockingEventToMainThread_(
                                 WheelEventsMatch(expected_wheel)))
       .Times(1);
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(1);
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(1);
 
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
@@ -1319,15 +1416,36 @@
   expected_disposition_ = InputHandlerProxy::DID_HANDLE;
   gesture_.setType(WebInputEvent::GestureFlingCancel);
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
+  if (touchpad_and_wheel_scroll_latching_enabled_) {
+    // The fling cancellation should be deferred.
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0);
+  }
 
   VERIFY_AND_RESET_MOCKS();
 }
+TEST_P(InputHandlerProxyTest, GestureFlingPassiveListener) {
+  GestureFlingPassiveListener();
+}
+TEST_P(InputHandlerProxyWithoutWheelScrollLatchingTest,
+       GestureFlingPassiveListener) {
+  GestureFlingPassiveListener();
+}
 
-TEST_P(InputHandlerProxyTest, GestureFlingTransferResetsTouchpad) {
+void InputHandlerProxyTest::GestureFlingTransferResetsTouchpad() {
   // We shouldn't send any events to the widget for this gesture.
   expected_disposition_ = InputHandlerProxy::DID_HANDLE;
   VERIFY_AND_RESET_MOCKS();
 
+  EXPECT_CALL(mock_input_handler_, ScrollBegin(::testing::_, ::testing::_))
+      .WillOnce(testing::Return(kImplThreadScrollState));
+
+  // HandleGestureScrollBegin will set gesture_scroll_on_impl_thread_.
+  gesture_.setType(WebInputEvent::GestureScrollBegin);
+  EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
+  EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
+
+  VERIFY_AND_RESET_MOCKS();
+
   // Start a gesture fling in the -X direction with zero Y movement.
   WebFloatPoint fling_delta = WebFloatPoint(1000, 0);
   WebPoint fling_point = WebPoint(7, 13);
@@ -1343,7 +1461,8 @@
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
       .WillOnce(testing::Return(kImplThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
   VERIFY_AND_RESET_MOCKS();
 
@@ -1362,13 +1481,16 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kImplThreadScrollState));
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kImplThreadScrollState));
+  }
   EXPECT_CALL(
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_x, testing::Lt(0))))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
 
@@ -1382,11 +1504,19 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kMainThreadScrollState));
-
-  EXPECT_CALL(mock_input_handler_, ScrollBy(testing::_)).Times(0);
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0);
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kMainThreadScrollState));
+    EXPECT_CALL(mock_input_handler_, ScrollBy(testing::_)).Times(0);
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0);
+  } else {
+    EXPECT_CALL(
+        mock_input_handler_,
+        ScrollBy(testing::Property(&cc::ScrollState::delta_x, testing::Lt(0))))
+        .WillOnce(testing::Return(scroll_result_did_not_scroll_));
+    EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
+        .WillOnce(testing::Return(true));
+  }
 
   // Expected wheel fling animation parameters:
   // *) fling_delta and fling_point should match the original GestureFlingStart
@@ -1410,6 +1540,9 @@
                          testing::Eq(10)),
           testing::Field(&WebActiveWheelFlingParameters::cumulativeScroll,
                          testing::Field(&WebSize::width, testing::Gt(0))))));
+  if (touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
 
@@ -1436,6 +1569,17 @@
   VERIFY_AND_RESET_MOCKS();
   input_handler_->MainThreadHasStoppedFlinging();
 
+  EXPECT_CALL(mock_input_handler_, ScrollBegin(::testing::_, ::testing::_))
+      .WillOnce(testing::Return(kImplThreadScrollState));
+
+  // HandleGestureScrollBegin will set gesture_scroll_on_impl_thread_.
+  expected_disposition_ = InputHandlerProxy::DID_HANDLE;
+  gesture_.setType(WebInputEvent::GestureScrollBegin);
+  EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
+  EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
+
+  VERIFY_AND_RESET_MOCKS();
+
   // Start a second gesture fling, this time in the +Y direction with no X.
   fling_delta = WebFloatPoint(0, -1000);
   fling_point = WebPoint(95, 87);
@@ -1449,7 +1593,8 @@
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
       .WillOnce(testing::Return(kImplThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   expected_disposition_ = InputHandlerProxy::DID_HANDLE;
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
 
@@ -1469,13 +1614,16 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kImplThreadScrollState));
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kImplThreadScrollState));
+  }
   EXPECT_CALL(
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
 
@@ -1485,10 +1633,19 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kMainThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollBy(testing::_)).Times(0);
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0);
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kMainThreadScrollState));
+    EXPECT_CALL(mock_input_handler_, ScrollBy(testing::_)).Times(0);
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)).Times(0);
+  } else {
+    EXPECT_CALL(
+        mock_input_handler_,
+        ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+        .WillOnce(testing::Return(scroll_result_did_not_scroll_));
+    EXPECT_CALL(mock_input_handler_, ScrollingShouldSwitchtoMainThread())
+        .WillOnce(testing::Return(true));
+  }
 
   // We should get parameters from the second fling, nothing from the first
   // fling should "leak".
@@ -1507,11 +1664,22 @@
                          testing::Eq(30)),
           testing::Field(&WebActiveWheelFlingParameters::cumulativeScroll,
                          testing::Field(&WebSize::height, testing::Lt(0))))));
+
+  if (touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
 
   VERIFY_AND_RESET_MOCKS();
 }
+TEST_P(InputHandlerProxyTest, GestureFlingTransferResetsTouchpad) {
+  GestureFlingTransferResetsTouchpad();
+}
+TEST_P(InputHandlerProxyWithoutWheelScrollLatchingTest,
+       GestureFlingTransferResetsTouchpad) {
+  GestureFlingTransferResetsTouchpad();
+}
 
 TEST_P(InputHandlerProxyTest, GestureFlingStartedTouchscreen) {
   // We shouldn't send any events to the widget for this gesture.
@@ -1919,11 +2087,21 @@
   VERIFY_AND_RESET_MOCKS();
 }
 
-TEST_P(InputHandlerProxyTest, GestureFlingStopsAtContentEdge) {
+void InputHandlerProxyTest::GestureFlingStopsAtContentEdge() {
   // We shouldn't send any events to the widget for this gesture.
   expected_disposition_ = InputHandlerProxy::DID_HANDLE;
   VERIFY_AND_RESET_MOCKS();
 
+  EXPECT_CALL(mock_input_handler_, ScrollBegin(::testing::_, ::testing::_))
+      .WillOnce(testing::Return(kImplThreadScrollState));
+
+  // HandleGestureScrollBegin will set gesture_scroll_on_impl_thread_.
+  gesture_.setType(WebInputEvent::GestureScrollBegin);
+  EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
+  EXPECT_TRUE(input_handler_->gesture_scroll_on_impl_thread_for_testing());
+
+  VERIFY_AND_RESET_MOCKS();
+
   // On the fling start, we should schedule an animation but not actually start
   // scrolling.
   gesture_.setType(WebInputEvent::GestureFlingStart);
@@ -1932,7 +2110,8 @@
   gesture_.data.flingStart.velocityY = fling_delta.y;
   EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
       .WillOnce(testing::Return(kImplThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(gesture_));
   VERIFY_AND_RESET_MOCKS();
@@ -1947,13 +2126,16 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kImplThreadScrollState));
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kImplThreadScrollState));
+  }
   EXPECT_CALL(
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Lt(0))))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
@@ -1969,8 +2151,10 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kImplThreadScrollState));
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kImplThreadScrollState));
+  }
   EXPECT_CALL(
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Lt(0))))
@@ -1982,7 +2166,8 @@
           overscroll.unused_scroll_delta,
           testing::Property(&gfx::Vector2dF::y, testing::Lt(0)),
           testing::_));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
@@ -1993,17 +2178,27 @@
   EXPECT_CALL(mock_input_handler_,
               GetEventListenerProperties(cc::EventListenerClass::kMouseWheel))
       .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
-  EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
-      .WillOnce(testing::Return(kImplThreadScrollState));
+  if (!touchpad_and_wheel_scroll_latching_enabled_) {
+    EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+        .WillOnce(testing::Return(kImplThreadScrollState));
+  }
   EXPECT_CALL(
       mock_input_handler_,
       ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Eq(0))))
       .WillOnce(testing::Return(scroll_result_did_scroll_));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   time += base::TimeDelta::FromMilliseconds(100);
   Animate(time);
   VERIFY_AND_RESET_MOCKS();
 }
+TEST_P(InputHandlerProxyTest, GestureFlingStopsAtContentEdge) {
+  GestureFlingStopsAtContentEdge();
+}
+TEST_P(InputHandlerProxyWithoutWheelScrollLatchingTest,
+       GestureFlingStopsAtContentEdge) {
+  GestureFlingStopsAtContentEdge();
+}
 
 TEST_P(InputHandlerProxyTest, GestureFlingNotCancelledBySmallTimeDelta) {
   // We shouldn't send any events to the widget for this gesture.
@@ -2943,12 +3138,12 @@
 
   VERIFY_AND_RESET_MOCKS();
 }
-
-TEST_P(InputHandlerProxyTest, DidReceiveInputEvent_ForFling) {
+void InputHandlerProxyTest::DidReceiveInputEvent_ForFling() {
   testing::StrictMock<MockInputHandlerProxyClientWithDidAnimateForInput>
       mock_client;
   input_handler_.reset(
-      new TestInputHandlerProxy(&mock_input_handler_, &mock_client, false));
+      new TestInputHandlerProxy(&mock_input_handler_, &mock_client,
+                                touchpad_and_wheel_scroll_latching_enabled_));
   if (install_synchronous_handler_) {
     EXPECT_CALL(mock_input_handler_, RequestUpdateForSynchronousInputHandler())
         .Times(1);
@@ -2964,7 +3159,8 @@
   EXPECT_SET_NEEDS_ANIMATE_INPUT(1);
   EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
       .WillOnce(testing::Return(kImplThreadScrollState));
-  EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
+  if (!touchpad_and_wheel_scroll_latching_enabled_)
+    EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_));
   EXPECT_EQ(InputHandlerProxy::DID_HANDLE,
       input_handler_->HandleInputEvent(gesture_));
   VERIFY_AND_RESET_MOCKS();
@@ -2976,6 +3172,13 @@
 
   VERIFY_AND_RESET_MOCKS();
 }
+TEST_P(InputHandlerProxyTest, DidReceiveInputEvent_ForFling) {
+  DidReceiveInputEvent_ForFling();
+}
+TEST_P(InputHandlerProxyWithoutWheelScrollLatchingTest,
+       DidReceiveInputEvent_ForFling) {
+  DidReceiveInputEvent_ForFling();
+}
 
 TEST(SynchronousInputHandlerProxyTest, StartupShutdown) {
   testing::StrictMock<MockInputHandler> mock_input_handler;
@@ -3254,7 +3457,7 @@
   VERIFY_AND_RESET_MOCKS();
 }
 
-TEST_F(InputHandlerProxyEventQueueTest, VSyncAlignedGestureScroll) {
+TEST_P(InputHandlerProxyEventQueueTest, VSyncAlignedGestureScroll) {
   base::HistogramTester histogram_tester;
 
   // Handle scroll on compositor.
@@ -3317,7 +3520,7 @@
   histogram_tester.ExpectUniqueSample(kCoalescedCountHistogram, 2, 1);
 }
 
-TEST_F(InputHandlerProxyEventQueueTest, VSyncAlignedGestureScrollPinchScroll) {
+TEST_P(InputHandlerProxyEventQueueTest, VSyncAlignedGestureScrollPinchScroll) {
   base::HistogramTester histogram_tester;
 
   // Handle scroll on compositor.
@@ -3386,7 +3589,7 @@
   histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 2, 2);
 }
 
-TEST_F(InputHandlerProxyEventQueueTest, VSyncAlignedQueueingTime) {
+TEST_P(InputHandlerProxyEventQueueTest, VSyncAlignedQueueingTime) {
   base::HistogramTester histogram_tester;
   std::unique_ptr<base::SimpleTestTickClock> tick_clock =
       base::MakeUnique<base::SimpleTestTickClock>();
@@ -3432,7 +3635,7 @@
                                      1);
 }
 
-TEST_F(InputHandlerProxyEventQueueTest, VSyncAlignedCoalesceScrollAndPinch) {
+TEST_P(InputHandlerProxyEventQueueTest, VSyncAlignedCoalesceScrollAndPinch) {
   // Start scroll in the first frame.
   EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
       .WillOnce(testing::Return(kImplThreadScrollState));
@@ -3484,7 +3687,7 @@
   testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
 }
 
-TEST_F(InputHandlerProxyEventQueueTest, OriginalEventsTracing) {
+TEST_P(InputHandlerProxyEventQueueTest, OriginalEventsTracing) {
   // Handle scroll on compositor.
   cc::InputHandlerScrollResult scroll_result_did_scroll_;
   scroll_result_did_scroll_.did_scroll = true;
@@ -3555,7 +3758,7 @@
   testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
 }
 
-TEST_F(InputHandlerProxyEventQueueTest, GestureScrollFlingOrder) {
+TEST_P(InputHandlerProxyEventQueueTest, GestureScrollFlingOrder) {
   // Handle scroll on compositor.
   cc::InputHandlerScrollResult scroll_result_did_scroll_;
   scroll_result_did_scroll_.did_scroll = true;
@@ -3604,7 +3807,7 @@
       !input_handler_proxy_->gesture_scroll_on_impl_thread_for_testing());
 }
 
-TEST_F(InputHandlerProxyEventQueueTest, GestureScrollAfterFling) {
+TEST_P(InputHandlerProxyEventQueueTest, GestureScrollAfterFling) {
   // Handle scroll on compositor.
   cc::InputHandlerScrollResult scroll_result_did_scroll_;
   scroll_result_did_scroll_.did_scroll = true;
@@ -3643,5 +3846,13 @@
                         InputHandlerProxyTest,
                         testing::ValuesIn(test_types));
 
+INSTANTIATE_TEST_CASE_P(AnimateInput,
+                        InputHandlerProxyWithoutWheelScrollLatchingTest,
+                        testing::ValuesIn(test_types));
+
+INSTANTIATE_TEST_CASE_P(InputHandlerProxyEventQueueTests,
+                        InputHandlerProxyEventQueueTest,
+                        testing::Bool());
+
 }  // namespace test
 }  // namespace ui
diff --git a/ui/events/gestures/gesture_recognizer_impl.cc b/ui/events/gestures/gesture_recognizer_impl.cc
index 206ef82c..5b2263f 100644
--- a/ui/events/gestures/gesture_recognizer_impl.cc
+++ b/ui/events/gestures/gesture_recognizer_impl.cc
@@ -244,6 +244,8 @@
 
 void GestureRecognizerImpl::SetupTargets(const TouchEvent& event,
                                          GestureConsumer* target) {
+  event_to_gesture_provider_[event.unique_event_id()] =
+      GetGestureProviderForConsumer(target);
   if (event.type() == ui::ET_TOUCH_RELEASED ||
       event.type() == ui::ET_TOUCH_CANCELLED) {
     touch_id_target_.erase(event.pointer_details().id);
@@ -280,8 +282,18 @@
     uint32_t unique_event_id,
     ui::EventResult result,
     GestureConsumer* consumer) {
-  GestureProviderAura* gesture_provider =
-      GetGestureProviderForConsumer(consumer);
+  GestureProviderAura* gesture_provider = nullptr;
+
+  // Check if we have already processed this event before dispatch and have a
+  // consumer associated with it.
+  auto event_to_gesture_provider_iterator =
+      event_to_gesture_provider_.find(unique_event_id);
+  if (event_to_gesture_provider_iterator != event_to_gesture_provider_.end()) {
+    gesture_provider = event_to_gesture_provider_iterator->second;
+    event_to_gesture_provider_.erase(event_to_gesture_provider_iterator);
+  } else {
+    gesture_provider = GetGestureProviderForConsumer(consumer);
+  }
   gesture_provider->OnTouchEventAck(unique_event_id, result != ER_UNHANDLED);
   return gesture_provider->GetAndResetPendingGestures();
 }
diff --git a/ui/events/gestures/gesture_recognizer_impl.h b/ui/events/gestures/gesture_recognizer_impl.h
index a3e0f573..036a1a6f 100644
--- a/ui/events/gestures/gesture_recognizer_impl.h
+++ b/ui/events/gestures/gesture_recognizer_impl.h
@@ -88,6 +88,12 @@
   std::map<GestureConsumer*, std::unique_ptr<GestureProviderAura>>
       consumer_gesture_provider_;
 
+  // Maps an event via its |unique_event_id| to the corresponding gesture
+  // provider. This avoids any invalid reference while routing ACKs for events
+  // that may arise post |TransferEventsTo()| function call.
+  // See http://crbug.com/698843 for more info.
+  std::map<uint32_t, GestureProviderAura*> event_to_gesture_provider_;
+
   // |touch_id_target_| maps a touch-id to its target window.
   // touch-ids are removed from |touch_id_target_| on
   // ET_TOUCH_RELEASE and ET_TOUCH_CANCEL.
diff --git a/ui/events/mojo/struct_traits_unittest.cc b/ui/events/mojo/struct_traits_unittest.cc
index a0e79f1..5f2ba7b 100644
--- a/ui/events/mojo/struct_traits_unittest.cc
+++ b/ui/events/mojo/struct_traits_unittest.cc
@@ -9,6 +9,8 @@
 #include "ui/events/keycodes/dom/dom_code.h"
 #include "ui/events/mojo/event.mojom.h"
 #include "ui/events/mojo/event_struct_traits.h"
+#include "ui/events/mojo/traits_test_service.mojom.h"
+#include "ui/latency/mojo/latency_info_struct_traits.h"
 
 namespace ui {
 
diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc
index 0b064b5..53226fd 100644
--- a/ui/gfx/canvas.cc
+++ b/ui/gfx/canvas.cc
@@ -104,15 +104,14 @@
 }
 
 ImageSkiaRep Canvas::ExtractImageRep() const {
-  // Make a bitmap to return, and a canvas to draw into it. We don't just want
-  // to call extractSubset or the copy constructor, since we want an actual copy
-  // of the bitmap.
-  const SkISize size = canvas_->getBaseLayerSize();
-  SkBitmap result;
-  result.allocN32Pixels(size.width(), size.height());
-
-  canvas_->readPixels(&result, 0, 0);
-  return ImageSkiaRep(result, image_scale_);
+  DCHECK(bitmap_);
+  SkBitmap bitmap_copy;
+  // copyTo() will perform a deep copy, which is what we want.
+  bool result = bitmap_->copyTo(&bitmap_copy);
+  // This should succeed since the destination bitmap is empty to begin with.
+  // The only failure is an allocation failure, which we want to DCHECK anyway.
+  DCHECK(result);
+  return ImageSkiaRep(bitmap_copy, image_scale_);
 }
 
 void Canvas::DrawDashedRect(const Rect& rect, SkColor color) {
diff --git a/ui/gfx/color_analysis.cc b/ui/gfx/color_analysis.cc
index 301b6b9..d3e8998 100644
--- a/ui/gfx/color_analysis.cc
+++ b/ui/gfx/color_analysis.cc
@@ -368,15 +368,16 @@
   const uint32_t* pixels = static_cast<uint32_t*>(bitmap.getPixels());
   const int pixel_count = bitmap.width() * bitmap.height();
 
-  // We don't know exactly how many distinct colors there will be, so just
-  // reserve enough space to keep the maximum number of table resizes low.
-  // In our testing set, 2/3 of wallpapers have <200k unique colors and 1/4
-  // have <100k. Thus 200k is picked as a number that usually amounts to zero
-  // resizes but usually doesn't waste a lot of space.
-  std::unordered_map<SkColor, int> color_counts(200000);
+  // For better performance, only consider at most 10k pixels (evenly
+  // distributed throughout the image). This has a very minor impact on the
+  // outcome but improves runtime substantially for large images. 10,007 is a
+  // prime number to reduce the chance of picking an unrepresentative sample.
+  constexpr int kMaxConsideredPixels = 10007;
+  const int pixel_increment = std::max(1, pixel_count / kMaxConsideredPixels);
+  std::unordered_map<SkColor, int> color_counts(kMaxConsideredPixels);
 
   // First extract all colors into counts.
-  for (int i = 0; i < pixel_count; ++i) {
+  for (int i = 0; i < pixel_count; i += pixel_increment) {
     // SkBitmap uses pre-multiplied alpha but the prominent color algorithm
     // needs non-pre-multiplied alpha.
     const SkColor pixel = SkUnPreMultiply::PMColorToColor(pixels[i]);
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py
index b6b98d1..a4268c63 100755
--- a/ui/gl/generate_bindings.py
+++ b/ui/gl/generate_bindings.py
@@ -1295,7 +1295,8 @@
                 'extensions': ['GL_ANGLE_robust_client_memory']}],
   'arguments':
       'GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, '
-      'GLenum type, GLsizei bufSize, GLsizei* length, void* data', },
+      'GLenum type, GLsizei bufSize, GLsizei* length, GLsizei* columns, '
+      'GLsizei* rows, void* data', },
 { 'return_type': 'void',
   'names': ['glReadPixels'],
   'arguments':
@@ -1306,7 +1307,8 @@
                 'extensions': ['GL_ANGLE_robust_client_memory']}],
   'arguments':
       'GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, '
-      'GLenum type, GLsizei bufSize, GLsizei* length, void* pixels', },
+      'GLenum type, GLsizei bufSize, GLsizei* length, GLsizei* columns, '
+      'GLsizei* rows, void* pixels', },
 { 'return_type': 'void',
   'names': ['glReleaseShaderCompiler'],
   'arguments': 'void', },
diff --git a/ui/gl/gl_bindings_api_autogen_gl.h b/ui/gl/gl_bindings_api_autogen_gl.h
index b2a6ae4..fcb7b66 100644
--- a/ui/gl/gl_bindings_api_autogen_gl.h
+++ b/ui/gl/gl_bindings_api_autogen_gl.h
@@ -849,6 +849,8 @@
                                 GLenum type,
                                 GLsizei bufSize,
                                 GLsizei* length,
+                                GLsizei* columns,
+                                GLsizei* rows,
                                 void* data) override;
 void glReadPixelsFn(GLint x,
                     GLint y,
@@ -865,6 +867,8 @@
                                GLenum type,
                                GLsizei bufSize,
                                GLsizei* length,
+                               GLsizei* columns,
+                               GLsizei* rows,
                                void* pixels) override;
 void glReleaseShaderCompilerFn(void) override;
 void glRenderbufferStorageEXTFn(GLenum target,
diff --git a/ui/gl/gl_bindings_autogen_gl.cc b/ui/gl/gl_bindings_autogen_gl.cc
index 8740c1d..7e7b73b2 100644
--- a/ui/gl/gl_bindings_autogen_gl.cc
+++ b/ui/gl/gl_bindings_autogen_gl.cc
@@ -4247,9 +4247,11 @@
                                            GLenum type,
                                            GLsizei bufSize,
                                            GLsizei* length,
+                                           GLsizei* columns,
+                                           GLsizei* rows,
                                            void* data) {
   driver_->fn.glReadnPixelsRobustANGLEFn(x, y, width, height, format, type,
-                                         bufSize, length, data);
+                                         bufSize, length, columns, rows, data);
 }
 
 void GLApiBase::glReadPixelsFn(GLint x,
@@ -4270,9 +4272,11 @@
                                           GLenum type,
                                           GLsizei bufSize,
                                           GLsizei* length,
+                                          GLsizei* columns,
+                                          GLsizei* rows,
                                           void* pixels) {
   driver_->fn.glReadPixelsRobustANGLEFn(x, y, width, height, format, type,
-                                        bufSize, length, pixels);
+                                        bufSize, length, columns, rows, pixels);
 }
 
 void GLApiBase::glReleaseShaderCompilerFn(void) {
@@ -7146,10 +7150,12 @@
                                             GLenum type,
                                             GLsizei bufSize,
                                             GLsizei* length,
+                                            GLsizei* columns,
+                                            GLsizei* rows,
                                             void* data) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glReadnPixelsRobustANGLE")
   gl_api_->glReadnPixelsRobustANGLEFn(x, y, width, height, format, type,
-                                      bufSize, length, data);
+                                      bufSize, length, columns, rows, data);
 }
 
 void TraceGLApi::glReadPixelsFn(GLint x,
@@ -7171,10 +7177,12 @@
                                            GLenum type,
                                            GLsizei bufSize,
                                            GLsizei* length,
+                                           GLsizei* columns,
+                                           GLsizei* rows,
                                            void* pixels) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glReadPixelsRobustANGLE")
   gl_api_->glReadPixelsRobustANGLEFn(x, y, width, height, format, type, bufSize,
-                                     length, pixels);
+                                     length, columns, rows, pixels);
 }
 
 void TraceGLApi::glReleaseShaderCompilerFn(void) {
@@ -10859,15 +10867,19 @@
                                             GLenum type,
                                             GLsizei bufSize,
                                             GLsizei* length,
+                                            GLsizei* columns,
+                                            GLsizei* rows,
                                             void* data) {
   GL_SERVICE_LOG("glReadnPixelsRobustANGLE"
                  << "(" << x << ", " << y << ", " << width << ", " << height
                  << ", " << GLEnums::GetStringEnum(format) << ", "
                  << GLEnums::GetStringEnum(type) << ", " << bufSize << ", "
                  << static_cast<const void*>(length) << ", "
+                 << static_cast<const void*>(columns) << ", "
+                 << static_cast<const void*>(rows) << ", "
                  << static_cast<const void*>(data) << ")");
   gl_api_->glReadnPixelsRobustANGLEFn(x, y, width, height, format, type,
-                                      bufSize, length, data);
+                                      bufSize, length, columns, rows, data);
 }
 
 void DebugGLApi::glReadPixelsFn(GLint x,
@@ -10893,15 +10905,19 @@
                                            GLenum type,
                                            GLsizei bufSize,
                                            GLsizei* length,
+                                           GLsizei* columns,
+                                           GLsizei* rows,
                                            void* pixels) {
   GL_SERVICE_LOG("glReadPixelsRobustANGLE"
                  << "(" << x << ", " << y << ", " << width << ", " << height
                  << ", " << GLEnums::GetStringEnum(format) << ", "
                  << GLEnums::GetStringEnum(type) << ", " << bufSize << ", "
                  << static_cast<const void*>(length) << ", "
+                 << static_cast<const void*>(columns) << ", "
+                 << static_cast<const void*>(rows) << ", "
                  << static_cast<const void*>(pixels) << ")");
   gl_api_->glReadPixelsRobustANGLEFn(x, y, width, height, format, type, bufSize,
-                                     length, pixels);
+                                     length, columns, rows, pixels);
 }
 
 void DebugGLApi::glReleaseShaderCompilerFn(void) {
@@ -14474,6 +14490,8 @@
                                                 GLenum type,
                                                 GLsizei bufSize,
                                                 GLsizei* length,
+                                                GLsizei* columns,
+                                                GLsizei* rows,
                                                 void* data) {
   NOTREACHED()
       << "Trying to call glReadnPixelsRobustANGLE() without current GL context";
@@ -14500,6 +14518,8 @@
                                                GLenum type,
                                                GLsizei bufSize,
                                                GLsizei* length,
+                                               GLsizei* columns,
+                                               GLsizei* rows,
                                                void* pixels) {
   NOTREACHED()
       << "Trying to call glReadPixelsRobustANGLE() without current GL context";
diff --git a/ui/gl/gl_bindings_autogen_gl.h b/ui/gl/gl_bindings_autogen_gl.h
index f72be65..6c9cc2de 100644
--- a/ui/gl/gl_bindings_autogen_gl.h
+++ b/ui/gl/gl_bindings_autogen_gl.h
@@ -1003,6 +1003,8 @@
                                                             GLenum type,
                                                             GLsizei bufSize,
                                                             GLsizei* length,
+                                                            GLsizei* columns,
+                                                            GLsizei* rows,
                                                             void* data);
 typedef void(GL_BINDING_CALL* glReadPixelsProc)(GLint x,
                                                 GLint y,
@@ -1019,6 +1021,8 @@
                                                            GLenum type,
                                                            GLsizei bufSize,
                                                            GLsizei* length,
+                                                           GLsizei* columns,
+                                                           GLsizei* rows,
                                                            void* pixels);
 typedef void(GL_BINDING_CALL* glReleaseShaderCompilerProc)(void);
 typedef void(GL_BINDING_CALL* glRenderbufferStorageEXTProc)(
@@ -2831,6 +2835,8 @@
                                           GLenum type,
                                           GLsizei bufSize,
                                           GLsizei* length,
+                                          GLsizei* columns,
+                                          GLsizei* rows,
                                           void* data) = 0;
   virtual void glReadPixelsFn(GLint x,
                               GLint y,
@@ -2847,6 +2853,8 @@
                                          GLenum type,
                                          GLsizei bufSize,
                                          GLsizei* length,
+                                         GLsizei* columns,
+                                         GLsizei* rows,
                                          void* pixels) = 0;
   virtual void glReleaseShaderCompilerFn(void) = 0;
   virtual void glRenderbufferStorageEXTFn(GLenum target,
diff --git a/ui/gl/gl_bindings_autogen_mock.cc b/ui/gl/gl_bindings_autogen_mock.cc
index ea0f41d..de274b3 100644
--- a/ui/gl/gl_bindings_autogen_mock.cc
+++ b/ui/gl/gl_bindings_autogen_mock.cc
@@ -2851,10 +2851,12 @@
                                               GLenum type,
                                               GLsizei bufSize,
                                               GLsizei* length,
+                                              GLsizei* columns,
+                                              GLsizei* rows,
                                               void* pixels) {
   MakeFunctionUnique("glReadPixelsRobustANGLE");
   interface_->ReadPixelsRobustANGLE(x, y, width, height, format, type, bufSize,
-                                    length, pixels);
+                                    length, columns, rows, pixels);
 }
 
 void GL_BINDING_CALL
@@ -2866,10 +2868,12 @@
                                                GLenum type,
                                                GLsizei bufSize,
                                                GLsizei* length,
+                                               GLsizei* columns,
+                                               GLsizei* rows,
                                                void* data) {
   MakeFunctionUnique("glReadnPixelsRobustANGLE");
   interface_->ReadnPixelsRobustANGLE(x, y, width, height, format, type, bufSize,
-                                     length, data);
+                                     length, columns, rows, data);
 }
 
 void GL_BINDING_CALL MockGLInterface::Mock_glReleaseShaderCompiler(void) {
diff --git a/ui/gl/gl_bindings_autogen_mock.h b/ui/gl/gl_bindings_autogen_mock.h
index 1e91945..340b8a6 100644
--- a/ui/gl/gl_bindings_autogen_mock.h
+++ b/ui/gl/gl_bindings_autogen_mock.h
@@ -1177,6 +1177,8 @@
                                                          GLenum type,
                                                          GLsizei bufSize,
                                                          GLsizei* length,
+                                                         GLsizei* columns,
+                                                         GLsizei* rows,
                                                          void* pixels);
 static void GL_BINDING_CALL Mock_glReadnPixelsRobustANGLE(GLint x,
                                                           GLint y,
@@ -1186,6 +1188,8 @@
                                                           GLenum type,
                                                           GLsizei bufSize,
                                                           GLsizei* length,
+                                                          GLsizei* columns,
+                                                          GLsizei* rows,
                                                           void* data);
 static void GL_BINDING_CALL Mock_glReleaseShaderCompiler(void);
 static void GL_BINDING_CALL Mock_glRenderbufferStorage(GLenum target,
diff --git a/ui/gl/gl_mock.h b/ui/gl/gl_mock.h
index e7440cf..ab78732f 100644
--- a/ui/gl/gl_mock.h
+++ b/ui/gl/gl_mock.h
@@ -116,6 +116,34 @@
                      GLenum format,
                      GLenum type));
 
+  void ReadPixelsRobustANGLE(GLint /*x*/,
+                             GLint /*y*/,
+                             GLsizei /*width*/,
+                             GLsizei /*height*/,
+                             GLenum /*format*/,
+                             GLenum /*type*/,
+                             GLsizei /*bufSize*/,
+                             GLsizei* /*length*/,
+                             GLsizei* /*columns*/,
+                             GLsizei* /*rows*/,
+                             void* /*pixels*/) {
+    NOTREACHED();
+  }
+
+  void ReadnPixelsRobustANGLE(GLint /*x*/,
+                              GLint /*y*/,
+                              GLsizei /*width*/,
+                              GLsizei /*height*/,
+                              GLenum /*format*/,
+                              GLenum /*type*/,
+                              GLsizei /*bufSize*/,
+                              GLsizei* /*length*/,
+                              GLsizei* /*columns*/,
+                              GLsizei* /*rows*/,
+                              void* /*data*/) {
+    NOTREACHED();
+  }
+
  private:
   static MockGLInterface* interface_;
 
diff --git a/ui/gl/gl_mock_autogen_gl.h b/ui/gl/gl_mock_autogen_gl.h
index 82525d6..60d1d2e 100644
--- a/ui/gl/gl_mock_autogen_gl.h
+++ b/ui/gl/gl_mock_autogen_gl.h
@@ -865,16 +865,8 @@
 MOCK_METHOD2(PushGroupMarkerEXT, void(GLsizei length, const char* marker));
 MOCK_METHOD2(QueryCounter, void(GLuint id, GLenum target));
 MOCK_METHOD1(ReadBuffer, void(GLenum src));
-MOCK_METHOD9(ReadnPixelsRobustANGLE,
-             void(GLint x,
-                  GLint y,
-                  GLsizei width,
-                  GLsizei height,
-                  GLenum format,
-                  GLenum type,
-                  GLsizei bufSize,
-                  GLsizei* length,
-                  void* data));
+// TODO(zmo): crbug.com/456340
+// glReadnPixelsRobustANGLE cannot be mocked because it has 11 args.
 MOCK_METHOD7(ReadPixels,
              void(GLint x,
                   GLint y,
@@ -883,16 +875,8 @@
                   GLenum format,
                   GLenum type,
                   void* pixels));
-MOCK_METHOD9(ReadPixelsRobustANGLE,
-             void(GLint x,
-                  GLint y,
-                  GLsizei width,
-                  GLsizei height,
-                  GLenum format,
-                  GLenum type,
-                  GLsizei bufSize,
-                  GLsizei* length,
-                  void* pixels));
+// TODO(zmo): crbug.com/456340
+// glReadPixelsRobustANGLE cannot be mocked because it has 11 args.
 MOCK_METHOD0(ReleaseShaderCompiler, void());
 MOCK_METHOD4(
     RenderbufferStorageEXT,
diff --git a/ui/gl/gl_stub_autogen_gl.h b/ui/gl/gl_stub_autogen_gl.h
index 9c48030..a49500dc 100644
--- a/ui/gl/gl_stub_autogen_gl.h
+++ b/ui/gl/gl_stub_autogen_gl.h
@@ -862,6 +862,8 @@
                                 GLenum type,
                                 GLsizei bufSize,
                                 GLsizei* length,
+                                GLsizei* columns,
+                                GLsizei* rows,
                                 void* data) override {}
 void glReadPixelsFn(GLint x,
                     GLint y,
@@ -878,6 +880,8 @@
                                GLenum type,
                                GLsizei bufSize,
                                GLsizei* length,
+                               GLsizei* columns,
+                               GLsizei* rows,
                                void* pixels) override {}
 void glReleaseShaderCompilerFn() override {}
 void glRenderbufferStorageEXTFn(GLenum target,
diff --git a/ui/latency/BUILD.gn b/ui/latency/BUILD.gn
index bcb868c..5afbb031 100644
--- a/ui/latency/BUILD.gn
+++ b/ui/latency/BUILD.gn
@@ -24,8 +24,8 @@
   deps = [
     ":latency",
     "//base",
-    "//base/test:run_all_unittests",
     "//base/test:test_support",
+    "//mojo/edk/test:run_all_unittests",
     "//testing/gmock",
     "//testing/gtest",
   ]
@@ -33,11 +33,13 @@
   if (!is_ios) {
     sources += [
       "ipc/latency_info_param_traits_unittest.cc",
-      "mojo/struct_traits_unittest",
+      "mojo/struct_traits_unittest.cc",
     ]
     deps += [
       "//ipc:test_support",
+      "//mojo/public/cpp/bindings",
       "//ui/latency/ipc",
+      "//ui/latency/mojo:test_interfaces",
     ]
   }
 }
diff --git a/ui/latency/mojo/struct_traits_unittest.cc b/ui/latency/mojo/struct_traits_unittest.cc
index b9a930f..5a30329 100644
--- a/ui/latency/mojo/struct_traits_unittest.cc
+++ b/ui/latency/mojo/struct_traits_unittest.cc
@@ -5,8 +5,8 @@
 #include "base/message_loop/message_loop.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "ui/events/mojo/latency_info_struct_traits.h"
-#include "ui/events/mojo/traits_test_service.mojom.h"
+#include "ui/latency/mojo/latency_info_struct_traits.h"
+#include "ui/latency/mojo/traits_test_service.mojom.h"
 
 namespace ui {
 
diff --git a/ui/message_center/views/notification_view_unittest.cc b/ui/message_center/views/notification_view_unittest.cc
index 6f1211b..4f9413d 100644
--- a/ui/message_center/views/notification_view_unittest.cc
+++ b/ui/message_center/views/notification_view_unittest.cc
@@ -132,10 +132,7 @@
     canvas.DrawColor(SK_ColorBLACK);
     view->OnPaint(&canvas);
 
-    SkBitmap bitmap;
-    bitmap.allocN32Pixels(canvas_size.width(), canvas_size.height());
-    canvas.sk_canvas()->readPixels(&bitmap, 0, 0);
-
+    SkBitmap bitmap = canvas.GetBitmap();
     // Incrementally inset each edge at its midpoint to find the bounds of the
     // rect containing the image's color. This assumes that the image is
     // centered in the canvas.
diff --git a/ui/ozone/platform/drm/ozone_platform_gbm.cc b/ui/ozone/platform/drm/ozone_platform_gbm.cc
index 89b42aa..58c83ab 100644
--- a/ui/ozone/platform/drm/ozone_platform_gbm.cc
+++ b/ui/ozone/platform/drm/ozone_platform_gbm.cc
@@ -17,8 +17,8 @@
 #include "base/command_line.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/interface_factory.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
 #include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h"
 #include "ui/base/ui_features.h"
 #include "ui/events/ozone/device/device_manager.h"
@@ -108,7 +108,7 @@
   std::unique_ptr<SystemInputInjector> CreateSystemInputInjector() override {
     return event_factory_ozone_->CreateSystemInputInjector();
   }
-  void AddInterfaces(service_manager::InterfaceRegistry* registry) override {
+  void AddInterfaces(service_manager::BinderRegistry* registry) override {
     registry->AddInterface<ozone::mojom::DeviceCursor>(this);
   }
   // service_manager::InterfaceFactory<ozone::mojom::DeviceCursor>:
diff --git a/ui/ozone/public/ozone_platform.cc b/ui/ozone/public/ozone_platform.cc
index ff426d5c..83bd63d 100644
--- a/ui/ozone/public/ozone_platform.cc
+++ b/ui/ozone/public/ozone_platform.cc
@@ -2,14 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/command_line.h"
+#include "ui/ozone/public/ozone_platform.h"
+
 #include "base/logging.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/events/devices/device_data_manager.h"
 #include "ui/ozone/platform_object.h"
 #include "ui/ozone/platform_selection.h"
-#include "ui/ozone/public/ozone_platform.h"
-#include "ui/ozone/public/ozone_switches.h"
 
 namespace ui {
 
@@ -18,7 +17,7 @@
 bool g_platform_initialized_ui = false;
 bool g_platform_initialized_gpu = false;
 
-}
+}  // namespace
 
 OzonePlatform::OzonePlatform() {
   DCHECK(!instance_) << "There should only be a single OzonePlatform.";
@@ -60,6 +59,12 @@
 }
 
 // static
+void OzonePlatform::Shutdown() {
+  delete instance_;
+  // Destructor resets pointer.
+}
+
+// static
 OzonePlatform* OzonePlatform::GetInstance() {
   DCHECK(instance_) << "OzonePlatform is not initialized";
   return instance_;
@@ -83,7 +88,7 @@
 }
 
 // static
-OzonePlatform* OzonePlatform::instance_;
+OzonePlatform* OzonePlatform::instance_ = nullptr;
 
 IPC::MessageFilter* OzonePlatform::GetGpuMessageFilter() {
   return nullptr;
@@ -93,7 +98,6 @@
   return base::MessageLoop::TYPE_DEFAULT;
 }
 
-void OzonePlatform::AddInterfaces(
-    service_manager::InterfaceRegistry* registry) {}
+void OzonePlatform::AddInterfaces(service_manager::BinderRegistry* registry) {}
 
 }  // namespace ui
diff --git a/ui/ozone/public/ozone_platform.h b/ui/ozone/public/ozone_platform.h
index 97cab2cf..8dc9fe3 100644
--- a/ui/ozone/public/ozone_platform.h
+++ b/ui/ozone/public/ozone_platform.h
@@ -24,8 +24,8 @@
 }
 
 namespace service_manager {
+class BinderRegistry;
 class Connector;
-class InterfaceRegistry;
 }
 
 namespace ui {
@@ -93,6 +93,10 @@
   // provided by |args| as with InitalizeForUI.
   static void InitializeForGPU(const InitParams& args);
 
+  // Deletes the instance. Does nothing if OzonePlatform has not yet been
+  // initialized.
+  static void Shutdown();
+
   static OzonePlatform* GetInstance();
 
   // Factory getters to override in subclasses. The returned objects will be
@@ -118,12 +122,12 @@
   // Ozone platform implementations may also choose to expose mojo interfaces to
   // internal functionality. Embedders wishing to take advantage of ozone mojo
   // implementations must invoke AddInterfaces with a valid
-  // service_manager::InterfaceRegistry* pointer to export all Mojo interfaces
+  // service_manager::BinderRegistry* pointer to export all Mojo interfaces
   // defined within Ozone.
   //
   // A default do-nothing implementation is provided to permit platform
   // implementations to opt out of implementing any Mojo interfaces.
-  virtual void AddInterfaces(service_manager::InterfaceRegistry* registry);
+  virtual void AddInterfaces(service_manager::BinderRegistry* registry);
 
  private:
   virtual void InitializeUI(const InitParams& params) = 0;
diff --git a/ui/views/accessibility/native_view_accessibility_auralinux.cc b/ui/views/accessibility/native_view_accessibility_auralinux.cc
index fabcb24..89b42737 100644
--- a/ui/views/accessibility/native_view_accessibility_auralinux.cc
+++ b/ui/views/accessibility/native_view_accessibility_auralinux.cc
@@ -91,9 +91,7 @@
     return widget->GetRootView()->GetNativeViewAccessible();
   }
 
-  gfx::Vector2d GetGlobalCoordinateOffset() override {
-    return gfx::Vector2d();
-  }
+  gfx::Rect GetScreenBoundsRect() const override { return gfx::Rect(); }
 
   gfx::NativeViewAccessible HitTestSync(int x, int y) override {
     return nullptr;
diff --git a/ui/views/accessibility/native_view_accessibility_base.cc b/ui/views/accessibility/native_view_accessibility_base.cc
index 5e5bdcd..2ed7e26f 100644
--- a/ui/views/accessibility/native_view_accessibility_base.cc
+++ b/ui/views/accessibility/native_view_accessibility_base.cc
@@ -111,8 +111,8 @@
   return nullptr;
 }
 
-gfx::Vector2d NativeViewAccessibilityBase::GetGlobalCoordinateOffset() {
-  return gfx::Vector2d(0, 0);  // location is already in screen coordinates.
+gfx::Rect NativeViewAccessibilityBase::GetScreenBoundsRect() const {
+  return view_->GetBoundsInScreen();
 }
 
 gfx::NativeViewAccessible NativeViewAccessibilityBase::HitTestSync(int x,
diff --git a/ui/views/accessibility/native_view_accessibility_base.h b/ui/views/accessibility/native_view_accessibility_base.h
index 87d1d87..fb0d0fe 100644
--- a/ui/views/accessibility/native_view_accessibility_base.h
+++ b/ui/views/accessibility/native_view_accessibility_base.h
@@ -42,7 +42,7 @@
   gfx::NativeViewAccessible ChildAtIndex(int index) override;
   gfx::NativeWindow GetTopLevelWidget() override;
   gfx::NativeViewAccessible GetParent() override;
-  gfx::Vector2d GetGlobalCoordinateOffset() override;
+  gfx::Rect GetScreenBoundsRect() const override;
   gfx::NativeViewAccessible HitTestSync(int x, int y) override;
   gfx::NativeViewAccessible GetFocus() override;
   gfx::AcceleratedWidget GetTargetForNativeAccessibilityEvent() override;
diff --git a/ui/views/accessibility/native_view_accessibility_unittest.cc b/ui/views/accessibility/native_view_accessibility_unittest.cc
index f57d7a2..0deb578 100644
--- a/ui/views/accessibility/native_view_accessibility_unittest.cc
+++ b/ui/views/accessibility/native_view_accessibility_unittest.cc
@@ -93,8 +93,10 @@
 TEST_F(NativeViewAccessibilityTest, BoundsShouldMatch) {
   gfx::Rect bounds =
       gfx::ToEnclosingRect(button_accessibility()->GetData().location);
-  bounds.Offset(button_accessibility()->GetGlobalCoordinateOffset());
+  gfx::Rect screen_bounds = button_accessibility()->GetScreenBoundsRect();
+
   EXPECT_EQ(button_->GetBoundsInScreen(), bounds);
+  EXPECT_EQ(screen_bounds, bounds);
 }
 
 TEST_F(NativeViewAccessibilityTest, LabelIsChildOfButton) {
diff --git a/ui/views/mus/views_mus_test_suite.cc b/ui/views/mus/views_mus_test_suite.cc
index 4953ce5..86b74883 100644
--- a/ui/views/mus/views_mus_test_suite.cc
+++ b/ui/views/mus/views_mus_test_suite.cc
@@ -55,10 +55,9 @@
   ~DefaultService() override {}
 
   // service_manager::Service:
-  bool OnConnect(const service_manager::ServiceInfo& remote_info,
-                 service_manager::InterfaceRegistry* registry) override {
-    return false;
-  }
+  void OnBindInterface(const service_manager::ServiceInfo& source_info,
+                       const std::string& interface_name,
+                       mojo::ScopedMessagePipeHandle interface_pipe) override {}
 
  private:
   DISALLOW_COPY_AND_ASSIGN(DefaultService);
diff --git a/ui/webui/resources/cr_elements/cr_action_menu/cr_action_menu.html b/ui/webui/resources/cr_elements/cr_action_menu/cr_action_menu.html
index f2fa45e5..33c95776 100644
--- a/ui/webui/resources/cr_elements/cr_action_menu/cr_action_menu.html
+++ b/ui/webui/resources/cr_elements/cr_action_menu/cr_action_menu.html
@@ -9,7 +9,6 @@
         background-color: white;
         border: none;
         box-shadow: 0 2px 6px var(--paper-grey-500);
-        color: inherit;
         margin: 0;
         outline: none;
         padding: 8px 0;
@@ -23,11 +22,12 @@
         background: none;
         border: none;
         box-sizing: border-box;
-        color: inherit;
+        color: var(--paper-grey-900);
         font: inherit;
         min-height: 32px;
         padding: 0 24px;
         text-align: start;
+        user-select: none;
         width: 100%;
       }
 
diff --git a/url/gurl_unittest.cc b/url/gurl_unittest.cc
index 258ea03e..d3a59de 100644
--- a/url/gurl_unittest.cc
+++ b/url/gurl_unittest.cc
@@ -645,10 +645,12 @@
   // Constructor.
   GURL url_1(" \t ht\ntp://\twww.goo\rgle.com/as\ndf \n ");
   EXPECT_EQ("http://www.google.com/asdf", url_1.spec());
+  EXPECT_TRUE(url_1.parsed_for_possibly_invalid_spec().whitespace_removed);
 
   // Relative path resolver.
   GURL url_2 = url_1.Resolve(" \n /fo\to\r ");
   EXPECT_EQ("http://www.google.com/foo", url_2.spec());
+  EXPECT_TRUE(url_2.parsed_for_possibly_invalid_spec().whitespace_removed);
 
   // Note that newlines are NOT stripped from ReplaceComponents.
 }
diff --git a/url/third_party/mozilla/url_parse.cc b/url/third_party/mozilla/url_parse.cc
index 41768601..1c1f3dd 100644
--- a/url/third_party/mozilla/url_parse.cc
+++ b/url/third_party/mozilla/url_parse.cc
@@ -692,16 +692,17 @@
 
 Parsed::Parsed() : whitespace_removed(false), inner_parsed_(NULL) {}
 
-Parsed::Parsed(const Parsed& other) :
-    scheme(other.scheme),
-    username(other.username),
-    password(other.password),
-    host(other.host),
-    port(other.port),
-    path(other.path),
-    query(other.query),
-    ref(other.ref),
-    inner_parsed_(NULL) {
+Parsed::Parsed(const Parsed& other)
+    : scheme(other.scheme),
+      username(other.username),
+      password(other.password),
+      host(other.host),
+      port(other.port),
+      path(other.path),
+      query(other.query),
+      ref(other.ref),
+      whitespace_removed(other.whitespace_removed),
+      inner_parsed_(NULL) {
   if (other.inner_parsed_)
     set_inner_parsed(*other.inner_parsed_);
 }
@@ -716,6 +717,7 @@
     path = other.path;
     query = other.query;
     ref = other.ref;
+    whitespace_removed = other.whitespace_removed;
     if (other.inner_parsed_)
       set_inner_parsed(*other.inner_parsed_);
     else