diff --git a/DEPS b/DEPS
index 5c00008..918cee24 100644
--- a/DEPS
+++ b/DEPS
@@ -40,7 +40,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '08d57e6ae6510a7724119ab548485b4fcbd0a48d',
+  'skia_revision': 'b38db9a48db09b233309dca4f0858c1f0976734d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # 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': '48f776f7e801d719683b251dc21ee8c0e3250d90',
+  'pdfium_revision': 'c4fcad23b1438aa6ad19f518503f861b9e3815e1',
   # 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.
@@ -228,7 +228,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' + '@' + 'af5a0a05e5bfc8bf22c0be334f4e8c0a9f600875', # commit position 15911
+    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '5445b0716f1a96eb11cc3745093c058dffd53227', # commit position 15919
 
   '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 b19945b..a63d37b 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -1030,7 +1030,8 @@
                   '|content/browser/renderer_host/media/.*(capture|media)'\
                   '|content/renderer/media/.*(capture|media|webrtc)'\
                   '|media/capture/'\
-                  '|media/muxers/',
+                  '|media/muxers/'\
+                  '|services/video_capture/',
     },
     'views': {
       # Applies to all files and subdirs within this directory.
@@ -2066,7 +2067,8 @@
     'version_assembly': ['caitkp+watch@chromium.org',
                          'gab+watch@chromium.org'],
     'video': ['posciak+watch@chromium.org'],
-    'video_capture': ['mcasas+watch+vc@chromium.org'],
+    'video_capture': ['mcasas+watch+vc@chromium.org',
+                      'chfremer+watch@chromium.org'],
     'views': ['tfarina@chromium.org'],
     'virtual_keyboard': ['dfaden+virtualkb@google.com',
                          'groby+virtualkb@chromium.org'],
diff --git a/android_webview/browser/aw_metrics_service_client.cc b/android_webview/browser/aw_metrics_service_client.cc
index 588818d..bcc1052 100644
--- a/android_webview/browser/aw_metrics_service_client.cc
+++ b/android_webview/browser/aw_metrics_service_client.cc
@@ -201,11 +201,12 @@
 
 std::unique_ptr<metrics::MetricsLogUploader>
 AwMetricsServiceClient::CreateUploader(
+    const std::string& server_url,
+    const std::string& mime_type,
     const base::Callback<void(int)>& on_upload_complete) {
   return std::unique_ptr<::metrics::MetricsLogUploader>(
       new metrics::NetMetricsLogUploader(
-          request_context_, metrics::kDefaultMetricsServerUrl,
-          metrics::kDefaultMetricsMimeType, on_upload_complete));
+          request_context_, server_url, mime_type, on_upload_complete));
 }
 
 base::TimeDelta AwMetricsServiceClient::GetStandardUploadInterval() {
diff --git a/android_webview/browser/aw_metrics_service_client.h b/android_webview/browser/aw_metrics_service_client.h
index 7537d39..0c66777c 100644
--- a/android_webview/browser/aw_metrics_service_client.h
+++ b/android_webview/browser/aw_metrics_service_client.h
@@ -66,6 +66,8 @@
       const base::Closure& done_callback) override;
   void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
   std::unique_ptr<metrics::MetricsLogUploader> CreateUploader(
+      const std::string& server_url,
+      const std::string& mime_type,
       const base::Callback<void(int)>& on_upload_complete) override;
   base::TimeDelta GetStandardUploadInterval() override;
 
diff --git a/ash/aura/wm_window_aura.cc b/ash/aura/wm_window_aura.cc
index 187ce852..9166430 100644
--- a/ash/aura/wm_window_aura.cc
+++ b/ash/aura/wm_window_aura.cc
@@ -348,8 +348,14 @@
   if (key == WmWindowProperty::SHELF_ID)
     return window_->GetProperty(kShelfIDKey);
 
-  if (key == WmWindowProperty::SHELF_ITEM_TYPE)
-    return window_->GetProperty(kShelfItemTypeKey);
+  if (key == WmWindowProperty::SHELF_ITEM_TYPE) {
+    if (aura::Env::GetInstance()->mode() == aura::Env::Mode::LOCAL ||
+        window_->GetProperty(kShelfItemTypeKey) != TYPE_UNDEFINED) {
+      return window_->GetProperty(kShelfItemTypeKey);
+    }
+    // Mash provides a default shelf item type for non-ignored windows.
+    return GetWindowState()->ignored_by_shelf() ? TYPE_UNDEFINED : TYPE_APP;
+  }
 
   if (key == WmWindowProperty::TOP_VIEW_INSET)
     return window_->GetProperty(aura::client::kTopViewInset);
@@ -660,6 +666,8 @@
 }
 
 bool WmWindowAura::CanActivate() const {
+  // TODO(sky): for aura-mus need to key off CanFocus() as well, which is not
+  // currently mirrored to ash.
   return ::wm::CanActivateWindow(window_);
 }
 
@@ -680,6 +688,12 @@
 }
 
 void WmWindowAura::SetPinned(bool trusted) {
+  if (aura::Env::GetInstance()->mode() == aura::Env::Mode::MUS) {
+    // TODO: fix, see http://crbug.com/622486. With aura-mus pinning may just
+    // work.
+    NOTIMPLEMENTED();
+    return;
+  }
   wm::PinWindow(window_, trusted);
 }
 
@@ -759,6 +773,10 @@
 }
 
 void WmWindowAura::ShowResizeShadow(int component) {
+  if (aura::Env::GetInstance()->mode() == aura::Env::Mode::MUS) {
+    // TODO: http://crbug.com/640773.
+    return;
+  }
   ResizeShadowController* resize_shadow_controller =
       Shell::GetInstance()->resize_shadow_controller();
   if (resize_shadow_controller)
@@ -766,6 +784,10 @@
 }
 
 void WmWindowAura::HideResizeShadow() {
+  if (aura::Env::GetInstance()->mode() == aura::Env::Mode::MUS) {
+    // TODO: http://crbug.com/640773.
+    return;
+  }
   ResizeShadowController* resize_shadow_controller =
       Shell::GetInstance()->resize_shadow_controller();
   if (resize_shadow_controller)
@@ -774,6 +796,12 @@
 
 void WmWindowAura::InstallResizeHandleWindowTargeter(
     ImmersiveFullscreenController* immersive_fullscreen_controller) {
+  if (aura::Env::GetInstance()->mode() == aura::Env::Mode::MUS) {
+    // TODO(sky): I believe once ImmersiveFullscreenController is ported this
+    // won't be necessary in mash, but I need to verify that:
+    // http://crbug.com/548435.
+    return;
+  }
   window_->SetEventTargeter(base::MakeUnique<ResizeHandleWindowTargeter>(
       window_, immersive_fullscreen_controller));
 }
diff --git a/ash/common/wm/default_state.cc b/ash/common/wm/default_state.cc
index d17253e6..f4cb18f 100644
--- a/ash/common/wm/default_state.cc
+++ b/ash/common/wm/default_state.cc
@@ -477,8 +477,10 @@
       gfx::Rect work_area_in_parent =
           GetDisplayWorkAreaBoundsInParent(window_state->window());
       gfx::Rect bounds = window_state->window()->GetTargetBounds();
-      wm::AdjustBoundsToEnsureMinimumWindowVisibility(work_area_in_parent,
-                                                      &bounds);
+      if (!window_state->window()->GetTransientParent()) {
+        wm::AdjustBoundsToEnsureMinimumWindowVisibility(work_area_in_parent,
+                                                        &bounds);
+      }
       window_state->AdjustSnappedBounds(&bounds);
       if (window_state->window()->GetTargetBounds() != bounds)
         window_state->SetBoundsDirectAnimated(bounds);
diff --git a/ash/common/wm/workspace/workspace_layout_manager_unittest.cc b/ash/common/wm/workspace/workspace_layout_manager_unittest.cc
index 6bf4acb..df850df 100644
--- a/ash/common/wm/workspace/workspace_layout_manager_unittest.cc
+++ b/ash/common/wm/workspace/workspace_layout_manager_unittest.cc
@@ -576,6 +576,29 @@
   EXPECT_EQ(expected_bounds.ToString(), window->GetBounds().ToString());
 }
 
+// Do not adjust window bounds to ensure minimum visibility for transient
+// windows (crbug.com/624806).
+TEST_F(WorkspaceLayoutManagerTest,
+       DoNotAdjustTransientWindowBoundsToEnsureMinimumVisibility) {
+  UpdateDisplay("300x400");
+  WindowOwner window_owner(WmShell::Get()->NewWindow(ui::wm::WINDOW_TYPE_NORMAL,
+                                                     ui::LAYER_TEXTURED));
+  WmWindow* window = window_owner.window();
+  window->SetBounds(gfx::Rect(10, 0, 100, 200));
+  ParentWindowInPrimaryRootWindow(window);
+  window->Show();
+
+  std::unique_ptr<WindowOwner> window2_owner(
+      CreateTestWindow(gfx::Rect(10, 0, 40, 20)));
+  WmWindow* window2 = window2_owner->window();
+  AddTransientChild(window, window2);
+  window2->Show();
+
+  gfx::Rect expected_bounds = window2->GetBounds();
+  WmShell::Get()->SetDisplayWorkAreaInsets(window, gfx::Insets(50, 0, 0, 0));
+  EXPECT_EQ(expected_bounds.ToString(), window2->GetBounds().ToString());
+}
+
 // Following "Solo" tests were originally written for BaseLayoutManager.
 using WorkspaceLayoutManagerSoloTest = AshTest;
 
diff --git a/ash/mus/bridge/wm_window_mus.cc b/ash/mus/bridge/wm_window_mus.cc
index ce4c457..6761fbfe 100644
--- a/ash/mus/bridge/wm_window_mus.cc
+++ b/ash/mus/bridge/wm_window_mus.cc
@@ -74,52 +74,6 @@
   return WmShellMus::Get();
 }
 
-int WmWindowMus::GetIntProperty(WmWindowProperty key) {
-  if (key == WmWindowProperty::SHELF_ITEM_TYPE) {
-    if (aura_window()->GetProperty(kShelfItemTypeKey) != TYPE_UNDEFINED)
-      return aura_window()->GetProperty(kShelfItemTypeKey);
-
-    // Mash provides a default shelf item type for non-ignored windows.
-    return GetWindowState()->ignored_by_shelf() ? TYPE_UNDEFINED : TYPE_APP;
-  }
-
-  return WmWindowAura::GetIntProperty(key);
-}
-
-// TODO(sky): investigate if needed.
-bool WmWindowMus::MoveToEventRoot(const ui::Event& event) {
-  views::View* target = static_cast<views::View*>(event.target());
-  if (!target)
-    return false;
-  WmWindow* target_root =
-      WmLookup::Get()->GetWindowForWidget(target->GetWidget())->GetRootWindow();
-  if (!target_root || target_root == GetRootWindow())
-    return false;
-  WmWindow* window_container =
-      target_root->GetChildByShellWindowId(GetParent()->GetShellWindowId());
-  window_container->AddChild(this);
-  return true;
-}
-
-// TODO(sky): investigate if needed.
-void WmWindowMus::SetBoundsInScreen(const gfx::Rect& bounds_in_screen,
-                                    const display::Display& dst_display) {
-  DCHECK(GetParent());  // Aura code assumed a parent, so this does too.
-  if (static_cast<const WmWindowMus*>(GetParent())
-          ->child_bounds_in_screen_behavior_ ==
-      BoundsInScreenBehavior::USE_LOCAL_COORDINATES) {
-    SetBounds(bounds_in_screen);
-    return;
-  }
-  wm::SetBoundsInScreen(this, bounds_in_screen, dst_display);
-}
-
-// TODO(sky): remove this override.
-void WmWindowMus::SetPinned(bool trusted) {
-  // http://crbug.com/622486.
-  NOTIMPLEMENTED();
-}
-
 void WmWindowMus::CloseWidget() {
   views::Widget* widget = views::Widget::GetWidgetForNativeView(aura_window());
   DCHECK(widget);
@@ -133,39 +87,6 @@
   }
 }
 
-// TODO(sky): investigate if needed.
-bool WmWindowMus::CanActivate() const {
-  // TODO(sky): this isn't quite right. Should key off CanFocus(), which is not
-  // replicated.
-  // TODO(sky): fix const cast (most likely remove this override entirely).
-  return WmWindowAura::CanActivate() &&
-         views::Widget::GetWidgetForNativeView(
-             const_cast<aura::Window*>(aura_window())) != nullptr;
-}
-
-void WmWindowMus::ShowResizeShadow(int component) {
-  // TODO: http://crbug.com/640773.
-  NOTIMPLEMENTED();
-}
-
-void WmWindowMus::HideResizeShadow() {
-  // TODO: http://crbug.com/640773.
-  NOTIMPLEMENTED();
-}
-
-void WmWindowMus::InstallResizeHandleWindowTargeter(
-    ImmersiveFullscreenController* immersive_fullscreen_controller) {
-  // TODO(sky): I believe once ImmersiveFullscreenController is ported this
-  // won't be necessary in mash, but I need to verify that:
-  // http://crbug.com/548435.
-}
-
-// TODO: nuke this once SetBoundsInScreen() is updated.
-void WmWindowMus::SetBoundsInScreenBehaviorForChildren(
-    WmWindow::BoundsInScreenBehavior behavior) {
-  child_bounds_in_screen_behavior_ = behavior;
-}
-
 void WmWindowMus::AddLimitedPreTargetHandler(ui::EventHandler* handler) {
   DCHECK(WmShellMus::Get()->window_tree_client()->WasCreatedByThisClient(
       aura::WindowMus::Get(aura_window())));
diff --git a/ash/mus/bridge/wm_window_mus.h b/ash/mus/bridge/wm_window_mus.h
index 3a910d97..f4c8fcd 100644
--- a/ash/mus/bridge/wm_window_mus.h
+++ b/ash/mus/bridge/wm_window_mus.h
@@ -62,25 +62,10 @@
   // WmWindow:
   WmRootWindowController* GetRootWindowController() override;
   WmShell* GetShell() const override;
-  int GetIntProperty(WmWindowProperty key) override;
-  bool MoveToEventRoot(const ui::Event& event) override;
-  void SetBoundsInScreen(const gfx::Rect& bounds_in_screen,
-                         const display::Display& dst_display) override;
-  void SetPinned(bool trusted) override;
   void CloseWidget() override;
-  bool CanActivate() const override;
-  void ShowResizeShadow(int component) override;
-  void HideResizeShadow() override;
-  void InstallResizeHandleWindowTargeter(
-      ImmersiveFullscreenController* immersive_fullscreen_controller) override;
-  void SetBoundsInScreenBehaviorForChildren(
-      BoundsInScreenBehavior behavior) override;
   void AddLimitedPreTargetHandler(ui::EventHandler* handler) override;
 
  private:
-  BoundsInScreenBehavior child_bounds_in_screen_behavior_ =
-      BoundsInScreenBehavior::USE_LOCAL_COORDINATES;
-
   DISALLOW_COPY_AND_ASSIGN(WmWindowMus);
 };
 
diff --git a/ash/wm/window_util.cc b/ash/wm/window_util.cc
index 38d7e32..6700bf0 100644
--- a/ash/wm/window_util.cc
+++ b/ash/wm/window_util.cc
@@ -11,6 +11,7 @@
 #include "ash/common/wm/window_state.h"
 #include "ash/common/wm/wm_event.h"
 #include "ash/common/wm/wm_screen_util.h"
+#include "ash/common/wm_root_window_controller.h"
 #include "ash/common/wm_window.h"
 #include "ash/shell.h"
 #include "ash/wm/window_properties.h"
@@ -73,10 +74,11 @@
       target->GetWidget()->GetNativeView()->GetRootWindow();
   if (!target_root || target_root == window->GetRootWindow())
     return false;
-  aura::Window* window_container =
-      ash::Shell::GetContainer(target_root, window->parent()->id());
+  WmWindow* window_container = WmWindowAura::Get(target_root)
+                                   ->GetRootWindowController()
+                                   ->GetContainer(window->parent()->id());
   // Move the window to the target launcher.
-  window_container->AddChild(window);
+  window_container->AddChild(WmWindowAura::Get(window));
   return true;
 }
 
diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc
index 30a8922..4081d85 100644
--- a/base/allocator/partition_allocator/partition_alloc_unittest.cc
+++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -611,6 +611,12 @@
 // Test the generic allocation functions can handle some specific sizes of
 // interest.
 TEST(PartitionAllocTest, GenericAllocSizes) {
+  // TODO(crbug.com/678782): Where necessary and possible, disable the
+  // platform's OOM-killing behavior. OOM-killing makes this test flaky on
+  // low-memory devices.
+  if (!IsLargeMemoryDevice())
+    return;
+
   TestSetup();
 
   void* ptr = partitionAllocGeneric(genericAllocator.root(), 0, typeName);
@@ -708,6 +714,12 @@
 
 // Test that we can fetch the real allocated size after an allocation.
 TEST(PartitionAllocTest, GenericAllocGetSize) {
+  // TODO(crbug.com/678782): Where necessary and possible, disable the
+  // platform's OOM-killing behavior. OOM-killing makes this test flaky on
+  // low-memory devices.
+  if (!IsLargeMemoryDevice())
+    return;
+
   TestSetup();
 
   void* ptr;
@@ -1266,6 +1278,12 @@
 #if !defined(ARCH_CPU_64_BITS) || defined(OS_POSIX)
 
 static void DoReturnNullTest(size_t allocSize) {
+  // TODO(crbug.com/678782): Where necessary and possible, disable the
+  // platform's OOM-killing behavior. OOM-killing makes this test flaky on
+  // low-memory devices.
+  if (!IsLargeMemoryDevice())
+    return;
+
   TestSetup();
 
   EXPECT_TRUE(SetAddressSpaceLimit());
diff --git a/blimp/engine/app/blimp_metrics_service_client.cc b/blimp/engine/app/blimp_metrics_service_client.cc
index 94bad896..181eef0 100644
--- a/blimp/engine/app/blimp_metrics_service_client.cc
+++ b/blimp/engine/app/blimp_metrics_service_client.cc
@@ -139,11 +139,13 @@
 
 std::unique_ptr<metrics::MetricsLogUploader>
 BlimpMetricsServiceClient::CreateUploader(
+    const std::string& server_url,
+    const std::string& mime_type,
     const base::Callback<void(int)>& on_upload_complete) {
   return base::WrapUnique<metrics::MetricsLogUploader>(
       new metrics::NetMetricsLogUploader(
-          request_context_getter_.get(), metrics::kDefaultMetricsServerUrl,
-          metrics::kDefaultMetricsMimeType, on_upload_complete));
+          request_context_getter_.get(), server_url,
+          mime_type, on_upload_complete));
 }
 
 base::TimeDelta BlimpMetricsServiceClient::GetStandardUploadInterval() {
diff --git a/blimp/engine/app/blimp_metrics_service_client.h b/blimp/engine/app/blimp_metrics_service_client.h
index cba7d5a..387d9f6 100644
--- a/blimp/engine/app/blimp_metrics_service_client.h
+++ b/blimp/engine/app/blimp_metrics_service_client.h
@@ -57,6 +57,8 @@
       const base::Closure& done_callback) override;
   void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
   std::unique_ptr<metrics::MetricsLogUploader> CreateUploader(
+      const std::string& server_url,
+      const std::string& mime_type,
       const base::Callback<void(int)>& on_upload_complete) override;
   base::TimeDelta GetStandardUploadInterval() override;
   metrics::EnableMetricsDefault GetMetricsReportingDefaultState() override;
diff --git a/chrome/android/java/res/layout/contextual_search_quick_action_icon_view.xml b/chrome/android/java/res/layout/contextual_search_quick_action_icon_view.xml
index a02632f4..c031ac8 100644
--- a/chrome/android/java/res/layout/contextual_search_quick_action_icon_view.xml
+++ b/chrome/android/java/res/layout/contextual_search_quick_action_icon_view.xml
@@ -9,4 +9,5 @@
     android:layout_width="@dimen/contextual_search_static_image_size"
     android:layout_height="@dimen/contextual_search_static_image_size"
     android:importantForAccessibility="no"
-    android:scaleType="center" />
\ No newline at end of file
+    android:scaleType="center"
+    android:background="@color/light_background_color" />
\ No newline at end of file
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 bee5d351..65c55a4a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -788,9 +788,9 @@
     @Override
     public void onNewIntentWithNative(Intent intent) {
         super.onNewIntentWithNative(intent);
-        if (mIntentHandler.shouldIgnoreIntent(this, intent)) return;
+        if (mIntentHandler.shouldIgnoreIntent(intent)) return;
 
-        mIntentHandler.onNewIntent(this, intent);
+        mIntentHandler.onNewIntent(intent);
     }
 
     /**
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 fdd3bce..6ea48095 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -663,9 +663,8 @@
                     // TODO(mthiesse): Improve startup when started from a VR intent. Right now
                     // we launch out of VR, partially load out of VR, then switch into VR.
                     mVrShellDelegate.enterVRIfNecessary();
-                } else if (!mIntentHandler.shouldIgnoreIntent(ChromeTabbedActivity.this, intent)) {
-                    mIntentWithEffect = mIntentHandler.onNewIntent(ChromeTabbedActivity.this,
-                            intent);
+                } else if (!mIntentHandler.shouldIgnoreIntent(intent)) {
+                    mIntentWithEffect = mIntentHandler.onNewIntent(intent);
                 }
             }
 
@@ -831,7 +830,7 @@
                         loadUrlParams.setIntentReceivedTimestamp(mIntentHandlingTimeMs);
                         loadUrlParams.setHasUserGesture(hasUserGesture);
                         loadUrlParams.setTransitionType(IntentHandler.getTransitionTypeFromIntent(
-                                getApplicationContext(), intent, transitionType));
+                                intent, transitionType));
                         if (referer != null) {
                             loadUrlParams.setReferrer(
                                     new Referrer(referer, Referrer.REFERRER_POLICY_DEFAULT));
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 1ac4ba92..7d39bdf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -20,6 +20,7 @@
 import android.util.Pair;
 
 import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.metrics.RecordHistogram;
@@ -224,7 +225,6 @@
 
     private final IntentHandlerDelegate mDelegate;
     private final String mPackageName;
-    private KeyguardManager mKeyguardManager;
 
     /**
      * Receiver for screen unlock broadcast.
@@ -349,11 +349,10 @@
     /**
      * Handles an Intent after the ChromeTabbedActivity decides that it shouldn't ignore the
      * Intent.
-     * @param context Android Context.
      * @param intent Target intent.
      * @return Whether the Intent was successfully handled.
      */
-    boolean onNewIntent(Context context, Intent intent) {
+    boolean onNewIntent(Intent intent) {
         updateDeferredIntent(null);
 
         assert intentHasValidUrl(intent);
@@ -368,7 +367,7 @@
             return handleWebSearchIntent(intent);
         }
 
-        String referrerUrl = getReferrerUrlIncludingExtraHeaders(intent, context);
+        String referrerUrl = getReferrerUrlIncludingExtraHeaders(intent);
         String extraHeaders = getExtraHeadersFromIntent(intent);
 
         // TODO(joth): Presumably this should check the action too.
@@ -401,10 +400,9 @@
      * Extracts referrer URL string. The extra is used if we received it from a first party app or
      * if the referrer_extra is specified as android-app://package style URL.
      * @param intent The intent from which to extract the URL.
-     * @param context The activity that received the intent.
      * @return The URL string or null if none should be used.
      */
-    private static String getReferrerUrl(Intent intent, Context context) {
+    private static String getReferrerUrl(Intent intent) {
         Uri referrerExtra = getReferrer(intent);
         if (referrerExtra == null) return null;
         String referrerUrl = IntentHandler.getPendingReferrerUrl(
@@ -413,7 +411,7 @@
             return referrerUrl;
         } else if (isValidReferrerHeader(referrerExtra.toString())) {
             return referrerExtra.toString();
-        } else if (IntentHandler.isIntentChromeOrFirstParty(intent, context)) {
+        } else if (IntentHandler.isIntentChromeOrFirstParty(intent)) {
             return referrerExtra.toString();
         }
         return null;
@@ -425,11 +423,10 @@
      * The referrer extra takes priority over the "extra headers" one.
      *
      * @param intent The Intent containing the extras.
-     * @param context The application context.
      * @return The referrer, or null.
      */
-    public static String getReferrerUrlIncludingExtraHeaders(Intent intent, Context context) {
-        String referrerUrl = getReferrerUrl(intent, context);
+    public static String getReferrerUrlIncludingExtraHeaders(Intent intent) {
+        String referrerUrl = getReferrerUrl(intent);
         if (referrerUrl != null) return referrerUrl;
 
         Bundle bundleExtraHeaders = IntentUtils.safeGetBundleExtra(intent, Browser.EXTRA_HEADERS);
@@ -449,8 +446,8 @@
      * @param params The {@link LoadUrlParams} to add referrer and headers.
      * @param intent The intent we use to parse the extras.
      */
-    public static void addReferrerAndHeaders(LoadUrlParams params, Intent intent, Context context) {
-        String referrer = getReferrerUrlIncludingExtraHeaders(intent, context);
+    public static void addReferrerAndHeaders(LoadUrlParams params, Intent intent) {
+        String referrer = getReferrerUrlIncludingExtraHeaders(intent);
         if (referrer != null) {
             params.setReferrer(new Referrer(referrer, Referrer.REFERRER_POLICY_DEFAULT));
         }
@@ -529,8 +526,9 @@
         return true;
     }
 
-    private static PendingIntent getAuthenticationToken(Context appContext) {
+    private static PendingIntent getAuthenticationToken() {
         Intent fakeIntent = new Intent();
+        Context appContext = ContextUtils.getApplicationContext();
         fakeIntent.setComponent(getFakeComponentName(appContext.getPackageName()));
         return PendingIntent.getActivity(appContext, 0, fakeIntent, 0);
     }
@@ -542,8 +540,8 @@
      * identify ourselves as a trusted sender. The method {@link #shouldIgnoreIntent} validates the
      * token.
      */
-    public static void startActivityForTrustedIntent(Intent intent, Context context) {
-        startActivityForTrustedIntentInternal(intent, context, null);
+    public static void startActivityForTrustedIntent(Intent intent) {
+        startActivityForTrustedIntentInternal(intent, null);
     }
 
     /**
@@ -556,29 +554,27 @@
      * identify ourselves as a trusted sender. The method {@link #shouldIgnoreIntent} validates the
      * token.
      */
-    public static void startChromeLauncherActivityForTrustedIntent(Intent intent, Context context) {
+    public static void startChromeLauncherActivityForTrustedIntent(Intent intent) {
         // Specify the exact component that will handle creating a new tab.  This allows specifying
         // URLs that are not exposed in the intent filters (i.e. chrome://).
-        startActivityForTrustedIntentInternal(intent, context, new ComponentName(
-                context.getPackageName(), TAB_ACTIVITY_COMPONENT_CLASS_NAME));
+        startActivityForTrustedIntentInternal(intent, TAB_ACTIVITY_COMPONENT_CLASS_NAME);
     }
 
     private static void startActivityForTrustedIntentInternal(
-            Intent intent, Context context, ComponentName componentName) {
+            Intent intent, String componentClassName) {
+        Context appContext = ContextUtils.getApplicationContext();
         // The caller might want to re-use the Intent, so we'll use a copy.
         Intent copiedIntent = new Intent(intent);
 
-        if (componentName != null) {
+        if (componentClassName != null) {
             assert copiedIntent.getComponent() == null;
             // Specify the exact component that will handle creating a new tab.  This allows
             // specifying URLs that are not exposed in the intent filters (i.e. chrome://).
-            copiedIntent.setComponent(componentName);
+            copiedIntent.setComponent(
+                    new ComponentName(appContext.getPackageName(), componentClassName));
         }
 
-        addTrustedIntentExtras(copiedIntent, context);
-
-        // Make sure we use the application context.
-        Context appContext = context.getApplicationContext();
+        addTrustedIntentExtras(copiedIntent);
         appContext.startActivity(copiedIntent);
     }
 
@@ -586,17 +582,17 @@
      * Sets TRUSTED_APPLICATION_CODE_EXTRA on the provided intent to identify it as coming from
      * a trusted source.
      */
-    public static void addTrustedIntentExtras(Intent intent, Context context) {
-        if (ExternalNavigationDelegateImpl.willChromeHandleIntent(context, intent, true)) {
+    public static void addTrustedIntentExtras(Intent intent) {
+        Context appContext = ContextUtils.getApplicationContext();
+        if (ExternalNavigationDelegateImpl.willChromeHandleIntent(appContext, intent, true)) {
             // The PendingIntent functions as an authentication token --- it could only have come
             // from us. Stash it in the real Intent as an extra. shouldIgnoreIntent will retrieve it
             // and check it with isIntentChromeInternal.
-            intent.putExtra(TRUSTED_APPLICATION_CODE_EXTRA,
-                    getAuthenticationToken(context.getApplicationContext()));
+            intent.putExtra(TRUSTED_APPLICATION_CODE_EXTRA, getAuthenticationToken());
             // It is crucial that we never leak the authentication token to other packages, because
             // then the other package could be used to impersonate us/do things as us. Therefore,
             // scope the real Intent to our package.
-            intent.setPackage(context.getApplicationContext().getPackageName());
+            intent.setPackage(appContext.getPackageName());
         }
     }
 
@@ -644,11 +640,10 @@
     /**
      * Returns true if the app should ignore a given intent.
      *
-     * @param context Android Context.
      * @param intent Intent to check.
      * @return true if the intent should be ignored.
      */
-    public boolean shouldIgnoreIntent(Context context, Intent intent) {
+    public boolean shouldIgnoreIntent(Intent intent) {
         // Although not documented to, many/most methods that retrieve values from an Intent may
         // throw. Because we can't control what packages might send to us, we should catch any
         // Throwable and then fail closed (safe). This is ugly, but resolves top crashers in the
@@ -661,8 +656,8 @@
 
             // Determine if this intent came from a trustworthy source (either Chrome or Google
             // first party applications).
-            boolean isInternal = isIntentChromeOrFirstParty(intent, context);
-            boolean isFromChrome = wasIntentSenderChrome(intent, context);
+            boolean isInternal = isIntentChromeOrFirstParty(intent);
+            boolean isFromChrome = wasIntentSenderChrome(intent);
 
             // "Open new incognito tab" is currently limited to Chrome.
             //
@@ -712,7 +707,7 @@
 
             // We must check for screen state at this point.
             // These might be slow.
-            boolean internalOrVisible = isInternal || isIntentUserVisible(context);
+            boolean internalOrVisible = isInternal || isIntentUserVisible();
             if (!internalOrVisible) {
                 updateDeferredIntent(intent);
                 return true;
@@ -744,19 +739,17 @@
                 intent, TRUSTED_APPLICATION_CODE_EXTRA);
     }
 
-    private static boolean isChromeToken(PendingIntent token, Context context) {
+    private static boolean isChromeToken(PendingIntent token) {
         // Fetch what should be a matching token.
-        Context appContext = context.getApplicationContext();
-        PendingIntent pending = getAuthenticationToken(appContext);
+        PendingIntent pending = getAuthenticationToken();
         return pending.equals(token);
     }
 
     /**
      * @param intent An Intent to be checked.
-     * @param context A context.
      * @return Whether an intent originates from Chrome.
      */
-    public static boolean wasIntentSenderChrome(Intent intent, Context context) {
+    public static boolean wasIntentSenderChrome(Intent intent) {
         if (intent == null) return false;
 
         PendingIntent token = fetchAuthenticationTokenFromIntent(intent);
@@ -764,15 +757,14 @@
 
         // Do not ignore a valid URL Intent if the sender is Chrome. (If the PendingIntents are
         // equal, we know that the sender was us.)
-        return isChromeToken(token, context);
+        return isChromeToken(token);
     }
 
     /**
      * @param intent An Intent to be checked.
-     * @param context A context.
      * @return Whether an intent originates from Chrome or a first-party app.
      */
-    public static boolean isIntentChromeOrFirstParty(Intent intent, Context context) {
+    public static boolean isIntentChromeOrFirstParty(Intent intent) {
         if (intent == null) return false;
 
         PendingIntent token = fetchAuthenticationTokenFromIntent(intent);
@@ -780,26 +772,26 @@
 
         // Do not ignore a valid URL Intent if the sender is Chrome. (If the PendingIntents are
         // equal, we know that the sender was us.)
-        if (isChromeToken(token, context)) {
+        if (isChromeToken(token)) {
             return true;
         }
         if (ExternalAuthUtils.getInstance().isGoogleSigned(
-                    context, ApiCompatibilityUtils.getCreatorPackage(token))) {
+                    ContextUtils.getApplicationContext(),
+                    ApiCompatibilityUtils.getCreatorPackage(token))) {
             return true;
         }
         return false;
     }
 
     @VisibleForTesting
-    boolean isIntentUserVisible(Context context) {
+    boolean isIntentUserVisible() {
         // Only process Intents if the screen is on and the device is unlocked;
         // i.e. the user will see what is going on.
-        if (mKeyguardManager == null) {
-            mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
-        }
-        if (!ApiCompatibilityUtils.isInteractive(context)) return false;
-        return !ApiCompatibilityUtils.isDeviceProvisioned(context)
-                || !mKeyguardManager.inKeyguardRestrictedInputMode();
+        Context appContext = ContextUtils.getApplicationContext();
+        if (!ApiCompatibilityUtils.isInteractive(appContext)) return false;
+        if (!ApiCompatibilityUtils.isDeviceProvisioned(appContext)) return true;
+        return !((KeyguardManager) appContext.getSystemService(Context.KEYGUARD_SERVICE))
+                .inKeyguardRestrictedInputMode();
     }
 
     /*
@@ -995,20 +987,18 @@
 
     /**
      * Some applications may request to load the URL with a particular transition type.
-     * @param context The application context.
      * @param intent Intent causing the URL load, may be null.
      * @param defaultTransition The transition to return if none specified in the intent.
      * @return The transition type to use for loading the URL.
      */
-    public static int getTransitionTypeFromIntent(Context context, Intent intent,
-            int defaultTransition) {
+    public static int getTransitionTypeFromIntent(Intent intent, int defaultTransition) {
         if (intent == null) return defaultTransition;
         int transitionType = IntentUtils.safeGetIntExtra(
                 intent, IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.LINK);
         if (transitionType == PageTransition.TYPED) {
             return transitionType;
         } else if (transitionType != PageTransition.LINK
-                && isIntentChromeOrFirstParty(intent, context)) {
+                && isIntentChromeOrFirstParty(intent)) {
             // 1st party applications may specify any transition type.
             return transitionType;
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LauncherShortcutActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/LauncherShortcutActivity.java
index 252f958..7fca069 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/LauncherShortcutActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/LauncherShortcutActivity.java
@@ -41,7 +41,7 @@
         newIntent.putExtra(IntentHandler.EXTRA_INVOKED_FROM_SHORTCUT, true);
         newIntent.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true);
         newIntent.putExtra(Browser.EXTRA_APPLICATION_ID, getPackageName());
-        IntentHandler.addTrustedIntentExtras(newIntent, this);
+        IntentHandler.addTrustedIntentExtras(newIntent);
 
         if (intentAction.equals(ACTION_OPEN_NEW_INCOGNITO_TAB)) {
             newIntent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, true);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
index 63345c8..79187b6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
@@ -179,7 +179,7 @@
             // Hide request desktop site on all chrome:// pages except for the NTP. Check request
             // desktop site if it's activated on this page.
             MenuItem requestItem = menu.findItem(R.id.request_desktop_site_id);
-            updateRequestDesktopSiteMenuItem(requestItem, currentTab, isChromeScheme);
+            updateRequestDesktopSiteMenuItem(requestItem, currentTab);
 
             // Only display reader mode settings menu option if the current page is in reader mode.
             menu.findItem(R.id.reader_mode_prefs_id)
@@ -294,15 +294,16 @@
      *
      * @param requstMenuItem {@link MenuItem} for request desktop site.
      * @param currentTab      Current tab being displayed.
-     * @param isChromeScheme  whether the url being displayed starts with chrome:// or
-     * chrome-native://.
      */
     protected void updateRequestDesktopSiteMenuItem(
-            MenuItem requstMenuItem, Tab currentTab, boolean isChromeScheme) {
+            MenuItem requstMenuItem, Tab currentTab) {
+        String url = currentTab.getUrl();
+        boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_SCHEME)
+                || url.startsWith(UrlConstants.CHROME_NATIVE_SCHEME);
         requstMenuItem.setVisible(!isChromeScheme || currentTab.isNativePage());
         requstMenuItem.setChecked(currentTab.getUseDesktopUserAgent());
         requstMenuItem.setTitleCondensed(requstMenuItem.isChecked()
-                        ? mActivity.getString(R.string.menu_request_desktop_site_on)
-                        : mActivity.getString(R.string.menu_request_desktop_site_off));
+                ? mActivity.getString(R.string.menu_request_desktop_site_on)
+                : mActivity.getString(R.string.menu_request_desktop_site_off));
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
index ddfdf26..4fe5ae4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
@@ -275,7 +275,7 @@
             intent.setClass(activity, ChromeLauncherActivity.class);
         }
 
-        IntentHandler.startActivityForTrustedIntent(intent, activity);
+        IntentHandler.startActivityForTrustedIntent(intent);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
index a478767f..0458104 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -444,7 +444,7 @@
 
             @Override
             public boolean shouldIgnoreIntent(Intent intent) {
-                return mIntentHandler.shouldIgnoreIntent(CustomTabActivity.this, intent);
+                return mIntentHandler.shouldIgnoreIntent(intent);
             }
 
             @Override
@@ -498,7 +498,7 @@
                 CustomTabsConnection.getInstance(getApplication());
         String url = getUrlToLoad();
         // Get any referrer that has been explicitly set by the app.
-        String referrerUrl = IntentHandler.getReferrerUrlIncludingExtraHeaders(getIntent(), this);
+        String referrerUrl = IntentHandler.getReferrerUrlIncludingExtraHeaders(getIntent());
         if (referrerUrl == null) {
             Referrer referrer = customTabsConnection.getReferrerForSession(mSession);
             if (referrer != null) referrerUrl = referrer.getUrl();
@@ -638,19 +638,19 @@
         if (mHasPrerendered && UrlUtilities.urlsFragmentsDiffer(mPrerenderedUrl, url)) {
             mHasPrerendered = false;
             LoadUrlParams temporaryParams = new LoadUrlParams(mPrerenderedUrl);
-            IntentHandler.addReferrerAndHeaders(temporaryParams, intent, this);
+            IntentHandler.addReferrerAndHeaders(temporaryParams, intent);
             tab.loadUrl(temporaryParams);
             params.setShouldReplaceCurrentEntry(true);
         }
 
-        IntentHandler.addReferrerAndHeaders(params, intent, this);
+        IntentHandler.addReferrerAndHeaders(params, intent);
         if (params.getReferrer() == null) {
             params.setReferrer(CustomTabsConnection.getInstance(getApplication())
                     .getReferrerForSession(mSession));
         }
         // See ChromeTabCreator#getTransitionType(). This marks the navigation chain as starting
         // from an external intent (unless otherwise specified by an extra in the intent).
-        params.setTransitionType(IntentHandler.getTransitionTypeFromIntent(this, intent,
+        params.setTransitionType(IntentHandler.getTransitionTypeFromIntent(intent,
                 PageTransition.LINK | PageTransition.FROM_API));
         mTabObserver.trackNextPageLoadFromTimestamp(timeStamp);
         tab.loadUrl(params);
@@ -956,7 +956,7 @@
             StrictMode.allowThreadDiskWrites();
             try {
                 if (mIntentDataProvider.isInfoPage()) {
-                    IntentHandler.startChromeLauncherActivityForTrustedIntent(intent, this);
+                    IntentHandler.startChromeLauncherActivityForTrustedIntent(intent);
                 } else {
                     startActivity(intent, startActivityOptions);
                 }
@@ -981,7 +981,7 @@
 
     /** Sets the initial background color for the Tab, shown before the page content is ready. */
     private void prepareTabBackground(final Tab tab) {
-        if (!IntentHandler.isIntentChromeOrFirstParty(getIntent(), this)) return;
+        if (!IntentHandler.isIntentChromeOrFirstParty(getIntent())) return;
 
         int backgroundColor = mIntentDataProvider.getInitialBackgroundColor();
         if (backgroundColor == Color.TRANSPARENT) return;
@@ -1036,7 +1036,7 @@
         intent.setPackage(context.getPackageName());
         intent.putExtra(CustomTabIntentDataProvider.EXTRA_IS_INFO_PAGE, true);
         intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
-        IntentHandler.addTrustedIntentExtras(intent, context);
+        IntentHandler.addTrustedIntentExtras(intent);
 
         context.startActivity(intent);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
index e37baf34..8dca4a7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
@@ -16,7 +16,6 @@
 import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeActivity;
-import org.chromium.chrome.browser.UrlConstants;
 import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate;
 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
 import org.chromium.chrome.browser.share.ShareHelper;
@@ -134,10 +133,7 @@
             // Hide request desktop site on all chrome:// pages except for the NTP. Check request
             // desktop site if it's activated on this page.
             MenuItem requestItem = menu.findItem(R.id.request_desktop_site_id);
-            String url = currentTab.getUrl();
-            boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_SCHEME)
-                    || url.startsWith(UrlConstants.CHROME_NATIVE_SCHEME);
-            updateRequestDesktopSiteMenuItem(requestItem, currentTab, isChromeScheme);
+            updateRequestDesktopSiteMenuItem(requestItem, currentTab);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
index 86ca2a16..d262fd9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
@@ -113,7 +113,7 @@
     public CustomTabIntentDataProvider(Intent intent, Context context) {
         if (intent == null) assert false;
         mSession = CustomTabsSessionToken.getSessionTokenFromIntent(intent);
-        mIsTrustedIntent = IntentHandler.isIntentChromeOrFirstParty(intent, context);
+        mIsTrustedIntent = IntentHandler.isIntentChromeOrFirstParty(intent);
 
         retrieveCustomButtons(intent, context);
         retrieveToolbarColor(intent, context);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
index a9585d87..d51df57 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -938,8 +938,7 @@
             mExternalPrerenderHandler = new ExternalPrerenderHandler();
         }
         Rect contentBounds = ExternalPrerenderHandler.estimateContentSize(mApplication, true);
-        Context context = mApplication.getApplicationContext();
-        String referrer = IntentHandler.getReferrerUrlIncludingExtraHeaders(extrasIntent, context);
+        String referrer = IntentHandler.getReferrerUrlIncludingExtraHeaders(extrasIntent);
         if (referrer == null && getReferrerForSession(session) != null) {
             referrer = getReferrerForSession(session).getUrl();
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java
index a618353..2ff6b14 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java
@@ -295,7 +295,7 @@
         Context context = ContextUtils.getApplicationContext();
         if (TextUtils.equals(context.getPackageName(),
                 IntentUtils.safeGetStringExtra(intent, Browser.EXTRA_APPLICATION_ID))
-                || IntentHandler.wasIntentSenderChrome(intent, context)) {
+                || IntentHandler.wasIntentSenderChrome(intent)) {
             return false;
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
index 663a775..78c4010 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
@@ -411,7 +411,7 @@
         intent.putExtra(
                 CustomTabsIntent.EXTRA_TOOLBAR_COLOR, mediaColor);
         intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
-        IntentHandler.addTrustedIntentExtras(intent, context);
+        IntentHandler.addTrustedIntentExtras(intent);
 
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.setClass(context, ChromeLauncherActivity.class);
@@ -468,7 +468,7 @@
 
             Intent intent =
                     getMediaViewerIntentForDownloadItem(fileUri, shareUri, normalizedMimeType);
-            IntentHandler.startActivityForTrustedIntent(intent, context);
+            IntentHandler.startActivityForTrustedIntent(intent);
             return true;
         }
 
@@ -502,7 +502,7 @@
     static boolean fireOpenIntentForDownload(Context context, Intent intent) {
         try {
             if (TextUtils.equals(intent.getPackage(), context.getPackageName())) {
-                IntentHandler.startActivityForTrustedIntent(intent, context);
+                IntentHandler.startActivityForTrustedIntent(intent);
             } else {
                 context.startActivity(intent);
             }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
index a334dd89..5641814 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
@@ -484,7 +484,7 @@
             intent.addCategory(Intent.CATEGORY_BROWSABLE);
             intent.setClassName(getPackageName(), ChromeLauncherActivity.class.getName());
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            IntentHandler.addTrustedIntentExtras(intent, mApplicationContext);
+            IntentHandler.addTrustedIntentExtras(intent);
             startActivity(intent, false);
 
             if (needsToCloseTab) closeTab(tab);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
index 8964db77..45f07f89 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
@@ -207,7 +207,7 @@
         if (createNewTab) viewIntent.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true);
 
         // Send intent.
-        IntentHandler.startActivityForTrustedIntent(viewIntent, mActivity);
+        IntentHandler.startActivityForTrustedIntent(viewIntent);
     }
 
     /**
@@ -305,4 +305,4 @@
         RecordHistogram.recordCount100Histogram(
                 METRICS_PREFIX + action + "Selected", selectedItems.size());
     }
-}
\ No newline at end of file
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
index 17e5292e..7767afd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
@@ -313,7 +313,7 @@
         return context.getPackageName().equals(IntentUtils.safeGetStringExtra(
                 intent, Browser.EXTRA_APPLICATION_ID))
                 // We shouldn't leak internal intents with authentication tokens
-                || IntentHandler.wasIntentSenderChrome(intent, context);
+                || IntentHandler.wasIntentSenderChrome(intent);
     }
 
     /** @return Whether Chrome is the default browser on the device. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContentSuggestionsNotificationHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContentSuggestionsNotificationHelper.java
index fb4056d0..c0da2cf8b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContentSuggestionsNotificationHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContentSuggestionsNotificationHelper.java
@@ -41,7 +41,7 @@
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
         intent.putExtra(ShortcutHelper.REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB, true);
-        IntentHandler.addTrustedIntentExtras(intent, context);
+        IntentHandler.addTrustedIntentExtras(intent);
         context.startActivity(intent);
     }
 
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 ef07cae..a4b3825 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
@@ -1507,7 +1507,7 @@
                     ContextUtils.getApplicationContext().getPackageName());
             intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, true);
         }
-        IntentHandler.addTrustedIntentExtras(intent, activity);
+        IntentHandler.addTrustedIntentExtras(intent);
 
         if (ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_REPARENTING)) {
             TabModelSelector tabModelSelector = getTabModelSelector();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
index bdd0ce8..766420a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
@@ -147,8 +147,7 @@
             try {
                 URI pageUri = URI.create(pageUrl);
                 if (UrlUtilities.isInternalScheme(pageUri)) {
-                    IntentHandler.startChromeLauncherActivityForTrustedIntent(
-                            chromeIntent, mTab.getApplicationContext());
+                    IntentHandler.startChromeLauncherActivityForTrustedIntent(chromeIntent);
                     activityStarted = true;
                 }
             } catch (IllegalArgumentException ex) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
index 3f15115..bab35e7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
@@ -310,8 +310,7 @@
                 break;
         }
 
-        return IntentHandler.getTransitionTypeFromIntent(mActivity.getApplicationContext(),
-                intent, transition);
+        return IntentHandler.getTransitionTypeFromIntent(intent, transition);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java
index 29be82c..c011fcd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java
@@ -89,7 +89,7 @@
         if (targetActivity == null) return;
 
         MultiWindowUtils.setOpenInOtherWindowIntentExtras(intent, activity, targetActivity);
-        IntentHandler.addTrustedIntentExtras(intent, activity);
+        IntentHandler.addTrustedIntentExtras(intent);
         MultiWindowUtils.onMultiInstanceModeStarted();
         activity.startActivity(intent);
     }
@@ -122,7 +122,7 @@
 
         Intent intent = createNewTabIntent(
                 asyncParams, parentId, type == TabLaunchType.FROM_CHROME_UI);
-        IntentHandler.startActivityForTrustedIntent(intent, ContextUtils.getApplicationContext());
+        IntentHandler.startActivityForTrustedIntent(intent);
     }
 
     private Intent createNewTabIntent(
@@ -182,7 +182,6 @@
         assert intent != null;
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                 | ApiCompatibilityUtils.getActivityNewDocumentFlag());
-        IntentHandler.startActivityForTrustedIntent(intent,
-                ContextUtils.getApplicationContext());
+        IntentHandler.startActivityForTrustedIntent(intent);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
index be133ac..238a873d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
@@ -14,7 +14,6 @@
 
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.ApplicationStatus;
-import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 import org.chromium.chrome.browser.IntentHandler;
 import org.chromium.chrome.browser.ShortcutHelper;
@@ -110,7 +109,7 @@
     }
 
     private boolean wasIntentFromChrome(Intent intent) {
-        return IntentHandler.wasIntentSenderChrome(intent, ContextUtils.getApplicationContext());
+        return IntentHandler.wasIntentSenderChrome(intent);
     }
 
     /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java
index 0fbbcf0..f3a2be1 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java
@@ -189,22 +189,20 @@
     @Feature({"Android-AppBase"})
     public void testRefererUrl_extraReferrer() {
         // Check that EXTRA_REFERRER is not accepted with a random URL.
-        Context context = getInstrumentation().getTargetContext();
         Intent foreignIntent = new Intent(Intent.ACTION_VIEW);
         foreignIntent.putExtra(Intent.EXTRA_REFERRER, GOOGLE_URL);
-        assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(foreignIntent, context));
+        assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(foreignIntent));
 
         // Check that EXTRA_REFERRER with android-app URL works.
         final String appUrl = "android-app://com.application/http/www.application.com";
         Intent appIntent = new Intent(Intent.ACTION_VIEW);
         appIntent.putExtra(Intent.EXTRA_REFERRER, Uri.parse(appUrl));
-        assertEquals(appUrl, IntentHandler.getReferrerUrlIncludingExtraHeaders(appIntent, context));
+        assertEquals(appUrl, IntentHandler.getReferrerUrlIncludingExtraHeaders(appIntent));
 
         // Check that EXTRA_REFERRER_NAME with android-app works.
         Intent nameIntent = new Intent(Intent.ACTION_VIEW);
         nameIntent.putExtra(Intent.EXTRA_REFERRER_NAME, appUrl);
-        assertEquals(
-                appUrl, IntentHandler.getReferrerUrlIncludingExtraHeaders(nameIntent, context));
+        assertEquals(appUrl, IntentHandler.getReferrerUrlIncludingExtraHeaders(nameIntent));
     }
 
     @UiThreadTest
@@ -212,7 +210,6 @@
     @Feature({"Android-AppBase"})
     public void testRefererUrl_extraHeadersInclReferer() {
         // Check that invalid header specified in EXTRA_HEADERS isn't used.
-        Context context = getInstrumentation().getTargetContext();
         Bundle bundle = new Bundle();
         bundle.putString("X-custom-header", "X-custom-value");
         bundle.putString("Referer", GOOGLE_URL);
@@ -220,7 +217,7 @@
         headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
         assertEquals("X-custom-header: X-custom-value",
                 IntentHandler.getExtraHeadersFromIntent(headersIntent));
-        assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent, context));
+        assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent));
     }
 
     @UiThreadTest
@@ -228,7 +225,6 @@
     @Feature({"Android-AppBase"})
     public void testRefererUrl_extraHeadersInclRefererMultiple() {
         // Check that invalid header specified in EXTRA_HEADERS isn't used.
-        Context context = getInstrumentation().getTargetContext();
         Bundle bundle = new Bundle();
         bundle.putString("X-custom-header", "X-custom-value");
         bundle.putString("X-custom-header-2", "X-custom-value-2");
@@ -237,7 +233,7 @@
         headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
         assertEquals("X-custom-header-2: X-custom-value-2\nX-custom-header: X-custom-value",
                 IntentHandler.getExtraHeadersFromIntent(headersIntent));
-        assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent, context));
+        assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent));
     }
 
     @UiThreadTest
@@ -245,19 +241,17 @@
     @Feature({"Android-AppBase"})
     public void testRefererUrl_extraHeadersOnlyReferer() {
         // Check that invalid header specified in EXTRA_HEADERS isn't used.
-        Context context = getInstrumentation().getTargetContext();
         Bundle bundle = new Bundle();
         bundle.putString("Referer", GOOGLE_URL);
         Intent headersIntent = new Intent(Intent.ACTION_VIEW);
         headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
-        assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent, context));
+        assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent));
     }
 
     @UiThreadTest
     @SmallTest
     @Feature({"Android-AppBase"})
     public void testRefererUrl_extraHeadersAndExtraReferrer() {
-        Context context = getInstrumentation().getTargetContext();
         String validReferer = "android-app://package/http/url";
         Bundle bundle = new Bundle();
         bundle.putString("Referer", GOOGLE_URL);
@@ -265,7 +259,7 @@
         headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
         headersIntent.putExtra(Intent.EXTRA_REFERRER, Uri.parse(validReferer));
         assertEquals(validReferer,
-                IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent, context));
+                IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent));
         assertNull(IntentHandler.getExtraHeadersFromIntent(headersIntent));
     }
 
@@ -273,14 +267,13 @@
     @SmallTest
     @Feature({"Android-AppBase"})
     public void testRefererUrl_extraHeadersValidReferrer() {
-        Context context = getInstrumentation().getTargetContext();
         String validReferer = "android-app://package/http/url";
         Bundle bundle = new Bundle();
         bundle.putString("Referer", validReferer);
         Intent headersIntent = new Intent(Intent.ACTION_VIEW);
         headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
         assertEquals(validReferer,
-                IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent, context));
+                IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent));
         assertNull(IntentHandler.getExtraHeadersFromIntent(headersIntent));
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsOpenedFromExternalAppTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsOpenedFromExternalAppTest.java
index 0fb0db2..bdeecda 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsOpenedFromExternalAppTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsOpenedFromExternalAppTest.java
@@ -199,7 +199,7 @@
         if (firstParty) {
             Context context = getInstrumentation().getTargetContext();
             intent.setPackage(context.getPackageName());
-            IntentHandler.addTrustedIntentExtras(intent, context);
+            IntentHandler.addTrustedIntentExtras(intent);
         }
 
         final Tab originalTab = getActivity().getActivityTab();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java
index 9705f8c..2d18889 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java
@@ -104,7 +104,7 @@
 
         Intent signedIntent = createViewIntent();
         signedIntent.setPackage(mContext.getPackageName());
-        IntentHandler.addTrustedIntentExtras(signedIntent, mContext);
+        IntentHandler.addTrustedIntentExtras(signedIntent);
 
         assertFalse(mHandler.handleIncomingIntent(mContext, signedIntent, false));
     }
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 8953b327..fd42fce8 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -4332,8 +4332,8 @@
       "chromeos/input_method/mock_candidate_window_controller.h",
       "chromeos/input_method/mock_input_method_engine.cc",
       "chromeos/input_method/mock_input_method_engine.h",
-      "chromeos/input_method/mock_input_method_manager.cc",
-      "chromeos/input_method/mock_input_method_manager.h",
+      "chromeos/input_method/mock_input_method_manager_impl.cc",
+      "chromeos/input_method/mock_input_method_manager_impl.h",
       "chromeos/login/screens/mock_device_disabled_screen_actor.cc",
       "chromeos/login/screens/mock_device_disabled_screen_actor.h",
       "chromeos/login/session/user_session_manager_test_api.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index a9babd3d..d108577 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1629,10 +1629,8 @@
      ENABLE_DISABLE_VALUE_TYPE(switches::kEnableAppWindowCycling,
                                switches::kDisableAppWindowCycling)},
 #endif  // OS_MACOSX
-#if defined(ENABLE_WEBVR)
     {"enable-webvr", IDS_FLAGS_WEBVR_NAME, IDS_FLAGS_WEBVR_DESCRIPTION, kOsAll,
      SINGLE_VALUE_TYPE(switches::kEnableWebVR)},
-#endif  // ENABLE_WEBVR
 #if defined(ENABLE_VR_SHELL)
     {"enable-vr-shell", IDS_FLAGS_ENABLE_VR_SHELL_NAME,
      IDS_FLAGS_ENABLE_VR_SHELL_DESCRIPTION, kOsAndroid,
diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc
index e944dd2..ccff37f 100644
--- a/chrome/browser/android/vr_shell/vr_shell.cc
+++ b/chrome/browser/android/vr_shell/vr_shell.cc
@@ -376,7 +376,7 @@
   switch (action) {
     case HISTORY_BACK:
       if (main_contents_->IsFullscreen()) {
-        main_contents_->ExitFullscreen(true /* will_cause_resize */);
+        main_contents_->ExitFullscreen(false);
       } else if (controller.CanGoBack()) {
         controller.GoBack();
       }
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 2bf5440a..dbfff0a 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1105,9 +1105,7 @@
     GetRendererContentSettingRules(
         HostContentSettingsMapFactory::GetForProfile(profile), &rules);
   }
-  // TODO(nigeltao): eliminate this legacy IPC. Instead, add an extra arg to
-  // the rc_interface->SetInitialConfiguration call.
-  host->Send(new ChromeViewMsg_SetContentSettingRules(rules));
+  rc_interface->SetContentSettingRules(rules);
 }
 
 GURL ChromeContentBrowserClient::GetEffectiveURL(
diff --git a/chrome/browser/chromeos/arc/arc_support_host.cc b/chrome/browser/chromeos/arc/arc_support_host.cc
index ec1bbfd53..5ce98ef2 100644
--- a/chrome/browser/chromeos/arc/arc_support_host.cc
+++ b/chrome/browser/chromeos/arc/arc_support_host.cc
@@ -69,6 +69,8 @@
 // extension.
 // The auth token is passed via "code" field.
 constexpr char kEventOnAuthSucceeded[] = "onAuthSucceeded";
+// "onAuthFailed" is fired when LSO authorization has failed in extension.
+constexpr char kEventOnAuthFailed[] = "onAuthFailed";
 constexpr char kCode[] = "code";
 
 // "onAgree" is fired when a user clicks "Agree" button.
@@ -524,6 +526,9 @@
     } else {
       NOTREACHED();
     }
+  } else if (event == kEventOnAuthFailed) {
+    for (auto& observer : observer_list_)
+      observer.OnAuthFailed();
   } else if (event == kEventOnAgreed) {
     bool is_metrics_enabled;
     bool is_backup_restore_enabled;
diff --git a/chrome/browser/chromeos/arc/arc_support_host.h b/chrome/browser/chromeos/arc/arc_support_host.h
index 9a33c41..24ab422 100644
--- a/chrome/browser/chromeos/arc/arc_support_host.h
+++ b/chrome/browser/chromeos/arc/arc_support_host.h
@@ -59,6 +59,9 @@
     // Called when LSO auth token fetch is successfully completed.
     virtual void OnAuthSucceeded(const std::string& auth_code) {}
 
+    // Called when LSO auth token fetch has failed.
+    virtual void OnAuthFailed() {}
+
     // Called when "RETRY" button on the error page is clicked.
     virtual void OnRetryClicked() {}
 
diff --git a/chrome/browser/chromeos/arc/auth/arc_manual_auth_code_fetcher.cc b/chrome/browser/chromeos/arc/auth/arc_manual_auth_code_fetcher.cc
index 28fe5ef52..0cbeb53 100644
--- a/chrome/browser/chromeos/arc/auth/arc_manual_auth_code_fetcher.cc
+++ b/chrome/browser/chromeos/arc/auth/arc_manual_auth_code_fetcher.cc
@@ -8,6 +8,7 @@
 #include "base/callback_helpers.h"
 #include "base/logging.h"
 #include "chrome/browser/chromeos/arc/arc_auth_context.h"
+#include "chrome/browser/chromeos/arc/arc_optin_uma.h"
 
 namespace arc {
 
@@ -40,6 +41,7 @@
     net::URLRequestContextGetter* request_context_getter) {
   DCHECK(!pending_callback_.is_null());
   if (!request_context_getter) {
+    UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
     support_host_->ShowError(ArcSupportHost::Error::SIGN_IN_NETWORK_ERROR,
                              false);
     return;
@@ -53,6 +55,12 @@
   base::ResetAndReturn(&pending_callback_).Run(auth_code);
 }
 
+void ArcManualAuthCodeFetcher::OnAuthFailed() {
+  // Don't report via callback. Extension is already showing more detailed
+  // information. Update only UMA here.
+  UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
+}
+
 void ArcManualAuthCodeFetcher::OnRetryClicked() {
   DCHECK(!pending_callback_.is_null());
   FetchInternal();
diff --git a/chrome/browser/chromeos/arc/auth/arc_manual_auth_code_fetcher.h b/chrome/browser/chromeos/arc/auth/arc_manual_auth_code_fetcher.h
index 471d365..7975dcc 100644
--- a/chrome/browser/chromeos/arc/auth/arc_manual_auth_code_fetcher.h
+++ b/chrome/browser/chromeos/arc/auth/arc_manual_auth_code_fetcher.h
@@ -40,6 +40,7 @@
 
   // ArcSupportHost::Observer:
   void OnAuthSucceeded(const std::string& auth_code) override;
+  void OnAuthFailed() override;
   void OnRetryClicked() override;
 
   ArcAuthContext* const context_;
diff --git a/chrome/browser/chromeos/events/event_rewriter_unittest.cc b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
index 9364ca47..da755cd 100644
--- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc
+++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
@@ -16,7 +16,7 @@
 #include "base/macros.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
-#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
+#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
 #include "chrome/browser/chromeos/preferences.h"
@@ -121,13 +121,11 @@
  public:
   EventRewriterTest()
       : fake_user_manager_(new chromeos::FakeChromeUserManager),
-        user_manager_enabler_(fake_user_manager_),
-        input_method_manager_mock_(NULL) {}
+        user_manager_enabler_(fake_user_manager_) {}
   ~EventRewriterTest() override {}
 
   void SetUp() override {
-    input_method_manager_mock_ =
-        new chromeos::input_method::MockInputMethodManager;
+    input_method_manager_mock_ = new input_method::MockInputMethodManagerImpl;
     chromeos::input_method::InitializeForTesting(
         input_method_manager_mock_);  // pass ownership
 
@@ -152,9 +150,9 @@
     return *new_event ? new_event->get()->AsMouseEvent() : &event;
   }
 
-  chromeos::FakeChromeUserManager* fake_user_manager_;  // Not owned.
-  chromeos::ScopedUserManagerEnabler user_manager_enabler_;
-  chromeos::input_method::MockInputMethodManager* input_method_manager_mock_;
+  FakeChromeUserManager* fake_user_manager_;  // Not owned.
+  ScopedUserManagerEnabler user_manager_enabler_;
+  input_method::MockInputMethodManagerImpl* input_method_manager_mock_;
 };
 
 TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
diff --git a/chrome/browser/chromeos/extensions/file_system_provider/provider_function.cc b/chrome/browser/chromeos/extensions/file_system_provider/provider_function.cc
index 4e6dcba49..2996239f 100644
--- a/chrome/browser/chromeos/extensions/file_system_provider/provider_function.cc
+++ b/chrome/browser/chromeos/extensions/file_system_provider/provider_function.cc
@@ -147,6 +147,9 @@
 }
 
 bool FileSystemProviderInternalFunction::PreRunValidation(std::string* error) {
+  if (!UIThreadExtensionFunction::PreRunValidation(error))
+    return false;
+
   std::string file_system_id;
 
   EXTENSION_FUNCTION_PRERUN_VALIDATE(args_->GetString(0, &file_system_id));
diff --git a/chrome/browser/chromeos/input_method/input_method_configuration_unittest.cc b/chrome/browser/chromeos/input_method/input_method_configuration_unittest.cc
index f117528..11385e44 100644
--- a/chrome/browser/chromeos/input_method/input_method_configuration_unittest.cc
+++ b/chrome/browser/chromeos/input_method/input_method_configuration_unittest.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
-#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
+#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace chromeos {
@@ -23,7 +23,7 @@
   InputMethodManager* manager = InputMethodManager::Get();
   EXPECT_FALSE(manager);
 
-  InitializeForTesting(new MockInputMethodManager);
+  InitializeForTesting(new MockInputMethodManagerImpl);
   manager = InputMethodManager::Get();
   EXPECT_TRUE(manager);
   Shutdown();
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
index 2cea3b75..618211f 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
+++ b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
@@ -13,7 +13,7 @@
 #include "base/metrics/statistics_recorder.h"
 #include "base/test/histogram_tester.h"
 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
-#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
+#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/input_method/input_method_engine_base.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -66,7 +66,7 @@
   comp_ime_manager->Initialize(
       std::unique_ptr<ComponentExtensionIMEManagerDelegate>(delegate));
 
-  MockInputMethodManager* manager = new MockInputMethodManager;
+  MockInputMethodManagerImpl* manager = new MockInputMethodManagerImpl;
   manager->SetComponentExtensionIMEManager(
       std::unique_ptr<ComponentExtensionIMEManager>(comp_ime_manager));
   InitializeForTesting(manager);
diff --git a/chrome/browser/chromeos/input_method/input_method_persistence_unittest.cc b/chrome/browser/chromeos/input_method/input_method_persistence_unittest.cc
index 5a028a8..f6e6368 100644
--- a/chrome/browser/chromeos/input_method/input_method_persistence_unittest.cc
+++ b/chrome/browser/chromeos/input_method/input_method_persistence_unittest.cc
@@ -5,7 +5,7 @@
 #include "chrome/browser/chromeos/input_method/input_method_persistence.h"
 
 #include "base/command_line.h"
-#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
+#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
 #include "chrome/browser/chromeos/language_preferences.h"
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
@@ -72,7 +72,7 @@
 
   content::TestBrowserThreadBundle thread_bundle_;
   sync_preferences::TestingPrefServiceSyncable* mock_user_prefs_;
-  MockInputMethodManager mock_manager_;
+  MockInputMethodManagerImpl mock_manager_;
   TestingProfileManager mock_profile_manager_;
   chromeos::FakeChromeUserManager* fake_user_manager_;
   chromeos::ScopedUserManagerEnabler user_manager_enabler_;
@@ -81,9 +81,9 @@
 TEST_F(InputMethodPersistenceTest, TestLifetime) {
   {
     InputMethodPersistence persistence(&mock_manager_);
-    EXPECT_EQ(1, mock_manager_.add_observer_count_);
+    EXPECT_EQ(1, mock_manager_.add_observer_count());
   }
-  EXPECT_EQ(1, mock_manager_.remove_observer_count_);
+  EXPECT_EQ(1, mock_manager_.remove_observer_count());
 }
 
 TEST_F(InputMethodPersistenceTest, TestPrefPersistenceByState) {
diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager.cc b/chrome/browser/chromeos/input_method/mock_input_method_manager.cc
deleted file mode 100644
index 7dc9f219..0000000
--- a/chrome/browser/chromeos/input_method/mock_input_method_manager.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (c) 2012 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/browser/chromeos/input_method/mock_input_method_manager.h"
-
-#include <utility>
-
-namespace chromeos {
-namespace input_method {
-
-MockInputMethodManager::State::State(MockInputMethodManager* manager)
-    : manager_(manager) {
-  active_input_method_ids.push_back("xkb:us::eng");
-}
-
-MockInputMethodManager::State::~State() {
-}
-
-MockInputMethodManager::MockInputMethodManager()
-    : add_observer_count_(0),
-      remove_observer_count_(0),
-      state_(new State(this)),
-      util_(&delegate_),
-      mod3_used_(false) {
-}
-
-MockInputMethodManager::~MockInputMethodManager() {
-}
-
-InputMethodManager::UISessionState MockInputMethodManager::GetUISessionState() {
-  return InputMethodManager::STATE_BROWSER_SCREEN;
-}
-
-void MockInputMethodManager::AddObserver(
-    InputMethodManager::Observer* observer) {
-  ++add_observer_count_;
-}
-
-void MockInputMethodManager::AddCandidateWindowObserver(
-    InputMethodManager::CandidateWindowObserver* observer) {
-}
-
-void MockInputMethodManager::AddImeMenuObserver(
-    InputMethodManager::ImeMenuObserver* observer) {}
-
-void MockInputMethodManager::RemoveObserver(
-    InputMethodManager::Observer* observer) {
-  ++remove_observer_count_;
-}
-
-void MockInputMethodManager::RemoveCandidateWindowObserver(
-    InputMethodManager::CandidateWindowObserver* observer) {
-}
-
-void MockInputMethodManager::RemoveImeMenuObserver(
-    InputMethodManager::ImeMenuObserver* observer) {}
-
-std::unique_ptr<InputMethodDescriptors>
-MockInputMethodManager::GetSupportedInputMethods() const {
-  std::unique_ptr<InputMethodDescriptors> result(new InputMethodDescriptors);
-  result->push_back(
-      InputMethodUtil::GetFallbackInputMethodDescriptor());
-  return result;
-}
-
-std::unique_ptr<InputMethodDescriptors>
-MockInputMethodManager::State::GetActiveInputMethods() const {
-  std::unique_ptr<InputMethodDescriptors> result(new InputMethodDescriptors);
-  result->push_back(
-      InputMethodUtil::GetFallbackInputMethodDescriptor());
-  return result;
-}
-
-const std::vector<std::string>&
-MockInputMethodManager::State::GetActiveInputMethodIds() const {
-  return active_input_method_ids;
-}
-
-size_t MockInputMethodManager::State::GetNumActiveInputMethods() const {
-  return 1;
-}
-
-const InputMethodDescriptor*
-MockInputMethodManager::State::GetInputMethodFromId(
-    const std::string& input_method_id) const {
-  static const InputMethodDescriptor defaultInputMethod =
-      InputMethodUtil::GetFallbackInputMethodDescriptor();
-  for (size_t i = 0; i < active_input_method_ids.size(); i++) {
-    if (input_method_id == active_input_method_ids[i]) {
-      return &defaultInputMethod;
-    }
-  }
-  return NULL;
-}
-
-void MockInputMethodManager::State::EnableLoginLayouts(
-    const std::string& language_code,
-    const std::vector<std::string>& initial_layout) {
-}
-
-void MockInputMethodManager::State::EnableLockScreenLayouts() {
-}
-
-bool MockInputMethodManager::State::ReplaceEnabledInputMethods(
-    const std::vector<std::string>& new_active_input_method_ids) {
-  return true;
-}
-
-bool MockInputMethodManager::State::EnableInputMethod(
-    const std::string& new_active_input_method_id) {
-  return true;
-}
-
-void MockInputMethodManager::State::ChangeInputMethod(
-    const std::string& input_method_id,
-    bool show_message) {
-}
-
-void MockInputMethodManager::ActivateInputMethodMenuItem(
-    const std::string& key) {
-}
-
-void MockInputMethodManager::State::AddInputMethodExtension(
-    const std::string& extension_id,
-    const InputMethodDescriptors& descriptors,
-    ui::IMEEngineHandlerInterface* instance) {}
-
-void MockInputMethodManager::State::RemoveInputMethodExtension(
-    const std::string& extension_id) {
-}
-
-void MockInputMethodManager::State::GetInputMethodExtensions(
-    InputMethodDescriptors* result) {
-}
-
-void MockInputMethodManager::State::SetEnabledExtensionImes(
-    std::vector<std::string>* ids) {
-}
-
-void MockInputMethodManager::State::SetInputMethodLoginDefault() {
-}
-
-void MockInputMethodManager::State::SetInputMethodLoginDefaultFromVPD(
-    const std::string& locale,
-    const std::string& layout) {
-}
-
-bool MockInputMethodManager::State::CanCycleInputMethod() {
-  return true;
-}
-
-void MockInputMethodManager::State::SwitchToNextInputMethod() {
-}
-
-void MockInputMethodManager::State::SwitchToPreviousInputMethod() {
-}
-
-bool MockInputMethodManager::State::CanSwitchInputMethod(
-    const ui::Accelerator& accelerator) {
-  return true;
-}
-
-void MockInputMethodManager::State::SwitchInputMethod(
-    const ui::Accelerator& accelerator) {
-}
-
-InputMethodDescriptor MockInputMethodManager::State::GetCurrentInputMethod()
-    const {
-  InputMethodDescriptor descriptor =
-      InputMethodUtil::GetFallbackInputMethodDescriptor();
-  if (!current_input_method_id.empty()) {
-    return InputMethodDescriptor(current_input_method_id,
-                                 descriptor.name(),
-                                 descriptor.indicator(),
-                                 descriptor.keyboard_layouts(),
-                                 descriptor.language_codes(),
-                                 true,
-                                 GURL(),   // options page url.
-                                 GURL());  // input view page url.
-  }
-  return descriptor;
-}
-
-bool MockInputMethodManager::IsISOLevel5ShiftUsedByCurrentInputMethod() const {
-  return mod3_used_;
-}
-
-bool MockInputMethodManager::IsAltGrUsedByCurrentInputMethod() const {
-  return false;
-}
-
-ImeKeyboard* MockInputMethodManager::GetImeKeyboard() { return &keyboard_; }
-
-InputMethodUtil* MockInputMethodManager::GetInputMethodUtil() {
-  return &util_;
-}
-
-ComponentExtensionIMEManager*
-    MockInputMethodManager::GetComponentExtensionIMEManager() {
-  return comp_ime_manager_.get();
-}
-
-void MockInputMethodManager::SetComponentExtensionIMEManager(
-    std::unique_ptr<ComponentExtensionIMEManager> comp_ime_manager) {
-  comp_ime_manager_ = std::move(comp_ime_manager);
-}
-
-void MockInputMethodManager::set_application_locale(const std::string& value) {
-  delegate_.set_active_locale(value);
-}
-
-bool MockInputMethodManager::IsLoginKeyboard(
-    const std::string& layout) const {
-  return true;
-}
-
-bool MockInputMethodManager::MigrateInputMethods(
-    std::vector<std::string>* input_method_ids) {
-  return false;
-}
-scoped_refptr<InputMethodManager::State> MockInputMethodManager::CreateNewState(
-    Profile* profile) {
-  NOTIMPLEMENTED();
-  return state_;
-}
-
-scoped_refptr<InputMethodManager::State>
-MockInputMethodManager::GetActiveIMEState() {
-  return scoped_refptr<InputMethodManager::State>(state_.get());
-}
-
-scoped_refptr<InputMethodManager::State> MockInputMethodManager::State::Clone()
-    const {
-  NOTIMPLEMENTED();
-  return manager_->GetActiveIMEState();
-}
-
-void MockInputMethodManager::SetState(
-    scoped_refptr<InputMethodManager::State> state) {
-  state_ = scoped_refptr<MockInputMethodManager::State>(
-      static_cast<MockInputMethodManager::State*>(state.get()));
-}
-
-void MockInputMethodManager::SetCurrentInputMethodId(
-    const std::string& input_method_id) {
-  state_->current_input_method_id = input_method_id;
-}
-
-void MockInputMethodManager::ImeMenuActivationChanged(bool is_active) {}
-
-void MockInputMethodManager::NotifyImeMenuItemsChanged(
-    const std::string& engine_id,
-    const std::vector<InputMethodManager::MenuItem>& items) {}
-
-void MockInputMethodManager::MaybeNotifyImeMenuActivationChanged() {}
-
-void MockInputMethodManager::OverrideKeyboardUrlRef(const std::string& keyset) {
-}
-
-bool MockInputMethodManager::IsEmojiHandwritingVoiceOnImeMenuEnabled() {
-  return false;
-}
-
-}  // namespace input_method
-}  // namespace chromeos
diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/mock_input_method_manager_impl.cc
new file mode 100644
index 0000000..e155343
--- /dev/null
+++ b/chrome/browser/chromeos/input_method/mock_input_method_manager_impl.cc
@@ -0,0 +1,148 @@
+// 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/browser/chromeos/input_method/mock_input_method_manager_impl.h"
+
+#include <utility>
+
+#include "chrome/browser/chromeos/input_method/input_method_util.h"
+
+namespace chromeos {
+namespace input_method {
+
+MockInputMethodManagerImpl::State::State(MockInputMethodManagerImpl* manager)
+    : manager_(manager) {
+  active_input_method_ids.push_back("xkb:us::eng");
+}
+
+scoped_refptr<InputMethodManager::State>
+MockInputMethodManagerImpl::State::Clone() const {
+  NOTIMPLEMENTED();
+  return manager_->GetActiveIMEState();
+}
+
+std::unique_ptr<InputMethodDescriptors>
+MockInputMethodManagerImpl::State::GetActiveInputMethods() const {
+  std::unique_ptr<InputMethodDescriptors> result;
+#if _LIBCPP_STD_VER > 11
+  result = std::make_unique<InputMethodDescriptors>();
+#else
+  result.reset(new InputMethodDescriptors);
+#endif
+  result->push_back(InputMethodUtil::GetFallbackInputMethodDescriptor());
+  return result;
+}
+
+const InputMethodDescriptor*
+MockInputMethodManagerImpl::State::GetInputMethodFromId(
+    const std::string& input_method_id) const {
+  static const InputMethodDescriptor defaultInputMethod =
+      InputMethodUtil::GetFallbackInputMethodDescriptor();
+  for (size_t i = 0; i < active_input_method_ids.size(); i++) {
+    if (input_method_id == active_input_method_ids[i]) {
+      return &defaultInputMethod;
+    }
+  }
+  return nullptr;
+}
+
+InputMethodDescriptor MockInputMethodManagerImpl::State::GetCurrentInputMethod()
+    const {
+  InputMethodDescriptor descriptor =
+      InputMethodUtil::GetFallbackInputMethodDescriptor();
+  if (!current_input_method_id.empty()) {
+    return InputMethodDescriptor(
+        current_input_method_id, descriptor.name(), descriptor.indicator(),
+        descriptor.keyboard_layouts(), descriptor.language_codes(), true,
+        GURL(),   // options page url.
+        GURL());  // input view page url.
+  }
+  return descriptor;
+}
+
+MockInputMethodManagerImpl::State::~State() {}
+
+MockInputMethodManagerImpl::MockInputMethodManagerImpl()
+    : state_(new State(this)),
+      add_observer_count_(0),
+      remove_observer_count_(0),
+      util_(new InputMethodUtil(&delegate_)),
+      mod3_used_(false) {}
+
+MockInputMethodManagerImpl::~MockInputMethodManagerImpl() {}
+
+void MockInputMethodManagerImpl::AddObserver(
+    InputMethodManager::Observer* observer) {
+  ++add_observer_count_;
+}
+
+void MockInputMethodManagerImpl::RemoveObserver(
+    InputMethodManager::Observer* observer) {
+  ++remove_observer_count_;
+}
+
+std::unique_ptr<InputMethodDescriptors>
+MockInputMethodManagerImpl::GetSupportedInputMethods() const {
+  std::unique_ptr<InputMethodDescriptors> result;
+#if _LIBCPP_STD_VER > 11
+  result = std::make_unique<InputMethodDescriptors>();
+#else
+  result.reset(new InputMethodDescriptors);
+#endif
+  result->push_back(InputMethodUtil::GetFallbackInputMethodDescriptor());
+  return result;
+}
+
+bool MockInputMethodManagerImpl::IsISOLevel5ShiftUsedByCurrentInputMethod()
+    const {
+  return mod3_used_;
+}
+
+ImeKeyboard* MockInputMethodManagerImpl::GetImeKeyboard() {
+  return &keyboard_;
+}
+
+InputMethodUtil* MockInputMethodManagerImpl::GetInputMethodUtil() {
+  return util_.get();
+}
+
+ComponentExtensionIMEManager*
+MockInputMethodManagerImpl::GetComponentExtensionIMEManager() {
+  return comp_ime_manager_.get();
+}
+
+scoped_refptr<InputMethodManager::State>
+MockInputMethodManagerImpl::CreateNewState(Profile* profile) {
+  NOTIMPLEMENTED();
+  return state_;
+}
+
+scoped_refptr<InputMethodManager::State>
+MockInputMethodManagerImpl::GetActiveIMEState() {
+  return scoped_refptr<InputMethodManager::State>(state_.get());
+}
+
+void MockInputMethodManagerImpl::SetState(
+    scoped_refptr<InputMethodManager::State> state) {
+  state_ = scoped_refptr<MockInputMethodManagerImpl::State>(
+      static_cast<MockInputMethodManagerImpl::State*>(state.get()));
+}
+
+void MockInputMethodManagerImpl::SetCurrentInputMethodId(
+    const std::string& input_method_id) {
+  state_->current_input_method_id = input_method_id;
+}
+
+void MockInputMethodManagerImpl::SetComponentExtensionIMEManager(
+    std::unique_ptr<ComponentExtensionIMEManager> comp_ime_manager) {
+  comp_ime_manager_ = std::move(comp_ime_manager);
+}
+
+void MockInputMethodManagerImpl::set_application_locale(
+    const std::string& value) {
+  delegate_.set_active_locale(value);
+}
+
+}  // namespace input_method
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h b/chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h
new file mode 100644
index 0000000..5e6f61a
--- /dev/null
+++ b/chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h
@@ -0,0 +1,100 @@
+// 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_BROWSER_CHROMEOS_INPUT_METHOD_MOCK_INPUT_METHOD_MANAGER_IMPL_H_
+#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MOCK_INPUT_METHOD_MANAGER_IMPL_H_
+
+#include <stddef.h>
+
+#include "base/macros.h"
+#include "ui/base/ime/chromeos/component_extension_ime_manager.h"
+#include "ui/base/ime/chromeos/fake_ime_keyboard.h"
+#include "ui/base/ime/chromeos/fake_input_method_delegate.h"
+#include "ui/base/ime/chromeos/input_method_manager.h"
+#include "ui/base/ime/chromeos/input_method_whitelist.h"
+#include "ui/base/ime/chromeos/mock_input_method_manager.h"
+
+namespace chromeos {
+namespace input_method {
+
+// The mock implementation of InputMethodManager for testing.
+class MockInputMethodManagerImpl : public MockInputMethodManager {
+ public:
+  class State : public MockInputMethodManager::State {
+   public:
+    explicit State(MockInputMethodManagerImpl* manager);
+
+    // MockInputMethodManager::State:
+    scoped_refptr<InputMethodManager::State> Clone() const override;
+    std::unique_ptr<InputMethodDescriptors> GetActiveInputMethods()
+        const override;
+    const InputMethodDescriptor* GetInputMethodFromId(
+        const std::string& input_method_id) const override;
+    InputMethodDescriptor GetCurrentInputMethod() const override;
+
+    // The value GetCurrentInputMethod().id() will return.
+    std::string current_input_method_id;
+
+   protected:
+    friend base::RefCounted<InputMethodManager::State>;
+    ~State() override;
+
+   private:
+    MockInputMethodManager* const manager_;
+
+    DISALLOW_COPY_AND_ASSIGN(State);
+  };
+
+  MockInputMethodManagerImpl();
+  ~MockInputMethodManagerImpl() override;
+
+  // MockInputMethodManager:
+  void AddObserver(InputMethodManager::Observer* observer) override;
+  void RemoveObserver(InputMethodManager::Observer* observer) override;
+  std::unique_ptr<InputMethodDescriptors> GetSupportedInputMethods()
+      const override;
+  bool IsISOLevel5ShiftUsedByCurrentInputMethod() const override;
+  ImeKeyboard* GetImeKeyboard() override;
+  InputMethodUtil* GetInputMethodUtil() override;
+  ComponentExtensionIMEManager* GetComponentExtensionIMEManager() override;
+  scoped_refptr<InputMethodManager::State> CreateNewState(
+      Profile* profile) override;
+  scoped_refptr<InputMethodManager::State> GetActiveIMEState() override;
+  void SetState(scoped_refptr<InputMethodManager::State> state) override;
+
+  // Sets an input method ID which will be returned by GetCurrentInputMethod().
+  void SetCurrentInputMethodId(const std::string& input_method_id);
+
+  void SetComponentExtensionIMEManager(
+      std::unique_ptr<ComponentExtensionIMEManager> comp_ime_manager);
+
+  // Set values that will be provided to the InputMethodUtil.
+  void set_application_locale(const std::string& value);
+
+  // Set the value returned by IsISOLevel5ShiftUsedByCurrentInputMethod
+  void set_mod3_used(bool value) { mod3_used_ = value; }
+
+  int add_observer_count() const { return add_observer_count_; }
+  int remove_observer_count() const { return remove_observer_count_; }
+
+ protected:
+  scoped_refptr<State> state_;
+
+ private:
+  // TODO(yusukes): Add more variables for counting the numbers of the API calls
+  int add_observer_count_;
+  int remove_observer_count_;
+  FakeInputMethodDelegate delegate_;  // used by util_
+  std::unique_ptr<InputMethodUtil> util_;
+  FakeImeKeyboard keyboard_;
+  bool mod3_used_;
+  std::unique_ptr<ComponentExtensionIMEManager> comp_ime_manager_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockInputMethodManagerImpl);
+};
+
+}  // namespace input_method
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MOCK_INPUT_METHOD_MANAGER_IMPL_H_
diff --git a/chrome/browser/chromeos/preferences_unittest.cc b/chrome/browser/chromeos/preferences_unittest.cc
index 89e585a6..5ab6440 100644
--- a/chrome/browser/chromeos/preferences_unittest.cc
+++ b/chrome/browser/chromeos/preferences_unittest.cc
@@ -11,7 +11,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
-#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
+#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
 #include "chrome/browser/chromeos/login/session/user_session_manager.h"
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
@@ -74,12 +74,12 @@
 namespace input_method {
 namespace {
 
-class MyMockInputMethodManager : public MockInputMethodManager {
+class MyMockInputMethodManager : public MockInputMethodManagerImpl {
  public:
-  class State : public MockInputMethodManager::State {
+  class State : public MockInputMethodManagerImpl::State {
    public:
     explicit State(MyMockInputMethodManager* manager)
-        : MockInputMethodManager::State(manager), manager_(manager) {
+        : MockInputMethodManagerImpl::State(manager), manager_(manager) {
       input_method_extensions_.reset(new InputMethodDescriptors);
     }
 
diff --git a/chrome/browser/chromeos/printing/printer_pref_manager_factory.cc b/chrome/browser/chromeos/printing/printer_pref_manager_factory.cc
index e70ef4f..4f08256 100644
--- a/chrome/browser/chromeos/printing/printer_pref_manager_factory.cc
+++ b/chrome/browser/chromeos/printing/printer_pref_manager_factory.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/chromeos/printing/printer_pref_manager_factory.h"
 
+#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
@@ -30,6 +31,11 @@
   return g_printer_pref_manager.Pointer();
 }
 
+content::BrowserContext* PrinterPrefManagerFactory::GetBrowserContextToUse(
+    content::BrowserContext* context) const {
+  return chrome::GetBrowserContextRedirectedInIncognito(context);
+}
+
 PrinterPrefManagerFactory::PrinterPrefManagerFactory()
     : BrowserContextKeyedServiceFactory(
           "PrinterPrefManager",
diff --git a/chrome/browser/chromeos/printing/printer_pref_manager_factory.h b/chrome/browser/chromeos/printing/printer_pref_manager_factory.h
index 5815eb1d..f10c2f8 100644
--- a/chrome/browser/chromeos/printing/printer_pref_manager_factory.h
+++ b/chrome/browser/chromeos/printing/printer_pref_manager_factory.h
@@ -23,6 +23,10 @@
 
   static PrinterPrefManagerFactory* GetInstance();
 
+ protected:
+  content::BrowserContext* GetBrowserContextToUse(
+      content::BrowserContext* context) const override;
+
  private:
   friend struct base::DefaultLazyInstanceTraits<PrinterPrefManagerFactory>;
 
diff --git a/chrome/browser/content_settings/tab_specific_content_settings.cc b/chrome/browser/content_settings/tab_specific_content_settings.cc
index b6ef7e9..f0693c38 100644
--- a/chrome/browser/content_settings/tab_specific_content_settings.cc
+++ b/chrome/browser/content_settings/tab_specific_content_settings.cc
@@ -760,6 +760,7 @@
     }
     RendererContentSettingRules rules;
     GetRendererContentSettingRules(map, &rules);
+    // TODO(nigeltao): use Mojo instead of legacy IPC.
     Send(new ChromeViewMsg_SetContentSettingRules(rules));
   }
 }
diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc
index 1e3e01e3..8dc8132 100644
--- a/chrome/browser/file_select_helper.cc
+++ b/chrome/browser/file_select_helper.cc
@@ -546,7 +546,10 @@
 
   GURL requestor_url = params->requestor;
   sb_service->download_protection_service()->CheckPPAPIDownloadRequest(
-      requestor_url, default_file_path, alternate_extensions, profile_,
+      requestor_url,
+      render_frame_host_? render_frame_host_->GetLastCommittedURL() : GURL(),
+      WebContents::FromRenderFrameHost(render_frame_host_),
+      default_file_path, alternate_extensions, profile_,
       base::Bind(&InterpretSafeBrowsingVerdict,
                  base::Bind(&FileSelectHelper::ProceedWithSafeBrowsingVerdict,
                             this, default_file_path, base::Passed(&params))));
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc
index bced9689..670211b5 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -506,12 +506,13 @@
 
 std::unique_ptr<metrics::MetricsLogUploader>
 ChromeMetricsServiceClient::CreateUploader(
+    const std::string& server_url,
+    const std::string& mime_type,
     const base::Callback<void(int)>& on_upload_complete) {
   return std::unique_ptr<metrics::MetricsLogUploader>(
       new metrics::NetMetricsLogUploader(
           g_browser_process->system_request_context(),
-          metrics::kDefaultMetricsServerUrl, metrics::kDefaultMetricsMimeType,
-          on_upload_complete));
+          server_url, mime_type, on_upload_complete));
 }
 
 base::TimeDelta ChromeMetricsServiceClient::GetStandardUploadInterval() {
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.h b/chrome/browser/metrics/chrome_metrics_service_client.h
index 16f59c6e..cc7e966 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.h
+++ b/chrome/browser/metrics/chrome_metrics_service_client.h
@@ -74,6 +74,8 @@
       const base::Closure& done_callback) override;
   void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
   std::unique_ptr<metrics::MetricsLogUploader> CreateUploader(
+      const std::string& server_url,
+      const std::string& mime_type,
       const base::Callback<void(int)>& on_upload_complete) override;
   base::TimeDelta GetStandardUploadInterval() override;
   base::string16 GetRegistryBackupKey() override;
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc
index 4426c62..b63a7bb 100644
--- a/chrome/browser/pdf/pdf_extension_test.cc
+++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -48,6 +48,7 @@
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/common/manifest_handlers/mime_types_handler.h"
 #include "extensions/test/result_catcher.h"
@@ -932,3 +933,67 @@
   EXPECT_TRUE(web_contents->GetController().GetPendingEntry());
   EXPECT_FALSE(active_web_contents->GetController().GetPendingEntry());
 }
+
+// This test opens a PDF by clicking a link via javascript and verifies that
+// the PDF is loaded and functional by clicking a link in the PDF. The link
+// click in the PDF opens a new tab. The main page handles the pageShow event
+// and updates the history state.
+IN_PROC_BROWSER_TEST_F(PDFExtensionTest, OpenPDFOnLinkClickWithReplaceState) {
+  host_resolver()->AddRule("www.example.com", "127.0.0.1");
+
+  // Navigate to the main page.
+  GURL test_url(
+      embedded_test_server()->GetURL("/pdf/pdf_href_replace_state.html"));
+  ui_test_utils::NavigateToURL(browser(), test_url);
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_TRUE(web_contents);
+
+  // Click on the link which opens the PDF via JS.
+  content::TestNavigationObserver navigation_observer(web_contents);
+  const char kPdfLinkClick[] = "document.getElementById('link').click();";
+  ASSERT_TRUE(content::ExecuteScript(web_contents->GetRenderViewHost(),
+                                     kPdfLinkClick));
+  navigation_observer.Wait();
+  const GURL& current_url = web_contents->GetURL();
+  ASSERT_TRUE(current_url.path() == "/pdf/test-link.pdf");
+
+  ASSERT_TRUE(pdf_extension_test_util::EnsurePDFHasLoaded(web_contents));
+
+  // Now click on the link to example.com in the PDF. This should open up a new
+  // tab.
+  content::BrowserPluginGuestManager* guest_manager =
+      web_contents->GetBrowserContext()->GetGuestManager();
+  content::WebContents* guest_contents =
+      guest_manager->GetFullPageGuest(web_contents);
+  ASSERT_TRUE(guest_contents);
+  // The link position of the test-link.pdf in page coordinates is (110, 110).
+  // Convert the link position from page coordinates to screen coordinates.
+  gfx::Point link_position(110, 110);
+  ConvertPageCoordToScreenCoord(guest_contents, &link_position);
+
+  content::WindowedNotificationObserver observer(
+      chrome::NOTIFICATION_TAB_ADDED,
+      content::NotificationService::AllSources());
+  content::SimulateMouseClickAt(web_contents, kDefaultKeyModifier,
+                                blink::WebMouseEvent::Button::Left,
+                                link_position);
+  observer.Wait();
+
+  // We should have two tabs now. One with the PDF and the second for
+  // example.com
+  int tab_count = browser()->tab_strip_model()->count();
+  ASSERT_EQ(2, tab_count);
+
+  content::WebContents* active_web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_EQ(web_contents, active_web_contents);
+
+  content::WebContents* new_web_contents =
+      browser()->tab_strip_model()->GetWebContentsAt(1);
+  ASSERT_TRUE(new_web_contents);
+  ASSERT_NE(web_contents, new_web_contents);
+
+  const GURL& url = new_web_contents->GetURL();
+  ASSERT_EQ(GURL("http://www.example.com"), url);
+}
diff --git a/chrome/browser/resources/chromeos/arc_support/background.js b/chrome/browser/resources/chromeos/arc_support/background.js
index 40d2a296c..1bbfcc6 100644
--- a/chrome/browser/resources/chromeos/arc_support/background.js
+++ b/chrome/browser/resources/chromeos/arc_support/background.js
@@ -675,7 +675,8 @@
           var authCode = results[0].substring(authCodePrefix.length);
           sendNativeMessage('onAuthSucceeded', {code: authCode});
         } else {
-          showErrorMessage(
+          sendNativeMessage('onAuthFailed');
+          showErrorPage(
               appWindow.contentWindow.loadTimeData.getString(
                   'authorizationFailed'));
         }
diff --git a/chrome/browser/resources/md_bookmarks/item.js b/chrome/browser/resources/md_bookmarks/item.js
index 6558615..13e69824 100644
--- a/chrome/browser/resources/md_bookmarks/item.js
+++ b/chrome/browser/resources/md_bookmarks/item.js
@@ -9,14 +9,14 @@
     /** @type {BookmarkTreeNode} */
     item: {
       type: Object,
-      observer: 'onItemChanged_'
+      observer: 'onItemChanged_',
     },
 
     isFolder_: Boolean,
   },
 
   observers: [
-    'updateFavicon_(item.url)'
+    'updateFavicon_(item.url)',
   ],
 
   /**
@@ -24,8 +24,9 @@
    * @private
    */
   onMenuButtonOpenTap_: function(e) {
-    this.fire('toggle-menu', {
-      target: e.target
+    this.fire('open-item-menu', {
+      target: e.target,
+      item: this.item
     });
   },
 
@@ -37,5 +38,5 @@
   /** @private */
   updateFavicon_: function(url) {
     this.$.icon.style.backgroundImage = cr.icon.getFavicon(url);
-  }
+  },
 });
diff --git a/chrome/browser/resources/md_bookmarks/list.js b/chrome/browser/resources/md_bookmarks/list.js
index 426cbb3..ea6cb45 100644
--- a/chrome/browser/resources/md_bookmarks/list.js
+++ b/chrome/browser/resources/md_bookmarks/list.js
@@ -8,17 +8,21 @@
   properties: {
     /** @type {BookmarkTreeNode} */
     selectedNode: Object,
+
+    /** @type {BookmarkTreeNode} */
+    menuItem_: Object,
   },
 
   listeners: {
-    'toggle-menu': 'onToggleMenu_'
+    'open-item-menu': 'onOpenItemMenu_',
   },
 
   /**
    * @param {Event} e
    * @private
    */
-  onToggleMenu_: function(e) {
+  onOpenItemMenu_: function(e) {
+    this.menuItem_ = e.detail.item;
     var menu = /** @type {!CrActionMenuElement} */ (
         this.$.dropdown);
     menu.showAt(/** @type {!Element} */ (e.detail.target));
@@ -32,11 +36,24 @@
 
   /** @private */
   onCopyURLTap_: function() {
+    var idList = [this.menuItem_.id];
+    chrome.bookmarkManagerPrivate.copy(idList, function() {
+      // TODO(jiaxi): Add toast later.
+    });
     this.closeDropdownMenu_();
   },
 
   /** @private */
   onDeleteTap_: function() {
+    if (this.menuItem_.children) {
+      chrome.bookmarks.removeTree(this.menuItem_.id, function() {
+        // TODO(jiaxi): Add toast later.
+      }.bind(this));
+    } else {
+      chrome.bookmarks.remove(this.menuItem_.id, function() {
+        // TODO(jiaxi): Add toast later.
+      }.bind(this));
+    }
     this.closeDropdownMenu_();
   },
 
diff --git a/chrome/browser/resources/md_bookmarks/store.js b/chrome/browser/resources/md_bookmarks/store.js
index 7a9817817..f9f50c5 100644
--- a/chrome/browser/resources/md_bookmarks/store.js
+++ b/chrome/browser/resources/md_bookmarks/store.js
@@ -55,6 +55,7 @@
     chrome.bookmarks.getTree(function(results) {
       this.setupStore_(results[0]);
     }.bind(this));
+    chrome.bookmarks.onRemoved.addListener(this.onBookmarkRemoved_.bind(this));
   },
 
   /**
@@ -65,6 +66,7 @@
     this.rootNode = rootNode;
     this.idToNodeMap_ = {};
     this.rootNode.path = 'rootNode';
+    this.generatePaths_(rootNode, 0);
     this.initNodes_(this.rootNode);
     this.fire('selected-folder-changed', this.rootNode.children[0].id);
   },
@@ -115,10 +117,28 @@
   },
 
   /**
+   * Callback for when a bookmark node is removed.
+   * If a folder is selected or is an ancestor of a selected folder, the parent
+   * of the removed folder will be selected.
+   * @param {string} id The id of the removed bookmark node.
+   * @param {!{index: number,
+   *           parentId: string,
+   *           node: BookmarkTreeNode}} removeInfo
+   */
+  onBookmarkRemoved_: function(id, removeInfo) {
+    if (this.isAncestorOfSelected_(this.idToNodeMap_[id]))
+      this.fire('selected-folder-changed', removeInfo.parentId);
+
+    var parentNode = this.idToNodeMap_[removeInfo.parentId];
+    this.splice(parentNode.path + '.children', removeInfo.index, 1);
+    this.removeDescendantsFromMap_(id);
+    this.generatePaths_(parentNode, removeInfo.index);
+  },
+
+  /**
    * Initializes the nodes in the bookmarks tree as follows:
    * - Populates |idToNodeMap_| with a mapping of all node ids to their
    *   corresponding BookmarkTreeNode.
-   * - Stores the path from the store to a node inside the node.
    * - Sets all the nodes to not selected and open by default.
    * @param {BookmarkTreeNode} bookmarkNode
    * @private
@@ -131,8 +151,40 @@
     bookmarkNode.isSelected = false;
     bookmarkNode.isOpen = true;
     for (var i = 0; i < bookmarkNode.children.length; i++) {
-      bookmarkNode.children[i].path = bookmarkNode.path + '.children.' + i;
       this.initNodes_(bookmarkNode.children[i]);
     }
   },
+
+  /**
+   * Stores the path from the store to a node inside the node.
+   * @param {BookmarkTreeNode} bookmarkNode
+   * @param {number} startIndex
+   * @private
+   */
+  generatePaths_: function(bookmarkNode, startIndex) {
+    if (!bookmarkNode.children)
+      return;
+
+    for (var i = startIndex; i < bookmarkNode.children.length; i++) {
+      bookmarkNode.children[i].path = bookmarkNode.path + '.children.#' + i;
+      this.generatePaths_(bookmarkNode.children[i], 0);
+    }
+  },
+
+  /**
+   * Remove all descendants of a given node from the map.
+   * @param {string} id
+   * @private
+   */
+  removeDescendantsFromMap_: function(id) {
+    var node = this.idToNodeMap_[id];
+    if (!node)
+      return;
+
+    if (node.children) {
+      for (var i = 0; i < node.children.length; i++)
+        this.removeDescendantsFromMap_(node.children[i].id);
+    }
+    delete this.idToNodeMap_[id];
+  }
 });
diff --git a/chrome/browser/resources/md_downloads/vulcanized.html b/chrome/browser/resources/md_downloads/vulcanized.html
index e507b2d4..252b5b26 100644
--- a/chrome/browser/resources/md_downloads/vulcanized.html
+++ b/chrome/browser/resources/md_downloads/vulcanized.html
@@ -3111,6 +3111,7 @@
 #centeredContent {
   display: flex;
         flex: 1 1 0;
+        justify-content: center;
 }
 
 #rightContent {
diff --git a/chrome/browser/resources/md_history/app.vulcanized.html b/chrome/browser/resources/md_history/app.vulcanized.html
index c0bbf3d..30b519ff 100644
--- a/chrome/browser/resources/md_history/app.vulcanized.html
+++ b/chrome/browser/resources/md_history/app.vulcanized.html
@@ -1979,6 +1979,7 @@
 #centeredContent {
   display: flex;
         flex: 1 1 0;
+        justify-content: center;
 }
 
 #rightContent {
diff --git a/chrome/browser/resources/settings/controls/compiled_resources2.gyp b/chrome/browser/resources/settings/controls/compiled_resources2.gyp
index de92dbb..c5646ff 100644
--- a/chrome/browser/resources/settings/controls/compiled_resources2.gyp
+++ b/chrome/browser/resources/settings/controls/compiled_resources2.gyp
@@ -6,6 +6,7 @@
     {
       'target_name': 'controlled_button',
       'dependencies': [
+        '<(DEPTH)/ui/webui/resources/cr_elements/policy/compiled_resources2.gyp:cr_policy_indicator_behavior',
         '<(DEPTH)/ui/webui/resources/cr_elements/policy/compiled_resources2.gyp:cr_policy_pref_behavior',
         '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:assert',
         'pref_control_behavior',
diff --git a/chrome/browser/resources/settings/controls/controlled_button.html b/chrome/browser/resources/settings/controls/controlled_button.html
index 9868ce0..650e3a4 100644
--- a/chrome/browser/resources/settings/controls/controlled_button.html
+++ b/chrome/browser/resources/settings/controls/controlled_button.html
@@ -1,9 +1,11 @@
 <link rel="import" href="chrome://resources/html/assert.html">
 <link rel="import" href="chrome://resources/html/polymer.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
+<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.html">
 <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_behavior.html">
 <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html">
 <link rel="import" href="/controls/pref_control_behavior.html">
+<link rel="import" href="/i18n_setup.html">
 <link rel="import" href="/settings_shared_css.html">
 
 <dom-module id="controlled-button">
@@ -32,7 +34,7 @@
       <content></content>
     </paper-button>
 
-    <template is="dom-if" if="[[controlled_]]">
+    <template is="dom-if" if="[[showIndicator_(pref)]]" restamp>
       <cr-policy-pref-indicator pref="[[pref]]" on-tap="onIndicatorTap_">
       </cr-policy-pref-indicator>
     </template>
diff --git a/chrome/browser/resources/settings/controls/controlled_button.js b/chrome/browser/resources/settings/controls/controlled_button.js
index ac4428f..a6609ed 100644
--- a/chrome/browser/resources/settings/controls/controlled_button.js
+++ b/chrome/browser/resources/settings/controls/controlled_button.js
@@ -5,7 +5,11 @@
 Polymer({
   is: 'controlled-button',
 
-  behaviors: [CrPolicyPrefBehavior, PrefControlBehavior],
+  behaviors: [
+    CrPolicyIndicatorBehavior,
+    CrPolicyPrefBehavior,
+    PrefControlBehavior,
+  ],
 
   properties: {
     /** @private */
@@ -33,4 +37,16 @@
     e.preventDefault();
     e.stopPropagation();
   },
+
+  /**
+   * @param {!chrome.settingsPrivate.PrefObject} pref
+   * @return {boolean} Whether to show a controlled by indicator.
+   * @private
+   */
+  showIndicator_: function(pref) {
+    if (!pref.controlledBy || !pref.enforcement)
+      return false;
+    var indicator = this.getIndicatorType(pref.controlledBy, pref.enforcement);
+    return this.isIndicatorVisible(indicator);
+  },
 });
diff --git a/chrome/browser/resources/settings/controls/controlled_radio_button.html b/chrome/browser/resources/settings/controls/controlled_radio_button.html
index 13c6a47..b96b8fb 100644
--- a/chrome/browser/resources/settings/controls/controlled_radio_button.html
+++ b/chrome/browser/resources/settings/controls/controlled_radio_button.html
@@ -14,6 +14,10 @@
         outline: none;
       }
 
+      #radioButton {
+        flex: 1;
+      }
+
       :host([controlled_]) {
         /* Disable pointer events for this whole element, as outer on-tap gets
          * triggered when clicking/tapping anywhere in :host. */
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html
index 76fbc1a6..8d8f4267 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -161,7 +161,12 @@
             <div>$i18n{manageCertificates}</div>
             <div class="secondary">$i18n{manageCertificatesDescription}</div>
           </div>
-          <button class="subpage-arrow" is="paper-icon-button-light"></button>
+<if expr="use_nss_certs">
+          <button is="paper-icon-button-light" class="subpage-arrow"></button>
+</if>
+<if expr="not use_nss_certs">
+          <button is="paper-icon-button-light" class="icon-external"></button>
+</if>
         </div>
 </if>
         <div id="site-settings-subpage-trigger"
diff --git a/chrome/browser/safe_browsing/download_protection_service.cc b/chrome/browser/safe_browsing/download_protection_service.cc
index cc34930..66ac0cd 100644
--- a/chrome/browser/safe_browsing/download_protection_service.cc
+++ b/chrome/browser/safe_browsing/download_protection_service.cc
@@ -1230,6 +1230,8 @@
 
   PPAPIDownloadRequest(
       const GURL& requestor_url,
+      const GURL& initiating_frame_url,
+      content::WebContents* web_contents,
       const base::FilePath& default_file_path,
       const std::vector<base::FilePath::StringType>& alternate_extensions,
       Profile* profile,
@@ -1237,6 +1239,8 @@
       DownloadProtectionService* service,
       scoped_refptr<SafeBrowsingDatabaseManager> database_manager)
       : requestor_url_(requestor_url),
+        initiating_frame_url_(initiating_frame_url),
+        tab_id_(SessionTabHelper::IdForTab(web_contents)),
         default_file_path_(default_file_path),
         alternate_extensions_(alternate_extensions),
         callback_(callback),
@@ -1248,6 +1252,15 @@
         weakptr_factory_(this) {
     DCHECK(profile);
     is_extended_reporting_ = IsExtendedReportingEnabled(*profile->GetPrefs());
+
+    if (service->navigation_observer_manager()) {
+      has_user_gesture_ =
+          service->navigation_observer_manager()->HasUserGesture(web_contents);
+      if (has_user_gesture_) {
+        service->navigation_observer_manager()->OnUserGestureConsumed(
+            web_contents, base::Time::Now());
+      }
+    }
   }
 
   ~PPAPIDownloadRequest() override {
@@ -1359,8 +1372,11 @@
           base::FilePath(default_file_path_.FinalExtension()).AsUTF8Unsafe();
     }
 
-    // TODO(676691): We should add reliable download referrer chain for PPAPI
-    // downloads too.
+    service_->AddReferrerChainToPPAPIClientDownloadRequest(
+        initiating_frame_url_,
+        tab_id_,
+        has_user_gesture_,
+        &request);
 
     if (!request.SerializeToString(&client_download_request_data_)) {
       // More of an internal error than anything else. Note that the UNKNOWN
@@ -1484,6 +1500,16 @@
   // URL of document that requested the PPAPI download.
   const GURL requestor_url_;
 
+  // URL of the frame that hosted the PPAPI plugin.
+  const GURL initiating_frame_url_;
+
+  // Tab id that associated with the PPAPI plugin, computed by
+  // SessionTabHelper::IdForTab().
+  int tab_id_;
+
+  // If the user interacted with this PPAPI plugin to trigger the download.
+  bool has_user_gesture_;
+
   // Default download path requested by the PPAPI plugin.
   const base::FilePath default_file_path_;
 
@@ -1614,6 +1640,8 @@
 
 void DownloadProtectionService::CheckPPAPIDownloadRequest(
     const GURL& requestor_url,
+    const GURL& initiating_frame_url,
+    content::WebContents* web_contents,
     const base::FilePath& default_file_path,
     const std::vector<base::FilePath::StringType>& alternate_extensions,
     Profile* profile,
@@ -1621,8 +1649,8 @@
   DVLOG(1) << __func__ << " url:" << requestor_url
            << " default_file_path:" << default_file_path.value();
   std::unique_ptr<PPAPIDownloadRequest> request(new PPAPIDownloadRequest(
-      requestor_url, default_file_path, alternate_extensions, profile, callback,
-      this, database_manager_));
+      requestor_url, initiating_frame_url, web_contents, default_file_path,
+      alternate_extensions, profile, callback, this, database_manager_));
   PPAPIDownloadRequest* request_copy = request.get();
   auto insertion_result = ppapi_download_requests_.insert(
       std::make_pair(request_copy, std::move(request)));
@@ -1808,7 +1836,7 @@
       download_tab_id == -1);
   std::vector<ReferrerChainEntry> attribution_chain;
   SafeBrowsingNavigationObserverManager::AttributionResult result =
-      navigation_observer_manager_->IdentifyReferrerChain(
+      navigation_observer_manager_->IdentifyReferrerChainForDownload(
           download_url,
           download_tab_id,
           kDownloadAttributionUserGestureLimit,
@@ -1823,4 +1851,36 @@
     out_request->add_referrer_chain()->Swap(&entry);
 }
 
+void DownloadProtectionService::AddReferrerChainToPPAPIClientDownloadRequest(
+  const GURL& initiating_frame_url,
+  int tab_id,
+  bool has_user_gesture,
+  ClientDownloadRequest* out_request) {
+  if (!base::FeatureList::IsEnabled(
+      SafeBrowsingNavigationObserverManager::kDownloadAttribution) ||
+      !navigation_observer_manager_) {
+    return;
+  }
+
+  UMA_HISTOGRAM_BOOLEAN(
+      "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution",
+      tab_id == -1);
+  std::vector<ReferrerChainEntry> attribution_chain;
+  SafeBrowsingNavigationObserverManager::AttributionResult result =
+      navigation_observer_manager_->IdentifyReferrerChainForPPAPIDownload(
+          initiating_frame_url,
+          tab_id,
+          has_user_gesture,
+          kDownloadAttributionUserGestureLimit,
+          &attribution_chain);
+  UMA_HISTOGRAM_COUNTS_100(
+      "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution",
+      attribution_chain.size());
+  UMA_HISTOGRAM_ENUMERATION(
+      "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result,
+      SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
+  for (auto entry : attribution_chain)
+    out_request->add_referrer_chain()->Swap(&entry);
+}
+
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/download_protection_service.h b/chrome/browser/safe_browsing/download_protection_service.h
index 213e2a74..e7fee05b 100644
--- a/chrome/browser/safe_browsing/download_protection_service.h
+++ b/chrome/browser/safe_browsing/download_protection_service.h
@@ -129,6 +129,8 @@
 
   virtual void CheckPPAPIDownloadRequest(
       const GURL& requestor_url,
+      const GURL& initiating_frame_url,
+      content::WebContents* web_contents,
       const base::FilePath& default_file_path,
       const std::vector<base::FilePath::StringType>& alternate_extensions,
       Profile* profile,
@@ -173,6 +175,11 @@
     return whitelist_sample_rate_;
   }
 
+  scoped_refptr<SafeBrowsingNavigationObserverManager>
+  navigation_observer_manager() {
+    return navigation_observer_manager_;
+  }
+
   static void SetDownloadPingToken(content::DownloadItem* item,
                                    const std::string& token);
 
@@ -296,6 +303,16 @@
     content::WebContents* web_contents,
     ClientDownloadRequest* out_request);
 
+  // If kDownloadAttribution feature is enabled, identify referrer chain of the
+  // PPAPI download based on the frame URL where the download is initiated.
+  // Then add referrer chain info to ClientDownloadRequest proto. This function
+  // also records UMA stats of download attribution result.
+  void AddReferrerChainToPPAPIClientDownloadRequest(
+    const GURL& initiating_frame_url,
+    int tab_id,
+    bool has_user_gesture,
+    ClientDownloadRequest* out_request);
+
   // These pointers may be NULL if SafeBrowsing is disabled.
   scoped_refptr<SafeBrowsingUIManager> ui_manager_;
   scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
diff --git a/chrome/browser/safe_browsing/download_protection_service_unittest.cc b/chrome/browser/safe_browsing/download_protection_service_unittest.cc
index 20e6527..3fddf4a 100644
--- a/chrome/browser/safe_browsing/download_protection_service_unittest.cc
+++ b/chrome/browser/safe_browsing/download_protection_service_unittest.cc
@@ -2021,8 +2021,8 @@
   std::vector<base::FilePath::StringType> alternate_extensions{
       FILE_PATH_LITERAL(".tmp"), FILE_PATH_LITERAL(".asdfasdf")};
   download_service_->CheckPPAPIDownloadRequest(
-      GURL("http://example.com/foo"), default_file_path, alternate_extensions,
-      profile_.get(),
+      GURL("http://example.com/foo"), GURL(), nullptr, default_file_path,
+      alternate_extensions, profile_.get(),
       base::Bind(&DownloadProtectionServiceTest::SyncCheckDoneCallback,
                  base::Unretained(this)));
   ASSERT_TRUE(IsResult(DownloadProtectionService::SAFE));
@@ -2056,8 +2056,8 @@
     SetExtendedReportingPreference(true);
     RunLoop run_loop;
     download_service_->CheckPPAPIDownloadRequest(
-        GURL("http://example.com/foo"), default_file_path, alternate_extensions,
-        profile_.get(),
+        GURL("http://example.com/foo"), GURL(), nullptr, default_file_path,
+        alternate_extensions, profile_.get(),
         base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
                    base::Unretained(this), run_loop.QuitClosure()));
     run_loop.Run();
@@ -2080,8 +2080,8 @@
   SetExtendedReportingPreference(false);
   RunLoop run_loop;
   download_service_->CheckPPAPIDownloadRequest(
-      GURL("http://example.com/foo"), default_file_path, alternate_extensions,
-      profile_.get(),
+      GURL("http://example.com/foo"), GURL(), nullptr, default_file_path,
+      alternate_extensions, profile_.get(),
       base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
                  base::Unretained(this), run_loop.QuitClosure()));
   run_loop.Run();
@@ -2101,8 +2101,8 @@
 
   RunLoop run_loop;
   download_service_->CheckPPAPIDownloadRequest(
-      GURL("http://example.com/foo"), default_file_path, alternate_extensions,
-      profile_.get(),
+      GURL("http://example.com/foo"), GURL(), nullptr, default_file_path,
+      alternate_extensions, profile_.get(),
       base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
                  base::Unretained(this), run_loop.QuitClosure()));
   run_loop.Run();
@@ -2121,8 +2121,8 @@
       .WillRepeatedly(Return(false));
   RunLoop run_loop;
   download_service_->CheckPPAPIDownloadRequest(
-      GURL("http://example.com/foo"), default_file_path, alternate_extensions,
-      profile_.get(),
+      GURL("http://example.com/foo"), GURL(), nullptr, default_file_path,
+      alternate_extensions, profile_.get(),
       base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
                  base::Unretained(this), run_loop.QuitClosure()));
   run_loop.Run();
@@ -2142,8 +2142,8 @@
       .WillRepeatedly(Return(false));
   RunLoop run_loop;
   download_service_->CheckPPAPIDownloadRequest(
-      GURL("http://example.com/foo"), default_file_path, alternate_extensions,
-      profile_.get(),
+      GURL("http://example.com/foo"), GURL(), nullptr, default_file_path,
+      alternate_extensions, profile_.get(),
       base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
                  base::Unretained(this), run_loop.QuitClosure()));
   run_loop.Run();
@@ -2163,8 +2163,8 @@
   download_service_->download_request_timeout_ms_ = 0;
   RunLoop run_loop;
   download_service_->CheckPPAPIDownloadRequest(
-      GURL("http://example.com/foo"), default_file_path, alternate_extensions,
-      profile_.get(),
+      GURL("http://example.com/foo"), GURL(), nullptr, default_file_path,
+      alternate_extensions, profile_.get(),
       base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
                  base::Unretained(this), run_loop.QuitClosure()));
   run_loop.Run();
@@ -2225,7 +2225,8 @@
   const GURL kRequestorUrl("http://example.com/foo");
   RunLoop run_loop;
   download_service_->CheckPPAPIDownloadRequest(
-      kRequestorUrl, default_file_path, alternate_extensions, profile_.get(),
+      kRequestorUrl, GURL(), nullptr, default_file_path, alternate_extensions,
+      profile_.get(),
       base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
                  base::Unretained(this), run_loop.QuitClosure()));
   run_loop.Run();
diff --git a/chrome/browser/safe_browsing/permission_reporter_browsertest.cc b/chrome/browser/safe_browsing/permission_reporter_browsertest.cc
index 5afff18..678c15c 100644
--- a/chrome/browser/safe_browsing/permission_reporter_browsertest.cc
+++ b/chrome/browser/safe_browsing/permission_reporter_browsertest.cc
@@ -82,7 +82,7 @@
 
 // Test that permission action report will be sent if the user is opted into it.
 IN_PROC_BROWSER_TEST_F(PermissionReporterBrowserTest,
-                       DISABLED_PermissionActionReporting) {
+                       PermissionActionReporting) {
   // Set up the Sync client.
   ASSERT_TRUE(SetupSync());
   Profile* profile = GetProfile(0);
@@ -126,7 +126,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(PermissionReporterBrowserTest,
-                       DISABLED_PermissionActionReportingPriorIgnoreCount) {
+                       PermissionActionReportingPriorIgnoreCount) {
   // Set up the Sync client.
   ASSERT_TRUE(SetupSync());
   Profile* profile = GetProfile(0);
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
index 0a56176..495537db 100644
--- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
@@ -249,14 +249,14 @@
     EXPECT_EQ(expected_is_retargeting, actual_entry.is_retargeting());
   }
 
-  std::vector<ReferrerChainEntry> IdentifyReferrerChain(
+  std::vector<ReferrerChainEntry> IdentifyReferrerChainForDownload(
       DownloadItem* download) {
     std::vector<ReferrerChainEntry> referrer_chain;
     int download_tab_id =
         SessionTabHelper::IdForTab(download->GetWebContents());
     // IdentifyReferrerChain should return SUCCESS(1), SUCCESS_LANDING_PAGE(2),
     // or SUCCESS_LANDING_REFERRER(3) in all these tests.
-    EXPECT_LE(observer_manager_->IdentifyReferrerChain(
+    EXPECT_LE(observer_manager_->IdentifyReferrerChainForDownload(
                   download->GetURL(), download_tab_id,
                   2,  // kDownloadAttributionUserGestureLimit
                   &referrer_chain),
@@ -264,6 +264,23 @@
     return referrer_chain;
   }
 
+  std::vector<ReferrerChainEntry> IdentifyReferrerChainForPPAPIDownload(
+      const GURL& initiating_frame_url,
+      content::WebContents* web_contents) {
+    std::vector<ReferrerChainEntry> referrer_chain;
+    int tab_id = SessionTabHelper::IdForTab(web_contents);
+    bool has_user_gesture = observer_manager_->HasUserGesture(web_contents);
+    observer_manager_->OnUserGestureConsumed(web_contents, base::Time::Now());
+    EXPECT_LE(observer_manager_->IdentifyReferrerChainForPPAPIDownload(
+                  initiating_frame_url,
+                  tab_id,
+                  has_user_gesture,
+                  2,  // kDownloadAttributionUserGestureLimit)
+                  &referrer_chain),
+              SafeBrowsingNavigationObserverManager::SUCCESS_LANDING_REFERRER);
+    return referrer_chain;
+  }
+
   void VerifyHostToIpMap() {
     // Since all testing pages have the same host, there is only one entry in
     // host_to_ip_map_.
@@ -277,6 +294,12 @@
               ip_list.back().ip);
   }
 
+  void SimulateUserGesture(){
+    observer_manager_->RecordUserGestureForWebContents(
+      browser()->tab_strip_model()->GetActiveWebContents(),
+      base::Time::Now());
+  }
+
   SafeBrowsingNavigationObserverManager::NavigationMap* navigation_map() {
     return observer_manager_->navigation_map();
   }
@@ -323,7 +346,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(1U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -362,7 +385,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(2U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -411,7 +434,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(2U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -474,7 +497,7 @@
                         nav_map->at(download_url).at(1));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(2U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -535,7 +558,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(std::size_t(3), referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -612,7 +635,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(std::size_t(3), referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -690,7 +713,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(std::size_t(4), referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -752,7 +775,7 @@
                         false,         // has_server_redirect
                         nav_map->at(download_url).at(0));
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(2U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -811,7 +834,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(std::size_t(3), referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -890,7 +913,7 @@
             nav_map->at(download_url).at(0).target_tab_id);
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(std::size_t(3), referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -971,7 +994,7 @@
               nav_map->at(download_url).at(0).target_tab_id);
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(std::size_t(3), referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -1032,7 +1055,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(2U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -1115,7 +1138,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(4U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -1230,7 +1253,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   EXPECT_EQ(5U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -1320,7 +1343,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   EXPECT_EQ(std::size_t(4), referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -1419,7 +1442,7 @@
                         nav_map->at(download_url).at(0));
   VerifyHostToIpMap();
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   EXPECT_EQ(std::size_t(3), referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -1446,6 +1469,146 @@
   // page_before_landing_referrer_url is not in referrer chain.
 }
 
+// Click a link which redirects to a PPAPI landing page.
+IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
+                       PPAPIDownloadWithUserGestureOnHostingFrame) {
+  GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
+  ClickTestLink("complete_referrer_chain", 2, initial_url);
+  GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL);
+  GURL landing_url = embedded_test_server()->GetURL(kLandingURL);
+  std::string test_server_ip(embedded_test_server()->host_port_pair().host());
+
+  // Simulate a user gesture on landing page.
+  SimulateUserGesture();
+  auto nav_map = navigation_map();
+  ASSERT_TRUE(nav_map);
+  ASSERT_EQ(std::size_t(3), nav_map->size());
+  ASSERT_EQ(1U, nav_map->at(redirect_url).size());
+  ASSERT_EQ(1U, nav_map->at(landing_url).size());
+  ASSERT_EQ(1U, nav_map->at(initial_url).size());
+  VerifyNavigationEvent(GURL(),       // source_url
+                        GURL(),       // source_main_frame_url
+                        initial_url,  // original_request_url
+                        initial_url,  // destination_url
+                        true,         // is_user_initiated,
+                        true,         // has_committed
+                        false,        // has_server_redirect
+                        nav_map->at(initial_url).at(0));
+  VerifyNavigationEvent(initial_url,   // source_url
+                        initial_url,   // source_main_frame_url
+                        redirect_url,  // original_request_url
+                        redirect_url,  // destination_url
+                        true,          // is_user_initiated,
+                        true,          // has_committed
+                        false,         // has_server_redirect
+                        nav_map->at(redirect_url).at(0));
+  VerifyNavigationEvent(redirect_url,  // source_url
+                        redirect_url,  // source_main_frame_url
+                        landing_url,   // original_request_url
+                        landing_url,   // destination_url
+                        false,         // is_user_initiated,
+                        true,          // has_committed
+                        false,         // has_server_redirect
+                        nav_map->at(landing_url).at(0));
+  VerifyHostToIpMap();
+
+  auto referrer_chain = IdentifyReferrerChainForPPAPIDownload(
+      landing_url, browser()->tab_strip_model()->GetActiveWebContents());
+
+  EXPECT_EQ(std::size_t(3), referrer_chain.size());
+  VerifyReferrerChainEntry(landing_url,                       // url
+                           ReferrerChainEntry::LANDING_PAGE,  // type
+                           test_server_ip,                    // ip_address
+                           redirect_url,                      // referrer_url
+                           redirect_url,  // referrer_main_frame_url
+                           false,         // is_retargeting
+                           referrer_chain[0]);
+  VerifyReferrerChainEntry(redirect_url,                         // url
+                           ReferrerChainEntry::CLIENT_REDIRECT,  // type
+                           test_server_ip,                       // ip_address
+                           initial_url,                          // referrer_url
+                           initial_url,  // referrer_main_frame_url
+                           false,        // is_retargeting
+                           referrer_chain[1]);
+  VerifyReferrerChainEntry(
+      initial_url,                           // url
+      ReferrerChainEntry::LANDING_REFERRER,  // type
+      test_server_ip,                        // ip_address
+      GURL(),  // referrer_url is empty since this beyonds 2 clicks.
+      GURL(),  // referrer_main_frame_url is empty for the same reason.
+      false,   // is_retargeting
+      referrer_chain[2]);
+}
+
+// Click a link which redirects to a page that triggers PPAPI download without
+// user gesture (a.k.a not a landing page).
+IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
+                       PPAPIDownloadWithoutUserGestureOnHostingFrame) {
+  GURL landing_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
+  ClickTestLink("complete_referrer_chain", 2, landing_url);
+  GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL);
+  GURL hosting_url = embedded_test_server()->GetURL(kLandingURL);
+  std::string test_server_ip(embedded_test_server()->host_port_pair().host());
+
+  auto nav_map = navigation_map();
+  ASSERT_TRUE(nav_map);
+  ASSERT_EQ(std::size_t(3), nav_map->size());
+  ASSERT_EQ(1U, nav_map->at(redirect_url).size());
+  ASSERT_EQ(1U, nav_map->at(hosting_url).size());
+  ASSERT_EQ(1U, nav_map->at(landing_url).size());
+  VerifyNavigationEvent(GURL(),       // source_url
+                        GURL(),       // source_main_frame_url
+                        landing_url,  // original_request_url
+                        landing_url,  // destination_url
+                        true,         // is_user_initiated,
+                        true,         // has_committed
+                        false,        // has_server_redirect
+                        nav_map->at(landing_url).at(0));
+  VerifyNavigationEvent(landing_url,   // source_url
+                        landing_url,   // source_main_frame_url
+                        redirect_url,  // original_request_url
+                        redirect_url,  // destination_url
+                        true,          // is_user_initiated,
+                        true,          // has_committed
+                        false,         // has_server_redirect
+                        nav_map->at(redirect_url).at(0));
+  VerifyNavigationEvent(redirect_url,  // source_url
+                        redirect_url,  // source_main_frame_url
+                        hosting_url,   // original_request_url
+                        hosting_url,   // destination_url
+                        false,         // is_user_initiated,
+                        true,          // has_committed
+                        false,         // has_server_redirect
+                        nav_map->at(hosting_url).at(0));
+  VerifyHostToIpMap();
+
+  auto referrer_chain = IdentifyReferrerChainForPPAPIDownload(
+      hosting_url, browser()->tab_strip_model()->GetActiveWebContents());
+
+  EXPECT_EQ(std::size_t(3), referrer_chain.size());
+  VerifyReferrerChainEntry(hosting_url,                       // url
+                           ReferrerChainEntry::CLIENT_REDIRECT,  // type
+                           test_server_ip,                    // ip_address
+                           redirect_url,                      // referrer_url
+                           redirect_url,  // referrer_main_frame_url
+                           false,         // is_retargeting
+                           referrer_chain[0]);
+  VerifyReferrerChainEntry(redirect_url,                         // url
+                           ReferrerChainEntry::CLIENT_REDIRECT,  // type
+                           test_server_ip,                       // ip_address
+                           landing_url,                          // referrer_url
+                           landing_url,  // referrer_main_frame_url
+                           false,        // is_retargeting
+                           referrer_chain[1]);
+  VerifyReferrerChainEntry(landing_url,                       // url
+                           ReferrerChainEntry::LANDING_PAGE,  // type
+                           test_server_ip,                    // ip_address
+                           GURL(),  // no more referrer before landing_url
+                           GURL(),
+                           false,   // is_retargeting
+                           referrer_chain[2]);
+}
+
 // Server-side redirect.
 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, ServerRedirect) {
   GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
@@ -1476,7 +1639,7 @@
                         true,          // has_server_redirect
                         nav_map->at(download_url).at(0));
 
-  auto referrer_chain = IdentifyReferrerChain(GetDownload());
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
   ASSERT_EQ(1U, referrer_chain.size());
   VerifyReferrerChainEntry(download_url,                      // url
                            ReferrerChainEntry::DOWNLOAD_URL,  // type
@@ -1487,6 +1650,64 @@
                            referrer_chain[0]);
 }
 
+// Retargeting immediately followed by server-side redirect.
+IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
+                       RetargetingAndServerRedirect) {
+  GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
+  GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
+  GURL request_url =
+      embedded_test_server()->GetURL("/server-redirect?" + download_url.spec());
+  ClickTestLink("new_tab_download_with_server_redirect", 1, initial_url);
+  std::string test_server_ip(embedded_test_server()->host_port_pair().host());
+  auto nav_map = navigation_map();
+  ASSERT_TRUE(nav_map);
+  ASSERT_EQ(3U, nav_map->size());
+  ASSERT_EQ(1U, nav_map->at(request_url).size());
+  ASSERT_EQ(1U, nav_map->at(download_url).size());
+  ASSERT_EQ(1U, nav_map->at(initial_url).size());
+  VerifyNavigationEvent(GURL(),       // source_url
+                        GURL(),       // source_main_frame_url
+                        initial_url,  // original_request_url
+                        initial_url,  // destination_url
+                        true,         // is_user_initiated,
+                        true,         // has_committed
+                        false,        // has_server_redirect
+                        nav_map->at(initial_url).at(0));
+  VerifyNavigationEvent(initial_url,   // source_url
+                        initial_url,   // source_main_frame_url
+                        request_url,  // original_request_url
+                        request_url,  // destination_url
+                        true,          // is_user_initiated,
+                        false,         // has_committed
+                        false,         // has_server_redirect
+                        nav_map->at(request_url).at(0));
+  VerifyNavigationEvent(GURL(),        // source_url
+                        GURL(),        // source_main_frame_url
+                        request_url,   // original_request_url
+                        download_url,  // destination_url
+                        false,          // is_user_initiated,
+                        false,         // has_committed
+                        true,          // has_server_redirect
+                        nav_map->at(download_url).at(0));
+
+  auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
+  ASSERT_EQ(2U, referrer_chain.size());
+  VerifyReferrerChainEntry(download_url,                      // url
+                           ReferrerChainEntry::DOWNLOAD_URL,  // type
+                           test_server_ip,                    // ip_address
+                           initial_url,                       // referrer_url
+                           initial_url,  // referrer_main_frame_url
+                           true,         // is_retargeting
+                           referrer_chain[0]);
+  VerifyReferrerChainEntry(initial_url,                       // url
+                           ReferrerChainEntry::LANDING_PAGE,  // type
+                           test_server_ip,                    // ip_address
+                           GURL(),                            // referrer_url
+                           GURL(),  // referrer_main_frame_url
+                           false,   // is_retargeting
+                           referrer_chain[1]);
+}
+
 // host_to_ip_map_ size should increase by one after a new navigation.
 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, AddIPMapping) {
   GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
index 45207a1..c621d86 100644
--- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
@@ -42,6 +42,28 @@
   return current_time_in_second - event_time_in_second > ttl_in_second;
 }
 
+// Helper function to determine if the URL type should be LANDING_REFERRER or
+// LANDING_PAGE, and modify AttributionResult accordingly.
+ReferrerChainEntry::URLType GetURLTypeAndAdjustAttributionResult(
+    bool at_user_gesture_limit,
+    SafeBrowsingNavigationObserverManager::AttributionResult* out_result) {
+  // Landing page of a download refers to the page user directly interacts
+  // with to trigger this download (e.g. clicking on download button). Landing
+  // referrer page is the one user interacts with right before navigating to
+  // the landing page.
+  // Since we are tracing navigations backwards, if we've reached
+  // user gesture limit before this navigation event, this is a navigation
+  // leading to the landing referrer page, otherwise it leads to landing page.
+  if (at_user_gesture_limit) {
+    *out_result =
+        SafeBrowsingNavigationObserverManager::SUCCESS_LANDING_REFERRER;
+    return ReferrerChainEntry::LANDING_REFERRER;
+  } else {
+    *out_result = SafeBrowsingNavigationObserverManager::SUCCESS_LANDING_PAGE;
+    return ReferrerChainEntry::LANDING_PAGE;
+  }
+}
+
 }  // namespace
 
 // The expiration period of a user gesture. Any user gesture that happened 1.0
@@ -122,6 +144,18 @@
     user_gesture_map_.erase(it);
 }
 
+bool SafeBrowsingNavigationObserverManager::HasUserGesture(
+    content::WebContents* web_contents) {
+  if (!web_contents)
+    return false;
+  auto it = user_gesture_map_.find(web_contents);
+  if (it != user_gesture_map_.end() &&
+      !IsEventExpired(it->second, kUserGestureTTLInSecond)) {
+    return true;
+  }
+  return false;
+}
+
 void SafeBrowsingNavigationObserverManager::RecordHostToIpMapping(
     const std::string& host,
     const std::string& ip) {
@@ -156,7 +190,7 @@
 }
 
 SafeBrowsingNavigationObserverManager::AttributionResult
-SafeBrowsingNavigationObserverManager::IdentifyReferrerChain(
+SafeBrowsingNavigationObserverManager::IdentifyReferrerChainForDownload(
     const GURL& target_url,
     int target_tab_id,
     int user_gesture_count_limit,
@@ -172,65 +206,60 @@
     // We cannot find a single navigation event related to this download.
     return NAVIGATION_EVENT_NOT_FOUND;
   }
-
+  AttributionResult result = SUCCESS;
   AddToReferrerChain(out_referrer_chain, nav_event,
                      ReferrerChainEntry::DOWNLOAD_URL);
-  AttributionResult result = SUCCESS;
   int user_gesture_count = 0;
-  while (user_gesture_count < user_gesture_count_limit) {
-    // Back trace to the next nav_event that was initiated by the user.
-    while (!nav_event->is_user_initiated) {
-      nav_event =
-          FindNavigationEvent(nav_event->source_url,
-                              nav_event->source_main_frame_url,
-                              nav_event->source_tab_id);
-      if (!nav_event)
-        return result;
-      AddToReferrerChain(out_referrer_chain, nav_event,
-                         nav_event->has_server_redirect
-                             ? ReferrerChainEntry::SERVER_REDIRECT
-                             : ReferrerChainEntry::CLIENT_REDIRECT);
-    }
+  GetRemainingReferrerChain(
+      nav_event,
+      user_gesture_count,
+      user_gesture_count_limit,
+      out_referrer_chain,
+      &result);
+  return result;
+}
 
-    user_gesture_count++;
+SafeBrowsingNavigationObserverManager::AttributionResult
+SafeBrowsingNavigationObserverManager::IdentifyReferrerChainForPPAPIDownload(
+    const GURL& initiating_frame_url,
+    int tab_id,
+    bool has_user_gesture,
+    int user_gesture_count_limit,
+    std::vector<ReferrerChainEntry>* out_referrer_chain) {
+  if (!initiating_frame_url.is_valid())
+    return INVALID_URL;
 
-    // If the source_url and source_main_frame_url of current navigation event
-    // are empty, and is_user_initiated is true, this is a browser initiated
-    // navigation (e.g. trigged by typing in address bar, clicking on bookmark,
-    // etc). We reached the end of the referrer chain.
-    if (nav_event->source_url.is_empty() &&
-        nav_event->source_main_frame_url.is_empty()) {
-      DCHECK(nav_event->is_user_initiated);
-      return result;
-    }
-
-    nav_event =
-        FindNavigationEvent(nav_event->source_url,
-                            nav_event->source_main_frame_url,
-                            nav_event->source_tab_id);
-    if (!nav_event)
-      return result;
-
-    // Landing page of a download refers to the page user directly interacts
-    // with to trigger this download (e.g. clicking on download button). Landing
-    // referrer page is the one user interacts with right before navigating to
-    // the landing page.
-    // Since we are tracing navigations backwards, if we've encountered 1 user
-    // gesture before this navigation event, this is a navigation leading to the
-    // landing page. If we've encountered 2 user gestures, it leads to landing
-    // referrer page.
-    if (user_gesture_count == 1) {
-      AddToReferrerChain(out_referrer_chain, nav_event,
-                         ReferrerChainEntry::LANDING_PAGE);
-      result = SUCCESS_LANDING_PAGE;
-    } else if (user_gesture_count == 2) {
-      AddToReferrerChain(out_referrer_chain, nav_event,
-                         ReferrerChainEntry::LANDING_REFERRER);
-      result = SUCCESS_LANDING_REFERRER;
-    } else {
-      NOTREACHED();
-    }
+  NavigationEvent* nav_event =
+      FindNavigationEvent(initiating_frame_url, GURL(), tab_id);
+  if (!nav_event) {
+    // We cannot find a single navigation event related to this download.
+    return NAVIGATION_EVENT_NOT_FOUND;
   }
+
+  AttributionResult result = SUCCESS;
+
+  int user_gesture_count = 0;
+  // If this initiating_frame has user gesture, we consider this as the landing
+  // page of the PPAPI download.
+  if (has_user_gesture) {
+    user_gesture_count = 1;
+    AddToReferrerChain(out_referrer_chain, nav_event,
+                       GetURLTypeAndAdjustAttributionResult(
+                          user_gesture_count == user_gesture_count_limit,
+                          &result));
+  } else {
+    AddToReferrerChain(out_referrer_chain, nav_event,
+                       nav_event->has_server_redirect
+                           ? ReferrerChainEntry::SERVER_REDIRECT
+                           : ReferrerChainEntry::CLIENT_REDIRECT);
+  }
+
+  GetRemainingReferrerChain(
+      nav_event,
+      user_gesture_count,
+      user_gesture_count_limit,
+      out_referrer_chain,
+      &result);
   return result;
 }
 
@@ -358,17 +387,17 @@
 
   // If target_url is empty, we should back trace navigation based on its
   // main frame URL instead.
-  const GURL& search_url =
+  GURL search_url =
       target_url.is_empty() ? target_main_frame_url : target_url;
-
   auto it = navigation_map_.find(search_url);
-  if (it == navigation_map_.end()) {
+  if (it == navigation_map_.end())
     return nullptr;
-  }
+
   // Since navigation events are recorded in chronological order, we traverse
   // the vector in reverse order to get the latest match.
   for (auto rit = it->second.rbegin(); rit != it->second.rend(); ++rit) {
     // If tab id is not valid, we only compare url, otherwise we compare both.
+    if (rit->destination_url == search_url)
     if (rit->destination_url == search_url &&
         (target_tab_id == -1 || rit->target_tab_id == target_tab_id)) {
       // If both source_url and source_main_frame_url are empty, and this
@@ -377,7 +406,20 @@
       // looks for the retargeting navigation event.
       if (rit->source_url.is_empty() && rit->source_main_frame_url.is_empty() &&
           !rit->is_user_initiated) {
-        continue;
+        // If there is a server redirection immediately after retargeting, we
+        // need to adjust our search url to the original request.
+        if (rit->has_server_redirect){
+          NavigationEvent* retargeting_nav_event =
+              FindNavigationEvent(rit->original_request_url,
+                                  GURL(),
+                                  rit->target_tab_id);
+          // Adjust retargeting navigation event's attributes.
+          retargeting_nav_event->has_server_redirect = true;
+          retargeting_nav_event->destination_url = search_url;
+          return retargeting_nav_event;
+        } else {
+          continue;
+        }
       } else {
         return &*rit;
       }
@@ -413,4 +455,54 @@
   referrer_chain->push_back(std::move(referrer_chain_entry));
 }
 
+void SafeBrowsingNavigationObserverManager::GetRemainingReferrerChain(
+    NavigationEvent* last_nav_event_traced,
+    int current_user_gesture_count,
+    int user_gesture_count_limit,
+    std::vector<ReferrerChainEntry>* out_referrer_chain,
+    SafeBrowsingNavigationObserverManager::AttributionResult* out_result) {
+
+  while (current_user_gesture_count < user_gesture_count_limit) {
+    // Back trace to the next nav_event that was initiated by the user.
+    while (!last_nav_event_traced->is_user_initiated) {
+      last_nav_event_traced =
+          FindNavigationEvent(last_nav_event_traced->source_url,
+                              last_nav_event_traced->source_main_frame_url,
+                              last_nav_event_traced->source_tab_id);
+      if (!last_nav_event_traced)
+        return;
+      AddToReferrerChain(out_referrer_chain, last_nav_event_traced,
+                         last_nav_event_traced->has_server_redirect
+                             ? ReferrerChainEntry::SERVER_REDIRECT
+                             : ReferrerChainEntry::CLIENT_REDIRECT);
+    }
+
+    current_user_gesture_count++;
+
+
+    // If the source_url and source_main_frame_url of current navigation event
+    // are empty, and is_user_initiated is true, this is a browser initiated
+    // navigation (e.g. trigged by typing in address bar, clicking on bookmark,
+    // etc). We reached the end of the referrer chain.
+    if (last_nav_event_traced->source_url.is_empty() &&
+        last_nav_event_traced->source_main_frame_url.is_empty()) {
+      DCHECK(last_nav_event_traced->is_user_initiated);
+      return;
+    }
+
+    last_nav_event_traced =
+        FindNavigationEvent(last_nav_event_traced->source_url,
+                            last_nav_event_traced->source_main_frame_url,
+                            last_nav_event_traced->source_tab_id);
+    if (!last_nav_event_traced)
+      return;
+
+    AddToReferrerChain(out_referrer_chain, last_nav_event_traced,
+                       GetURLTypeAndAdjustAttributionResult(
+                          current_user_gesture_count ==
+                              user_gesture_count_limit,
+                          out_result));
+  }
+}
+
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h
index ccf2b04e..6fdf7c3 100644
--- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h
@@ -70,6 +70,7 @@
                                        const base::Time& timestamp);
   void OnUserGestureConsumed(content::WebContents* web_contents,
                              const base::Time& timestamp);
+  bool HasUserGesture(content::WebContents* web_contents);
   void RecordHostToIpMapping(const std::string& host, const std::string& ip);
 
   // Clean-ups need to be done when a WebContents gets destroyed.
@@ -85,12 +86,27 @@
   // |user_gesture_count_limit| number of user gestures. Then convert these
   // identified NavigationEvents into ReferrerChainEntrys and append them to
   // |out_referrer_chain|.
-  AttributionResult IdentifyReferrerChain(
+  AttributionResult IdentifyReferrerChainForDownload(
       const GURL& target_url,
       int target_tab_id,  // -1 if tab id is not valid
       int user_gesture_count_limit,
       std::vector<ReferrerChainEntry>* out_referrer_chain);
 
+  // Based on the |initiating_frame_url| and its associated |tab_id|, trace back
+  // the observed NavigationEvents in navigation_map_ to identify the sequence
+  // of navigations leading to this |initiating_frame_url|. If this initiating
+  // frame has a user gesture, we trace back with the coverage limited to
+  // |user_gesture_count_limit|-1 number of user gestures, otherwise we trace
+  // back |user_gesture_count_limit| number of user gestures. We then convert
+  // these identified NavigationEvents into ReferrerChainEntrys and append them
+  // to |out_referrer_chain|.
+  AttributionResult IdentifyReferrerChainForPPAPIDownload(
+      const GURL& initiating_frame_url,
+      int tab_id,
+      bool has_user_gesture,
+      int user_gesture_count_limit,
+      std::vector<ReferrerChainEntry>* out_referrer_chain);
+
  private:
   friend class base::RefCountedThreadSafe<
       SafeBrowsingNavigationObserverManager>;
@@ -168,6 +184,16 @@
                           NavigationEvent* nav_event,
                           ReferrerChainEntry::URLType type);
 
+  // Helper function to get the remaining referrer chain when we've already
+  // traced back |current_user_gesture_count| number of user gestures.
+  // This function modifies the |out_referrer_chain| and |out_result|.
+  void GetRemainingReferrerChain(
+    NavigationEvent* last_nav_event_traced,
+    int current_user_gesture_count,
+    int user_gesture_count_limit,
+    std::vector<ReferrerChainEntry>* out_referrer_chain,
+    AttributionResult* out_result);
+
   // navigation_map_ keeps track of all the observed navigations. This map is
   // keyed on the resolved request url. In other words, in case of server
   // redirects, its key is the last server redirect url, otherwise, it is the
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 822d5fc..fe4b454 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -384,6 +384,8 @@
     "webui/omnibox/omnibox_ui.h",
     "webui/password_manager_internals/password_manager_internals_ui.cc",
     "webui/password_manager_internals/password_manager_internals_ui.h",
+    "webui/physical_web/physical_web_ui.cc",
+    "webui/physical_web/physical_web_ui.h",
     "webui/policy_material_design_ui.cc",
     "webui/policy_material_design_ui.h",
     "webui/policy_ui.cc",
@@ -522,6 +524,8 @@
     "//components/password_manager/core/browser",
     "//components/password_manager/sync/browser",
     "//components/pdf/browser",
+    "//components/physical_web/data_source",
+    "//components/physical_web/webui",
     "//components/policy/core/browser",
     "//components/pref_registry",
     "//components/proximity_auth",
diff --git a/chrome/browser/ui/libgtkui/gtk_ui.cc b/chrome/browser/ui/libgtkui/gtk_ui.cc
index 766da80..9c25e84 100644
--- a/chrome/browser/ui/libgtkui/gtk_ui.cc
+++ b/chrome/browser/ui/libgtkui/gtk_ui.cc
@@ -865,10 +865,17 @@
       ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused);
   active_selection_fg_color_ = native_theme_->GetSystemColor(
       ui::NativeTheme::kColorId_TextfieldSelectionColor);
+#if GTK_MAJOR_VERSION == 2
   inactive_selection_bg_color_ = native_theme_->GetSystemColor(
       ui::NativeTheme::kColorId_TextfieldReadOnlyBackground);
   inactive_selection_fg_color_ = native_theme_->GetSystemColor(
       ui::NativeTheme::kColorId_TextfieldReadOnlyColor);
+#else
+  inactive_selection_bg_color_ =
+      GetBgColor("GtkEntry#entry:backdrop #selection:selected");
+  inactive_selection_fg_color_ =
+      GetFgColor("GtkEntry#entry:backdrop #selection:selected");
+#endif
 
   colors_[ThemeProperties::COLOR_TAB_THROBBER_SPINNING] =
       native_theme_->GetSystemColor(
diff --git a/chrome/browser/ui/views/external_protocol_dialog.cc b/chrome/browser/ui/views/external_protocol_dialog.cc
index 60b15cf..1cfc6c8 100644
--- a/chrome/browser/ui/views/external_protocol_dialog.cc
+++ b/chrome/browser/ui/views/external_protocol_dialog.cc
@@ -74,10 +74,6 @@
 }
 
 bool ExternalProtocolDialog::Cancel() {
-  // We also get called back here if the user closes the dialog or presses
-  // escape. In these cases it would be preferable to ignore the state of the
-  // check box but MessageBox doesn't distinguish this from pressing the cancel
-  // button.
   delegate_->DoCancel(delegate_->url(),
                       message_box_view_->IsCheckBoxSelected());
 
@@ -105,6 +101,15 @@
   return true;
 }
 
+bool ExternalProtocolDialog::Close() {
+  // If the user dismisses the dialog without interacting with the buttons (e.g.
+  // via pressing Esc or the X), act as though they cancelled the request, but
+  // ignore the checkbox state. This ensures that if they check the checkbox but
+  // dismiss the dialog, we don't stop prompting them forever.
+  delegate_->DoCancel(delegate_->url(), false);
+  return true;
+}
+
 views::View* ExternalProtocolDialog::GetContentsView() {
   return message_box_view_;
 }
diff --git a/chrome/browser/ui/views/external_protocol_dialog.h b/chrome/browser/ui/views/external_protocol_dialog.h
index 0fdfe70..ad2efc3 100644
--- a/chrome/browser/ui/views/external_protocol_dialog.h
+++ b/chrome/browser/ui/views/external_protocol_dialog.h
@@ -33,6 +33,7 @@
   void DeleteDelegate() override;
   bool Cancel() override;
   bool Accept() override;
+  bool Close() override;
   views::View* GetContentsView() override;
   views::Widget* GetWidget() override;
   const views::Widget* GetWidget() const override;
diff --git a/chrome/browser/ui/views/frame/test_with_browser_view.cc b/chrome/browser/ui/views/frame/test_with_browser_view.cc
index 967ffc2..7483568b1 100644
--- a/chrome/browser/ui/views/frame/test_with_browser_view.cc
+++ b/chrome/browser/ui/views/frame/test_with_browser_view.cc
@@ -29,7 +29,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
-#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
+#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
 #endif
 
 namespace {
@@ -78,7 +78,7 @@
       new ScopedTestingLocalState(TestingBrowserProcess::GetGlobal()));
 #if defined(OS_CHROMEOS)
   chromeos::input_method::InitializeForTesting(
-      new chromeos::input_method::MockInputMethodManager);
+      new chromeos::input_method::MockInputMethodManagerImpl);
 #endif
   testing_io_thread_state_.reset(new chrome::TestingIOThreadState());
   BrowserWithTestWindowTest::SetUp();
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
index dc7fd77..99e1c1c9 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
@@ -22,7 +22,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
-#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
+#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
 #endif
 
 namespace {
@@ -102,7 +102,7 @@
   void SetUp() override {
 #if defined(OS_CHROMEOS)
     chromeos::input_method::InitializeForTesting(
-        new chromeos::input_method::MockInputMethodManager);
+        new chromeos::input_method::MockInputMethodManagerImpl);
 #endif
     omnibox_view_.reset(new TestingOmniboxViewViews(
         &omnibox_edit_controller_, &profile_, &command_updater_));
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 0ca33fa..1e46a38 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -44,6 +44,7 @@
 #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
 #include "chrome/browser/ui/webui/options/options_ui.h"
 #include "chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.h"
+#include "chrome/browser/ui/webui/physical_web/physical_web_ui.h"
 #include "chrome/browser/ui/webui/plugins/plugins_ui.h"
 #include "chrome/browser/ui/webui/policy_material_design_ui.h"
 #include "chrome/browser/ui/webui/policy_ui.h"
@@ -359,6 +360,8 @@
     return &NewWebUI<OmniboxUI>;
   if (url.host_piece() == chrome::kChromeUIPasswordManagerInternalsHost)
     return &NewWebUI<PasswordManagerInternalsUI>;
+  if (url.host_piece() == chrome::kChromeUIPhysicalWebHost)
+    return &NewWebUI<PhysicalWebUI>;
   if (url.host_piece() == chrome::kChromeUIPredictorsHost)
     return &NewWebUI<PredictorsUI>;
   if (url.host_piece() == chrome::kChromeUIProfilerHost)
diff --git a/chrome/browser/ui/webui/chromeos/login/l10n_util_test_util.h b/chrome/browser/ui/webui/chromeos/login/l10n_util_test_util.h
index cae9b5d..8136458 100644
--- a/chrome/browser/ui/webui/chromeos/login/l10n_util_test_util.h
+++ b/chrome/browser/ui/webui/chromeos/login/l10n_util_test_util.h
@@ -11,18 +11,18 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/values.h"
-#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
+#include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
 #include "ui/base/ime/chromeos/input_method_descriptor.h"
 
 namespace chromeos {
 
 class MockInputMethodManagerWithInputMethods
-    : public input_method::MockInputMethodManager {
+    : public input_method::MockInputMethodManagerImpl {
  public:
   MockInputMethodManagerWithInputMethods();
   ~MockInputMethodManagerWithInputMethods() override;
 
-  // input_method::MockInputMethodManager:
+  // input_method::MockInputMethodManagerImpl:
   std::unique_ptr<input_method::InputMethodDescriptors>
   GetSupportedInputMethods() const override;
 
diff --git a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc
index 5185dac..0f6e454 100644
--- a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc
+++ b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc
@@ -343,6 +343,11 @@
     const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
     const content::URLDataSource::GotDataCallback& callback) {
   content::WebContents* web_contents = wc_getter.Run();
+  if (!web_contents) {
+    // When browser-side navigation is enabled, web_contents can be null if
+    // the tab is closing. Nothing to do in this case.
+    return;
+  }
   std::unique_ptr<content::InterstitialPageDelegate> interstitial_delegate;
   if (base::StartsWith(path, "ssl", base::CompareCase::SENSITIVE)) {
     interstitial_delegate.reset(CreateSSLBlockingPage(web_contents));
diff --git a/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc b/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc
index eba2e01..7589219 100644
--- a/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc
@@ -7,6 +7,7 @@
 #include "chrome/browser/devtools/devtools_window.h"
 #include "chrome/browser/devtools/devtools_window_testing.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
@@ -84,3 +85,20 @@
   TestInterstitial(GURL("chrome://interstitials/captiveportal?is_wifi=1"),
                    "Connect to Wi-Fi");
 }
+
+// Checks that the interstitial page uses correct web contents. If not, closing
+// the tab might result in a freed web contents pointer and cause a crash.
+// See https://crbug.com/611706 for details.
+IN_PROC_BROWSER_TEST_F(InterstitialUITest, UseCorrectWebContents) {
+  int current_tab = browser()->tab_strip_model()->active_index();
+  ui_test_utils::NavigateToURL(browser(), GURL("chrome://interstitials/ssl"));
+
+  // Duplicate the tab and close it.
+  chrome::DuplicateTab(browser());
+  EXPECT_NE(current_tab, browser()->tab_strip_model()->active_index());
+  chrome::CloseTab(browser());
+  EXPECT_EQ(current_tab, browser()->tab_strip_model()->active_index());
+
+  // Reloading the page shouldn't cause a crash.
+  chrome::Reload(browser(), WindowOpenDisposition::CURRENT_TAB);
+}
diff --git a/chrome/browser/ui/webui/physical_web/physical_web_ui.cc b/chrome/browser/ui/webui/physical_web/physical_web_ui.cc
new file mode 100644
index 0000000..5b7b5e18
--- /dev/null
+++ b/chrome/browser/ui/webui/physical_web/physical_web_ui.cc
@@ -0,0 +1,88 @@
+// 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 "chrome/browser/ui/webui/physical_web/physical_web_ui.h"
+
+#include "base/metrics/user_metrics.h"
+#include "chrome/browser/browser_process_impl.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/url_constants.h"
+#include "components/grit/components_resources.h"
+#include "components/physical_web/data_source/physical_web_data_source.h"
+#include "components/physical_web/webui/physical_web_base_message_handler.h"
+#include "components/physical_web/webui/physical_web_ui_constants.h"
+#include "components/strings/grit/components_strings.h"
+#include "content/public/browser/web_ui_data_source.h"
+#include "content/public/browser/web_ui_message_handler.h"
+
+namespace {
+
+content::WebUIDataSource* CreatePhysicalWebHTMLSource() {
+  content::WebUIDataSource* source = content::WebUIDataSource::Create(
+      chrome::kChromeUIPhysicalWebHost);
+
+  source->AddLocalizedString(physical_web_ui::kTitle,
+                             IDS_PHYSICAL_WEB_UI_TITLE);
+  source->SetJsonPath("strings.js");
+  source->AddResourcePath(physical_web_ui::kPhysicalWebJS,
+                          IDR_PHYSICAL_WEB_UI_JS);
+  source->AddResourcePath(physical_web_ui::kPhysicalWebCSS,
+                          IDR_PHYSICAL_WEB_UI_CSS);
+  source->SetDefaultResource(IDR_PHYSICAL_WEB_UI_HTML);
+  return source;
+}
+
+// Implements all MessageHandler core functionality.  This is extends the
+// PhysicalWebBaseMessageHandler and implements functions to manipulate an
+// Android-specific WebUI object.
+class MessageHandlerImpl
+    : public physical_web_ui::PhysicalWebBaseMessageHandler {
+ public:
+  explicit MessageHandlerImpl(content::WebUI* web_ui) : web_ui_(web_ui) {}
+  ~MessageHandlerImpl() override {}
+
+ private:
+  void RegisterMessageCallback(
+      const std::string& message,
+      const physical_web_ui::MessageCallback& callback) override {
+    web_ui_->RegisterMessageCallback(message, callback);
+  }
+  void CallJavaScriptFunction(const std::string& function,
+                              const base::Value& arg) override {
+    web_ui_->CallJavascriptFunctionUnsafe(function, arg);
+  }
+  physical_web::PhysicalWebDataSource* GetPhysicalWebDataSource() override {
+    return g_browser_process->GetPhysicalWebDataSource();
+  }
+
+  content::WebUI* const web_ui_;
+  DISALLOW_COPY_AND_ASSIGN(MessageHandlerImpl);
+};
+
+class PhysicalWebMessageHandler : public content::WebUIMessageHandler {
+ public:
+  PhysicalWebMessageHandler() {}
+  ~PhysicalWebMessageHandler() override {}
+
+  void RegisterMessages() override {
+    impl_.reset(new MessageHandlerImpl(web_ui()));
+    impl_->RegisterMessages();
+  }
+
+ private:
+  std::unique_ptr<MessageHandlerImpl> impl_;
+  DISALLOW_COPY_AND_ASSIGN(PhysicalWebMessageHandler);
+};
+
+}  // namespace
+
+PhysicalWebUI::PhysicalWebUI(content::WebUI* web_ui)
+    : WebUIController(web_ui) {
+  content::WebUIDataSource::Add(Profile::FromWebUI(web_ui),
+                                CreatePhysicalWebHTMLSource());
+  web_ui->AddMessageHandler(new PhysicalWebMessageHandler());
+  base::RecordAction(base::UserMetricsAction("PhysicalWeb.WebUI.Open"));
+}
+
+PhysicalWebUI::~PhysicalWebUI() = default;
diff --git a/chrome/browser/ui/webui/physical_web/physical_web_ui.h b/chrome/browser/ui/webui/physical_web/physical_web_ui.h
new file mode 100644
index 0000000..aa5079d2
--- /dev/null
+++ b/chrome/browser/ui/webui/physical_web/physical_web_ui.h
@@ -0,0 +1,20 @@
+// 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 CHROME_BROWSER_UI_WEBUI_PHYSICAL_WEB_PHYSICAL_WEB_UI_H_
+#define CHROME_BROWSER_UI_WEBUI_PHYSICAL_WEB_PHYSICAL_WEB_UI_H_
+
+#include "base/macros.h"
+#include "content/public/browser/web_ui_controller.h"
+
+class PhysicalWebUI : public content::WebUIController {
+ public:
+  explicit PhysicalWebUI(content::WebUI* web_ui);
+  ~PhysicalWebUI() override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(PhysicalWebUI);
+};
+
+#endif  // CHROME_BROWSER_UI_WEBUI_PHYSICAL_WEB_PHYSICAL_WEB_UI_H_
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
index 05d7ef9..0035042 100644
--- a/chrome/common/BUILD.gn
+++ b/chrome/common/BUILD.gn
@@ -685,6 +685,7 @@
   ]
 
   public_deps = [
+    "//components/content_settings/core/common:mojo_bindings",
     "//url/mojo:url_mojom_gurl",
   ]
 }
diff --git a/chrome/common/content_settings_pattern_serializer.h b/chrome/common/content_settings_pattern_serializer.h
index b123607..4b45043f 100644
--- a/chrome/common/content_settings_pattern_serializer.h
+++ b/chrome/common/content_settings_pattern_serializer.h
@@ -15,6 +15,7 @@
 
 class ContentSettingsPattern;
 
+// TODO(nigeltao): delete this class, once content settings is Mojofied.
 class ContentSettingsPatternSerializer {
  public:
   // Gets the serialized pattern's size.
diff --git a/chrome/common/renderer_configuration.mojom b/chrome/common/renderer_configuration.mojom
index b04f1bc..851167c 100644
--- a/chrome/common/renderer_configuration.mojom
+++ b/chrome/common/renderer_configuration.mojom
@@ -4,12 +4,15 @@
 
 module chrome.mojom;
 
+import "components/content_settings/core/common/content_settings.mojom";
+
 // Configures the renderer.
 interface RendererConfiguration {
   // Configures the renderer, queued to send when the render process will
   // launch.
-  //
-  // TODO(nigeltao): port the ChromeViewMsg_SetContentSettingRules legacy IPC
-  // message to be an additional arg here.
   SetInitialConfiguration(bool is_incognito_process);
+
+  // Set the content setting rules stored by the renderer.
+  SetContentSettingRules(
+      content_settings.mojom.RendererContentSettingRules rules);
 };
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc
index 36b95ad..eebe88f8 100644
--- a/chrome/common/url_constants.cc
+++ b/chrome/common/url_constants.cc
@@ -229,6 +229,7 @@
 const char kChromeUIOmniboxHost[] = "omnibox";
 const char kChromeUIPasswordManagerInternalsHost[] =
     "password-manager-internals";
+const char kChromeUIPhysicalWebHost[] = "physical-web";
 const char kChromeUIPluginsHost[] = "plugins";
 const char kChromeUIComponentsHost[] = "components";
 const char kChromeUIPolicyHost[] = "policy";
diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h
index 524cd2f..4a31adad 100644
--- a/chrome/common/url_constants.h
+++ b/chrome/common/url_constants.h
@@ -210,6 +210,7 @@
 extern const char kChromeUINTPTilesInternalsHost[];
 extern const char kChromeUIOfflineInternalsHost[];
 extern const char kChromeUIOmniboxHost[];
+extern const char kChromeUIPhysicalWebHost[];
 extern const char kChromeUIPluginsHost[];
 extern const char kChromeUIComponentsHost[];
 extern const char kChromeUIPolicyHost[];
diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/chrome_render_thread_observer.cc
index bf56362..bd3836f 100644
--- a/chrome/renderer/chrome_render_thread_observer.cc
+++ b/chrome/renderer/chrome_render_thread_observer.cc
@@ -295,8 +295,10 @@
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(ChromeRenderThreadObserver, message)
     IPC_MESSAGE_HANDLER(ChromeViewMsg_SetFieldTrialGroup, OnSetFieldTrialGroup)
+    // TODO(nigeltao): delete this handler when all senders of
+    // ChromeViewMsg_SetContentSettingRules have been converted to Mojo.
     IPC_MESSAGE_HANDLER(ChromeViewMsg_SetContentSettingRules,
-                        OnSetContentSettingRules)
+                        SetContentSettingRules)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
   return handled;
@@ -324,17 +326,17 @@
   is_incognito_process_ = is_incognito_process;
 }
 
+void ChromeRenderThreadObserver::SetContentSettingRules(
+    const RendererContentSettingRules& rules) {
+  content_setting_rules_ = rules;
+}
+
 void ChromeRenderThreadObserver::OnRendererInterfaceRequest(
     chrome::mojom::RendererConfigurationAssociatedRequest request) {
   DCHECK(!renderer_configuration_binding_.is_bound());
   renderer_configuration_binding_.Bind(std::move(request));
 }
 
-void ChromeRenderThreadObserver::OnSetContentSettingRules(
-    const RendererContentSettingRules& rules) {
-  content_setting_rules_ = rules;
-}
-
 void ChromeRenderThreadObserver::OnSetFieldTrialGroup(
     const std::string& trial_name,
     const std::string& group_name) {
diff --git a/chrome/renderer/chrome_render_thread_observer.h b/chrome/renderer/chrome_render_thread_observer.h
index 8d1cceb7..d8ed9a1 100644
--- a/chrome/renderer/chrome_render_thread_observer.h
+++ b/chrome/renderer/chrome_render_thread_observer.h
@@ -62,11 +62,12 @@
 
   // chrome::mojom::RendererConfiguration:
   void SetInitialConfiguration(bool is_incognito_process) override;
+  void SetContentSettingRules(
+      const RendererContentSettingRules& rules) override;
 
   void OnRendererInterfaceRequest(
       chrome::mojom::RendererConfigurationAssociatedRequest request);
 
-  void OnSetContentSettingRules(const RendererContentSettingRules& rules);
   void OnSetFieldTrialGroup(const std::string& trial_name,
                             const std::string& group_name);
 
diff --git a/chrome/test/data/pdf/pdf_href_replace_state.html b/chrome/test/data/pdf/pdf_href_replace_state.html
new file mode 100644
index 0000000..b9a8ac0
--- /dev/null
+++ b/chrome/test/data/pdf/pdf_href_replace_state.html
@@ -0,0 +1,14 @@
+<html>
+<head>
+<title>First window</title>
+<script>
+window.addEventListener('pagehide', function() {
+  history.replaceState({time: Date.now()}, '');
+});
+</script>
+</head>
+
+<body>
+<a id="link" href="test-link.pdf"> pdf </a>
+</body>
+</html>
diff --git a/chrome/test/data/safe_browsing/download_protection/navigation_observer/navigation_observer_tests.html b/chrome/test/data/safe_browsing/download_protection/navigation_observer/navigation_observer_tests.html
index bde0c0b8..904b1c6 100644
--- a/chrome/test/data/safe_browsing/download_protection/navigation_observer/navigation_observer_tests.html
+++ b/chrome/test/data/safe_browsing/download_protection/navigation_observer/navigation_observer_tests.html
@@ -115,6 +115,17 @@
       Open download in new tab with data url
     </a><br>
 
+    <a id="new_tab_download_with_server_redirect" href="#" rel="noreferrer" target=_blank>
+      Open navigation in a new tab and immediately redirect to a download by server.
+    </a><br>
+
+    <script>
+      var request = location.origin + "/server-redirect?" + location.origin +
+                    "/safe_browsing/download_protection/signed.exe"
+      document.getElementById("new_tab_download_with_server_redirect")
+              .setAttribute('href', request);
+    </script>
+
     <a id="html5_file_api" href="" onclick="downloadViaFileApi()">
       Download via HTML5 file system API
     </a><br>
diff --git a/chrome/test/data/webui/md_bookmarks/store_test.js b/chrome/test/data/webui/md_bookmarks/store_test.js
index d92fe1d1..8b9099f3 100644
--- a/chrome/test/data/webui/md_bookmarks/store_test.js
+++ b/chrome/test/data/webui/md_bookmarks/store_test.js
@@ -4,9 +4,12 @@
 
 suite('<bookmarks-store>', function() {
   var store;
-  var TEST_TREE = {
-    id: '0',
-    children: [
+  var TEST_TREE;
+
+  setup(function() {
+    TEST_TREE = {
+      id: '0',
+      children: [
       {
         id: '1',
         children: [
@@ -19,9 +22,7 @@
     ]
   };
 
-  setup(function() {
     store = document.createElement('bookmarks-store');
-    store.isTesting_ = true;
     replaceBody(store);
     store.setupStore_(TEST_TREE);
   });
@@ -53,11 +54,11 @@
   test('correct paths generated for nodes', function() {
     var TEST_PATHS = {
       '0': 'rootNode',
-      '1': 'rootNode.children.0',
-      '2': 'rootNode.children.0.children.0',
-      '3': 'rootNode.children.0.children.1',
-      '4': 'rootNode.children.1',
-      '5': 'rootNode.children.2',
+      '1': 'rootNode.children.#0',
+      '2': 'rootNode.children.#0.children.#0',
+      '3': 'rootNode.children.#0.children.#1',
+      '4': 'rootNode.children.#1',
+      '5': 'rootNode.children.#2',
     };
 
     for (var id in store.idToNodeMap_)
@@ -110,4 +111,64 @@
     assertTrue(store.idToNodeMap_['1'].isSelected);
     assertFalse(store.idToNodeMap_['3'].isSelected);
   });
+
+  test('deleting a node updates the tree', function() {
+    // Remove an empty folder/bookmark.
+    store.onBookmarkRemoved_('4', {parentId: '0', index: '1'});
+
+    // Check the tree is correct.
+    assertEquals('5', store.rootNode.children[1].id);
+
+    // idToNodeMap_ has been updated.
+    assertEquals(undefined, store.idToNodeMap_['4']);
+    assertEquals(store.rootNode.children[1], store.idToNodeMap_['5']);
+
+    // Paths have been updated.
+    var TEST_PATHS = {
+      '0': 'rootNode',
+      '1': 'rootNode.children.#0',
+      '2': 'rootNode.children.#0.children.#0',
+      '3': 'rootNode.children.#0.children.#1',
+      '5': 'rootNode.children.#1',
+    };
+
+    for (var id in store.idToNodeMap_)
+      assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path);
+
+    // Remove a folder with children.
+    store.onBookmarkRemoved_('1', {parentId: '0', index: '0'});
+
+    // Check the tree is correct.
+    assertEquals('5', store.rootNode.children[0].id);
+
+    // idToNodeMap_ has been updated.
+    assertEquals(undefined, store.idToNodeMap_['1']);
+    assertEquals(undefined, store.idToNodeMap_['2']);
+    assertEquals(undefined, store.idToNodeMap_['3']);
+    assertEquals(undefined, store.idToNodeMap_['4']);
+    assertEquals(store.rootNode.children[0], store.idToNodeMap_['5']);
+
+    // Paths have been updated.
+    TEST_PATHS = {
+      '0': 'rootNode',
+      '5': 'rootNode.children.#0',
+    };
+
+    for (var id in store.idToNodeMap_)
+      assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path);
+  });
+
+  test('selectedId updates after removing a selected folder', function() {
+    // Selected folder gets removed.
+    store.selectedId = '2';
+    store.onBookmarkRemoved_('2', {parentId:'1', index:'0'});
+    assertTrue(store.idToNodeMap_['1'].isSelected);
+    assertEquals('1', store.selectedId);
+
+    // A folder with selected folder in it gets removed.
+    store.selectedId = '3';
+    store.onBookmarkRemoved_('1', {parentId:'0', index:'0'});
+    assertTrue(store.idToNodeMap_['0'].isSelected);
+    assertEquals('0', store.selectedId);
+  });
 });
diff --git a/chrome/test/data/webui/settings/controlled_button_tests.js b/chrome/test/data/webui/settings/controlled_button_tests.js
index 7b37046f..3a66529 100644
--- a/chrome/test/data/webui/settings/controlled_button_tests.js
+++ b/chrome/test/data/webui/settings/controlled_button_tests.js
@@ -4,34 +4,54 @@
 
 suite('controlled button', function() {
   /** @type {ControlledButtonElement} */
-  var button;
+  var controlledButton;
 
   /** @type {!chrome.settingsPrivate.PrefObject} */
-  var pref = {
+  var uncontrolledPref = {
     key: 'test',
     type: chrome.settingsPrivate.PrefType.BOOLEAN,
     value: true
   };
 
+  /** @type {!chrome.settingsPrivate.PrefObject} */
+  var extensionControlledPref = Object.assign({
+    controlledBy: chrome.settingsPrivate.ControlledBy.EXTENSION,
+    enforcement: chrome.settingsPrivate.Enforcement.ENFORCED,
+  }, uncontrolledPref);
+
+  /** @type {!chrome.settingsPrivate.PrefObject} */
+  var policyControlledPref = Object.assign({
+    controlledBy: chrome.settingsPrivate.ControlledBy.USER_POLICY,
+    enforcement: chrome.settingsPrivate.Enforcement.ENFORCED,
+  }, uncontrolledPref);
+
   setup(function() {
     PolymerTest.clearBody();
-    button = document.createElement('controlled-button');
-    button.pref = pref;
-    document.body.appendChild(button);
+    controlledButton = document.createElement('controlled-button');
+    controlledButton.pref = uncontrolledPref;
+    document.body.appendChild(controlledButton);
+    Polymer.dom.flush();
   });
 
-  test('disables when pref is managed', function() {
-    button.set('pref.enforcement', chrome.settingsPrivate.Enforcement.ENFORCED);
-    Polymer.dom.flush();
-    assertTrue(button.$$('paper-button').disabled);
+  test('controlled prefs', function() {
+    assertFalse(controlledButton.$$('paper-button').disabled);
+    assertFalse(!!controlledButton.$$('cr-policy-pref-indicator'));
 
-    var indicator = button.$$('cr-policy-pref-indicator');
+    controlledButton.pref = extensionControlledPref;
+    Polymer.dom.flush();
+    assertTrue(controlledButton.$$('paper-button').disabled);
+    assertFalse(!!controlledButton.$$('cr-policy-pref-indicator'));
+
+    controlledButton.pref = policyControlledPref;
+    Polymer.dom.flush();
+    assertTrue(controlledButton.$$('paper-button').disabled);
+    var indicator = controlledButton.$$('cr-policy-pref-indicator');
     assertTrue(!!indicator);
     assertGT(indicator.clientHeight, 0);
 
-    button.set('pref.enforcement', undefined);
+    controlledButton.pref = uncontrolledPref;
     Polymer.dom.flush();
-    assertFalse(button.$$('paper-button').disabled);
-    assertEquals(0, indicator.clientHeight);
+    assertFalse(controlledButton.$$('paper-button').disabled);
+    assertFalse(!!controlledButton.$$('cr-policy-pref-indicator'));
   });
 });
diff --git a/chrome/test/ppapi/ppapi_filechooser_browsertest.cc b/chrome/test/ppapi/ppapi_filechooser_browsertest.cc
index 3d8ed5f..ae3c0a628 100644
--- a/chrome/test/ppapi/ppapi_filechooser_browsertest.cc
+++ b/chrome/test/ppapi/ppapi_filechooser_browsertest.cc
@@ -167,6 +167,8 @@
 
   void CheckPPAPIDownloadRequest(
       const GURL& requestor_url,
+      const GURL& initiating_frame_url_unused,
+      content::WebContents* web_contents_unused,
       const base::FilePath& default_file_path,
       const std::vector<base::FilePath::StringType>& alternate_extensions,
       Profile* /* profile */,
diff --git a/chromecast/browser/metrics/cast_metrics_service_client.cc b/chromecast/browser/metrics/cast_metrics_service_client.cc
index beff0aea..483cd1ed 100644
--- a/chromecast/browser/metrics/cast_metrics_service_client.cc
+++ b/chromecast/browser/metrics/cast_metrics_service_client.cc
@@ -232,9 +232,7 @@
   done_callback.Run();
 }
 
-std::unique_ptr<::metrics::MetricsLogUploader>
-CastMetricsServiceClient::CreateUploader(
-    const base::Callback<void(int)>& on_upload_complete) {
+std::string CastMetricsServiceClient::GetMetricsServerUrl() {
   std::string uma_server_url(::metrics::kDefaultMetricsServerUrl);
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   if (command_line->HasSwitch(switches::kOverrideMetricsUploadUrl)) {
@@ -242,10 +240,17 @@
         command_line->GetSwitchValueASCII(switches::kOverrideMetricsUploadUrl));
   }
   DCHECK(!uma_server_url.empty());
+  return uma_server_url;
+}
+
+std::unique_ptr<::metrics::MetricsLogUploader>
+CastMetricsServiceClient::CreateUploader(
+    const std::string& server_url,
+    const std::string& mime_type,
+    const base::Callback<void(int)>& on_upload_complete) {
   return std::unique_ptr<::metrics::MetricsLogUploader>(
-      new ::metrics::NetMetricsLogUploader(request_context_, uma_server_url,
-                                           ::metrics::kDefaultMetricsMimeType,
-                                           on_upload_complete));
+      new ::metrics::NetMetricsLogUploader(request_context_, server_url,
+                                           mime_type, on_upload_complete));
 }
 
 base::TimeDelta CastMetricsServiceClient::GetStandardUploadInterval() {
diff --git a/chromecast/browser/metrics/cast_metrics_service_client.h b/chromecast/browser/metrics/cast_metrics_service_client.h
index 11ec224..1ab314bd 100644
--- a/chromecast/browser/metrics/cast_metrics_service_client.h
+++ b/chromecast/browser/metrics/cast_metrics_service_client.h
@@ -78,7 +78,10 @@
   void InitializeSystemProfileMetrics(
       const base::Closure& done_callback) override;
   void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
+  std::string GetMetricsServerUrl() override;
   std::unique_ptr<::metrics::MetricsLogUploader> CreateUploader(
+      const std::string& server_url,
+      const std::string& mime_type,
       const base::Callback<void(int)>& on_upload_complete) override;
   base::TimeDelta GetStandardUploadInterval() override;
 
diff --git a/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc b/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc
index 4ed9889..a83d6a4 100644
--- a/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc
+++ b/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc
@@ -218,12 +218,14 @@
     return false;
   }
 
-  if (!rate_shifter_ ||
-      config.samples_per_second != config_.samples_per_second) {
+  bool changed_sample_rate =
+      (config.samples_per_second != config_.samples_per_second);
+
+  if (!rate_shifter_ || changed_sample_rate) {
     CreateRateShifter(config.samples_per_second);
   }
 
-  if (mixer_input_ && config.samples_per_second != config_.samples_per_second) {
+  if (mixer_input_ && changed_sample_rate) {
     // Destroy the old input first to ensure that the mixer output sample rate
     // is updated.
     mixer_input_.reset();
@@ -237,7 +239,7 @@
   decoder_.reset();
   CreateDecoder();
 
-  if (pending_buffer_complete_ && !rate_shifter_->IsQueueFull()) {
+  if (pending_buffer_complete_ && changed_sample_rate) {
     pending_buffer_complete_ = false;
     delegate_->OnPushBufferComplete(MediaPipelineBackendAlsa::kBufferSuccess);
   }
@@ -338,6 +340,7 @@
   delta.decoded_bytes = input_bytes;
   UpdateStatistics(delta);
 
+  pending_buffer_complete_ = true;
   if (decoded->end_of_stream()) {
     got_eos_ = true;
   } else {
@@ -350,7 +353,6 @@
     if (rate_info->rate == 1.0 && rate_shifter_->frames_buffered() == 0 &&
         pending_output_frames_ == kNoPendingOutput) {
       DCHECK_EQ(rate_info->output_frames, rate_info->input_frames);
-      pending_buffer_complete_ = true;
       pending_output_frames_ = input_frames;
       if (got_eos_) {
         DCHECK(!pushed_eos_);
@@ -374,20 +376,34 @@
 
   PushRateShifted();
   DCHECK(!rate_shifter_info_.empty());
-  // Can't check got_eos_ here, since it may have already been reset by a call
-  // to Stop().
-  if (decoded->end_of_stream() || (!rate_shifter_->IsQueueFull() &&
-                                   rate_shifter_info_.front().rate != 1.0)) {
+  CheckBufferComplete();
+}
+
+void AudioDecoderAlsa::CheckBufferComplete() {
+  if (!pending_buffer_complete_) {
+    return;
+  }
+
+  bool rate_shifter_queue_full = rate_shifter_->IsQueueFull();
+  DCHECK(!rate_shifter_info_.empty());
+  if (rate_shifter_info_.front().rate == 1.0) {
+    // If the current rate is 1.0, drain any data in the rate shifter before
+    // calling PushBufferComplete, so that the next PushBuffer call can skip the
+    // rate shifter entirely.
+    rate_shifter_queue_full = (rate_shifter_->frames_buffered() > 0 ||
+                               pending_output_frames_ != kNoPendingOutput);
+  }
+
+  if (pushed_eos_ || !rate_shifter_queue_full) {
+    pending_buffer_complete_ = false;
     delegate_->OnPushBufferComplete(MediaPipelineBackendAlsa::kBufferSuccess);
-  } else {
-    pending_buffer_complete_ = true;
   }
 }
 
 void AudioDecoderAlsa::PushRateShifted() {
   DCHECK(mixer_input_);
 
-  if (pending_output_frames_ != kNoPendingOutput) {
+  if (pushed_eos_ || pending_output_frames_ != kNoPendingOutput) {
     return;
   }
 
@@ -492,29 +508,18 @@
   pending_output_frames_ = kNoPendingOutput;
   last_mixer_delay_ = delay;
 
-  if (pushed_eos_) {
-    if (pending_buffer_complete_) {
-      pending_buffer_complete_ = false;
-      delegate_->OnPushBufferComplete(MediaPipelineBackendAlsa::kBufferSuccess);
-    }
-    delegate_->OnEndOfStream();
-  } else {
-    task_runner_->PostTask(FROM_HERE, base::Bind(&AudioDecoderAlsa::PushMorePcm,
-                                                 weak_factory_.GetWeakPtr()));
-  }
+  task_runner_->PostTask(FROM_HERE, base::Bind(&AudioDecoderAlsa::PushMorePcm,
+                                               weak_factory_.GetWeakPtr()));
 }
 
 void AudioDecoderAlsa::PushMorePcm() {
   PushRateShifted();
 
   DCHECK(!rate_shifter_info_.empty());
-  if (pending_buffer_complete_) {
-    double rate = rate_shifter_info_.front().rate;
-    if ((rate == 1.0 && pending_output_frames_ == kNoPendingOutput) ||
-        (rate != 1.0 && !rate_shifter_->IsQueueFull())) {
-      pending_buffer_complete_ = false;
-      delegate_->OnPushBufferComplete(MediaPipelineBackendAlsa::kBufferSuccess);
-    }
+  CheckBufferComplete();
+
+  if (pushed_eos_) {
+    delegate_->OnEndOfStream();
   }
 }
 
diff --git a/chromecast/media/cma/backend/alsa/audio_decoder_alsa.h b/chromecast/media/cma/backend/alsa/audio_decoder_alsa.h
index a0084ee1..9d72e677 100644
--- a/chromecast/media/cma/backend/alsa/audio_decoder_alsa.h
+++ b/chromecast/media/cma/backend/alsa/audio_decoder_alsa.h
@@ -77,6 +77,7 @@
   void OnBufferDecoded(uint64_t input_bytes,
                        CastAudioDecoder::Status status,
                        const scoped_refptr<DecoderBufferBase>& decoded);
+  void CheckBufferComplete();
   void PushRateShifted();
   void PushMorePcm();
   void RunEos();
diff --git a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc
index a912145..7418f1f 100644
--- a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc
+++ b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc
@@ -395,7 +395,9 @@
   EXPECT_TRUE(expecting_buffer_complete_)
       << "OnPushBufferComplete() called unexpectedly";
   expecting_buffer_complete_ = false;
-  ASSERT_NE(status, MediaPipelineBackend::kBufferFailed);
+  if (!feed_continuous_pcm_ || !feeding_completed_) {
+    ASSERT_NE(status, MediaPipelineBackend::kBufferFailed);
+  }
   EXPECT_FALSE(eos_) << "Got OnPushBufferComplete() after OnEndOfStream()";
 
   if (test_config_after_next_push_) {
diff --git a/components/content_settings/core/common/BUILD.gn b/components/content_settings/core/common/BUILD.gn
index a73d49e..42404221 100644
--- a/components/content_settings/core/common/BUILD.gn
+++ b/components/content_settings/core/common/BUILD.gn
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//mojo/public/tools/bindings/mojom.gni")
+
 static_library("common") {
   sources = [
     "content_settings.cc",
@@ -19,6 +21,7 @@
 
   deps = [
     "//base",
+    "//mojo/public/cpp/bindings:struct_traits",
     "//net",
     "//url",
   ]
@@ -39,3 +42,9 @@
     "//url",
   ]
 }
+
+mojom("mojo_bindings") {
+  sources = [
+    "content_settings.mojom",
+  ]
+}
diff --git a/components/content_settings/core/common/DEPS b/components/content_settings/core/common/DEPS
index 201d8c82..4e501b2 100644
--- a/components/content_settings/core/common/DEPS
+++ b/components/content_settings/core/common/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "+mojo/public/cpp/bindings",
   "+net/base",
   "+testing",
   "+url",
diff --git a/components/content_settings/core/common/OWNERS b/components/content_settings/core/common/OWNERS
new file mode 100644
index 0000000..ac44cd00
--- /dev/null
+++ b/components/content_settings/core/common/OWNERS
@@ -0,0 +1,5 @@
+per-file *.mojom=set noparent
+per-file *.mojom=file://ipc/SECURITY_OWNERS
+
+per-file *_struct_traits*.*=set noparent
+per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h
index 3179ef3..c441e28 100644
--- a/components/content_settings/core/common/content_settings.h
+++ b/components/content_settings/core/common/content_settings.h
@@ -18,6 +18,9 @@
 // A Java counterpart will be generated for this enum.
 // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.preferences.website
 // GENERATED_JAVA_CLASS_NAME_OVERRIDE: ContentSettingValues
+//
+// TODO(nigeltao): migrate the Java users of this enum to the mojom-generated
+// enum.
 enum ContentSetting {
   CONTENT_SETTING_DEFAULT = 0,
   CONTENT_SETTING_ALLOW,
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom
new file mode 100644
index 0000000..5c4c5d9
--- /dev/null
+++ b/components/content_settings/core/common/content_settings.mojom
@@ -0,0 +1,72 @@
+// 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.
+
+module content_settings.mojom;
+
+// This mirrors the C++ type in content_settings_pattern.h.
+struct PatternParts {
+  // Lowercase string of the URL scheme to match. This string is empty if the
+  // |is_scheme_wildcard| flag is set.
+  string scheme;
+
+  // True if the scheme wildcard is set.
+  bool is_scheme_wildcard;
+
+  // Normalized string that is either of the following:
+  // - IPv4 or IPv6
+  // - hostname
+  // - domain
+  // - empty string if the |is_host_wildcard flag is set.
+  string host;
+
+  // True if the domain wildcard is set.
+  bool has_domain_wildcard;
+
+  // String with the port to match. This string is empty if the
+  // |is_port_wildcard| flag is set.
+  string port;
+
+  // True if the port wildcard is set.
+  bool is_port_wildcard;
+
+  // TODO(markusheintz): Needed for legacy reasons. Remove. Path
+  // specification. Only used for content settings pattern with a "file"
+  // scheme part.
+  string path;
+
+  // True if the path wildcard is set.
+  bool is_path_wildcard;
+};
+
+// This mirrors the C++ type in content_settings_pattern.h.
+struct ContentSettingsPattern {
+  PatternParts parts;
+  bool is_valid;
+};
+
+// This mirrors the C++ type in content_settings.h.
+enum ContentSetting {
+  DEFAULT = 0,
+  ALLOW,
+  BLOCK,
+  ASK,
+  SESSION_ONLY,
+  DETECT_IMPORTANT_CONTENT
+};
+
+// This mirrors the C++ type in content_settings.h.
+struct ContentSettingPatternSource {
+  ContentSettingsPattern primary_pattern;
+  ContentSettingsPattern secondary_pattern;
+  ContentSetting setting;
+  string source;
+  bool incognito;
+};
+
+// This mirrors the C++ type in content_settings.h.
+struct RendererContentSettingRules {
+  array<ContentSettingPatternSource> image_rules;
+  array<ContentSettingPatternSource> script_rules;
+  array<ContentSettingPatternSource> autoplay_rules;
+};
diff --git a/components/content_settings/core/common/content_settings.typemap b/components/content_settings/core/common/content_settings.typemap
new file mode 100644
index 0000000..200cd73
--- /dev/null
+++ b/components/content_settings/core/common/content_settings.typemap
@@ -0,0 +1,27 @@
+# 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.
+
+deps = [
+  "//components/content_settings/core/common",
+  "//mojo/public/cpp/bindings",
+]
+mojom = "//components/content_settings/core/common/content_settings.mojom"
+public_deps = [
+  "//components/content_settings/core/common",
+]
+public_headers = [
+  "//components/content_settings/core/common/content_settings.h",
+  "//components/content_settings/core/common/content_settings_pattern.h",
+]
+sources = [
+  "//components/content_settings/core/common/content_settings_struct_traits.cc",
+]
+traits_headers = [ "//components/content_settings/core/common/content_settings_struct_traits.h" ]
+type_mappings = [
+  "content_settings.mojom.PatternParts=::ContentSettingsPattern::PatternParts",
+  "content_settings.mojom.ContentSettingsPattern=::ContentSettingsPattern",
+  "content_settings.mojom.ContentSetting=::ContentSetting",
+  "content_settings.mojom.ContentSettingPatternSource=::ContentSettingPatternSource",
+  "content_settings.mojom.RendererContentSettingRules=::RendererContentSettingRules",
+]
diff --git a/components/content_settings/core/common/content_settings_pattern.h b/components/content_settings/core/common/content_settings_pattern.h
index f0432f5..d09b9f5 100644
--- a/components/content_settings/core/common/content_settings_pattern.h
+++ b/components/content_settings/core/common/content_settings_pattern.h
@@ -10,11 +10,16 @@
 #include <string>
 
 #include "base/gtest_prod_util.h"
+#include "mojo/public/cpp/bindings/struct_traits.h"
 
 class GURL;
 
 namespace content_settings {
 class PatternParser;
+
+namespace mojom {
+class ContentSettingsPatternDataView;
+}
 }
 
 // A pattern used in content setting rules. See |IsValid| for a description of
@@ -217,6 +222,9 @@
  private:
   friend class content_settings::PatternParser;
   friend class ContentSettingsPatternSerializer;
+  friend struct mojo::StructTraits<
+      content_settings::mojom::ContentSettingsPatternDataView,
+      ContentSettingsPattern>;
   FRIEND_TEST_ALL_PREFIXES(ContentSettingsPatternParserTest, SerializePatterns);
 
   class Builder;
diff --git a/components/content_settings/core/common/content_settings_struct_traits.cc b/components/content_settings/core/common/content_settings_struct_traits.cc
new file mode 100644
index 0000000..11ad9c9
--- /dev/null
+++ b/components/content_settings/core/common/content_settings_struct_traits.cc
@@ -0,0 +1,104 @@
+// 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 "components/content_settings/core/common/content_settings_struct_traits.h"
+
+namespace mojo {
+
+// static
+bool StructTraits<content_settings::mojom::PatternPartsDataView,
+                  ContentSettingsPattern::PatternParts>::
+    Read(content_settings::mojom::PatternPartsDataView data,
+         ContentSettingsPattern::PatternParts* out) {
+  out->is_scheme_wildcard = data.is_scheme_wildcard();
+  out->has_domain_wildcard = data.has_domain_wildcard();
+  out->is_port_wildcard = data.is_port_wildcard();
+  out->is_path_wildcard = data.is_path_wildcard();
+  return data.ReadScheme(&out->scheme) && data.ReadHost(&out->host) &&
+         data.ReadPort(&out->port) && data.ReadPath(&out->path);
+}
+
+// static
+bool StructTraits<content_settings::mojom::ContentSettingsPatternDataView,
+                  ContentSettingsPattern>::
+    Read(content_settings::mojom::ContentSettingsPatternDataView data,
+         ContentSettingsPattern* out) {
+  out->is_valid_ = data.is_valid();
+  return data.ReadParts(&out->parts_);
+}
+
+// static
+content_settings::mojom::ContentSetting
+EnumTraits<content_settings::mojom::ContentSetting, ContentSetting>::ToMojom(
+    ContentSetting setting) {
+  switch (setting) {
+    case CONTENT_SETTING_DEFAULT:
+      return content_settings::mojom::ContentSetting::DEFAULT;
+    case CONTENT_SETTING_ALLOW:
+      return content_settings::mojom::ContentSetting::ALLOW;
+    case CONTENT_SETTING_BLOCK:
+      return content_settings::mojom::ContentSetting::BLOCK;
+    case CONTENT_SETTING_ASK:
+      return content_settings::mojom::ContentSetting::ASK;
+    case CONTENT_SETTING_SESSION_ONLY:
+      return content_settings::mojom::ContentSetting::SESSION_ONLY;
+    case CONTENT_SETTING_DETECT_IMPORTANT_CONTENT:
+      return content_settings::mojom::ContentSetting::DETECT_IMPORTANT_CONTENT;
+    case CONTENT_SETTING_NUM_SETTINGS:
+      // CONTENT_SETTING_NUM_SETTINGS is a dummy enum value.
+      break;
+  }
+  NOTREACHED();
+  return content_settings::mojom::ContentSetting::DEFAULT;
+}
+
+// static
+bool EnumTraits<content_settings::mojom::ContentSetting, ContentSetting>::
+    FromMojom(content_settings::mojom::ContentSetting setting,
+              ContentSetting* out) {
+  switch (setting) {
+    case content_settings::mojom::ContentSetting::DEFAULT:
+      *out = CONTENT_SETTING_DEFAULT;
+      return true;
+    case content_settings::mojom::ContentSetting::ALLOW:
+      *out = CONTENT_SETTING_ALLOW;
+      return true;
+    case content_settings::mojom::ContentSetting::BLOCK:
+      *out = CONTENT_SETTING_BLOCK;
+      return true;
+    case content_settings::mojom::ContentSetting::ASK:
+      *out = CONTENT_SETTING_ASK;
+      return true;
+    case content_settings::mojom::ContentSetting::SESSION_ONLY:
+      *out = CONTENT_SETTING_SESSION_ONLY;
+      return true;
+    case content_settings::mojom::ContentSetting::DETECT_IMPORTANT_CONTENT:
+      *out = CONTENT_SETTING_DETECT_IMPORTANT_CONTENT;
+      return true;
+  }
+  return false;
+}
+
+// static
+bool StructTraits<content_settings::mojom::ContentSettingPatternSourceDataView,
+                  ContentSettingPatternSource>::
+    Read(content_settings::mojom::ContentSettingPatternSourceDataView data,
+         ContentSettingPatternSource* out) {
+  out->incognito = data.incognito();
+  return data.ReadPrimaryPattern(&out->primary_pattern) &&
+         data.ReadSecondaryPattern(&out->secondary_pattern) &&
+         data.ReadSetting(&out->setting) && data.ReadSource(&out->source);
+}
+
+// static
+bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
+                  RendererContentSettingRules>::
+    Read(content_settings::mojom::RendererContentSettingRulesDataView data,
+         RendererContentSettingRules* out) {
+  return data.ReadImageRules(&out->image_rules) &&
+         data.ReadScriptRules(&out->script_rules) &&
+         data.ReadAutoplayRules(&out->autoplay_rules);
+}
+
+}  // namespace mojo
diff --git a/components/content_settings/core/common/content_settings_struct_traits.h b/components/content_settings/core/common/content_settings_struct_traits.h
new file mode 100644
index 0000000..10c78ef
--- /dev/null
+++ b/components/content_settings/core/common/content_settings_struct_traits.h
@@ -0,0 +1,142 @@
+// 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 COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_STRUCT_TRAITS_H
+#define COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_STRUCT_TRAITS_H
+
+#include <string>
+
+#include "components/content_settings/core/common/content_settings.h"
+#include "components/content_settings/core/common/content_settings.mojom.h"
+#include "mojo/public/cpp/bindings/enum_traits.h"
+#include "mojo/public/cpp/bindings/struct_traits.h"
+
+namespace mojo {
+
+template <>
+struct StructTraits<content_settings::mojom::PatternPartsDataView,
+                    ContentSettingsPattern::PatternParts> {
+  static const std::string& scheme(
+      const ContentSettingsPattern::PatternParts& r) {
+    return r.scheme;
+  }
+
+  static bool is_scheme_wildcard(
+      const ContentSettingsPattern::PatternParts& r) {
+    return r.is_scheme_wildcard;
+  }
+
+  static const std::string& host(
+      const ContentSettingsPattern::PatternParts& r) {
+    return r.host;
+  }
+
+  static bool has_domain_wildcard(
+      const ContentSettingsPattern::PatternParts& r) {
+    return r.has_domain_wildcard;
+  }
+
+  static const std::string& port(
+      const ContentSettingsPattern::PatternParts& r) {
+    return r.port;
+  }
+
+  static bool is_port_wildcard(const ContentSettingsPattern::PatternParts& r) {
+    return r.is_port_wildcard;
+  }
+
+  static const std::string& path(
+      const ContentSettingsPattern::PatternParts& r) {
+    return r.path;
+  }
+
+  static bool is_path_wildcard(const ContentSettingsPattern::PatternParts& r) {
+    return r.is_path_wildcard;
+  }
+
+  static bool Read(content_settings::mojom::PatternPartsDataView data,
+                   ContentSettingsPattern::PatternParts* out);
+};
+
+template <>
+struct StructTraits<content_settings::mojom::ContentSettingsPatternDataView,
+                    ContentSettingsPattern> {
+  static const ContentSettingsPattern::PatternParts& parts(
+      const ContentSettingsPattern& r) {
+    return r.parts_;
+  }
+
+  static bool is_valid(const ContentSettingsPattern& r) { return r.is_valid_; }
+
+  static bool Read(content_settings::mojom::ContentSettingsPatternDataView data,
+                   ContentSettingsPattern* out);
+};
+
+template <>
+struct EnumTraits<content_settings::mojom::ContentSetting, ContentSetting> {
+  static content_settings::mojom::ContentSetting ToMojom(
+      ContentSetting setting);
+
+  static bool FromMojom(content_settings::mojom::ContentSetting setting,
+                        ContentSetting* out);
+};
+
+template <>
+struct StructTraits<
+    content_settings::mojom::ContentSettingPatternSourceDataView,
+    ContentSettingPatternSource> {
+  static const ContentSettingsPattern& primary_pattern(
+      const ContentSettingPatternSource& r) {
+    return r.primary_pattern;
+  }
+
+  static const ContentSettingsPattern& secondary_pattern(
+      const ContentSettingPatternSource& r) {
+    return r.secondary_pattern;
+  }
+
+  static ContentSetting setting(const ContentSettingPatternSource& r) {
+    return r.setting;
+  }
+
+  static const std::string& source(const ContentSettingPatternSource& r) {
+    return r.source;
+  }
+
+  static bool incognito(const ContentSettingPatternSource& r) {
+    return r.incognito;
+  }
+
+  static bool Read(
+      content_settings::mojom::ContentSettingPatternSourceDataView data,
+      ContentSettingPatternSource* out);
+};
+
+template <>
+struct StructTraits<
+    content_settings::mojom::RendererContentSettingRulesDataView,
+    RendererContentSettingRules> {
+  static const std::vector<ContentSettingPatternSource>& image_rules(
+      const RendererContentSettingRules& r) {
+    return r.image_rules;
+  }
+
+  static const std::vector<ContentSettingPatternSource>& script_rules(
+      const RendererContentSettingRules& r) {
+    return r.script_rules;
+  }
+
+  static const std::vector<ContentSettingPatternSource>& autoplay_rules(
+      const RendererContentSettingRules& r) {
+    return r.autoplay_rules;
+  }
+
+  static bool Read(
+      content_settings::mojom::RendererContentSettingRulesDataView data,
+      RendererContentSettingRules* out);
+};
+
+}  // namespace mojo
+
+#endif  // COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_STRUCT_TRAITS_H
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc
index e30aa75..77ca8bfb 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -159,6 +159,7 @@
 #include "components/metrics/metrics_reporting_scheduler.h"
 #include "components/metrics/metrics_service_client.h"
 #include "components/metrics/metrics_state_manager.h"
+#include "components/metrics/url_constants.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "components/variations/entropy_provider.h"
@@ -1009,6 +1010,8 @@
 
   if (!log_uploader_) {
     log_uploader_ = client_->CreateUploader(
+        client_->GetMetricsServerUrl(),
+        metrics::kDefaultMetricsMimeType,
         base::Bind(&MetricsService::OnLogUploadComplete,
                    self_ptr_factory_.GetWeakPtr()));
   }
diff --git a/components/metrics/metrics_service_client.cc b/components/metrics/metrics_service_client.cc
index f4c38685..1bb75e52 100644
--- a/components/metrics/metrics_service_client.cc
+++ b/components/metrics/metrics_service_client.cc
@@ -4,6 +4,8 @@
 
 #include "components/metrics/metrics_service_client.h"
 
+#include "components/metrics/url_constants.h"
+
 namespace metrics {
 
 base::string16 MetricsServiceClient::GetRegistryBackupKey() {
@@ -22,4 +24,8 @@
   return false;
 }
 
+std::string MetricsServiceClient::GetMetricsServerUrl() {
+  return metrics::kDefaultMetricsServerUrl;
+}
+
 }  // namespace metrics
diff --git a/components/metrics/metrics_service_client.h b/components/metrics/metrics_service_client.h
index 6a067af..73cf490 100644
--- a/components/metrics/metrics_service_client.h
+++ b/components/metrics/metrics_service_client.h
@@ -82,9 +82,14 @@
   virtual void CollectFinalMetricsForLog(
       const base::Closure& done_callback) = 0;
 
+  // Get the URL of the metrics server.
+  virtual std::string GetMetricsServerUrl();
+
   // Creates a MetricsLogUploader with the specified parameters (see comments on
   // MetricsLogUploader for details).
   virtual std::unique_ptr<MetricsLogUploader> CreateUploader(
+      const std::string& server_url,
+      const std::string& mime_type,
       const base::Callback<void(int)>& on_upload_complete) = 0;
 
   // Returns the standard interval between upload attempts.
diff --git a/components/metrics/test_metrics_service_client.cc b/components/metrics/test_metrics_service_client.cc
index 7c7ccc6..491b6f67 100644
--- a/components/metrics/test_metrics_service_client.cc
+++ b/components/metrics/test_metrics_service_client.cc
@@ -66,6 +66,8 @@
 }
 
 std::unique_ptr<MetricsLogUploader> TestMetricsServiceClient::CreateUploader(
+    const std::string& server_url,
+    const std::string& mime_type,
     const base::Callback<void(int)>& on_upload_complete) {
   return std::unique_ptr<MetricsLogUploader>();
 }
diff --git a/components/metrics/test_metrics_service_client.h b/components/metrics/test_metrics_service_client.h
index 355e7c7..93e6b874 100644
--- a/components/metrics/test_metrics_service_client.h
+++ b/components/metrics/test_metrics_service_client.h
@@ -36,6 +36,8 @@
       const base::Closure& done_callback) override;
   void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
   std::unique_ptr<MetricsLogUploader> CreateUploader(
+      const std::string& server_url,
+      const std::string& mime_type,
       const base::Callback<void(int)>& on_upload_complete) override;
   base::TimeDelta GetStandardUploadInterval() override;
   bool IsReportingPolicyManaged() override;
diff --git a/components/onc/docs/onc_spec.html b/components/onc/docs/onc_spec.html
index 2ef2344..3c6daf1 100644
--- a/components/onc/docs/onc_spec.html
+++ b/components/onc/docs/onc_spec.html
@@ -2397,6 +2397,17 @@
       registered
     </dd>
 
+    <dt class="field">SignalStrength</dt>
+    <dd>
+      <span class="field_meta">
+        (optional, read-only)
+        <span class="type">integer</span>
+      </span>
+      The current signal strength for this network in the range [0, 100],
+      provided by the system. If the network is not in range this field will
+      be set to '0' or not present.
+    </dd>
+
     <dt class="field">SIMLockStatus</dt>
     <dd>
       <span class="field_meta">(optional, read-only, provided only
diff --git a/components/physical_web/webui/physical_web_base_message_handler.cc b/components/physical_web/webui/physical_web_base_message_handler.cc
index b6706c9b..a6196661 100644
--- a/components/physical_web/webui/physical_web_base_message_handler.cc
+++ b/components/physical_web/webui/physical_web_base_message_handler.cc
@@ -40,7 +40,7 @@
   for (size_t i = 0; i < metadata->GetSize(); i++) {
     base::DictionaryValue* metadata_item = nullptr;
     metadata->GetDictionary(i, &metadata_item);
-    metadata_item->SetInteger(physical_web_ui::kIndex, i);
+    metadata_item->SetInteger(physical_web_ui::kIndex, static_cast<int>(i));
   }
 
   results.Set(physical_web_ui::kMetadata, metadata.release());
diff --git a/components/typemaps.gni b/components/typemaps.gni
index e45cc84..aa42245e6 100644
--- a/components/typemaps.gni
+++ b/components/typemaps.gni
@@ -4,6 +4,7 @@
 
 typemaps = [
   "//components/autofill/content/common/autofill_types.typemap",
+  "//components/content_settings/core/common/content_settings.typemap",
   "//components/nacl/common/nacl.typemap",
   "//components/password_manager/content/common/credential_manager.typemap",
   "//components/translate/content/common/translate.typemap",
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
index 7c329e948..af3a4999 100644
--- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -4978,12 +4978,7 @@
   // initial blank page.  That might require updating all relevant NavEntries to
   // know what the first committed URL is, so that we really elide the initial
   // blank page from history.
-  //
-  // TODO(creis): This actually goes to frame_url in some cases when subframe
-  // FrameNavigationEntries are enabled, due to a mismatch between PageState and
-  // the entry's URL.  That should be fixed in https://crbug.com/617239.
-  if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
-    EXPECT_EQ(blank_url, frame->current_url());
+  EXPECT_EQ(blank_url, frame->current_url());
 }
 
 // This test is similar to "BackToAboutBlankIframe" above, except that a
@@ -5104,12 +5099,7 @@
   // TODO(creis): It's a bit surprising to go to frame_url_1 here instead of
   // frame_url_2.  Perhaps we should be going back to frame_url_1 when going
   // back two entries above, since it's different than the initial blank case.
-  //
-  // TODO(creis): This actually goes to frame_url_2 in some cases when subframe
-  // FrameNavigationEntries are enabled, due to a mismatch between PageState and
-  // the entry's URL.  That should be fixed in https://crbug.com/617239.
-  if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
-    EXPECT_EQ(frame_url_1, frame->current_url());
+  EXPECT_EQ(frame_url_1, frame->current_url());
 }
 
 // Test for in-page navigation kills due to using the wrong history item in
@@ -5227,12 +5217,7 @@
   // TODO(creis): It's a bit surprising to go to frame_url_1 here instead of
   // frame_url_2.  Perhaps we should be going back to frame_url_1 when going
   // back two entries above, since it's different than the initial blank case.
-  //
-  // TODO(creis): This actually goes to frame_url_2 in some cases when subframe
-  // FrameNavigationEntries are enabled, due to a mismatch between PageState and
-  // the entry's URL.  That should be fixed in https://crbug.com/617239.
-  if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
-    EXPECT_EQ(frame_url_1, frame->current_url());
+  EXPECT_EQ(frame_url_1, frame->current_url());
 }
 
 // Test for in-page navigation kills when going back to about:blank after a
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index a46af2a..9362d04 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -1454,6 +1454,17 @@
   return renderer_interface_.get();
 }
 
+void RenderProcessHostImpl::SetIsNeverSuitableForReuse() {
+  is_never_suitable_for_reuse_ = true;
+}
+
+bool RenderProcessHostImpl::MayReuseHost() {
+  if (is_never_suitable_for_reuse_)
+    return false;
+
+  return GetContentClient()->browser()->MayReuseHost(this);
+}
+
 mojom::RouteProvider* RenderProcessHostImpl::GetRemoteRouteProvider() {
   return remote_route_provider_.get();
 }
@@ -2516,7 +2527,7 @@
 
   iterator iter(AllHostsIterator());
   while (!iter.IsAtEnd()) {
-    if (GetContentClient()->browser()->MayReuseHost(iter.GetCurrentValue()) &&
+    if (iter.GetCurrentValue()->MayReuseHost() &&
         RenderProcessHostImpl::IsSuitableHost(iter.GetCurrentValue(),
                                               browser_context, site_url)) {
       suitable_renderers.push_back(iter.GetCurrentValue());
@@ -2572,7 +2583,7 @@
   std::string site =
       SiteInstance::GetSiteForURL(browser_context, url).possibly_invalid_spec();
   RenderProcessHost* host = map->FindProcess(site);
-  if (host && (!GetContentClient()->browser()->MayReuseHost(host) ||
+  if (host && (!host->MayReuseHost() ||
                !IsSuitableHost(host, browser_context, url))) {
     // The registered process does not have an appropriate set of bindings for
     // the url.  Remove it from the map so we can register a better one.
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index 0452363..064d15b 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -174,6 +174,8 @@
   void PurgeAndSuspend() override;
   void Resume() override;
   mojom::Renderer* GetRendererInterface() override;
+  void SetIsNeverSuitableForReuse() override;
+  bool MayReuseHost() override;
 
   mojom::RouteProvider* GetRemoteRouteProvider();
 
@@ -437,6 +439,10 @@
   // longer be modified.
   bool is_worker_ref_count_disabled_;
 
+  // Whether this host is never suitable for reuse as determined in the
+  // MayReuseHost() function.
+  bool is_never_suitable_for_reuse_ = false;
+
   // The registered IPC listener objects. When this list is empty, we should
   // delete ourselves.
   IDMap<IPC::Listener*> listeners_;
diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc
index 7980783a..a4c8862 100644
--- a/content/browser/site_instance_impl.cc
+++ b/content/browser/site_instance_impl.cc
@@ -82,6 +82,81 @@
   return false;
 }
 
+namespace {
+
+const void* const kDefaultSubframeProcessHostHolderKey =
+    &kDefaultSubframeProcessHostHolderKey;
+
+class DefaultSubframeProcessHostHolder : public base::SupportsUserData::Data,
+                                         public RenderProcessHostObserver {
+ public:
+  explicit DefaultSubframeProcessHostHolder(BrowserContext* browser_context)
+      : browser_context_(browser_context) {}
+  ~DefaultSubframeProcessHostHolder() override {}
+
+  // Gets the correct render process to use for this SiteInstance.
+  RenderProcessHost* GetProcessHost(SiteInstance* site_instance,
+                                    bool is_for_guests_only) {
+    StoragePartition* default_partition =
+        BrowserContext::GetDefaultStoragePartition(browser_context_);
+    StoragePartition* partition =
+        BrowserContext::GetStoragePartition(browser_context_, site_instance);
+
+    // Is this the default storage partition? If it isn't, then just give it its
+    // own non-shared process.
+    if (partition != default_partition || is_for_guests_only) {
+      RenderProcessHostImpl* host = new RenderProcessHostImpl(
+          browser_context_, static_cast<StoragePartitionImpl*>(partition),
+          is_for_guests_only);
+      host->SetIsNeverSuitableForReuse();
+      return host;
+    }
+
+    if (host_) {
+      // If we already have a shared host for the default storage partition, use
+      // it.
+      return host_;
+    }
+
+    host_ = new RenderProcessHostImpl(
+        browser_context_, static_cast<StoragePartitionImpl*>(partition),
+        false /* for guests only */);
+    host_->SetIsNeverSuitableForReuse();
+    host_->AddObserver(this);
+
+    return host_;
+  }
+
+  void RenderProcessHostDestroyed(RenderProcessHost* host) override {
+    DCHECK_EQ(host_, host);
+    host_->RemoveObserver(this);
+    host_ = nullptr;
+  }
+
+ private:
+  BrowserContext* browser_context_;
+
+  // The default subframe render process used for the default storage partition
+  // of this BrowserContext.
+  RenderProcessHostImpl* host_ = nullptr;
+};
+
+}  // namespace
+
+RenderProcessHost* SiteInstanceImpl::GetDefaultSubframeProcessHost(
+    BrowserContext* browser_context,
+    bool is_for_guests_only) {
+  DefaultSubframeProcessHostHolder* holder =
+      static_cast<DefaultSubframeProcessHostHolder*>(
+          browser_context->GetUserData(&kDefaultSubframeProcessHostHolderKey));
+  if (!holder) {
+    holder = new DefaultSubframeProcessHostHolder(browser_context);
+    browser_context->SetUserData(kDefaultSubframeProcessHostHolderKey, holder);
+  }
+
+  return holder->GetProcessHost(this, is_for_guests_only);
+}
+
 RenderProcessHost* SiteInstanceImpl::GetProcess() {
   // TODO(erikkay) It would be nice to ensure that the renderer type had been
   // properly set before we get here.  The default tab creation case winds up
@@ -93,6 +168,7 @@
   // Create a new process if ours went away or was reused.
   if (!process_) {
     BrowserContext* browser_context = browsing_instance_->browser_context();
+    bool is_for_guests_only = site_.SchemeIs(kGuestScheme);
 
     // If we should use process-per-site mode (either in general or for the
     // given site), then look for an existing RenderProcessHost for the site.
@@ -103,6 +179,12 @@
                                                               site_);
     }
 
+    if (!process_ && IsDefaultSubframeSiteInstance() &&
+        SiteIsolationPolicy::IsTopDocumentIsolationEnabled()) {
+      process_ =
+          GetDefaultSubframeProcessHost(browser_context, is_for_guests_only);
+    }
+
     // If not (or if none found), see if we should reuse an existing process.
     if (!process_ && RenderProcessHostImpl::ShouldTryToUseExistingProcessHost(
             browser_context, site_)) {
@@ -119,9 +201,8 @@
         StoragePartitionImpl* partition =
             static_cast<StoragePartitionImpl*>(
                 BrowserContext::GetStoragePartition(browser_context, this));
-        process_ = new RenderProcessHostImpl(browser_context,
-                                             partition,
-                                             site_.SchemeIs(kGuestScheme));
+        process_ = new RenderProcessHostImpl(browser_context, partition,
+                                             is_for_guests_only);
       }
     }
     CHECK(process_);
diff --git a/content/browser/site_instance_impl.h b/content/browser/site_instance_impl.h
index 3b05af8..fc2ad85b 100644
--- a/content/browser/site_instance_impl.h
+++ b/content/browser/site_instance_impl.h
@@ -144,6 +144,11 @@
   // Used to restrict a process' origin access rights.
   void LockToOrigin();
 
+  // This gets the render process to use for default subframe site instances.
+  RenderProcessHost* GetDefaultSubframeProcessHost(
+      BrowserContext* browser_context,
+      bool is_for_guests_only);
+
   void set_is_default_subframe_site_instance() {
     is_default_subframe_site_instance_ = true;
   }
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index 0477aa0..67c5321 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -348,6 +348,11 @@
   // MockRenderProcessHost usage in tests.
   virtual mojom::Renderer* GetRendererInterface() = 0;
 
+  // Whether this process is locked out from ever being reused for sites other
+  // than the ones it currently has.
+  virtual void SetIsNeverSuitableForReuse() = 0;
+  virtual bool MayReuseHost() = 0;
+
   // Returns the current number of active views in this process.  Excludes
   // any RenderViewHosts that are swapped out.
   size_t GetActiveViewCount();
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index 1d87a48..c7ba2ec 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -315,6 +315,14 @@
   return renderer_interface_->get();
 }
 
+void MockRenderProcessHost::SetIsNeverSuitableForReuse() {
+  NOTREACHED();
+}
+
+bool MockRenderProcessHost::MayReuseHost() {
+  return true;
+}
+
 void MockRenderProcessHost::FilterURL(bool empty_allowed, GURL* url) {
   RenderProcessHostImpl::FilterURL(this, empty_allowed, url);
 }
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index e246dc7d..358a2672 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -111,6 +111,8 @@
   void PurgeAndSuspend() override;
   void Resume() override;
   mojom::Renderer* GetRendererInterface() override;
+  void SetIsNeverSuitableForReuse() override;
+  bool MayReuseHost() override;
 
   // IPC::Sender via RenderProcessHost.
   bool Send(IPC::Message* msg) override;
diff --git a/content/renderer/media/media_recorder_handler.cc b/content/renderer/media/media_recorder_handler.cc
index c5c4ecf..50feb23 100644
--- a/content/renderer/media/media_recorder_handler.cc
+++ b/content/renderer/media/media_recorder_handler.cc
@@ -257,14 +257,14 @@
 }
 
 void MediaRecorderHandler::OnEncodedVideo(
-    const scoped_refptr<media::VideoFrame>& video_frame,
+    const media::WebmMuxer::VideoParameters& params,
     std::unique_ptr<std::string> encoded_data,
     TimeTicks timestamp,
     bool is_key_frame) {
   DCHECK(main_render_thread_checker_.CalledOnValidThread());
   if (!webm_muxer_)
     return;
-  webm_muxer_->OnEncodedVideo(video_frame, std::move(encoded_data), timestamp,
+  webm_muxer_->OnEncodedVideo(params, std::move(encoded_data), timestamp,
                               is_key_frame);
 }
 
diff --git a/content/renderer/media/media_recorder_handler.h b/content/renderer/media/media_recorder_handler.h
index 6b6265f9..ab2ec74 100644
--- a/content/renderer/media/media_recorder_handler.h
+++ b/content/renderer/media/media_recorder_handler.h
@@ -65,7 +65,7 @@
  private:
   friend class MediaRecorderHandlerTest;
 
-  void OnEncodedVideo(const scoped_refptr<media::VideoFrame>& video_frame,
+  void OnEncodedVideo(const media::WebmMuxer::VideoParameters& params,
                       std::unique_ptr<std::string> encoded_data,
                       base::TimeTicks timestamp,
                       bool is_key_frame);
diff --git a/content/renderer/media/video_track_recorder.cc b/content/renderer/media/video_track_recorder.cc
index 5747193..011c633 100644
--- a/content/renderer/media/video_track_recorder.cc
+++ b/content/renderer/media/video_track_recorder.cc
@@ -171,7 +171,7 @@
   }
 
   virtual void EncodeOnEncodingTaskRunner(
-      const scoped_refptr<VideoFrame>& frame,
+      scoped_refptr<VideoFrame> frame,
       base::TimeTicks capture_timestamp) = 0;
   virtual void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) = 0;
 
@@ -343,13 +343,13 @@
 
 static void OnFrameEncodeCompleted(
     const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_cb,
-    const scoped_refptr<VideoFrame>& frame,
+    const media::WebmMuxer::VideoParameters& params,
     std::unique_ptr<std::string> data,
     base::TimeTicks capture_timestamp,
     bool keyframe) {
   DVLOG(1) << (keyframe ? "" : "non ") << "keyframe "<< data->length() << "B, "
            << capture_timestamp << " ms";
-  on_encoded_video_cb.Run(frame, std::move(data), capture_timestamp, keyframe);
+  on_encoded_video_cb.Run(params, std::move(data), capture_timestamp, keyframe);
 }
 
 static int GetNumberOfThreadsForEncoding() {
@@ -383,14 +383,16 @@
 
  private:
   using VideoFrameAndTimestamp =
-      std::pair<scoped_refptr<VideoFrame>, base::TimeTicks>;
+      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(const scoped_refptr<VideoFrame>& frame,
+  void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame,
                                   base::TimeTicks capture_timestamp) override;
   void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) override;
 
@@ -420,7 +422,7 @@
   gfx::Size vea_requested_input_size_;
 
   // Frames and corresponding timestamps in encode as FIFO.
-  std::queue<VideoFrameAndTimestamp> frames_in_encode_;
+  std::queue<VideoParamsAndTimestamp> frames_in_encode_;
 };
 
 // Class encapsulating all libvpx interactions for VP8/VP9 encoding.
@@ -437,7 +439,7 @@
  private:
   // VideoTrackRecorder::Encoder implementation.
   ~VpxEncoder() override;
-  void EncodeOnEncodingTaskRunner(const scoped_refptr<VideoFrame>& frame,
+  void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame,
                                   base::TimeTicks capture_timestamp) override;
   void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) override;
 
@@ -489,7 +491,7 @@
  private:
   // VideoTrackRecorder::Encoder implementation.
   ~H264Encoder() override;
-  void EncodeOnEncodingTaskRunner(const scoped_refptr<VideoFrame>& frame,
+  void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame,
                               base::TimeTicks capture_timestamp) override;
   void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) override;
 
@@ -602,7 +604,7 @@
 }
 
 void VEAEncoder::EncodeOnEncodingTaskRunner(
-    const scoped_refptr<VideoFrame>& frame,
+   scoped_refptr<VideoFrame> frame,
     base::TimeTicks capture_timestamp) {
   DVLOG(3) << __func__;
   DCHECK(encoding_task_runner_->BelongsToCurrentThread());
@@ -686,7 +688,8 @@
                      video_frame->stride(media::VideoFrame::kVPlane),
                      input_size_.width(), input_size_.height());
   }
-  frames_in_encode_.push(std::make_pair(video_frame, capture_timestamp));
+  frames_in_encode_.push(std::make_pair(
+      media::WebmMuxer::VideoParameters(frame), capture_timestamp));
 
   encoding_task_runner_->PostTask(
       FROM_HERE,
@@ -735,7 +738,7 @@
 }
 
 void VpxEncoder::EncodeOnEncodingTaskRunner(
-    const scoped_refptr<VideoFrame>& frame,
+    scoped_refptr<VideoFrame> frame,
     base::TimeTicks capture_timestamp) {
   TRACE_EVENT0("video", "VpxEncoder::EncodeOnEncodingTaskRunner");
   DCHECK(encoding_task_runner_->BelongsToCurrentThread());
@@ -775,6 +778,9 @@
                                << vpx_codec_error(encoder_.get()) << " -"
                                << vpx_codec_error_detail(encoder_.get());
 
+  const media::WebmMuxer::VideoParameters video_params(frame);
+  frame = nullptr;
+
   std::unique_ptr<std::string> data(new std::string);
   bool keyframe = false;
   vpx_codec_iter_t iter = NULL;
@@ -789,7 +795,7 @@
   origin_task_runner_->PostTask(FROM_HERE,
       base::Bind(OnFrameEncodeCompleted,
                  on_encoded_video_callback_,
-                 frame,
+                 video_params,
                  base::Passed(&data),
                  capture_timestamp,
                  keyframe));
@@ -939,7 +945,7 @@
 }
 
 void H264Encoder::EncodeOnEncodingTaskRunner(
-    const scoped_refptr<VideoFrame>& frame,
+    scoped_refptr<VideoFrame> frame,
     base::TimeTicks capture_timestamp) {
   TRACE_EVENT0("video", "H264Encoder::EncodeOnEncodingTaskRunner");
   DCHECK(encoding_task_runner_->BelongsToCurrentThread());
@@ -968,6 +974,8 @@
     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};
@@ -991,9 +999,9 @@
 
   const bool is_key_frame = info.eFrameType == videoFrameTypeIDR;
   origin_task_runner_->PostTask(
-      FROM_HERE,
-      base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_, frame,
-                 base::Passed(&data), capture_timestamp, is_key_frame));
+      FROM_HERE, base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_,
+                            video_params, base::Passed(&data),
+                            capture_timestamp, is_key_frame));
 }
 
 void H264Encoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) {
diff --git a/content/renderer/media/video_track_recorder.h b/content/renderer/media/video_track_recorder.h
index e8de7d96..e1db7fcf 100644
--- a/content/renderer/media/video_track_recorder.h
+++ b/content/renderer/media/video_track_recorder.h
@@ -14,6 +14,7 @@
 #include "base/threading/thread_checker.h"
 #include "content/public/common/features.h"
 #include "content/public/renderer/media_stream_video_sink.h"
+#include "media/muxers/webm_muxer.h"
 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
 
 namespace media {
@@ -44,7 +45,7 @@
   class Encoder;
 
   using OnEncodedVideoCB =
-      base::Callback<void(const scoped_refptr<media::VideoFrame>& video_frame,
+      base::Callback<void(const media::WebmMuxer::VideoParameters& params,
                           std::unique_ptr<std::string> encoded_data,
                           base::TimeTicks capture_timestamp,
                           bool is_key_frame)>;
diff --git a/content/renderer/media/video_track_recorder_unittest.cc b/content/renderer/media/video_track_recorder_unittest.cc
index 6d6808c..bffe055 100644
--- a/content/renderer/media/video_track_recorder_unittest.cc
+++ b/content/renderer/media/video_track_recorder_unittest.cc
@@ -94,15 +94,15 @@
   }
 
   MOCK_METHOD4(DoOnEncodedVideo,
-               void(const scoped_refptr<VideoFrame>& frame,
+               void(const media::WebmMuxer::VideoParameters& params,
                     std::string encoded_data,
                     base::TimeTicks timestamp,
                     bool keyframe));
-  void OnEncodedVideo(const scoped_refptr<VideoFrame>& video_frame,
+  void OnEncodedVideo(const media::WebmMuxer::VideoParameters& params,
                       std::unique_ptr<std::string> encoded_data,
                       base::TimeTicks timestamp,
                       bool is_key_frame) {
-    DoOnEncodedVideo(video_frame, *encoded_data, timestamp, is_key_frame);
+    DoOnEncodedVideo(params, *encoded_data, timestamp, is_key_frame);
   }
 
   void Encode(const scoped_refptr<VideoFrame>& frame,
@@ -148,7 +148,7 @@
   InSequence s;
   const base::TimeTicks timeticks_now = base::TimeTicks::Now();
   base::StringPiece first_frame_encoded_data;
-  EXPECT_CALL(*this, DoOnEncodedVideo(video_frame, _, timeticks_now, true))
+  EXPECT_CALL(*this, DoOnEncodedVideo(_, _, timeticks_now, true))
       .Times(1)
       .WillOnce(SaveArg<1>(&first_frame_encoded_data));
   Encode(video_frame, timeticks_now);
@@ -156,7 +156,7 @@
   // Send another Video Frame.
   const base::TimeTicks timeticks_later = base::TimeTicks::Now();
   base::StringPiece second_frame_encoded_data;
-  EXPECT_CALL(*this, DoOnEncodedVideo(video_frame, _, timeticks_later, false))
+  EXPECT_CALL(*this, DoOnEncodedVideo(_, _, timeticks_later, false))
       .Times(1)
       .WillOnce(SaveArg<1>(&second_frame_encoded_data));
   Encode(video_frame, timeticks_later);
@@ -171,7 +171,7 @@
   base::Closure quit_closure = run_loop.QuitClosure();
 
   base::StringPiece third_frame_encoded_data;
-  EXPECT_CALL(*this, DoOnEncodedVideo(video_frame2, _, _, true))
+  EXPECT_CALL(*this, DoOnEncodedVideo(_, _, _, true))
       .Times(1)
       .WillOnce(DoAll(SaveArg<1>(&third_frame_encoded_data),
                 RunClosure(quit_closure)));
diff --git a/extensions/browser/api/app_current_window_internal/app_current_window_internal_api.cc b/extensions/browser/api/app_current_window_internal/app_current_window_internal_api.cc
index d28a50f..74f6c9d3 100644
--- a/extensions/browser/api/app_current_window_internal/app_current_window_internal_api.cc
+++ b/extensions/browser/api/app_current_window_internal/app_current_window_internal_api.cc
@@ -122,6 +122,9 @@
 
 bool AppCurrentWindowInternalExtensionFunction::PreRunValidation(
     std::string* error) {
+  if (!UIThreadExtensionFunction::PreRunValidation(error))
+    return false;
+
   AppWindowRegistry* registry = AppWindowRegistry::Get(browser_context());
   DCHECK(registry);
   content::WebContents* web_contents = GetSenderWebContents();
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc
index a4657c9..aa2a7f87 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc
@@ -223,7 +223,7 @@
 void MimeHandlerStreamManager::EmbedderObserver::DidStartNavigation(
     content::NavigationHandle* navigation_handle) {
   // If the top level frame is navigating away, clean up the stream.
-  if (navigation_handle->IsInMainFrame())
+  if (navigation_handle->IsInMainFrame() && !navigation_handle->IsSamePage())
     AbortStream();
 }
 
diff --git a/extensions/common/api/networking_private.idl b/extensions/common/api/networking_private.idl
index 92f20fae..b1855c4 100644
--- a/extensions/common/api/networking_private.idl
+++ b/extensions/common/api/networking_private.idl
@@ -511,6 +511,7 @@
     CellularProviderProperties? ServingOperator;
     SIMLockStatus? SIMLockStatus;
     boolean? SIMPresent;
+    long? SignalStrength;
     boolean? SupportNetworkScan;
     DOMString[]? SupportedCarriers;
   };
@@ -544,6 +545,7 @@
     CellularProviderProperties? ServingOperator;
     SIMLockStatus? SIMLockStatus;
     boolean? SIMPresent;
+    long? SignalStrength;
     boolean? SupportNetworkScan;
     DOMString[]? SupportedCarriers;
   };
diff --git a/extensions/renderer/api_binding.cc b/extensions/renderer/api_binding.cc
index bf559f995..7e596719 100644
--- a/extensions/renderer/api_binding.cc
+++ b/extensions/renderer/api_binding.cc
@@ -190,36 +190,56 @@
   // GetCurrentContext() should always be correct.
   v8::Local<v8::Context> context = isolate->GetCurrentContext();
 
-  APIBindingHooks::RequestResult hooks_result =
-      APIBindingHooks::RequestResult::NOT_HANDLED;
-  hooks_result = binding_hooks_->HandleRequest(api_name_, name, context,
-                                               signature, arguments,
-                                               *type_refs_);
+  std::vector<v8::Local<v8::Value>> argument_list;
+  if (arguments->Length() > 0) {
+    // Just copying handles should never fail.
+    CHECK(arguments->GetRemaining(&argument_list));
+  }
 
-  switch (hooks_result) {
-    case APIBindingHooks::RequestResult::INVALID_INVOCATION:
-      arguments->ThrowTypeError("Invalid invocation");
-      return;
-    case APIBindingHooks::RequestResult::HANDLED:
-      return;  // Our work here is done.
-    case APIBindingHooks::RequestResult::NOT_HANDLED:
-      break;  // Handle in the default manner.
+  bool invalid_invocation = false;
+  {
+    v8::TryCatch try_catch(isolate);
+    APIBindingHooks::RequestResult hooks_result =
+        APIBindingHooks::RequestResult::NOT_HANDLED;
+    hooks_result = binding_hooks_->HandleRequest(api_name_, name, context,
+                                                 signature, &argument_list,
+                                                 *type_refs_);
+
+    switch (hooks_result) {
+      case APIBindingHooks::RequestResult::INVALID_INVOCATION:
+        invalid_invocation = true;
+        // Throw a type error below so that it's not caught by our try-catch.
+        break;
+      case APIBindingHooks::RequestResult::THROWN:
+        DCHECK(try_catch.HasCaught());
+        try_catch.ReThrow();
+        return;
+      case APIBindingHooks::RequestResult::HANDLED:
+        return;  // Our work here is done.
+      case APIBindingHooks::RequestResult::NOT_HANDLED:
+        break;  // Handle in the default manner.
+    }
+  }
+
+  if (invalid_invocation) {
+    arguments->ThrowTypeError("Invalid invocation");
+    return;
   }
 
   std::unique_ptr<base::ListValue> converted_arguments;
   v8::Local<v8::Function> callback;
-  bool conversion_success = false;
   {
     v8::TryCatch try_catch(isolate);
-    conversion_success = signature->ParseArgumentsToJSON(
-        arguments, *type_refs_, &converted_arguments, &callback, &error);
+    invalid_invocation = !signature->ParseArgumentsToJSON(
+        context, argument_list, *type_refs_,
+        &converted_arguments, &callback, &error);
     if (try_catch.HasCaught()) {
       DCHECK(!converted_arguments);
       try_catch.ReThrow();
       return;
     }
   }
-  if (!conversion_success) {
+  if (invalid_invocation) {
     arguments->ThrowTypeError("Invalid invocation");
     return;
   }
diff --git a/extensions/renderer/api_binding_hooks.cc b/extensions/renderer/api_binding_hooks.cc
index 056fe30..b46d785 100644
--- a/extensions/renderer/api_binding_hooks.cc
+++ b/extensions/renderer/api_binding_hooks.cc
@@ -22,8 +22,6 @@
 // Contains registered hooks for a single API.
 class JSHookInterface final : public gin::Wrappable<JSHookInterface> {
  public:
-  using JSHooks = std::map<std::string, v8::Global<v8::Function>>;
-
   explicit JSHookInterface(const std::string& api_name)
       : api_name_(api_name) {}
 
@@ -33,29 +31,71 @@
   gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
       v8::Isolate* isolate) override {
     return Wrappable<JSHookInterface>::GetObjectTemplateBuilder(isolate)
-        .SetMethod("setHandleRequest", &JSHookInterface::SetHandleRequest);
+        .SetMethod("setHandleRequest", &JSHookInterface::SetHandleRequest)
+        .SetMethod("setUpdateArgumentsPreValidate",
+                   &JSHookInterface::SetUpdateArgumentsPreValidate);
   }
 
-  JSHooks* js_hooks() { return &js_hooks_; }
+  void ClearHooks() {
+    handle_request_hooks_.clear();
+    pre_validation_hooks_.clear();
+  }
+
+  v8::Local<v8::Function> GetHandleRequestHook(const std::string& method_name,
+                                               v8::Isolate* isolate) const {
+    return GetHookFromMap(handle_request_hooks_, method_name, isolate);
+  }
+
+  v8::Local<v8::Function> GetPreValidationHook(const std::string& method_name,
+                                               v8::Isolate* isolate) const {
+    return GetHookFromMap(pre_validation_hooks_, method_name, isolate);
+  }
 
  private:
-  // Adds a custom hook.
-  void SetHandleRequest(v8::Isolate* isolate,
-                        const std::string& method_name,
-                        v8::Local<v8::Function> handler) {
+  using JSHooks = std::map<std::string, v8::Global<v8::Function>>;
+
+  v8::Local<v8::Function> GetHookFromMap(const JSHooks& map,
+                                         const std::string& method_name,
+                                         v8::Isolate* isolate) const {
+    auto iter = map.find(method_name);
+    if (iter == map.end())
+      return v8::Local<v8::Function>();
+    return iter->second.Get(isolate);
+  }
+
+  void AddHookToMap(JSHooks* map,
+                    v8::Isolate* isolate,
+                    const std::string& method_name,
+                    v8::Local<v8::Function> hook) {
     std::string qualified_method_name =
         base::StringPrintf("%s.%s", api_name_.c_str(), method_name.c_str());
-    v8::Global<v8::Function>& entry = js_hooks_[qualified_method_name];
+    v8::Global<v8::Function>& entry = (*map)[qualified_method_name];
     if (!entry.IsEmpty()) {
       NOTREACHED() << "Hooks can only be set once.";
       return;
     }
-    entry.Reset(isolate, handler);
+    entry.Reset(isolate, hook);
+  }
+
+  // Adds a hook to handle the implementation of the API method.
+  void SetHandleRequest(v8::Isolate* isolate,
+                        const std::string& method_name,
+                        v8::Local<v8::Function> hook) {
+    AddHookToMap(&handle_request_hooks_, isolate, method_name, hook);
+  }
+
+  // Adds a hook to update the arguments passed to the API method before we do
+  // any kind of validation.
+  void SetUpdateArgumentsPreValidate(v8::Isolate* isolate,
+                                     const std::string& method_name,
+                                     v8::Local<v8::Function> hook) {
+    AddHookToMap(&pre_validation_hooks_, isolate, method_name, hook);
   }
 
   std::string api_name_;
 
-  JSHooks js_hooks_;
+  JSHooks handle_request_hooks_;
+  JSHooks pre_validation_hooks_;
 
   DISALLOW_COPY_AND_ASSIGN(JSHookInterface);
 };
@@ -73,7 +113,7 @@
       gin::Converter<JSHookInterface*>::FromV8(
           isolate, pair.second.Get(isolate), &hooks);
       CHECK(hooks);
-      hooks->js_hooks()->clear();
+      hooks->ClearHooks();
     }
   }
 
@@ -85,9 +125,46 @@
 gin::WrapperInfo JSHookInterface::kWrapperInfo =
     {gin::kEmbedderNativeGin};
 
+// Gets the v8::Object of the JSHookInterface, optionally creating it if it
+// doesn't exist.
+v8::Local<v8::Object> GetJSHookInterfaceObject(
+    const std::string& api_name,
+    v8::Local<v8::Context> context,
+    bool should_create) {
+  gin::PerContextData* per_context_data = gin::PerContextData::From(context);
+  DCHECK(per_context_data);
+  APIHooksPerContextData* data = static_cast<APIHooksPerContextData*>(
+      per_context_data->GetUserData(kExtensionAPIHooksPerContextKey));
+  if (!data) {
+    if (!should_create)
+      return v8::Local<v8::Object>();
+
+    auto api_data =
+        base::MakeUnique<APIHooksPerContextData>(context->GetIsolate());
+    data = api_data.get();
+    per_context_data->SetUserData(kExtensionAPIHooksPerContextKey,
+                                  api_data.release());
+  }
+
+  auto iter = data->hook_interfaces.find(api_name);
+  if (iter != data->hook_interfaces.end())
+    return iter->second.Get(context->GetIsolate());
+
+  if (!should_create)
+    return v8::Local<v8::Object>();
+
+  gin::Handle<JSHookInterface> hooks =
+      gin::CreateHandle(context->GetIsolate(), new JSHookInterface(api_name));
+  CHECK(!hooks.IsEmpty());
+  v8::Local<v8::Object> hooks_object = hooks.ToV8().As<v8::Object>();
+  data->hook_interfaces[api_name].Reset(context->GetIsolate(), hooks_object);
+
+  return hooks_object;
+}
+
 }  // namespace
 
-APIBindingHooks::APIBindingHooks(const binding::RunJSFunction& run_js)
+APIBindingHooks::APIBindingHooks(const binding::RunJSFunctionSync& run_js)
     : run_js_(run_js) {}
 APIBindingHooks::~APIBindingHooks() {}
 
@@ -108,13 +185,14 @@
     const std::string& method_name,
     v8::Local<v8::Context> context,
     const APISignature* signature,
-    gin::Arguments* arguments,
+    std::vector<v8::Local<v8::Value>>* arguments,
     const ArgumentSpec::RefMap& type_refs) {
   // Easy case: a native custom hook.
   auto request_hooks_iter = request_hooks_.find(method_name);
   if (request_hooks_iter != request_hooks_.end()) {
     RequestResult result =
-        request_hooks_iter->second.Run(signature, arguments, type_refs);
+        request_hooks_iter->second.Run(
+            signature, context, arguments, type_refs);
     // Right now, it doesn't make sense to register a request handler that
     // doesn't handle the request.
     DCHECK_NE(RequestResult::NOT_HANDLED, result);
@@ -123,40 +201,53 @@
 
   // Harder case: looking up a custom hook registered on the context (since
   // these are JS, each context has a separate instance).
-  gin::PerContextData* per_context_data = gin::PerContextData::From(context);
-  DCHECK(per_context_data);
-  APIHooksPerContextData* data = static_cast<APIHooksPerContextData*>(
-      per_context_data->GetUserData(kExtensionAPIHooksPerContextKey));
-  if (!data)
+  v8::Local<v8::Object> hook_interface_object =
+      GetJSHookInterfaceObject(api_name, context, false);
+  if (hook_interface_object.IsEmpty())
     return RequestResult::NOT_HANDLED;
 
-  auto hook_interface_iter = data->hook_interfaces.find(api_name);
-  if (hook_interface_iter == data->hook_interfaces.end())
-    return RequestResult::NOT_HANDLED;
+  v8::Isolate* isolate = context->GetIsolate();
 
   JSHookInterface* hook_interface = nullptr;
   gin::Converter<JSHookInterface*>::FromV8(
-      context->GetIsolate(),
-      hook_interface_iter->second.Get(context->GetIsolate()), &hook_interface);
+      isolate,
+      hook_interface_object, &hook_interface);
   CHECK(hook_interface);
 
-  auto js_hook_iter = hook_interface->js_hooks()->find(method_name);
-  if (js_hook_iter == hook_interface->js_hooks()->end())
-    return RequestResult::NOT_HANDLED;
+  v8::Local<v8::Function> pre_validate_hook =
+      hook_interface->GetPreValidationHook(method_name, isolate);
+  if (!pre_validate_hook.IsEmpty()) {
+    v8::TryCatch try_catch(isolate);
+    // TODO(devlin): What to do with the result of this function call? Can it
+    // only fail in the case we've already thrown?
+    UpdateArguments(pre_validate_hook, context, arguments);
+    if (try_catch.HasCaught()) {
+      try_catch.ReThrow();
+      return RequestResult::THROWN;
+    }
+  }
 
-  // Found a JS handler.
-  std::vector<v8::Local<v8::Value>> v8_args;
-  std::string error;
-  if (!signature->ParseArgumentsToV8(arguments, type_refs, &v8_args, &error))
-    return RequestResult::INVALID_INVOCATION;
+  v8::Local<v8::Function> handle_request =
+      hook_interface->GetHandleRequestHook(method_name, isolate);
+  if (!handle_request.IsEmpty()) {
+    v8::TryCatch try_catch(isolate);
+    std::vector<v8::Local<v8::Value>> parsed_v8_args;
+    std::string error;
+    bool success = signature->ParseArgumentsToV8(context, *arguments, type_refs,
+                                                 &parsed_v8_args, &error);
+    if (try_catch.HasCaught()) {
+      try_catch.ReThrow();
+      return RequestResult::THROWN;
+    }
+    if (!success)
+      return RequestResult::INVALID_INVOCATION;
 
-  // TODO(devlin): Right now, this doesn't support exceptions or return values,
-  // which we will need to at some point.
-  v8::Local<v8::Function> handler =
-      js_hook_iter->second.Get(context->GetIsolate());
-  run_js_.Run(handler, context, v8_args.size(), v8_args.data());
+    run_js_.Run(handle_request, context, parsed_v8_args.size(),
+                parsed_v8_args.data());
+    return RequestResult::HANDLED;
+  }
 
-  return RequestResult::HANDLED;
+  return RequestResult::NOT_HANDLED;
 }
 
 void APIBindingHooks::InitializeInContext(
@@ -184,29 +275,33 @@
 v8::Local<v8::Object> APIBindingHooks::GetJSHookInterface(
     const std::string& api_name,
     v8::Local<v8::Context> context) {
-  gin::PerContextData* per_context_data = gin::PerContextData::From(context);
-  DCHECK(per_context_data);
-  APIHooksPerContextData* data = static_cast<APIHooksPerContextData*>(
-      per_context_data->GetUserData(kExtensionAPIHooksPerContextKey));
-  if (!data) {
-    auto api_data =
-        base::MakeUnique<APIHooksPerContextData>(context->GetIsolate());
-    data = api_data.get();
-    per_context_data->SetUserData(kExtensionAPIHooksPerContextKey,
-                                  api_data.release());
+  return GetJSHookInterfaceObject(api_name, context, true);
+}
+
+bool APIBindingHooks::UpdateArguments(
+    v8::Local<v8::Function> function,
+    v8::Local<v8::Context> context,
+    std::vector<v8::Local<v8::Value>>* arguments) {
+  v8::Global<v8::Value> global_result;
+  {
+    v8::TryCatch try_catch(context->GetIsolate());
+    global_result = run_js_.Run(function, context,
+                                arguments->size(), arguments->data());
+    if (try_catch.HasCaught()) {
+      try_catch.ReThrow();
+      return false;
+    }
   }
-
-  auto iter = data->hook_interfaces.find(api_name);
-  if (iter != data->hook_interfaces.end())
-    return iter->second.Get(context->GetIsolate());
-
-  gin::Handle<JSHookInterface> hooks =
-      gin::CreateHandle(context->GetIsolate(), new JSHookInterface(api_name));
-  CHECK(!hooks.IsEmpty());
-  v8::Local<v8::Object> hooks_object = hooks.ToV8().As<v8::Object>();
-  data->hook_interfaces[api_name].Reset(context->GetIsolate(), hooks_object);
-
-  return hooks_object;
+  DCHECK(!global_result.IsEmpty());
+  v8::Local<v8::Value> result = global_result.Get(context->GetIsolate());
+  std::vector<v8::Local<v8::Value>> new_args;
+  if (result.IsEmpty() ||
+      !gin::Converter<std::vector<v8::Local<v8::Value>>>::FromV8(
+          context->GetIsolate(), result, &new_args)) {
+    return false;
+  }
+  arguments->swap(new_args);
+  return true;
 }
 
 }  // namespace extensions
diff --git a/extensions/renderer/api_binding_hooks.h b/extensions/renderer/api_binding_hooks.h
index ffdd1686..d6620275 100644
--- a/extensions/renderer/api_binding_hooks.h
+++ b/extensions/renderer/api_binding_hooks.h
@@ -32,6 +32,7 @@
   // The result of checking for hooks to handle a request.
   enum class RequestResult {
     HANDLED,             // A custom hook handled the request.
+    THROWN,              // An exception was thrown during parsing or handling.
     INVALID_INVOCATION,  // The request was called with invalid arguments.
     NOT_HANDLED,         // The request was not handled.
   };
@@ -46,10 +47,11 @@
   // reference to the callback themselves.
   using HandleRequestHook =
       base::Callback<RequestResult(const APISignature*,
-                                   gin::Arguments*,
+                                   v8::Local<v8::Context> context,
+                                   std::vector<v8::Local<v8::Value>>*,
                                    const ArgumentSpec::RefMap&)>;
 
-  explicit APIBindingHooks(const binding::RunJSFunction& run_js);
+  explicit APIBindingHooks(const binding::RunJSFunctionSync& run_js);
   ~APIBindingHooks();
 
   // Register a custom binding to handle requests.
@@ -72,7 +74,7 @@
                               const std::string& method_name,
                               v8::Local<v8::Context> context,
                               const APISignature* signature,
-                              gin::Arguments* arguments,
+                              std::vector<v8::Local<v8::Value>>* arguments,
                               const ArgumentSpec::RefMap& type_refs);
 
   // Returns a JS interface that can be used to register hooks.
@@ -80,6 +82,12 @@
                                            v8::Local<v8::Context> context);
 
  private:
+  // Updates the |arguments| by running |function| and settings arguments to the
+  // returned result.
+  bool UpdateArguments(v8::Local<v8::Function> function,
+                       v8::Local<v8::Context> context,
+                       std::vector<v8::Local<v8::Value>>* arguments);
+
   // Whether we've tried to use any hooks associated with this object.
   bool hooks_used_ = false;
 
@@ -93,7 +101,10 @@
   // to make exception stack traces more readable.
   v8::Global<v8::String> js_resource_name_;
 
-  binding::RunJSFunction run_js_;
+  // We use synchronous JS execution here because at every point we execute JS,
+  // it's in direct response to JS calling in. There should be no reason that
+  // script is disabled.
+  binding::RunJSFunctionSync run_js_;
 
   DISALLOW_COPY_AND_ASSIGN(APIBindingHooks);
 };
diff --git a/extensions/renderer/api_binding_test_util.cc b/extensions/renderer/api_binding_test_util.cc
index 57fa7af..66cd2c35 100644
--- a/extensions/renderer/api_binding_test_util.cc
+++ b/extensions/renderer/api_binding_test_util.cc
@@ -135,6 +135,16 @@
   RunFunction(function, context, context->Global(), argc, argv);
 }
 
+v8::Global<v8::Value> RunFunctionOnGlobalAndReturnHandle(
+    v8::Local<v8::Function> function,
+    v8::Local<v8::Context> context,
+    int argc,
+    v8::Local<v8::Value> argv[]) {
+  return v8::Global<v8::Value>(
+      context->GetIsolate(),
+      RunFunction(function, context, context->Global(), argc, argv));
+}
+
 void RunFunctionAndExpectError(v8::Local<v8::Function> function,
                                v8::Local<v8::Context> context,
                                v8::Local<v8::Value> receiver,
diff --git a/extensions/renderer/api_binding_test_util.h b/extensions/renderer/api_binding_test_util.h
index 3cdfdfa..cc306e6 100644
--- a/extensions/renderer/api_binding_test_util.h
+++ b/extensions/renderer/api_binding_test_util.h
@@ -78,6 +78,13 @@
                                         int argc,
                                         v8::Local<v8::Value> argv[]);
 
+// Like RunFunctionOnGlobal(), but returns a persistent handle for the result.
+v8::Global<v8::Value> RunFunctionOnGlobalAndReturnHandle(
+    v8::Local<v8::Function> function,
+    v8::Local<v8::Context> context,
+    int argc,
+    v8::Local<v8::Value> argv[]);
+
 // Calls the given |function| with the specified |receiver| and arguments, but
 // EXPECTs the function to throw the |expected_error|.
 void RunFunctionAndExpectError(v8::Local<v8::Function> function,
diff --git a/extensions/renderer/api_binding_types.h b/extensions/renderer/api_binding_types.h
index c9edc46..9665ab1 100644
--- a/extensions/renderer/api_binding_types.h
+++ b/extensions/renderer/api_binding_types.h
@@ -21,6 +21,19 @@
                                           int argc,
                                           v8::Local<v8::Value>[])>;
 
+// A callback to execute the given v8::Function synchronously and return the
+// result. Note that script can be suspended, so you need to be certain that
+// it is not before expected a synchronous result. We use a Global instead of a
+// Local because certain implementations need to create a persistent handle in
+// order to prevent immediate destruction of the locals.
+// TODO(devlin): if we could, using Local here with an EscapableHandleScope
+// would be preferable.
+using RunJSFunctionSync =
+    base::Callback<v8::Global<v8::Value>(v8::Local<v8::Function>,
+                                         v8::Local<v8::Context>,
+                                         int argc,
+                                         v8::Local<v8::Value>[])>;
+
 }  // namespace binding
 }  // namespace extensions
 
diff --git a/extensions/renderer/api_binding_unittest.cc b/extensions/renderer/api_binding_unittest.cc
index 2eeaf2a..d526b7d 100644
--- a/extensions/renderer/api_binding_unittest.cc
+++ b/extensions/renderer/api_binding_unittest.cc
@@ -194,7 +194,7 @@
   APIBinding binding(
       "empty", nullptr, nullptr, nullptr,
       base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
-      base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
+      base::MakeUnique<APIBindingHooks>(binding::RunJSFunctionSync()), &refs);
   EXPECT_TRUE(refs.empty());
 
   v8::HandleScope handle_scope(isolate());
@@ -216,7 +216,7 @@
   APIBinding binding(
       "test", functions.get(), nullptr, nullptr,
       base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
-      base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
+      base::MakeUnique<APIBindingHooks>(binding::RunJSFunctionSync()), &refs);
   EXPECT_TRUE(refs.empty());
 
   v8::HandleScope handle_scope(isolate());
@@ -317,7 +317,7 @@
   APIBinding binding(
       "test", functions.get(), types.get(), nullptr,
       base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
-      base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
+      base::MakeUnique<APIBindingHooks>(binding::RunJSFunctionSync()), &refs);
   EXPECT_EQ(2u, refs.size());
   EXPECT_TRUE(base::ContainsKey(refs, "refObj"));
   EXPECT_TRUE(base::ContainsKey(refs, "refEnum"));
@@ -363,7 +363,7 @@
   APIBinding binding(
       "test", functions.get(), nullptr, nullptr,
       base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
-      base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
+      base::MakeUnique<APIBindingHooks>(binding::RunJSFunctionSync()), &refs);
 
   v8::HandleScope handle_scope(isolate());
   v8::Local<v8::Context> context = ContextLocal();
@@ -406,7 +406,7 @@
   APIBinding binding(
       "test", functions.get(), nullptr, events.get(),
       base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
-      base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
+      base::MakeUnique<APIBindingHooks>(binding::RunJSFunctionSync()), &refs);
 
   v8::HandleScope handle_scope(isolate());
   v8::Local<v8::Context> context = ContextLocal();
@@ -442,7 +442,7 @@
   APIBinding binding(
       "test", functions.get(), nullptr, nullptr,
       base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
-      base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
+      base::MakeUnique<APIBindingHooks>(binding::RunJSFunctionSync()), &refs);
   EXPECT_TRUE(refs.empty());
 
   v8::HandleScope handle_scope(isolate());
@@ -471,16 +471,18 @@
 
   // Register a hook for the test.oneString method.
   auto hooks = base::MakeUnique<APIBindingHooks>(
-      base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
+      base::Bind(&RunFunctionOnGlobalAndReturnHandle));
   bool did_call = false;
   auto hook = [](bool* did_call, const APISignature* signature,
-                 gin::Arguments* arguments,
+                 v8::Local<v8::Context> context,
+                 std::vector<v8::Local<v8::Value>>* arguments,
                  const ArgumentSpec::RefMap& ref_map) {
     *did_call = true;
-    EXPECT_EQ(1, arguments->Length());
-    std::string argument;
-    EXPECT_TRUE(arguments->GetNext(&argument));
-    EXPECT_EQ("foo", argument);
+    if (arguments->size() != 1u) {
+      EXPECT_EQ(1u, arguments->size());
+      return APIBindingHooks::RequestResult::HANDLED;
+    }
+    EXPECT_EQ("foo", gin::V8ToString(arguments->at(0)));
     return APIBindingHooks::RequestResult::HANDLED;
   };
   hooks->RegisterHandleRequest("test.oneString", base::Bind(hook, &did_call));
@@ -514,7 +516,7 @@
 TEST_F(APIBindingUnittest, TestJSCustomHook) {
   // Register a hook for the test.oneString method.
   auto hooks = base::MakeUnique<APIBindingHooks>(
-      base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
+      base::Bind(&RunFunctionOnGlobalAndReturnHandle));
 
   v8::HandleScope handle_scope(isolate());
   v8::Local<v8::Context> context = ContextLocal();
@@ -572,4 +574,121 @@
   ExpectPass(binding_object, "obj.stringAndInt('foo', 42);", "['foo',42]");
 }
 
+// Tests the updateArgumentsPreValidate hook.
+TEST_F(APIBindingUnittest, TestUpdateArgumentsPreValidate) {
+  // Register a hook for the test.oneString method.
+  auto hooks = base::MakeUnique<APIBindingHooks>(
+      base::Bind(&RunFunctionOnGlobalAndReturnHandle));
+
+  v8::HandleScope handle_scope(isolate());
+  v8::Local<v8::Context> context = ContextLocal();
+  const char kRegisterHook[] =
+      "(function(hooks) {\n"
+      "  hooks.setUpdateArgumentsPreValidate('oneString', function() {\n"
+      "    this.requestArguments = Array.from(arguments);\n"
+      "    if (this.requestArguments[0] === true)\n"
+      "      return ['hooked']\n"
+      "    return this.requestArguments\n"
+      "  });\n"
+      "})";
+  v8::Local<v8::String> source_string =
+      gin::StringToV8(isolate(), kRegisterHook);
+  v8::Local<v8::String> source_name =
+      gin::StringToV8(isolate(), "custom_hook");
+  hooks->RegisterJsSource(
+      v8::Global<v8::String>(isolate(), source_string),
+      v8::Global<v8::String>(isolate(), source_name));
+
+  std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions);
+  ASSERT_TRUE(functions);
+  ArgumentSpec::RefMap refs;
+
+  APIBinding binding(
+      "test", functions.get(), nullptr, nullptr,
+      base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
+      std::move(hooks), &refs);
+  EXPECT_TRUE(refs.empty());
+
+  APIEventHandler event_handler(
+      base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
+  v8::Local<v8::Object> binding_object = binding.CreateInstance(
+      context, isolate(), &event_handler, base::Bind(&AllowAllAPIs));
+
+  // Call the method with a hook. Since the hook updates arguments before
+  // validation, we should be able to pass in invalid arguments and still
+  // have the hook called.
+  ExpectFailure(binding_object, "obj.oneString(false);", kError);
+  EXPECT_EQ("[false]", GetStringPropertyFromObject(
+                           context->Global(), context, "requestArguments"));
+
+  ExpectPass(binding_object, "obj.oneString(true);", "['hooked']");
+  EXPECT_EQ("[true]", GetStringPropertyFromObject(
+                          context->Global(), context, "requestArguments"));
+
+  // Other methods, like stringAndInt(), should behave normally.
+  ExpectPass(binding_object, "obj.stringAndInt('foo', 42);", "['foo',42]");
+}
+
+// Tests the updateArgumentsPreValidate hook.
+TEST_F(APIBindingUnittest, TestThrowInUpdateArgumentsPreValidate) {
+  auto run_js_and_allow_error = [](v8::Local<v8::Function> function,
+                                   v8::Local<v8::Context> context,
+                                   int argc,
+                                   v8::Local<v8::Value> argv[]) {
+    v8::MaybeLocal<v8::Value> maybe_result =
+        function->Call(context, context->Global(), argc, argv);
+    v8::Global<v8::Value> result;
+    v8::Local<v8::Value> local;
+    if (maybe_result.ToLocal(&local))
+      result.Reset(context->GetIsolate(), local);
+    return result;
+  };
+
+  // Register a hook for the test.oneString method.
+  auto hooks = base::MakeUnique<APIBindingHooks>(
+      base::Bind(run_js_and_allow_error));
+
+  v8::HandleScope handle_scope(isolate());
+  v8::Local<v8::Context> context = ContextLocal();
+  const char kRegisterHook[] =
+      "(function(hooks) {\n"
+      "  hooks.setUpdateArgumentsPreValidate('oneString', function() {\n"
+      "    throw new Error('Custom Hook Error');\n"
+      "  });\n"
+      "})";
+  v8::Local<v8::String> source_string =
+      gin::StringToV8(isolate(), kRegisterHook);
+  v8::Local<v8::String> source_name =
+      gin::StringToV8(isolate(), "custom_hook");
+  hooks->RegisterJsSource(
+      v8::Global<v8::String>(isolate(), source_string),
+      v8::Global<v8::String>(isolate(), source_name));
+
+  std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions);
+  ASSERT_TRUE(functions);
+  ArgumentSpec::RefMap refs;
+
+  APIBinding binding(
+      "test", functions.get(), nullptr, nullptr,
+      base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
+      std::move(hooks), &refs);
+  EXPECT_TRUE(refs.empty());
+
+  APIEventHandler event_handler(
+      base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
+  v8::Local<v8::Object> binding_object = binding.CreateInstance(
+      context, isolate(), &event_handler, base::Bind(&AllowAllAPIs));
+
+  v8::Local<v8::Function> function =
+      FunctionFromString(context,
+                         "(function(obj) { return obj.oneString('ping'); })");
+  v8::Local<v8::Value> args[] = {binding_object};
+  RunFunctionAndExpectError(function, context, v8::Undefined(isolate()),
+                            arraysize(args), args,
+                            "Uncaught Error: Custom Hook Error");
+
+  // Other methods, like stringAndInt(), should behave normally.
+  ExpectPass(binding_object, "obj.stringAndInt('foo', 42);", "['foo',42]");
+}
+
 }  // namespace extensions
diff --git a/extensions/renderer/api_bindings_system.cc b/extensions/renderer/api_bindings_system.cc
index e09e8de..549eff5 100644
--- a/extensions/renderer/api_bindings_system.cc
+++ b/extensions/renderer/api_bindings_system.cc
@@ -14,12 +14,15 @@
 APIBindingsSystem::Request::Request() {}
 APIBindingsSystem::Request::~Request() {}
 
-APIBindingsSystem::APIBindingsSystem(const binding::RunJSFunction& call_js,
-                                     const GetAPISchemaMethod& get_api_schema,
-                                     const SendRequestMethod& send_request)
+APIBindingsSystem::APIBindingsSystem(
+    const binding::RunJSFunction& call_js,
+    const binding::RunJSFunctionSync& call_js_sync,
+    const GetAPISchemaMethod& get_api_schema,
+    const SendRequestMethod& send_request)
     : request_handler_(call_js),
       event_handler_(call_js),
       call_js_(call_js),
+      call_js_sync_(call_js_sync),
       get_api_schema_(get_api_schema),
       send_request_(send_request) {}
 
@@ -61,7 +64,7 @@
     hooks = std::move(iter->second);
     binding_hooks_.erase(iter);
   } else {
-    hooks = base::MakeUnique<APIBindingHooks>(call_js_);
+    hooks = base::MakeUnique<APIBindingHooks>(call_js_sync_);
   }
 
   return base::MakeUnique<APIBinding>(
@@ -87,7 +90,7 @@
       << "Hook registration must happen before creating any binding instances.";
   std::unique_ptr<APIBindingHooks>& hooks = binding_hooks_[api_name];
   if (!hooks)
-    hooks = base::MakeUnique<APIBindingHooks>(call_js_);
+    hooks = base::MakeUnique<APIBindingHooks>(call_js_sync_);
   return hooks.get();
 }
 
diff --git a/extensions/renderer/api_bindings_system.h b/extensions/renderer/api_bindings_system.h
index 1183392..5d5a7b8 100644
--- a/extensions/renderer/api_bindings_system.h
+++ b/extensions/renderer/api_bindings_system.h
@@ -49,6 +49,7 @@
       base::Callback<void(std::unique_ptr<Request>, v8::Local<v8::Context>)>;
 
   APIBindingsSystem(const binding::RunJSFunction& call_js,
+                    const binding::RunJSFunctionSync& call_js_sync,
                     const GetAPISchemaMethod& get_api_schema,
                     const SendRequestMethod& send_request);
   ~APIBindingsSystem();
@@ -112,6 +113,8 @@
 
   binding::RunJSFunction call_js_;
 
+  binding::RunJSFunctionSync call_js_sync_;
+
   // The method to retrieve the DictionaryValue describing a given extension
   // API. Curried in for testing purposes so we can use fake APIs.
   GetAPISchemaMethod get_api_schema_;
diff --git a/extensions/renderer/api_bindings_system_unittest.cc b/extensions/renderer/api_bindings_system_unittest.cc
index 214f2f6..2390607 100644
--- a/extensions/renderer/api_bindings_system_unittest.cc
+++ b/extensions/renderer/api_bindings_system_unittest.cc
@@ -98,6 +98,7 @@
     APIBindingTest::SetUp();
     bindings_system_ = base::MakeUnique<APIBindingsSystem>(
         base::Bind(&RunFunctionOnGlobalAndIgnoreResult),
+        base::Bind(&RunFunctionOnGlobalAndReturnHandle),
         base::Bind(&APIBindingsSystemTestBase::GetAPISchema,
                    base::Unretained(this)),
         base::Bind(&APIBindingsSystemTestBase::OnAPIRequest,
@@ -294,25 +295,26 @@
   v8::Local<v8::Context> context = ContextLocal();
 
   bool did_call = false;
-  auto hook = [](bool* did_call, const APISignature* signature,
-                 gin::Arguments* arguments,
+  auto hook = [](bool* did_call,
+                 const APISignature* signature, v8::Local<v8::Context> context,
+                 std::vector<v8::Local<v8::Value>>* arguments,
                  const ArgumentSpec::RefMap& type_refs) {
     *did_call = true;
-    std::string argument;
-    EXPECT_EQ(2, arguments->Length());
-    EXPECT_TRUE(arguments->GetNext(&argument));
-    EXPECT_EQ("foo", argument);
-    v8::Local<v8::Function> function;
-    EXPECT_TRUE(arguments->GetNext(&function));
-    // The above EXPECT_TRUE should really be an ASSERT, but that messes with
-    // the return type.
-    if (function.IsEmpty())
+    if (arguments->size() != 2) {  // ASSERT* messes with the return type.
+      EXPECT_EQ(2u, arguments->size());
       return APIBindingHooks::RequestResult::HANDLED;
+    }
+    std::string argument;
+    EXPECT_EQ("foo", gin::V8ToString(arguments->at(0)));
+    if (!arguments->at(1)->IsFunction()) {
+      EXPECT_TRUE(arguments->at(1)->IsFunction());
+      return APIBindingHooks::RequestResult::HANDLED;
+    }
     v8::Local<v8::String> response =
-        gin::StringToV8(arguments->isolate(), "bar");
+        gin::StringToV8(context->GetIsolate(), "bar");
     v8::Local<v8::Value> response_args[] = {response};
-    RunFunctionOnGlobal(function, arguments->isolate()->GetCurrentContext(),
-                        1, response_args);
+    RunFunctionOnGlobal(arguments->at(1).As<v8::Function>(),
+                        context, 1, response_args);
     return APIBindingHooks::RequestResult::HANDLED;
   };
 
diff --git a/extensions/renderer/api_signature.cc b/extensions/renderer/api_signature.cc
index e919543..283f407 100644
--- a/extensions/renderer/api_signature.cc
+++ b/extensions/renderer/api_signature.cc
@@ -4,6 +4,8 @@
 
 #include "extensions/renderer/api_signature.h"
 
+#include <algorithm>
+
 #include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "gin/arguments.h"
@@ -17,11 +19,12 @@
 // should *only* be used directly on the stack!
 class ArgumentParser {
  public:
-  ArgumentParser(const std::vector<std::unique_ptr<ArgumentSpec>>& signature,
-                 gin::Arguments* arguments,
+  ArgumentParser(v8::Local<v8::Context> context,
+                 const std::vector<std::unique_ptr<ArgumentSpec>>& signature,
+                 const std::vector<v8::Local<v8::Value>>& arguments,
                  const ArgumentSpec::RefMap& type_refs,
                  std::string* error)
-    : context_(arguments->isolate()->GetCurrentContext()),
+    : context_(context),
       signature_(signature),
       arguments_(arguments),
       type_refs_(type_refs),
@@ -34,6 +37,15 @@
   v8::Isolate* GetIsolate() { return context_->GetIsolate(); }
 
  private:
+  v8::Local<v8::Value> next_argument() {
+    return current_index_ < arguments_.size() ?
+        arguments_[current_index_] : v8::Local<v8::Value>();
+  }
+
+  void ConsumeArgument() {
+    current_index_ = std::min(arguments_.size(), current_index_ + 1);
+  }
+
   // Attempts to match the next argument to the given |spec|.
   // If the next argument does not match and |spec| is optional, uses a null
   // value.
@@ -55,21 +67,23 @@
 
   v8::Local<v8::Context> context_;
   const std::vector<std::unique_ptr<ArgumentSpec>>& signature_;
-  gin::Arguments* arguments_;
+  const std::vector<v8::Local<v8::Value>>& arguments_;
   const ArgumentSpec::RefMap& type_refs_;
   std::string* error_;
+  size_t current_index_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(ArgumentParser);
 };
 
 class V8ArgumentParser : public ArgumentParser {
  public:
-  V8ArgumentParser(const std::vector<std::unique_ptr<ArgumentSpec>>& signature,
-                   gin::Arguments* arguments,
+  V8ArgumentParser(v8::Local<v8::Context> context,
+                   const std::vector<std::unique_ptr<ArgumentSpec>>& signature,
+                   const std::vector<v8::Local<v8::Value>>& arguments,
                    const ArgumentSpec::RefMap& type_refs,
                    std::string* error,
                    std::vector<v8::Local<v8::Value>>* values)
-      : ArgumentParser(signature, arguments, type_refs, error),
+      : ArgumentParser(context, signature, arguments, type_refs, error),
         values_(values) {}
 
  private:
@@ -90,12 +104,13 @@
 class BaseValueArgumentParser : public ArgumentParser {
  public:
   BaseValueArgumentParser(
+      v8::Local<v8::Context> context,
       const std::vector<std::unique_ptr<ArgumentSpec>>& signature,
-      gin::Arguments* arguments,
+      const std::vector<v8::Local<v8::Value>>& arguments,
       const ArgumentSpec::RefMap& type_refs,
       std::string* error,
       base::ListValue* list_value)
-      : ArgumentParser(signature, arguments, type_refs, error),
+      : ArgumentParser(context, signature, arguments, type_refs, error),
         list_value_(list_value) {}
 
   v8::Local<v8::Function> callback() { return callback_; }
@@ -142,14 +157,14 @@
   if (signature_has_callback && !ParseCallback(*signature_.back()))
     return false;
 
-  if (!arguments_->PeekNext().IsEmpty())
+  if (current_index_ != arguments_.size())
     return false;  // Extra arguments aren't allowed.
 
   return true;
 }
 
 bool ArgumentParser::ParseArgument(const ArgumentSpec& spec) {
-  v8::Local<v8::Value> value = arguments_->PeekNext();
+  v8::Local<v8::Value> value = next_argument();
   if (value.IsEmpty() || value->IsNull() || value->IsUndefined()) {
     if (!spec.optional()) {
       *error_ = "Missing required argument: " + spec.name();
@@ -157,7 +172,7 @@
     }
     // This is safe to call even if |arguments| is at the end (which can happen
     // if n optional arguments are omitted at the end of the signature).
-    arguments_->Skip();
+    ConsumeArgument();
 
     AddNull();
     return true;
@@ -173,19 +188,19 @@
     return true;
   }
 
-  arguments_->Skip();
+  ConsumeArgument();
   AddParsedArgument(value);
   return true;
 }
 
 bool ArgumentParser::ParseCallback(const ArgumentSpec& spec) {
-  v8::Local<v8::Value> value = arguments_->PeekNext();
+  v8::Local<v8::Value> value = next_argument();
   if (value.IsEmpty() || value->IsNull() || value->IsUndefined()) {
     if (!spec.optional()) {
       *error_ = "Missing required argument: " + spec.name();
       return false;
     }
-    arguments_->Skip();
+    ConsumeArgument();
     return true;
   }
 
@@ -194,7 +209,7 @@
     return false;
   }
 
-  arguments_->Skip();
+  ConsumeArgument();
   SetCallback(value.As<v8::Function>());
   return true;
 }
@@ -212,13 +227,16 @@
 
 APISignature::~APISignature() {}
 
-bool APISignature::ParseArgumentsToV8(gin::Arguments* arguments,
-                                      const ArgumentSpec::RefMap& type_refs,
-                                      std::vector<v8::Local<v8::Value>>* v8_out,
-                                      std::string* error) const {
+bool APISignature::ParseArgumentsToV8(
+    v8::Local<v8::Context> context,
+    const std::vector<v8::Local<v8::Value>>& arguments,
+    const ArgumentSpec::RefMap& type_refs,
+    std::vector<v8::Local<v8::Value>>* v8_out,
+    std::string* error) const {
   DCHECK(v8_out);
   std::vector<v8::Local<v8::Value>> v8_values;
-  V8ArgumentParser parser(signature_, arguments, type_refs, error, &v8_values);
+  V8ArgumentParser parser(
+      context, signature_, arguments, type_refs, error, &v8_values);
   if (!parser.ParseArguments())
     return false;
   *v8_out = std::move(v8_values);
@@ -226,7 +244,8 @@
 }
 
 bool APISignature::ParseArgumentsToJSON(
-    gin::Arguments* arguments,
+    v8::Local<v8::Context> context,
+    const std::vector<v8::Local<v8::Value>>& arguments,
     const ArgumentSpec::RefMap& type_refs,
     std::unique_ptr<base::ListValue>* json_out,
     v8::Local<v8::Function>* callback_out,
@@ -235,7 +254,7 @@
   DCHECK(callback_out);
   std::unique_ptr<base::ListValue> json = base::MakeUnique<base::ListValue>();
   BaseValueArgumentParser parser(
-      signature_, arguments, type_refs, error, json.get());
+      context, signature_, arguments, type_refs, error, json.get());
   if (!parser.ParseArguments())
     return false;
   *json_out = std::move(json);
diff --git a/extensions/renderer/api_signature.h b/extensions/renderer/api_signature.h
index 0e1451d..42d25df7 100644
--- a/extensions/renderer/api_signature.h
+++ b/extensions/renderer/api_signature.h
@@ -17,10 +17,6 @@
 class ListValue;
 }
 
-namespace gin {
-class Arguments;
-}
-
 namespace extensions {
 
 // A representation of the expected signature for an API method, along with the
@@ -35,7 +31,8 @@
   // from the list of arguments passed in because it will include null-filled
   // optional arguments.
   // Returns true if the arguments were successfully parsed and converted.
-  bool ParseArgumentsToV8(gin::Arguments* arguments,
+  bool ParseArgumentsToV8(v8::Local<v8::Context> context,
+                          const std::vector<v8::Local<v8::Value>>& arguments,
                           const ArgumentSpec::RefMap& type_refs,
                           std::vector<v8::Local<v8::Value>>* args_out,
                           std::string* error) const;
@@ -44,7 +41,8 @@
   // Returns true if the arguments were successfully parsed and converted, and
   // populates |args_out| and |callback_out| with the JSON arguments and
   // callback values, respectively. On failure, returns false populates |error|.
-  bool ParseArgumentsToJSON(gin::Arguments* arguments,
+  bool ParseArgumentsToJSON(v8::Local<v8::Context> context,
+                            const std::vector<v8::Local<v8::Value>>& arguments,
                             const ArgumentSpec::RefMap& type_refs,
                             std::unique_ptr<base::ListValue>* args_out,
                             v8::Local<v8::Function>* callback_out,
diff --git a/extensions/renderer/native_extension_bindings_system.cc b/extensions/renderer/native_extension_bindings_system.cc
index f04aa91..5fdb454 100644
--- a/extensions/renderer/native_extension_bindings_system.cc
+++ b/extensions/renderer/native_extension_bindings_system.cc
@@ -82,6 +82,33 @@
   script_context->SafeCallFunction(function, argc, argv);
 }
 
+v8::Global<v8::Value> CallJsFunctionSync(v8::Local<v8::Function> function,
+                                         v8::Local<v8::Context> context,
+                                         int argc,
+                                         v8::Local<v8::Value> argv[]) {
+  bool did_complete = false;
+  v8::Global<v8::Value> result;
+  auto callback = base::Bind([](
+      v8::Isolate* isolate,
+      bool* did_complete_out,
+      v8::Global<v8::Value>* result_out,
+      const std::vector<v8::Local<v8::Value>>& results) {
+    *did_complete_out = true;
+    // The locals are released after the callback is executed, so we need to
+    // grab a persistent handle.
+    if (!results.empty() && !results[0].IsEmpty())
+      result_out->Reset(isolate, results[0]);
+  }, base::Unretained(context->GetIsolate()),
+     base::Unretained(&did_complete), base::Unretained(&result));
+
+  ScriptContext* script_context =
+      ScriptContextSet::GetContextByV8Context(context);
+  CHECK(script_context);
+  script_context->SafeCallFunction(function, argc, argv, callback);
+  CHECK(did_complete) << "expected script to execute synchronously";
+  return result;
+}
+
 // Returns the API schema indicated by |api_name|.
 const base::DictionaryValue& GetAPISchema(const std::string& api_name) {
   const base::DictionaryValue* schema =
@@ -103,6 +130,7 @@
     const SendIPCMethod& send_ipc)
     : send_ipc_(send_ipc),
       api_system_(base::Bind(&CallJsFunction),
+                  base::Bind(&CallJsFunctionSync),
                   base::Bind(&GetAPISchema),
                   base::Bind(&NativeExtensionBindingsSystem::SendRequest,
                              base::Unretained(this))),
diff --git a/extensions/renderer/native_extension_bindings_system_unittest.cc b/extensions/renderer/native_extension_bindings_system_unittest.cc
index 5045c87..fdc410d 100644
--- a/extensions/renderer/native_extension_bindings_system_unittest.cc
+++ b/extensions/renderer/native_extension_bindings_system_unittest.cc
@@ -285,6 +285,11 @@
       "    this.timeArg = time;\n"
       "    callback('active');\n"
       "  });\n"
+      "  api.apiFunctions.setUpdateArgumentsPreValidate(\n"
+      "      'setDetectionInterval', (interval) => {\n"
+      "    this.intervalArg = interval;\n"
+      "    return [50];\n"
+      "  });\n"
       "  this.hookedExtensionId = extensionId;\n"
       "  this.hookedContextType = contextType;\n"
       "  api.compiledApi.hookedApiProperty = 'someProperty';\n"
@@ -341,6 +346,30 @@
   // ...and second, that the callback was called with the proper result.
   EXPECT_EQ("\"active\"",
             GetStringPropertyFromObject(global, context, "responseState"));
+
+  // Test the updateArgumentsPreValidate hook.
+  {
+    // Call the function correctly.
+    const char kCallIdleSetInterval[] =
+        "(function() {\n"
+        "  chrome.idle.setDetectionInterval(20);\n"
+        "});";
+
+    v8::Local<v8::Function> call_idle_set_interval =
+        FunctionFromString(context, kCallIdleSetInterval);
+    RunFunctionOnGlobal(call_idle_set_interval, context, 0, nullptr);
+  }
+
+  // Since we don't have a custom request handler, the hook should have only
+  // updated the arguments. The request then should have gone to the browser
+  // normally.
+  EXPECT_EQ("20", GetStringPropertyFromObject(global, context, "intervalArg"));
+  EXPECT_EQ(extension->id(), last_params().extension_id);
+  EXPECT_EQ("idle.setDetectionInterval", last_params().name);
+  EXPECT_EQ(extension->url(), last_params().source_url);
+  EXPECT_FALSE(last_params().has_callback);
+  EXPECT_TRUE(
+      last_params().arguments.Equals(ListValueFromString("[50]").get()));
 }
 
 }  // namespace extensions
diff --git a/gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc b/gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc
index 364fb155..45e14de 100644
--- a/gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc
+++ b/gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc
@@ -29,6 +29,20 @@
     TexSubImage,
 };
 
+struct FormatType {
+  GLenum internal_format;
+  GLenum format;
+  GLenum type;
+};
+
+static const char* kSimpleVertexShaderES2 =
+    "attribute vec2 a_position;\n"
+    "varying vec2 v_texCoord;\n"
+    "void main() {\n"
+    "  gl_Position = vec4(a_position.x, a_position.y, 0.0, 1.0);\n"
+    "  v_texCoord = (a_position + vec2(1.0, 1.0)) * 0.5;\n"
+    "}\n";
+
 static const char* kSimpleVertexShaderES3 =
     "#version 300 es\n"
     "in vec2 a_position;\n"
@@ -38,11 +52,22 @@
     "  v_texCoord = (a_position + vec2(1.0, 1.0)) * 0.5;\n"
     "}\n";
 
-std::string GetFragmentShaderSource(GLenum format) {
+std::string GetFragmentShaderSource(GLenum format, bool is_es3) {
   std::string source;
-  source += std::string(
-      "#version 300 es\n"
-      "precision mediump float;\n");
+  if (is_es3) {
+    source +=
+        "#version 300 es\n"
+        "#define VARYING in\n"
+        "#define FRAGCOLOR frag_color\n"
+        "#define TextureLookup texture\n";
+  } else {
+    source +=
+        "#define VARYING varying\n"
+        "#define FRAGCOLOR gl_FragColor\n"
+        "#define TextureLookup texture2D\n";
+  }
+  source += "precision mediump float;\n";
+
   if (gles2::GLES2Util::IsSignedIntegerFormat(format)) {
     source += std::string("#define SamplerType isampler2D\n");
     source += std::string("#define TextureType ivec4\n");
@@ -57,13 +82,15 @@
     source += std::string("#define ScaleValue 1.0\n");
   }
 
+  if (is_es3)
+    source += "out vec4 frag_color;\n";
+
   source += std::string(
       "uniform mediump SamplerType u_texture;\n"
-      "in vec2 v_texCoord;\n"
-      "out vec4 fragData;\n"
+      "VARYING vec2 v_texCoord;\n"
       "void main() {\n"
-      "  TextureType color = texture(u_texture, v_texCoord);\n"
-      "  fragData = vec4(color) / ScaleValue;\n"
+      "  TextureType color = TextureLookup(u_texture, v_texCoord);\n"
+      "  FRAGCOLOR = vec4(color) / ScaleValue;\n"
       "}\n");
   return source;
 }
@@ -190,7 +217,6 @@
     : public testing::Test,
       public ::testing::WithParamInterface<CopyType> {
  protected:
-
   void CreateAndBindDestinationTextureAndFBO(GLenum target) {
     glGenTextures(2, textures_);
     glBindTexture(target, textures_[1]);
@@ -209,7 +235,12 @@
   }
 
   void SetUp() override {
-    gl_.Initialize(GLManager::Options());
+    GLManager::Options options;
+    options.size = gfx::Size(64, 64);
+    gl_.Initialize(options);
+
+    width_ = 8;
+    height_ = 8;
   }
 
   void TearDown() override { gl_.Destroy(); }
@@ -225,6 +256,25 @@
     }
   }
 
+  GLuint CreateDrawingTexture(GLenum target, GLsizei width, GLsizei height) {
+    GLuint texture = 0;
+    glGenTextures(1, &texture);
+    glBindTexture(target, texture);
+    glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    CreateBackingForTexture(GL_TEXTURE_2D, width, height);
+    return texture;
+  }
+
+  GLuint CreateDrawingFBO(GLenum target, GLuint texture) {
+    GLuint framebuffer = 0;
+    glGenFramebuffers(1, &framebuffer);
+    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
+    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target,
+                           texture, 0);
+    return framebuffer;
+  }
+
   GLenum ExtractFormatFrom(GLenum internalformat) {
     switch (internalformat) {
       case GL_RGBA8_OES:
@@ -239,8 +289,96 @@
     }
   }
 
+  void RunCopyTexture(GLenum target,
+                      CopyType copy_type,
+                      FormatType src_format_type,
+                      GLint source_level,
+                      FormatType dest_format_type,
+                      GLint dest_level,
+                      bool is_es3) {
+    const int src_channel_count = gles2::GLES2Util::ElementsPerGroup(
+        src_format_type.format, src_format_type.type);
+    uint8_t color[4] = {1u, 63u, 127u, 255u};
+    std::unique_ptr<uint8_t[]> pixels(new uint8_t[width_ * height_ * 4]);
+    for (int i = 0; i < width_ * height_ * src_channel_count;
+         i += src_channel_count)
+      for (int j = 0; j < src_channel_count; ++j)
+        pixels[i + j] = color[j];
+    uint8_t expected_color[4];
+    uint8_t mask[4];
+    getExpectedColor(src_format_type.internal_format,
+                     dest_format_type.internal_format, color, expected_color,
+                     mask);
+
+    glGenTextures(2, textures_);
+    glBindTexture(target, textures_[0]);
+    glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    glTexImage2D(target, source_level, src_format_type.internal_format, width_,
+                 height_, 0, src_format_type.format, src_format_type.type,
+                 pixels.get());
+    EXPECT_TRUE(glGetError() == GL_NO_ERROR);
+    glBindTexture(target, textures_[1]);
+    glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    EXPECT_TRUE(glGetError() == GL_NO_ERROR);
+
+    // TODO(qiankun.miao@intel.com): Upgrade glCopyTextureCHROMIUM and
+    // glCopySubTextureCHROMIUM to support copying from level > 0 of source
+    // texture to level > 0 of dest texture.
+    if (copy_type == TexImage) {
+      glCopyTextureCHROMIUM(textures_[0], textures_[1],
+                            dest_format_type.internal_format,
+                            dest_format_type.type, false, false, false);
+    } else {
+      glBindTexture(target, textures_[1]);
+      glTexImage2D(target, dest_level, dest_format_type.internal_format, width_,
+                   height_, 0, dest_format_type.format, dest_format_type.type,
+                   nullptr);
+
+      glCopySubTextureCHROMIUM(textures_[0], textures_[1], 0, 0, 0, 0, width_,
+                               height_, false, false, false);
+    }
+    EXPECT_TRUE(glGetError() == GL_NO_ERROR);
+
+    // Draw destination texture to a fbo with a texture attachment in RGBA
+    // format.
+    GLuint texture = CreateDrawingTexture(target, width_, height_);
+    GLuint framebuffer = CreateDrawingFBO(target, texture);
+    EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
+              glCheckFramebufferStatus(GL_FRAMEBUFFER));
+    glViewport(0, 0, width_, height_);
+
+    glBindTexture(target, textures_[1]);
+    std::string fragment_shader_source =
+        GetFragmentShaderSource(dest_format_type.internal_format, is_es3);
+    // TODO(qiankun.miao@intel.com): Support drawing from level > 0 of a
+    // texture.
+    GLTestHelper::DrawTextureQuad(
+        is_es3 ? kSimpleVertexShaderES3 : kSimpleVertexShaderES2,
+        fragment_shader_source.c_str(), "a_position", "u_texture");
+    EXPECT_TRUE(GL_NO_ERROR == glGetError());
+
+    uint8_t tolerance = dest_format_type.internal_format == GL_RGBA4 ? 20 : 7;
+    EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, width_, height_, tolerance,
+                                          expected_color, mask))
+        << " src_internal_format: "
+        << gles2::GLES2Util::GetStringEnum(src_format_type.internal_format)
+        << " source_level: " << source_level
+        << " dest_internal_format: "
+        << gles2::GLES2Util::GetStringEnum(dest_format_type.internal_format)
+        << " dest_level: " << dest_level;
+
+    glDeleteTextures(1, &texture);
+    glDeleteFramebuffers(1, &framebuffer);
+    glDeleteTextures(2, textures_);
+  }
+
   GLManager gl_;
   GLuint textures_[2];
+  GLsizei width_;
+  GLsizei height_;
   GLuint framebuffer_id_;
 };
 
@@ -251,6 +389,9 @@
     options.context_type = gles2::CONTEXT_TYPE_OPENGLES3;
     options.size = gfx::Size(64, 64);
     gl_.Initialize(options);
+
+    width_ = 8;
+    height_ = 8;
   }
 
   // If a driver isn't capable of supporting ES3 context, creating
@@ -345,12 +486,6 @@
     return;
   CopyType copy_type = GetParam();
 
-  struct FormatType {
-    GLenum internal_format;
-    GLenum format;
-    GLenum type;
-  };
-
   FormatType src_format_types[] = {
       {GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE},
       {GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE},
@@ -427,86 +562,8 @@
       if (dest_format_type.internal_format == GL_RGB5_A1 && ShouldSkipRGB5_A1())
         continue;
 
-      const GLsizei kWidth = 8, kHeight = 8;
-      const int src_channel_count = gles2::GLES2Util::ElementsPerGroup(
-          src_format_type.format, src_format_type.type);
-      uint8_t color[4] = {1, 63, 127, 255};
-      uint8_t pixels[8 * 8 * 4];
-      for (int i = 0; i < kWidth * kHeight * src_channel_count;
-           i += src_channel_count)
-        for (int j = 0; j < src_channel_count; ++j)
-          pixels[i + j] = color[j];
-      uint8_t expected_color[4];
-      uint8_t mask[4];
-      getExpectedColor(src_format_type.internal_format,
-                       dest_format_type.internal_format, color, expected_color,
-                       mask);
-
-      CreateAndBindDestinationTextureAndFBO(GL_TEXTURE_2D);
-      glBindTexture(GL_TEXTURE_2D, textures_[0]);
-      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-      glTexImage2D(GL_TEXTURE_2D, 0, src_format_type.internal_format, kWidth,
-                   kHeight, 0, src_format_type.format, src_format_type.type,
-                   pixels);
-
-      EXPECT_TRUE(glGetError() == GL_NO_ERROR);
-      if (copy_type == TexImage) {
-        glCopyTextureCHROMIUM(textures_[0], textures_[1],
-                              dest_format_type.internal_format,
-                              dest_format_type.type, false, false, false);
-      } else {
-        glBindTexture(GL_TEXTURE_2D, textures_[1]);
-        glTexImage2D(GL_TEXTURE_2D, 0, dest_format_type.internal_format, kWidth,
-                     kHeight, 0, dest_format_type.format, dest_format_type.type,
-                     nullptr);
-
-        glCopySubTextureCHROMIUM(textures_[0], textures_[1], 0, 0, 0, 0, kWidth,
-                                 kHeight, false, false, false);
-      }
-      EXPECT_TRUE(glGetError() == GL_NO_ERROR)
-          << " src_internal_format: "
-          << gles2::GLES2Util::GetStringEnum(src_format_type.internal_format)
-          << " dest_internal_format: "
-          << gles2::GLES2Util::GetStringEnum(dest_format_type.internal_format);
-
-      // Draw destination texture to a fbo with attachment in RGBA format.
-      glBindFramebuffer(GL_FRAMEBUFFER, 0);
-      GLuint framebuffer = 0;
-      glGenFramebuffers(1, &framebuffer);
-      glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
-      GLuint texture = 0;
-      glGenTextures(1, &texture);
-      glBindTexture(GL_TEXTURE_2D, texture);
-      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-      CreateBackingForTexture(GL_TEXTURE_2D, kWidth, kHeight);
-      glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
-                             GL_TEXTURE_2D, texture, 0);
-      EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
-                glCheckFramebufferStatus(GL_FRAMEBUFFER));
-      glViewport(0, 0, kWidth, kHeight);
-
-      glBindTexture(GL_TEXTURE_2D, textures_[1]);
-      std::string fragment_shader_source =
-          GetFragmentShaderSource(dest_format_type.internal_format);
-      GLTestHelper::DrawTextureQuad(kSimpleVertexShaderES3,
-                                    fragment_shader_source.c_str(),
-                                    "a_position", "u_texture");
-
-      uint8_t tolerance = dest_format_type.internal_format == GL_RGBA4 ? 20 : 7;
-      EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kWidth, kHeight, tolerance,
-                                            expected_color, mask))
-          << " src_internal_format: "
-          << gles2::GLES2Util::GetStringEnum(src_format_type.internal_format)
-          << " dest_internal_format: "
-          << gles2::GLES2Util::GetStringEnum(dest_format_type.internal_format);
-      EXPECT_TRUE(GL_NO_ERROR == glGetError());
-
-      glDeleteTextures(1, &texture);
-      glDeleteFramebuffers(1, &framebuffer);
-      glDeleteTextures(2, textures_);
-      glDeleteFramebuffers(1, &framebuffer_id_);
+      RunCopyTexture(GL_TEXTURE_2D, copy_type, src_format_type, 0,
+                     dest_format_type, 0, true);
     }
   }
 }
@@ -660,6 +717,51 @@
   glDeleteFramebuffers(1, &framebuffer_id_);
 }
 
+TEST_P(GLCopyTextureCHROMIUMTest, CopyTextureLevel) {
+  CopyType copy_type = GetParam();
+
+  // Copy from RGB source texture to dest texture.
+  FormatType src_format_type = {GL_RGB, GL_RGB, GL_UNSIGNED_BYTE};
+  FormatType dest_format_types[] = {
+      {GL_RGB, GL_RGB, GL_UNSIGNED_BYTE},
+      {GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE},
+  };
+  // Source level must be 0 in ES2 context.
+  GLint source_level = 0;
+
+  // TODO(qiankun.miao@intel.com): Support level > 0.
+  for (GLint dest_level = 0; dest_level < 1; dest_level++) {
+    for (auto dest_format_type : dest_format_types) {
+      RunCopyTexture(GL_TEXTURE_2D, copy_type, src_format_type, source_level,
+                     dest_format_type, dest_level, false);
+    }
+  }
+}
+
+TEST_P(GLCopyTextureCHROMIUMES3Test, CopyTextureLevel) {
+  if (ShouldSkipTest())
+    return;
+  CopyType copy_type = GetParam();
+
+  // Copy from RGBA source texture to dest texture.
+  FormatType src_format_type = {GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE};
+  FormatType dest_format_types[] = {
+      {GL_RGB8UI, GL_RGB_INTEGER, GL_UNSIGNED_BYTE},
+      {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE},
+      {GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE},
+  };
+
+  // TODO(qiankun.miao@intel.com): Support level > 0.
+  for (GLint source_level = 0; source_level < 1; source_level++) {
+    for (GLint dest_level = 0; dest_level < 1; dest_level++) {
+      for (auto dest_format_type : dest_format_types) {
+        RunCopyTexture(GL_TEXTURE_2D, copy_type, src_format_type, source_level,
+                       dest_format_type, dest_level, true);
+      }
+    }
+  }
+}
+
 // Test to ensure that the destination texture is redefined if the properties
 // are different.
 TEST_F(GLCopyTextureCHROMIUMTest, RedefineDestinationTexture) {
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index 730d141..05ed29a 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -885,9 +885,6 @@
       <message name="IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_TITLE" desc="The title of the Keep Data Separate option on the Import Data settings screen. [60em]">
         Keep my data separate
       </message>
-      <message name="IDS_IOS_OPTIONS_IMPORT_DATA_TITLE" desc="The title of the Import Data settings screen. [30em]">
-        Import Data?
-      </message>
       <message name="IDS_IOS_OPTIONS_PRELOAD_WEBPAGES" desc="Title for opening the setting for if/when to preload webpages. [Length: 20em] [iOS only]">
         Preload Webpages
       </message>
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h
index 658fc56..20acfa77 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h
@@ -58,6 +58,8 @@
       const base::Closure& done_callback) override;
   void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
   std::unique_ptr<metrics::MetricsLogUploader> CreateUploader(
+      const std::string& server_url,
+      const std::string& mime_type,
       const base::Callback<void(int)>& on_upload_complete) override;
   base::TimeDelta GetStandardUploadInterval() override;
   base::string16 GetRegistryBackupKey() override;
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
index eebf255..43fee09c 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
@@ -151,11 +151,12 @@
 
 std::unique_ptr<metrics::MetricsLogUploader>
 IOSChromeMetricsServiceClient::CreateUploader(
+    const std::string& server_url,
+    const std::string& mime_type,
     const base::Callback<void(int)>& on_upload_complete) {
   return base::MakeUnique<metrics::NetMetricsLogUploader>(
       GetApplicationContext()->GetSystemURLRequestContext(),
-      metrics::kDefaultMetricsServerUrl, metrics::kDefaultMetricsMimeType,
-      on_upload_complete);
+      server_url, mime_type, on_upload_complete);
 }
 
 base::TimeDelta IOSChromeMetricsServiceClient::GetStandardUploadInterval() {
diff --git a/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm b/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm
index 79f37047..0d126ef 100644
--- a/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm
@@ -67,7 +67,6 @@
     _isSignedIn = isSignedIn;
     _shouldClearData = isSignedIn ? SHOULD_CLEAR_DATA_CLEAR_DATA
                                   : SHOULD_CLEAR_DATA_MERGE_DATA;
-    self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_TITLE);
     [self setShouldHideDoneButton:YES];
     self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
         initWithTitle:l10n_util::GetNSString(
@@ -92,11 +91,18 @@
 
   [model addSectionWithIdentifier:SectionIdentifierOptions];
   _importDataItem.reset([[self importDataItem] retain]);
-  [model addItem:_importDataItem
-      toSectionWithIdentifier:SectionIdentifierOptions];
   _keepDataSeparateItem.reset([[self keepDataSeparateItem] retain]);
-  [model addItem:_keepDataSeparateItem
-      toSectionWithIdentifier:SectionIdentifierOptions];
+  if (_isSignedIn) {
+    [model addItem:_keepDataSeparateItem
+        toSectionWithIdentifier:SectionIdentifierOptions];
+    [model addItem:_importDataItem
+        toSectionWithIdentifier:SectionIdentifierOptions];
+  } else {
+    [model addItem:_importDataItem
+        toSectionWithIdentifier:SectionIdentifierOptions];
+    [model addItem:_keepDataSeparateItem
+        toSectionWithIdentifier:SectionIdentifierOptions];
+  }
 }
 
 #pragma mark Items
diff --git a/ios/chrome/browser/ui/settings/import_data_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/import_data_collection_view_controller_unittest.mm
index 95194b3..1ce510a2 100644
--- a/ios/chrome/browser/ui/settings/import_data_collection_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/import_data_collection_view_controller_unittest.mm
@@ -75,17 +75,17 @@
       item.text);
   EXPECT_EQ(2, NumberOfItemsInSection(1));
   CheckTextCellTitleAndSubtitle(
-      l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_TITLE),
-      l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_SUBTITLE,
-                              base::SysNSStringToUTF16(@"toEmail@gmail.com")),
-      1, 0);
-  CheckAccessoryType(MDCCollectionViewCellAccessoryNone, 1, 0);
-  CheckTextCellTitleAndSubtitle(
       l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_TITLE),
       l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_KEEP_SUBTITLE_SWITCH,
                               base::SysNSStringToUTF16(@"fromEmail@gmail.com")),
+      1, 0);
+  CheckAccessoryType(MDCCollectionViewCellAccessoryCheckmark, 1, 0);
+  CheckTextCellTitleAndSubtitle(
+      l10n_util::GetNSString(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_TITLE),
+      l10n_util::GetNSStringF(IDS_IOS_OPTIONS_IMPORT_DATA_IMPORT_SUBTITLE,
+                              base::SysNSStringToUTF16(@"toEmail@gmail.com")),
       1, 1);
-  CheckAccessoryType(MDCCollectionViewCellAccessoryCheckmark, 1, 1);
+  CheckAccessoryType(MDCCollectionViewCellAccessoryNone, 1, 1);
 }
 
 TEST_F(ImportDataCollectionViewControllerTest, TestModelSignedOut) {
diff --git a/ios/chrome/today_extension/today_metrics_logger.mm b/ios/chrome/today_extension/today_metrics_logger.mm
index 859b9b2..e48119b 100644
--- a/ios/chrome/today_extension/today_metrics_logger.mm
+++ b/ios/chrome/today_extension/today_metrics_logger.mm
@@ -67,6 +67,8 @@
       const base::Closure& done_callback) override;
   void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
   std::unique_ptr<metrics::MetricsLogUploader> CreateUploader(
+      const std::string& server_url,
+      const std::string& mime_type,
       const base::Callback<void(int)>& on_upload_complete) override;
   base::TimeDelta GetStandardUploadInterval() override;
 
@@ -149,6 +151,8 @@
 
 std::unique_ptr<metrics::MetricsLogUploader>
 TodayMetricsServiceClient::CreateUploader(
+    const std::string& server_url,
+    const std::string& mime_type,
     const base::Callback<void(int)>& on_upload_complete) {
   NOTREACHED();
   return nullptr;
diff --git a/media/blink/video_frame_compositor.cc b/media/blink/video_frame_compositor.cc
index 7bc98164..017bedc9 100644
--- a/media/blink/video_frame_compositor.cc
+++ b/media/blink/video_frame_compositor.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/message_loop/message_loop.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/time/default_tick_clock.h"
 #include "base/trace_event/auto_open_close_event.h"
 #include "base/trace_event/trace_event.h"
@@ -188,6 +189,11 @@
   return current_frame_->timestamp();
 }
 
+void VideoFrameCompositor::SetForegroundTime(base::TimeTicks when) {
+  DCHECK(compositor_task_runner_->BelongsToCurrentThread());
+  foreground_time_ = when;
+}
+
 bool VideoFrameCompositor::ProcessNewFrame(
     const scoped_refptr<VideoFrame>& frame,
     bool repaint_duplicate_frame) {
@@ -203,6 +209,15 @@
   rendered_last_frame_ = false;
 
   current_frame_ = frame;
+
+  if (!foreground_time_.is_null()) {
+    base::TimeDelta time_to_first_frame =
+        base::TimeTicks::Now() - foreground_time_;
+    UMA_HISTOGRAM_TIMES("Media.Video.TimeFromForegroundToFirstFrame",
+                        time_to_first_frame);
+    foreground_time_ = base::TimeTicks();
+  }
+
   return true;
 }
 
diff --git a/media/blink/video_frame_compositor.h b/media/blink/video_frame_compositor.h
index 31857c9e..03fb4c5 100644
--- a/media/blink/video_frame_compositor.h
+++ b/media/blink/video_frame_compositor.h
@@ -103,6 +103,11 @@
   // PaintSingleFrame() is not also called while stopped.)
   base::TimeDelta GetCurrentFrameTimestamp() const;
 
+  // Called when the media player is brought to the foreground.
+  // Used to record the time it takes to process the first frame after that.
+  // Must be called on the compositor thread.
+  void SetForegroundTime(base::TimeTicks when);
+
   void set_tick_clock_for_testing(std::unique_ptr<base::TickClock> tick_clock) {
     tick_clock_ = std::move(tick_clock);
   }
@@ -157,6 +162,7 @@
   bool new_background_frame_;
   base::TimeDelta last_interval_;
   base::TimeTicks last_background_render_;
+  base::TimeTicks foreground_time_;
 
   // These values are set on the compositor thread, but also read on the media
   // thread when the VFC is stopped.
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index b6a56c2..a1d7bb8e 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -1354,6 +1354,11 @@
   if (watch_time_reporter_)
     watch_time_reporter_->OnShown();
 
+  compositor_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&VideoFrameCompositor::SetForegroundTime,
+                 base::Unretained(compositor_), base::TimeTicks::Now()));
+
   if (IsBackgroundVideoTrackOptimizationEnabled() &&
       client_->hasSelectedVideoTrack()) {
     WebMediaPlayer::TrackId trackId = client_->getSelectedVideoTrackId();
diff --git a/media/muxers/webm_muxer.cc b/media/muxers/webm_muxer.cc
index 9a4819a4..0dc0720 100644
--- a/media/muxers/webm_muxer.cc
+++ b/media/muxers/webm_muxer.cc
@@ -12,7 +12,6 @@
 #include "media/base/limits.h"
 #include "media/base/video_frame.h"
 #include "media/filters/opus_constants.h"
-#include "ui/gfx/geometry/size.h"
 
 namespace media {
 
@@ -57,14 +56,12 @@
   }
 }
 
-static double GetFrameRate(const scoped_refptr<VideoFrame>& video_frame) {
+static double GetFrameRate(const WebmMuxer::VideoParameters& params) {
   const double kZeroFrameRate = 0.0;
   const double kDefaultFrameRate = 30.0;
 
-  double frame_rate = kDefaultFrameRate;
-  if (!video_frame->metadata()->GetDouble(VideoFrameMetadata::FRAME_RATE,
-                                          &frame_rate) ||
-      frame_rate <= kZeroFrameRate ||
+  double frame_rate = params.frame_rate;
+  if (frame_rate <= kZeroFrameRate ||
       frame_rate > media::limits::kMaxFramesPerSecond) {
     frame_rate = kDefaultFrameRate;
   }
@@ -89,6 +86,16 @@
 
 }  // anonymous namespace
 
+WebmMuxer::VideoParameters::VideoParameters(
+    scoped_refptr<media::VideoFrame> frame) {
+  visible_rect_size = frame->visible_rect().size();
+  frame_rate = 0.0;
+  ignore_result(frame->metadata()->GetDouble(VideoFrameMetadata::FRAME_RATE,
+                                             &frame_rate));
+}
+
+WebmMuxer::VideoParameters::~VideoParameters() {}
+
 WebmMuxer::WebmMuxer(VideoCodec codec,
                      bool has_video,
                      bool has_audio,
@@ -124,7 +131,7 @@
   segment_.Finalize();
 }
 
-void WebmMuxer::OnEncodedVideo(const scoped_refptr<VideoFrame>& video_frame,
+void WebmMuxer::OnEncodedVideo(const VideoParameters& params,
                                std::unique_ptr<std::string> encoded_data,
                                base::TimeTicks timestamp,
                                bool is_key_frame) {
@@ -134,8 +141,7 @@
   if (!video_track_index_) {
     // |track_index_|, cannot be zero (!), initialize WebmMuxer in that case.
     // http://www.matroska.org/technical/specs/index.html#Tracks
-    AddVideoTrack(video_frame->visible_rect().size(),
-                  GetFrameRate(video_frame));
+    AddVideoTrack(params.visible_rect_size, GetFrameRate(params));
     if (first_frame_timestamp_video_.is_null())
       first_frame_timestamp_video_ = timestamp;
   }
diff --git a/media/muxers/webm_muxer.h b/media/muxers/webm_muxer.h
index afd8176..e019983 100644
--- a/media/muxers/webm_muxer.h
+++ b/media/muxers/webm_muxer.h
@@ -20,6 +20,7 @@
 #include "media/base/media_export.h"
 #include "media/base/video_codecs.h"
 #include "third_party/libwebm/source/mkvmuxer.hpp"
+#include "ui/gfx/geometry/size.h"
 
 namespace gfx {
 class Size;
@@ -47,6 +48,15 @@
   // either any file header or a SingleBlock.
   using WriteDataCB = base::Callback<void(base::StringPiece)>;
 
+  // Container for the parameters that muxer uses that is extracted from
+  // media::VideoFrame.
+  struct MEDIA_EXPORT VideoParameters {
+    VideoParameters(scoped_refptr<media::VideoFrame> frame);
+    ~VideoParameters();
+    gfx::Size visible_rect_size;
+    double frame_rate;
+  };
+
   // |codec| can be VP8 or VP9 and should coincide with whatever is sent in
   // OnEncodedVideo().
   WebmMuxer(VideoCodec codec,
@@ -57,7 +67,7 @@
 
   // Functions to add video and audio frames with |encoded_data.data()|
   // to WebM Segment.
-  void OnEncodedVideo(const scoped_refptr<VideoFrame>& video_frame,
+  void OnEncodedVideo(const VideoParameters& params,
                       std::unique_ptr<std::string> encoded_data,
                       base::TimeTicks timestamp,
                       bool is_key_frame);
diff --git a/media/muxers/webm_muxer_fuzzertest.cc b/media/muxers/webm_muxer_fuzzertest.cc
index 9d74b1d..6193f3ad 100644
--- a/media/muxers/webm_muxer_fuzzertest.cc
+++ b/media/muxers/webm_muxer_fuzzertest.cc
@@ -65,7 +65,8 @@
         const auto visible_rect = gfx::Size(16 + rng() % 128, 16 + rng() % 128);
         const auto video_frame = VideoFrame::CreateBlackFrame(visible_rect);
         const auto is_key_frame = rng() % 2;
-        muxer.OnEncodedVideo(video_frame, base::MakeUnique<std::string>(str),
+        muxer.OnEncodedVideo(WebmMuxer::VideoParameters(video_frame),
+                             base::MakeUnique<std::string>(str),
                              base::TimeTicks(), is_key_frame);
         base::RunLoop run_loop;
         run_loop.RunUntilIdle();
diff --git a/media/muxers/webm_muxer_unittest.cc b/media/muxers/webm_muxer_unittest.cc
index 75a698a..a65a885 100644
--- a/media/muxers/webm_muxer_unittest.cc
+++ b/media/muxers/webm_muxer_unittest.cc
@@ -109,7 +109,7 @@
       .Times(AtLeast(1))
       .WillRepeatedly(
           WithArgs<0>(Invoke(this, &WebmMuxerTest::SaveEncodedDataLen)));
-  webm_muxer_.OnEncodedVideo(video_frame,
+  webm_muxer_.OnEncodedVideo(WebmMuxer::VideoParameters(video_frame),
                              base::WrapUnique(new std::string(encoded_data)),
                              base::TimeTicks::Now(), false /* keyframe */);
 
@@ -199,13 +199,13 @@
   const scoped_refptr<VideoFrame> video_frame =
       VideoFrame::CreateBlackFrame(frame_size);
   const std::string encoded_video("thisisanencodedvideopacket");
-  webm_muxer_.OnEncodedVideo(video_frame,
+  webm_muxer_.OnEncodedVideo(WebmMuxer::VideoParameters(video_frame),
                              base::WrapUnique(new std::string(encoded_video)),
                              base::TimeTicks::Now(), true /* keyframe */);
   // A few encoded non key frames.
   const int kNumNonKeyFrames = 2;
   for (int i = 0; i < kNumNonKeyFrames; ++i) {
-    webm_muxer_.OnEncodedVideo(video_frame,
+    webm_muxer_.OnEncodedVideo(WebmMuxer::VideoParameters(video_frame),
                                base::WrapUnique(new std::string(encoded_video)),
                                base::TimeTicks::Now(), false /* keyframe */);
   }
diff --git a/net/base/escape.cc b/net/base/escape.cc
index 9f22778..65a23c1c 100644
--- a/net/base/escape.cc
+++ b/net/base/escape.cc
@@ -4,13 +4,8 @@
 
 #include "net/base/escape.h"
 
-#include <algorithm>
-#include <memory>
-
 #include "base/logging.h"
-#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
-#include "base/strings/utf_offset_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 
 namespace net {
@@ -41,7 +36,7 @@
 // to +, otherwise, if spaces are in the charmap, they are converted to
 // %20. And if keep_escaped is true, %XX will be kept as it is, otherwise, if
 // '%' is in the charmap, it is converted to %25.
-std::string Escape(const std::string& text,
+std::string Escape(base::StringPiece text,
                    const Charmap& charmap,
                    bool use_plus,
                    bool keep_escaped = false) {
@@ -106,8 +101,8 @@
 // Attempts to unescape the sequence at |index| within |escaped_text|.  If
 // successful, sets |value| to the unescaped value.  Returns whether
 // unescaping succeeded.
-template<typename STR>
-bool UnescapeUnsignedCharAtIndex(const STR& escaped_text,
+template <typename STR>
+bool UnescapeUnsignedCharAtIndex(STR escaped_text,
                                  size_t index,
                                  unsigned char* value) {
   if ((index + 2) >= escaped_text.size())
@@ -128,8 +123,8 @@
 
 // Returns true if there is an Arabic Language Mark at |index|. |first_byte|
 // is the byte at |index|.
-template<typename STR>
-bool HasArabicLanguageMarkAtIndex(const STR& escaped_text,
+template <typename STR>
+bool HasArabicLanguageMarkAtIndex(STR escaped_text,
                                   unsigned char first_byte,
                                   size_t index) {
   if (first_byte != 0xD8)
@@ -142,8 +137,8 @@
 
 // Returns true if there is a BiDi control char at |index|. |first_byte| is the
 // byte at |index|.
-template<typename STR>
-bool HasThreeByteBidiControlCharAtIndex(const STR& escaped_text,
+template <typename STR>
+bool HasThreeByteBidiControlCharAtIndex(STR escaped_text,
                                         unsigned char first_byte,
                                         size_t index) {
   if (first_byte != 0xE2)
@@ -167,7 +162,7 @@
 // Returns true if there is a four-byte banned char at |index|. |first_byte| is
 // the byte at |index|.
 template <typename STR>
-bool HasFourByteBannedCharAtIndex(const STR& escaped_text,
+bool HasFourByteBannedCharAtIndex(STR escaped_text,
                                   unsigned char first_byte,
                                   size_t index) {
   // The following characters are blacklisted for spoofability concerns.
@@ -201,16 +196,16 @@
 // the alterations done to the string that are not one-character-to-one-
 // character.  The resulting |adjustments| will always be sorted by increasing
 // offset.
-template<typename STR>
+template <typename STR>
 STR UnescapeURLWithAdjustmentsImpl(
-    const STR& escaped_text,
+    base::BasicStringPiece<STR> escaped_text,
     UnescapeRule::Type rules,
     base::OffsetAdjuster::Adjustments* adjustments) {
   if (adjustments)
     adjustments->clear();
   // Do not unescape anything, return the |escaped_text| text.
   if (rules == UnescapeRule::NONE)
-    return escaped_text;
+    return escaped_text.as_string();
 
   // The output of the unescaping is always smaller than the input, so we can
   // reserve the input size to make sure we have enough buffer and don't have
@@ -265,19 +260,19 @@
       if (!(rules & UnescapeRule::SPOOFING_AND_CONTROL_CHARS)) {
         if (HasArabicLanguageMarkAtIndex(escaped_text, first_byte, i)) {
           // Keep Arabic Language Mark escaped.
-          result.append(escaped_text, i, 6);
+          escaped_text.substr(i, 6).AppendToString(&result);
           i += 5;
           continue;
         }
         if (HasThreeByteBidiControlCharAtIndex(escaped_text, first_byte, i)) {
           // Keep BiDi control char escaped.
-          result.append(escaped_text, i, 9);
+          escaped_text.substr(i, 9).AppendToString(&result);
           i += 8;
           continue;
         }
         if (HasFourByteBannedCharAtIndex(escaped_text, first_byte, i)) {
           // Keep banned char escaped.
-          result.append(escaped_text, i, 12);
+          escaped_text.substr(i, 12).AppendToString(&result);
           i += 11;
           continue;
         }
@@ -345,12 +340,13 @@
 }
 
 template <class str>
-str EscapeForHTMLImpl(const str& input) {
+str EscapeForHTMLImpl(base::BasicStringPiece<str> input) {
   str result;
   result.reserve(input.size());  // Optimize for no escaping.
 
-  for (typename str::const_iterator i = input.begin(); i != input.end(); ++i)
-    AppendEscapedCharForHTMLImpl(*i, &result);
+  for (auto c : input) {
+    AppendEscapedCharForHTMLImpl(c, &result);
+  }
 
   return result;
 }
@@ -397,29 +393,29 @@
 
 }  // namespace
 
-std::string EscapeQueryParamValue(const std::string& text, bool use_plus) {
+std::string EscapeQueryParamValue(base::StringPiece text, bool use_plus) {
   return Escape(text, kQueryCharmap, use_plus);
 }
 
-std::string EscapePath(const std::string& path) {
+std::string EscapePath(base::StringPiece path) {
   return Escape(path, kPathCharmap, false);
 }
 
 #if defined(OS_MACOSX)
-std::string EscapeNSURLPrecursor(const std::string& precursor) {
+std::string EscapeNSURLPrecursor(base::StringPiece precursor) {
   return Escape(precursor, kNSURLCharmap, false, true);
 }
 #endif  // defined(OS_MACOSX)
 
-std::string EscapeUrlEncodedData(const std::string& path, bool use_plus) {
+std::string EscapeUrlEncodedData(base::StringPiece path, bool use_plus) {
   return Escape(path, kUrlEscape, use_plus);
 }
 
-std::string EscapeNonASCII(const std::string& input) {
+std::string EscapeNonASCII(base::StringPiece input) {
   return Escape(input, kNonASCIICharmap, false);
 }
 
-std::string EscapeExternalHandlerValue(const std::string& text) {
+std::string EscapeExternalHandlerValue(base::StringPiece text) {
   return Escape(text, kExternalHandlerCharmap, false, true);
 }
 
@@ -427,31 +423,31 @@
   AppendEscapedCharForHTMLImpl(c, output);
 }
 
-std::string EscapeForHTML(const std::string& input) {
+std::string EscapeForHTML(base::StringPiece input) {
   return EscapeForHTMLImpl(input);
 }
 
-base::string16 EscapeForHTML(const base::string16& input) {
+base::string16 EscapeForHTML(base::StringPiece16 input) {
   return EscapeForHTMLImpl(input);
 }
 
-std::string UnescapeURLComponent(const std::string& escaped_text,
+std::string UnescapeURLComponent(base::StringPiece escaped_text,
                                  UnescapeRule::Type rules) {
   return UnescapeURLWithAdjustmentsImpl(escaped_text, rules, NULL);
 }
 
-base::string16 UnescapeURLComponent(const base::string16& escaped_text,
+base::string16 UnescapeURLComponent(base::StringPiece16 escaped_text,
                                     UnescapeRule::Type rules) {
   return UnescapeURLWithAdjustmentsImpl(escaped_text, rules, NULL);
 }
 
-base::string16 UnescapeAndDecodeUTF8URLComponent(const std::string& text,
+base::string16 UnescapeAndDecodeUTF8URLComponent(base::StringPiece text,
                                                  UnescapeRule::Type rules) {
   return UnescapeAndDecodeUTF8URLComponentWithAdjustments(text, rules, NULL);
 }
 
 base::string16 UnescapeAndDecodeUTF8URLComponentWithAdjustments(
-    const std::string& text,
+    base::StringPiece text,
     UnescapeRule::Type rules,
     base::OffsetAdjuster::Adjustments* adjustments) {
   base::string16 result;
@@ -472,7 +468,7 @@
   return base::UTF8ToUTF16WithAdjustments(text, adjustments);
 }
 
-base::string16 UnescapeForHTML(const base::string16& input) {
+base::string16 UnescapeForHTML(base::StringPiece16 input) {
   static const struct {
     const char* ampersand_code;
     const char replacement;
@@ -485,10 +481,10 @@
   };
 
   if (input.find(base::ASCIIToUTF16("&")) == std::string::npos)
-    return input;
+    return input.as_string();
 
   base::string16 ampersand_chars[arraysize(kEscapeToChars)];
-  base::string16 text(input);
+  base::string16 text = input.as_string();
   for (base::string16::iterator iter = text.begin();
        iter != text.end(); ++iter) {
     if (*iter == '&') {
diff --git a/net/base/escape.h b/net/base/escape.h
index 8637a70a..cb013922 100644
--- a/net/base/escape.h
+++ b/net/base/escape.h
@@ -8,9 +8,9 @@
 #include <stdint.h>
 
 #include <string>
-#include <vector>
 
 #include "base/strings/string16.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/utf_offset_string_conversions.h"
 #include "net/base/net_export.h"
 
@@ -22,44 +22,44 @@
 // We %XX everything except alphanumerics and -_.!~*'()
 // Spaces change to "+" unless you pass usePlus=false.
 // This is basically the same as encodeURIComponent in javascript.
-NET_EXPORT std::string EscapeQueryParamValue(const std::string& text,
+NET_EXPORT std::string EscapeQueryParamValue(base::StringPiece text,
                                              bool use_plus);
 
 // Escapes a partial or complete file/pathname.  This includes:
 // non-printable, non-7bit, and (including space)  "#%:<>?[\]^`{|}
 // For the base::string16 version, we attempt a conversion to |codepage| before
 // encoding the string.  If this conversion fails, we return false.
-NET_EXPORT std::string EscapePath(const std::string& path);
+NET_EXPORT std::string EscapePath(base::StringPiece path);
 
 #if defined(OS_MACOSX)
 // Escapes characters as per expectations of NSURL. This includes:
 // non-printable, non-7bit, and (including space)  "#%<>[\]^`{|}
-NET_EXPORT std::string EscapeNSURLPrecursor(const std::string& precursor);
+NET_EXPORT std::string EscapeNSURLPrecursor(base::StringPiece precursor);
 #endif  // defined(OS_MACOSX)
 
 // Escapes application/x-www-form-urlencoded content.  This includes:
 // non-printable, non-7bit, and (including space)  ?>=<;+'&%$#"![\]^`{|}
 // Space is escaped as + (if use_plus is true) and other special characters
 // as %XX (hex).
-NET_EXPORT std::string EscapeUrlEncodedData(const std::string& path,
+NET_EXPORT std::string EscapeUrlEncodedData(base::StringPiece path,
                                             bool use_plus);
 
 // Escapes all non-ASCII input.
-NET_EXPORT std::string EscapeNonASCII(const std::string& input);
+NET_EXPORT std::string EscapeNonASCII(base::StringPiece input);
 
 // Escapes characters in text suitable for use as an external protocol handler
 // command.
 // We %XX everything except alphanumerics and -_.!~*'() and the restricted
 // chracters (;/?:@&=+$,#[]) and a valid percent escape sequence (%XX).
-NET_EXPORT std::string EscapeExternalHandlerValue(const std::string& text);
+NET_EXPORT std::string EscapeExternalHandlerValue(base::StringPiece text);
 
 // Appends the given character to the output string, escaping the character if
 // the character would be interpretted as an HTML delimiter.
 NET_EXPORT void AppendEscapedCharForHTML(char c, std::string* output);
 
 // Escapes chars that might cause this text to be interpretted as HTML tags.
-NET_EXPORT std::string EscapeForHTML(const std::string& text);
-NET_EXPORT base::string16 EscapeForHTML(const base::string16& text);
+NET_EXPORT std::string EscapeForHTML(base::StringPiece text);
+NET_EXPORT base::string16 EscapeForHTML(base::StringPiece16 text);
 
 // Unescaping ------------------------------------------------------------------
 
@@ -125,11 +125,10 @@
 // which, after unescaping, is supposed to be interpreted as UTF-8, and then
 // converted into full UTF-16 chars. This function won't tell you if any
 // conversions need to take place, it only unescapes.
-NET_EXPORT std::string UnescapeURLComponent(const std::string& escaped_text,
+NET_EXPORT std::string UnescapeURLComponent(base::StringPiece escaped_text,
                                             UnescapeRule::Type rules);
-NET_EXPORT base::string16 UnescapeURLComponent(
-    const base::string16& escaped_text,
-    UnescapeRule::Type rules);
+NET_EXPORT base::string16 UnescapeURLComponent(base::StringPiece16 escaped_text,
+                                               UnescapeRule::Type rules);
 
 // Unescapes the given substring as a URL, and then tries to interpret the
 // result as being encoded as UTF-8. If the result is convertable into UTF-8, it
@@ -138,16 +137,16 @@
 // information on how the original string was adjusted to get the string
 // returned.
 NET_EXPORT base::string16 UnescapeAndDecodeUTF8URLComponent(
-    const std::string& text,
+    base::StringPiece text,
     UnescapeRule::Type rules);
 NET_EXPORT base::string16 UnescapeAndDecodeUTF8URLComponentWithAdjustments(
-    const std::string& text,
+    base::StringPiece text,
     UnescapeRule::Type rules,
     base::OffsetAdjuster::Adjustments* adjustments);
 
 // Unescapes the following ampersand character codes from |text|:
 // &lt; &gt; &amp; &quot; &#39;
-NET_EXPORT base::string16 UnescapeForHTML(const base::string16& text);
+NET_EXPORT base::string16 UnescapeForHTML(base::StringPiece16 text);
 
 }  // namespace net
 
diff --git a/net/cert/cert_verify_proc.cc b/net/cert/cert_verify_proc.cc
index 91c8e954..f047a7e2 100644
--- a/net/cert/cert_verify_proc.cc
+++ b/net/cert/cert_verify_proc.cc
@@ -774,4 +774,32 @@
 const base::Feature CertVerifyProc::kSHA1LegacyMode{
     "SHA1LegacyMode", base::FEATURE_DISABLED_BY_DEFAULT};
 
+X509Certificate::SignatureHashAlgorithm FillCertVerifyResultWeakSignature(
+    X509Certificate::OSCertHandle cert,
+    bool is_leaf,
+    CertVerifyResult* verify_result) {
+  X509Certificate::SignatureHashAlgorithm hash =
+      X509Certificate::GetSignatureHashAlgorithm(cert);
+  switch (hash) {
+    case X509Certificate::kSignatureHashAlgorithmMd2:
+      verify_result->has_md2 = true;
+      break;
+    case X509Certificate::kSignatureHashAlgorithmMd4:
+      verify_result->has_md4 = true;
+      break;
+    case X509Certificate::kSignatureHashAlgorithmMd5:
+      verify_result->has_md5 = true;
+      break;
+    case X509Certificate::kSignatureHashAlgorithmSha1:
+      verify_result->has_sha1 = true;
+      if (is_leaf)
+        verify_result->has_sha1_leaf = true;
+      break;
+    case X509Certificate::kSignatureHashAlgorithmOther:
+      break;
+  }
+
+  return hash;
+}
+
 }  // namespace net
diff --git a/net/cert/cert_verify_proc.h b/net/cert/cert_verify_proc.h
index 352610f..5befe24 100644
--- a/net/cert/cert_verify_proc.h
+++ b/net/cert/cert_verify_proc.h
@@ -14,6 +14,7 @@
 #include "base/memory/ref_counted.h"
 #include "net/base/net_export.h"
 #include "net/cert/x509_cert_types.h"
+#include "net/cert/x509_certificate.h"
 
 namespace net {
 
@@ -134,6 +135,21 @@
   DISALLOW_COPY_AND_ASSIGN(CertVerifyProc);
 };
 
+// Sets the weak signature hash fields of |verify_result| to true if
+// applicable for |cert|, otherwise does not modify them.
+//
+// The fields in question are: |has_md2|, |has_md4|, |has_md5|,|has_sha1| and
+// |has_sha1_leaf|.
+//
+// Returns the hash algorithm that was determined for |cert|.
+//
+// This function is intended to be used as a helper by platform-specific
+// CertVerifyProc implementations.
+X509Certificate::SignatureHashAlgorithm FillCertVerifyResultWeakSignature(
+    X509Certificate::OSCertHandle cert,
+    bool is_leaf,
+    CertVerifyResult* verify_result);
+
 }  // namespace net
 
 #endif  // NET_CERT_CERT_VERIFY_PROC_H_
diff --git a/net/cert/cert_verify_proc_android.cc b/net/cert/cert_verify_proc_android.cc
index 2cb12f7..cdc8347a 100644
--- a/net/cert/cert_verify_proc_android.cc
+++ b/net/cert/cert_verify_proc_android.cc
@@ -87,22 +87,7 @@
   size_t correction_for_root =
       (status == android::CERT_VERIFY_STATUS_ANDROID_OK) ? 1 : 0;
   for (size_t i = 0; i < chain.size() - correction_for_root; ++i) {
-    int sig_alg = OBJ_obj2nid(chain[i]->sig_alg->algorithm);
-    if (sig_alg == NID_md2WithRSAEncryption) {
-      verify_result->has_md2 = true;
-    } else if (sig_alg == NID_md4WithRSAEncryption) {
-      verify_result->has_md4 = true;
-    } else if (sig_alg == NID_md5WithRSAEncryption ||
-               sig_alg == NID_md5WithRSA) {
-      verify_result->has_md5 = true;
-    } else if (sig_alg == NID_sha1WithRSAEncryption ||
-               sig_alg == NID_dsaWithSHA || sig_alg == NID_dsaWithSHA1 ||
-               sig_alg == NID_dsaWithSHA1_2 || sig_alg == NID_sha1WithRSA ||
-               sig_alg == NID_ecdsa_with_SHA1) {
-      verify_result->has_sha1 = true;
-      if (i == 0)
-        verify_result->has_sha1_leaf = true;
-    }
+    FillCertVerifyResultWeakSignature(chain[i], i == 0, verify_result);
   }
 
   // Extract the public key hashes.
diff --git a/net/cert/cert_verify_proc_ios.cc b/net/cert/cert_verify_proc_ios.cc
index 2ab30ed..622f0dd0 100644
--- a/net/cert/cert_verify_proc_ios.cc
+++ b/net/cert/cert_verify_proc_ios.cc
@@ -124,8 +124,6 @@
     std::string der_bytes;
     if (!X509Certificate::GetDEREncoded(chain_cert, &der_bytes))
       return;
-    const uint8_t* bytes = reinterpret_cast<const uint8_t*>(der_bytes.data());
-    bssl::UniquePtr<X509> x509_cert(d2i_X509(NULL, &bytes, der_bytes.size()));
 
     base::StringPiece spki_bytes;
     if (!asn1::ExtractSPKIFromDERCert(der_bytes, &spki_bytes))
@@ -144,23 +142,7 @@
         i == count - 1) {
       continue;
     }
-
-    int sig_alg = OBJ_obj2nid(x509_cert->sig_alg->algorithm);
-    if (sig_alg == NID_md2WithRSAEncryption) {
-      verify_result->has_md2 = true;
-    } else if (sig_alg == NID_md4WithRSAEncryption) {
-      verify_result->has_md4 = true;
-    } else if (sig_alg == NID_md5WithRSAEncryption ||
-               sig_alg == NID_md5WithRSA) {
-      verify_result->has_md5 = true;
-    } else if (sig_alg == NID_sha1WithRSAEncryption ||
-               sig_alg == NID_dsaWithSHA || sig_alg == NID_dsaWithSHA1 ||
-               sig_alg == NID_dsaWithSHA1_2 || sig_alg == NID_sha1WithRSA ||
-               sig_alg == NID_ecdsa_with_SHA1) {
-      verify_result->has_sha1 = true;
-      if (i == 0)
-        verify_result->has_sha1_leaf = true;
-    }
+    FillCertVerifyResultWeakSignature(chain_cert, i == 0, verify_result);
   }
   if (!verified_cert) {
     NOTREACHED();
diff --git a/net/cert/cert_verify_proc_mac.cc b/net/cert/cert_verify_proc_mac.cc
index 08f1b88..2290db0 100644
--- a/net/cert/cert_verify_proc_mac.cc
+++ b/net/cert/cert_verify_proc_mac.cc
@@ -215,47 +215,19 @@
       continue;
     }
 
-    x509_util::CSSMCachedCertificate cached_cert;
-    OSStatus status = cached_cert.Init(chain_cert);
-    if (status)
-      continue;
-    x509_util::CSSMFieldValue signature_field;
-    status = cached_cert.GetField(&CSSMOID_X509V1SignatureAlgorithm,
-                                  &signature_field);
-    if (status || !signature_field.field())
-      continue;
-    // Match the behaviour of OS X system tools and defensively check that
-    // sizes are appropriate. This would indicate a critical failure of the
-    // OS X certificate library, but based on history, it is best to play it
-    // safe.
-    const CSSM_X509_ALGORITHM_IDENTIFIER* sig_algorithm =
-        signature_field.GetAs<CSSM_X509_ALGORITHM_IDENTIFIER>();
-    if (!sig_algorithm)
-      continue;
-
-    const CSSM_OID* alg_oid = &sig_algorithm->algorithm;
-    if (CSSMOIDEqual(alg_oid, &CSSMOID_MD2WithRSA)) {
-      verify_result->has_md2 = true;
-      if (i == 0)
-        *leaf_is_weak = true;
-    } else if (CSSMOIDEqual(alg_oid, &CSSMOID_MD4WithRSA)) {
-      verify_result->has_md4 = true;
-      if (i == 0)
-        *leaf_is_weak = true;
-    } else if (CSSMOIDEqual(alg_oid, &CSSMOID_MD5WithRSA)) {
-      verify_result->has_md5 = true;
-      if (i == 0)
-        *leaf_is_weak = true;
-    } else if (CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithRSA) ||
-               CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithRSA_OIW) ||
-               CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA) ||
-               CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA_CMS) ||
-               CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA_JDK) ||
-               CSSMOIDEqual(alg_oid, &CSSMOID_ECDSA_WithSHA1)) {
-      verify_result->has_sha1 = true;
-      if (i == 0) {
-        verify_result->has_sha1_leaf = true;
-        *leaf_is_weak = true;
+    bool is_leaf = i == 0;
+    X509Certificate::SignatureHashAlgorithm hash_algorithm =
+        FillCertVerifyResultWeakSignature(chain_cert, is_leaf, verify_result);
+    if (is_leaf) {
+      switch (hash_algorithm) {
+        case X509Certificate::kSignatureHashAlgorithmMd2:
+        case X509Certificate::kSignatureHashAlgorithmMd4:
+        case X509Certificate::kSignatureHashAlgorithmMd5:
+        case X509Certificate::kSignatureHashAlgorithmSha1:
+          *leaf_is_weak = true;
+          break;
+        case X509Certificate::kSignatureHashAlgorithmOther:
+          break;
       }
     }
   }
diff --git a/net/cert/cert_verify_proc_nss.cc b/net/cert/cert_verify_proc_nss.cc
index 1ac27cb..86fcb049 100644
--- a/net/cert/cert_verify_proc_nss.cc
+++ b/net/cert/cert_verify_proc_nss.cc
@@ -192,29 +192,7 @@
       verified_chain.push_back(node->cert);
     }
 
-    SECAlgorithmID& signature = node->cert->signature;
-    SECOidTag oid_tag = SECOID_FindOIDTag(&signature.algorithm);
-    switch (oid_tag) {
-      case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
-        verify_result->has_md5 = true;
-        break;
-      case SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION:
-        verify_result->has_md2 = true;
-        break;
-      case SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION:
-        verify_result->has_md4 = true;
-        break;
-      case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION:
-      case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE:
-      case SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST:
-      case SEC_OID_ANSIX962_ECDSA_SHA1_SIGNATURE:
-        verify_result->has_sha1 = true;
-        if (i == 0)
-          verify_result->has_sha1_leaf = true;
-        break;
-      default:
-        break;
-    }
+    FillCertVerifyResultWeakSignature(node->cert, i == 0, verify_result);
   }
 
   if (root_cert)
diff --git a/net/cert/cert_verify_proc_openssl.cc b/net/cert/cert_verify_proc_openssl.cc
index 988bdec1..31543f54 100644
--- a/net/cert/cert_verify_proc_openssl.cc
+++ b/net/cert/cert_verify_proc_openssl.cc
@@ -108,22 +108,7 @@
     // Only check the algorithm status for certificates that are not in the
     // trust store.
     if (i < static_cast<size_t>(store_ctx->last_untrusted)) {
-      int sig_alg = OBJ_obj2nid(cert->sig_alg->algorithm);
-      if (sig_alg == NID_md2WithRSAEncryption) {
-        verify_result->has_md2 = true;
-      } else if (sig_alg == NID_md4WithRSAEncryption) {
-        verify_result->has_md4 = true;
-      } else if (sig_alg == NID_md5WithRSAEncryption ||
-                 sig_alg == NID_md5WithRSA) {
-        verify_result->has_md5 = true;
-      } else if (sig_alg == NID_sha1WithRSAEncryption ||
-                 sig_alg == NID_dsaWithSHA || sig_alg == NID_dsaWithSHA1 ||
-                 sig_alg == NID_dsaWithSHA1_2 || sig_alg == NID_sha1WithRSA ||
-                 sig_alg == NID_ecdsa_with_SHA1) {
-        verify_result->has_sha1 = true;
-        if (i == 0)
-          verify_result->has_sha1_leaf = true;
-      }
+      FillCertVerifyResultWeakSignature(cert, i == 0, verify_result);
     }
   }
 
diff --git a/net/cert/cert_verify_proc_win.cc b/net/cert/cert_verify_proc_win.cc
index a13117a7..416d78c1 100644
--- a/net/cert/cert_verify_proc_win.cc
+++ b/net/cert/cert_verify_proc_win.cc
@@ -364,26 +364,7 @@
       verified_chain.push_back(cert);
     }
 
-    const char* algorithm = cert->pCertInfo->SignatureAlgorithm.pszObjId;
-    if (strcmp(algorithm, szOID_RSA_MD5RSA) == 0) {
-      // md5WithRSAEncryption: 1.2.840.113549.1.1.4
-      verify_result->has_md5 = true;
-    } else if (strcmp(algorithm, szOID_RSA_MD2RSA) == 0) {
-      // md2WithRSAEncryption: 1.2.840.113549.1.1.2
-      verify_result->has_md2 = true;
-    } else if (strcmp(algorithm, szOID_RSA_MD4RSA) == 0) {
-      // md4WithRSAEncryption: 1.2.840.113549.1.1.3
-      verify_result->has_md4 = true;
-    } else if (strcmp(algorithm, szOID_RSA_SHA1RSA) == 0 ||
-               strcmp(algorithm, szOID_X957_SHA1DSA) == 0 ||
-               strcmp(algorithm, szOID_ECDSA_SHA1) == 0) {
-      // sha1WithRSAEncryption: 1.2.840.113549.1.1.5
-      // id-dsa-with-sha1: 1.2.840.10040.4.3
-      // ecdsa-with-SHA1: 1.2.840.10045.4.1
-      verify_result->has_sha1 = true;
-      if (i == 0)
-        verify_result->has_sha1_leaf = true;
-    }
+    FillCertVerifyResultWeakSignature(cert, i == 0, verify_result);
   }
 
   if (verified_cert) {
diff --git a/net/cert/ct_known_logs_static-inc.h b/net/cert/ct_known_logs_static-inc.h
index 7ead66c..87961b9 100644
--- a/net/cert/ct_known_logs_static-inc.h
+++ b/net/cert/ct_known_logs_static-inc.h
@@ -4,21 +4,21 @@
 
 struct CTLogInfo {
   // The DER-encoded SubjectPublicKeyInfo for the log.
-  const char* const log_key;
+  const char* log_key;
   // The length, in bytes, of |log_key|.
-  const size_t log_key_length;
+  size_t log_key_length;
   // The user-friendly log name.
   // Note: This will not be translated.
-  const char* const log_name;
+  const char* log_name;
   // The HTTPS API endpoint for the log.
   // Note: Trailing slashes should be included.
-  const char* const log_url;
+  const char* log_url;
   // The DNS API endpoint for the log.
   // This is used as the parent domain for all queries about the log.
   // If empty, CT DNS queries are not supported for the log. This will prevent
   // retrieval of inclusion proofs over DNS for SCTs from the log.
   // https://github.com/google/certificate-transparency-rfcs/blob/master/dns/draft-ct-over-dns.md.
-  const char* const log_dns_domain;
+  const char* log_dns_domain;
 };
 
 // The set of all presently-qualifying CT logs.
diff --git a/net/cert/x509_certificate.h b/net/cert/x509_certificate.h
index cab0889..0aff1be 100644
--- a/net/cert/x509_certificate.h
+++ b/net/cert/x509_certificate.h
@@ -80,6 +80,14 @@
     kPublicKeyTypeECDH
   };
 
+  enum SignatureHashAlgorithm {
+    kSignatureHashAlgorithmMd2,
+    kSignatureHashAlgorithmMd4,
+    kSignatureHashAlgorithmMd5,
+    kSignatureHashAlgorithmSha1,
+    kSignatureHashAlgorithmOther,
+  };
+
   enum Format {
     // The data contains a single DER-encoded certificate, or a PEM-encoded
     // DER certificate with the PEM encoding block name of "CERTIFICATE".
@@ -315,6 +323,15 @@
                                size_t* size_bits,
                                PublicKeyType* type);
 
+  // Returns the digest algorithm used in |cert_handle|'s signature.
+  // If the digest algorithm cannot be determined, or if it is not one
+  // of the explicitly enumerated values, kSignatureHashAlgorithmOther
+  // will be returned.
+  // NOTE: No validation of the signature is performed, and thus invalid
+  // signatures may result in seemingly meaningful values.
+  static SignatureHashAlgorithm GetSignatureHashAlgorithm(
+      OSCertHandle cert_handle);
+
   // Returns the OSCertHandle of this object. Because of caching, this may
   // differ from the OSCertHandle originally supplied during initialization.
   // Note: On Windows, CryptoAPI may return unexpected results if this handle
diff --git a/net/cert/x509_certificate_ios.cc b/net/cert/x509_certificate_ios.cc
index 7379707..18ce828d 100644
--- a/net/cert/x509_certificate_ios.cc
+++ b/net/cert/x509_certificate_ios.cc
@@ -358,6 +358,29 @@
   *size_bits = EVP_PKEY_bits(key);
 }
 
+// static
+X509Certificate::SignatureHashAlgorithm
+X509Certificate::GetSignatureHashAlgorithm(OSCertHandle cert_handle) {
+  bssl::UniquePtr<X509> cert = OSCertHandleToOpenSSL(cert_handle);
+  if (!cert)
+    return kSignatureHashAlgorithmOther;
+
+  // TODO(eroman): This duplicates code with x509_certificate_openssl.cc
+  int sig_alg = OBJ_obj2nid(cert->sig_alg->algorithm);
+  if (sig_alg == NID_md2WithRSAEncryption)
+    return kSignatureHashAlgorithmMd2;
+  if (sig_alg == NID_md4WithRSAEncryption)
+    return kSignatureHashAlgorithmMd4;
+  if (sig_alg == NID_md5WithRSAEncryption || sig_alg == NID_md5WithRSA)
+    return kSignatureHashAlgorithmMd5;
+  if (sig_alg == NID_sha1WithRSAEncryption || sig_alg == NID_dsaWithSHA ||
+      sig_alg == NID_dsaWithSHA1 || sig_alg == NID_dsaWithSHA1_2 ||
+      sig_alg == NID_sha1WithRSA || sig_alg == NID_ecdsa_with_SHA1) {
+    return kSignatureHashAlgorithmSha1;
+  }
+  return kSignatureHashAlgorithmOther;
+}
+
 bool X509Certificate::SupportsSSLClientAuth() const {
   return false;
 }
diff --git a/net/cert/x509_certificate_mac.cc b/net/cert/x509_certificate_mac.cc
index 8e6ecf9f..6283d36 100644
--- a/net/cert/x509_certificate_mac.cc
+++ b/net/cert/x509_certificate_mac.cc
@@ -518,6 +518,43 @@
   }
 }
 
+X509Certificate::SignatureHashAlgorithm
+X509Certificate::GetSignatureHashAlgorithm(OSCertHandle cert_handle) {
+  x509_util::CSSMCachedCertificate cached_cert;
+  OSStatus status = cached_cert.Init(cert_handle);
+  if (status)
+    return kSignatureHashAlgorithmOther;
+
+  x509_util::CSSMFieldValue signature_field;
+  status =
+      cached_cert.GetField(&CSSMOID_X509V1SignatureAlgorithm, &signature_field);
+  if (status || !signature_field.field())
+    return kSignatureHashAlgorithmOther;
+
+  const CSSM_X509_ALGORITHM_IDENTIFIER* sig_algorithm =
+      signature_field.GetAs<CSSM_X509_ALGORITHM_IDENTIFIER>();
+  if (!sig_algorithm)
+    return kSignatureHashAlgorithmOther;
+
+  const CSSM_OID* alg_oid = &sig_algorithm->algorithm;
+  if (CSSMOIDEqual(alg_oid, &CSSMOID_MD2WithRSA))
+    return kSignatureHashAlgorithmMd2;
+  if (CSSMOIDEqual(alg_oid, &CSSMOID_MD4WithRSA))
+    return kSignatureHashAlgorithmMd4;
+  if (CSSMOIDEqual(alg_oid, &CSSMOID_MD5WithRSA))
+    return kSignatureHashAlgorithmMd5;
+  if (CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithRSA) ||
+      CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithRSA_OIW) ||
+      CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA) ||
+      CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA_CMS) ||
+      CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA_JDK) ||
+      CSSMOIDEqual(alg_oid, &CSSMOID_ECDSA_WithSHA1)) {
+    return kSignatureHashAlgorithmSha1;
+  }
+
+  return kSignatureHashAlgorithmOther;
+}
+
 // static
 bool X509Certificate::IsSelfSigned(OSCertHandle cert_handle) {
   x509_util::CSSMCachedCertificate cached_cert;
diff --git a/net/cert/x509_certificate_nss.cc b/net/cert/x509_certificate_nss.cc
index 822102fe..2f2f977 100644
--- a/net/cert/x509_certificate_nss.cc
+++ b/net/cert/x509_certificate_nss.cc
@@ -239,6 +239,28 @@
 }
 
 // static
+X509Certificate::SignatureHashAlgorithm
+X509Certificate::GetSignatureHashAlgorithm(OSCertHandle cert_handle) {
+  SECAlgorithmID& signature = cert_handle->signature;
+  SECOidTag oid_tag = SECOID_FindOIDTag(&signature.algorithm);
+  switch (oid_tag) {
+    case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
+      return kSignatureHashAlgorithmMd5;
+    case SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION:
+      return kSignatureHashAlgorithmMd2;
+    case SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION:
+      return kSignatureHashAlgorithmMd4;
+    case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION:
+    case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE:
+    case SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST:
+    case SEC_OID_ANSIX962_ECDSA_SHA1_SIGNATURE:
+      return kSignatureHashAlgorithmSha1;
+    default:
+      return kSignatureHashAlgorithmOther;
+  }
+}
+
+// static
 bool X509Certificate::IsSelfSigned(OSCertHandle cert_handle) {
   crypto::ScopedSECKEYPublicKey public_key(CERT_ExtractPublicKey(cert_handle));
   if (!public_key.get())
diff --git a/net/cert/x509_certificate_openssl.cc b/net/cert/x509_certificate_openssl.cc
index 30d9598..730eef0 100644
--- a/net/cert/x509_certificate_openssl.cc
+++ b/net/cert/x509_certificate_openssl.cc
@@ -377,6 +377,24 @@
   }
 }
 
+// static
+X509Certificate::SignatureHashAlgorithm
+X509Certificate::GetSignatureHashAlgorithm(OSCertHandle cert_handle) {
+  int sig_alg = OBJ_obj2nid(cert_handle->sig_alg->algorithm);
+  if (sig_alg == NID_md2WithRSAEncryption)
+    return kSignatureHashAlgorithmMd2;
+  if (sig_alg == NID_md4WithRSAEncryption)
+    return kSignatureHashAlgorithmMd4;
+  if (sig_alg == NID_md5WithRSAEncryption || sig_alg == NID_md5WithRSA)
+    return kSignatureHashAlgorithmMd5;
+  if (sig_alg == NID_sha1WithRSAEncryption || sig_alg == NID_dsaWithSHA ||
+      sig_alg == NID_dsaWithSHA1 || sig_alg == NID_dsaWithSHA1_2 ||
+      sig_alg == NID_sha1WithRSA || sig_alg == NID_ecdsa_with_SHA1) {
+    return kSignatureHashAlgorithmSha1;
+  }
+  return kSignatureHashAlgorithmOther;
+}
+
 bool X509Certificate::IsIssuedByEncoded(
     const std::vector<std::string>& valid_issuers) {
   if (valid_issuers.empty())
diff --git a/net/cert/x509_certificate_win.cc b/net/cert/x509_certificate_win.cc
index c67011e..ef3d040e 100644
--- a/net/cert/x509_certificate_win.cc
+++ b/net/cert/x509_certificate_win.cc
@@ -421,6 +421,33 @@
   }
 }
 
+X509Certificate::SignatureHashAlgorithm
+X509Certificate::GetSignatureHashAlgorithm(OSCertHandle cert_handle) {
+  const char* algorithm = cert_handle->pCertInfo->SignatureAlgorithm.pszObjId;
+  if (strcmp(algorithm, szOID_RSA_MD5RSA) == 0) {
+    // md5WithRSAEncryption: 1.2.840.113549.1.1.4
+    return kSignatureHashAlgorithmMd5;
+  }
+  if (strcmp(algorithm, szOID_RSA_MD2RSA) == 0) {
+    // md2WithRSAEncryption: 1.2.840.113549.1.1.2
+    return kSignatureHashAlgorithmMd2;
+  }
+  if (strcmp(algorithm, szOID_RSA_MD4RSA) == 0) {
+    // md4WithRSAEncryption: 1.2.840.113549.1.1.3
+    return kSignatureHashAlgorithmMd4;
+  }
+  if (strcmp(algorithm, szOID_RSA_SHA1RSA) == 0 ||
+      strcmp(algorithm, szOID_X957_SHA1DSA) == 0 ||
+      strcmp(algorithm, szOID_ECDSA_SHA1) == 0) {
+    // sha1WithRSAEncryption: 1.2.840.113549.1.1.5
+    // id-dsa-with-sha1: 1.2.840.10040.4.3
+    // ecdsa-with-SHA1: 1.2.840.10045.4.1
+    return kSignatureHashAlgorithmSha1;
+  }
+
+  return kSignatureHashAlgorithmOther;
+}
+
 bool X509Certificate::IsIssuedByEncoded(
     const std::vector<std::string>& valid_issuers) {
 
diff --git a/net/data/ftp/dir-listing-ls-34 b/net/data/ftp/dir-listing-ls-34
new file mode 100644
index 0000000..1cd77dd
--- /dev/null
+++ b/net/data/ftp/dir-listing-ls-34
@@ -0,0 +1,2 @@
+-rw-rw-r--   1 ftpuser  ftpusers    1761280 Dec 20  2002 controle_embarqu‚_avec_labview_real_time_et_compactfieldpoint.ppt
+-rw-rw-r--   1 ftpuser  ftpusers     329216 Dec 20  2002 optimisez_l'acquisition_de_donn‚es_sous_labview.ppt
diff --git a/net/data/ftp/dir-listing-ls-34.expected b/net/data/ftp/dir-listing-ls-34.expected
new file mode 100644
index 0000000..d197cb3
--- /dev/null
+++ b/net/data/ftp/dir-listing-ls-34.expected
@@ -0,0 +1,17 @@
+-
+controle_embarqu�_avec_labview_real_time_et_compactfieldpoint.ppt
+1761280
+2002
+12
+20
+0
+0
+
+-
+optimisez_l'acquisition_de_donnFs_sous_labview.ppt
+329216
+2002
+12
+20
+0
+0
diff --git a/net/ftp/ftp_directory_listing_parser.cc b/net/ftp/ftp_directory_listing_parser.cc
index 151c1b9..1096ae0 100644
--- a/net/ftp/ftp_directory_listing_parser.cc
+++ b/net/ftp/ftp_directory_listing_parser.cc
@@ -28,7 +28,7 @@
                   std::vector<FtpDirectoryListingEntry>* entries) {
   for (size_t i = 0; i < entries->size(); i++) {
     if (!base::UTF16ToCodepage(entries->at(i).name, encoding.c_str(),
-                               base::OnStringConversionError::FAIL,
+                               base::OnStringConversionError::SUBSTITUTE,
                                &entries->at(i).raw_name)) {
       return ERR_ENCODING_CONVERSION_FAILED;
     }
@@ -91,7 +91,7 @@
 
   base::string16 converted_text;
   if (base::CodepageToUTF16(text, encoding_name,
-                            base::OnStringConversionError::FAIL,
+                            base::OnStringConversionError::SUBSTITUTE,
                             &converted_text)) {
     const char* const kNewlineSeparators[] = {"\n", "\r\n"};
 
diff --git a/net/ftp/ftp_directory_listing_parser_unittest.cc b/net/ftp/ftp_directory_listing_parser_unittest.cc
index dc75ade5..a7f5bcf 100644
--- a/net/ftp/ftp_directory_listing_parser_unittest.cc
+++ b/net/ftp/ftp_directory_listing_parser_unittest.cc
@@ -158,6 +158,7 @@
     {"dir-listing-ls-31", OK},
     {"dir-listing-ls-32", OK},  // busybox
     {"dir-listing-ls-33", OK},
+    {"dir-listing-ls-34", OK},  // Broken encoding. Should not fail.
 
     {"dir-listing-netware-1", OK},
     {"dir-listing-netware-2", OK},
diff --git a/remoting/host/BUILD.gn b/remoting/host/BUILD.gn
index 4798ee17..eb74514 100644
--- a/remoting/host/BUILD.gn
+++ b/remoting/host/BUILD.gn
@@ -162,6 +162,8 @@
     "host_event_logger_win.cc",
     "host_exit_codes.cc",
     "host_exit_codes.h",
+    "host_experiment_session_plugin.cc",
+    "host_experiment_session_plugin.h",
     "host_export.h",
     "host_extension.h",
     "host_extension_session.h",
@@ -498,6 +500,7 @@
     "host_attributes_unittest.cc",
     "host_change_notification_listener_unittest.cc",
     "host_config_unittest.cc",
+    "host_experiment_session_plugin_unittest.cc",
     "host_extension_session_manager_unittest.cc",
     "host_power_save_blocker_unittest.cc",
     "host_session_options_unittest.cc",
diff --git a/remoting/host/host_experiment_session_plugin.cc b/remoting/host/host_experiment_session_plugin.cc
new file mode 100644
index 0000000..886283fb
--- /dev/null
+++ b/remoting/host/host_experiment_session_plugin.cc
@@ -0,0 +1,50 @@
+// 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 "remoting/host/host_experiment_session_plugin.h"
+
+#include "remoting/base/constants.h"
+#include "remoting/host/host_attributes.h"
+
+namespace remoting {
+
+using buzz::QName;
+using buzz::XmlElement;
+
+std::unique_ptr<XmlElement> HostExperimentSessionPlugin::GetNextMessage() {
+  if (attributes_sent_) {
+    return nullptr;
+  }
+  attributes_sent_ = true;
+  std::unique_ptr<XmlElement> attributes(
+      new XmlElement(QName(kChromotingXmlNamespace, "host-attributes")));
+  attributes->SetBodyText(GetHostAttributes());
+  return attributes;
+}
+
+void HostExperimentSessionPlugin::OnIncomingMessage(
+    const XmlElement& attachments) {
+  if (configuration_received_) {
+    return;
+  }
+
+  const XmlElement* configuration = attachments.FirstNamed(
+      QName(kChromotingXmlNamespace, "host-configuration"));
+  if (!configuration) {
+    return;
+  }
+
+  configuration_received_ = true;
+  configuration_ = configuration->BodyText();
+}
+
+bool HostExperimentSessionPlugin::configuration_received() const {
+  return configuration_received_;
+}
+
+const std::string& HostExperimentSessionPlugin::configuration() const {
+  return configuration_;
+}
+
+}  // namespace remoting
diff --git a/remoting/host/host_experiment_session_plugin.h b/remoting/host/host_experiment_session_plugin.h
new file mode 100644
index 0000000..2062742
--- /dev/null
+++ b/remoting/host/host_experiment_session_plugin.h
@@ -0,0 +1,41 @@
+// 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 REMOTING_HOST_HOST_EXPERIMENT_SESSION_PLUGIN_H_
+#define REMOTING_HOST_HOST_EXPERIMENT_SESSION_PLUGIN_H_
+
+#include <memory>
+#include <string>
+
+#include "remoting/protocol/session_plugin.h"
+#include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
+
+namespace remoting {
+
+// A SessionPlugin implementation to send host attributes to client, and
+// receives experiment settings.
+class HostExperimentSessionPlugin : public protocol::SessionPlugin {
+ public:
+  using SessionPlugin::SessionPlugin;
+
+  // protocol::SessionPlug implementation.
+  std::unique_ptr<buzz::XmlElement> GetNextMessage() override;
+
+  void OnIncomingMessage(const buzz::XmlElement& attachments) override;
+
+  // Whether we have received configuration from client.
+  bool configuration_received() const;
+
+  // The configuration sent from client, may be empty.
+  const std::string& configuration() const;
+
+ private:
+  bool attributes_sent_ = false;
+  bool configuration_received_ = false;
+  std::string configuration_;
+};
+
+}  // namespace remoting
+
+#endif  // REMOTING_HOST_HOST_EXPERIMENT_SESSION_PLUGIN_H_
diff --git a/remoting/host/host_experiment_session_plugin_unittest.cc b/remoting/host/host_experiment_session_plugin_unittest.cc
new file mode 100644
index 0000000..cc6b5a5
--- /dev/null
+++ b/remoting/host/host_experiment_session_plugin_unittest.cc
@@ -0,0 +1,64 @@
+// 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 "remoting/host/host_experiment_session_plugin.h"
+
+#include <memory>
+
+#include "base/bind.h"
+#include "remoting/base/constants.h"
+#include "remoting/host/host_attributes.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
+
+using buzz::QName;
+using buzz::XmlElement;
+
+namespace remoting {
+
+TEST(HostExperimentSessionPluginTest, AttachAttributes) {
+  HostExperimentSessionPlugin plugin;
+  std::unique_ptr<XmlElement> attachments = plugin.GetNextMessage();
+  ASSERT_TRUE(attachments);
+  ASSERT_EQ(attachments->Name(),
+            QName(kChromotingXmlNamespace, "host-attributes"));
+  ASSERT_EQ(attachments->BodyText(), GetHostAttributes());
+
+  attachments.reset();
+  attachments = plugin.GetNextMessage();
+  ASSERT_FALSE(attachments);
+}
+
+TEST(HostExperimentSessionPluginTest, LoadConfiguration) {
+  std::unique_ptr<XmlElement> attachment(
+      new XmlElement(QName(kChromotingXmlNamespace, "attachments")));
+  XmlElement* configuration =
+      new XmlElement(QName(kChromotingXmlNamespace, "host-configuration"));
+  configuration->SetBodyText("This Is A Test Configuration");
+  attachment->AddElement(configuration);
+  HostExperimentSessionPlugin plugin;
+  plugin.OnIncomingMessage(*attachment);
+  ASSERT_TRUE(plugin.configuration_received());
+  ASSERT_EQ(plugin.configuration(), "This Is A Test Configuration");
+}
+
+TEST(HostExperimentSessionPluginTest, IgnoreSecondConfiguration) {
+  std::unique_ptr<XmlElement> attachment(
+      new XmlElement(QName(kChromotingXmlNamespace, "attachments")));
+  XmlElement* configuration =
+      new XmlElement(QName(kChromotingXmlNamespace, "host-configuration"));
+  attachment->AddElement(configuration);
+  configuration->SetBodyText("config1");
+  HostExperimentSessionPlugin plugin;
+  plugin.OnIncomingMessage(*attachment);
+  ASSERT_TRUE(plugin.configuration_received());
+  ASSERT_EQ(plugin.configuration(), "config1");
+
+  configuration->SetBodyText("config2");
+  plugin.OnIncomingMessage(*attachment);
+  ASSERT_TRUE(plugin.configuration_received());
+  ASSERT_EQ(plugin.configuration(), "config1");
+}
+
+}  // namespace remoting
diff --git a/remoting/protocol/session_plugin.h b/remoting/protocol/session_plugin.h
index 74a3284..710b479a 100644
--- a/remoting/protocol/session_plugin.h
+++ b/remoting/protocol/session_plugin.h
@@ -7,9 +7,6 @@
 
 #include <memory>
 
-#include "base/callback.h"
-#include "remoting/protocol/jingle_messages.h"
-#include "remoting/protocol/session.h"
 #include "third_party/libjingle_xmpp/xmllite/xmlelement.h"
 
 namespace remoting {
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 658384e..5d8d2a7d 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -767,7 +767,6 @@
 
 crbug.com/432129 fast/html/marquee-scroll.html [ Failure Pass ]
 crbug.com/248938 [ Win Debug ] virtual/threaded/animations/transition-and-animation-2.html [ Timeout ]
-crbug.com/248938 virtual/threaded/animations/change-keyframes-name.html [ Failure Pass Timeout ]
 crbug.com/248938 virtual/threaded/animations/change-one-anim.html [ Failure Pass ]
 crbug.com/326139 crbug.com/390125 media/video-frame-accurate-seek.html [ Failure Pass ]
 crbug.com/248938 virtual/threaded/transitions/cancel-transition.html [ Pass Failure ]
@@ -900,6 +899,7 @@
 crbug.com/605840 [ Linux Win ] fast/text/hyphens/hyphens-align.html [ Skip ]
 crbug.com/605840 [ Linux Win ] fast/text/hyphens/hyphens-auto.html [ Skip ]
 crbug.com/605840 [ Linux Win ] fast/text/hyphens/hyphens-auto-mock.html [ Skip ]
+crbug.com/605840 [ Linux Win ] fast/text/hyphens/hyphens-auto-nowrap.html [ Skip ]
 crbug.com/605840 [ Linux Win ] fast/text/hyphens/hyphens-locale.html [ Skip ]
 crbug.com/605840 [ Linux Win ] fast/text/hyphens/hyphens-orphaned-word.html [ Skip ]
 crbug.com/605840 [ Linux Win ] fast/text/hyphens/midword-break-priority.html [ Skip ]
@@ -907,6 +907,7 @@
 crbug.com/605840 [ Android ] fast/text/hyphens/hyphens-align.html [ Pass ]
 crbug.com/605840 [ Android ] fast/text/hyphens/hyphens-auto.html [ Pass ]
 crbug.com/605840 [ Android ] fast/text/hyphens/hyphens-auto-mock.html [ Pass ]
+crbug.com/605840 [ Android ] fast/text/hyphens/hyphens-auto-nowrap.html [ Pass ]
 crbug.com/605840 [ Android ] fast/text/hyphens/hyphens-locale.html [ Pass ]
 crbug.com/605840 [ Android ] fast/text/hyphens/hyphens-orphaned-word.html [ Pass ]
 crbug.com/605840 [ Android ] fast/text/hyphens/midword-break-priority.html [ Pass ]
diff --git a/third_party/WebKit/LayoutTests/animations/change-keyframes-name-expected.txt b/third_party/WebKit/LayoutTests/animations/change-keyframes-name-expected.txt
deleted file mode 100644
index fa7392a..0000000
--- a/third_party/WebKit/LayoutTests/animations/change-keyframes-name-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Warning this test is running in real-time and may be flaky.
-PASS - "left" property for "box" element at 0.25s saw something close to: 200
-
diff --git a/third_party/WebKit/LayoutTests/animations/change-keyframes-name.html b/third_party/WebKit/LayoutTests/animations/change-keyframes-name.html
index 909f7b16..b5adfc8 100644
--- a/third_party/WebKit/LayoutTests/animations/change-keyframes-name.html
+++ b/third_party/WebKit/LayoutTests/animations/change-keyframes-name.html
@@ -1,81 +1,65 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-
-<html lang="en">
+<!DOCTYPE html>
+<html>
 <head>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta charset="utf-8">
   <title>Test Changing Name of A Keyframes Rule Using CSSOM</title>
-  <style type="text/css" media="screen">
-    #box {
-        position: relative;
-        left: 0;
-        top: 0;
-        height: 100px;
-        width: 100px;
-        background-color: blue;
-        -webkit-animation-duration: 0.5s;
-        -webkit-animation-timing-function: linear;
-        -webkit-animation-name: bar;
+  <script src="../resources/testharness.js"></script>
+  <script src="../resources/testharnessreport.js"></script>
+  <style>
+    #target {
+      position: absolute;
+      left: 0;
+      top: 0;
+      height: 100px;
+      width: 100px;
+      background-color: blue;
+      animation-duration: 0.05s;
+      animation-fill-mode: forwards;
+      animation-timing-function: linear;
+      animation-name: bar;
     }
-    @-webkit-keyframes foo {
-        from { left: 100px; }
-        40%  { left: 200px; }
-        60%  { left: 200px; }
-        to   { left: 300px; }
+    @keyframes foo {
+      from { left: 100px; }
+      to   { left: 200px; }
     }
-    </style>
-    <script src="resources/animation-test-helpers.js" type="text/javascript" charset="utf-8"></script>
-    <script type="text/javascript" charset="utf-8">
-    
-    const expectedValues = [
-      // [time, element-id, property, expected-value, tolerance]
-      [0.25, "box", "left", 200, 20],
-    ];
+  </style>
+</head>
+<body>
+  <div id="target"></div>
+  <script>
+    'use strict';
 
     function findKeyframesRule(rule)
     {
-        var ss = document.styleSheets;
-        for (var i = 0; i < ss.length; ++i) {
-            for (var j = 0; j < ss[i].cssRules.length; ++j) {
-                if (ss[i].cssRules[j].type == window.CSSRule.WEBKIT_KEYFRAMES_RULE && ss[i].cssRules[j].name == rule)
-                    return ss[i].cssRules[j];
-            }
+      var ss = document.styleSheets;
+      for (var i = 0; i < ss.length; ++i) {
+        for (var j = 0; j < ss[i].cssRules.length; ++j) {
+          if (ss[i].cssRules[j].type == window.CSSRule.KEYFRAMES_RULE && ss[i].cssRules[j].name == rule)
+            return ss[i].cssRules[j];
         }
-        
-        return null;
-    }
-        
-    function change()
-    {
-        // change keyframes name
-        var keyframes = findKeyframesRule("foo");
-        keyframes.name = "anim";
-        document.getElementById('box').style.webkitAnimationName = "anim";
+      }
 
-        runAnimationTest(expectedValues, null, null, 'do-not-use-pause-api');
+      return null;
     }
-    
-    function setup()
-    {
-        if (window.testRunner) {
-            testRunner.dumpAsText();
-            testRunner.waitUntilDone();
-        }
-        requestAnimationFrame(() => {
-            requestAnimationFrame(change);
-        });
-    }
-    
+
+    async_test(t => {
+      target.offsetTop; // Force style recalc
+
+      document.addEventListener('animationend', t.step_func_done(() => {
+        assert_equals(getComputedStyle(target).left, '200px');
+      }));
+
+      t.step(() => {
+
+        // change keyframes name
+        var keyframes = findKeyframesRule('foo');
+        assert_not_equals(keyframes, null);
+        keyframes.name = 'anim';
+        target.style.animationName = 'anim';
+
+        assert_equals(getComputedStyle(target).left, '100px', 'animation not started');
+      });
+    }, 'Changing Name of A Keyframes Rule Using CSSOM starts animation');
   </script>
-</head>
-<body onload="setup()">
-This test changes the name of the @keyframes rule so that it matches 
-and makes sure the animation starts running.
-<div id="box">
-</div>
-<div id="pre-result">
-</div>
-<div id="result">
-</div>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing-expected.txt b/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing-expected.txt
index 444abd0b..a02c574f 100644
--- a/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing-expected.txt
+++ b/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing-expected.txt
@@ -34,8 +34,9 @@
 PASS syntax:'<angle>', initialValue:'calc(50grad + 3.14159rad)' is valid 
 PASS syntax:'<time>', initialValue:'2s' is valid 
 PASS syntax:'<time>', initialValue:'calc(2s - 9ms)' is valid 
-FAIL syntax:'<resolution>', initialValue:'10dpi' is valid Failed to execute 'registerProperty' on 'CSS': The initial value provided does not parse for the given syntax.
-FAIL syntax:'<resolution>', initialValue:'-5.3dpcm' is valid Failed to execute 'registerProperty' on 'CSS': The initial value provided does not parse for the given syntax.
+PASS syntax:'<resolution>', initialValue:'10dpi' is valid 
+PASS syntax:'<resolution>', initialValue:'3dPpX' is valid 
+PASS syntax:'<resolution>', initialValue:'-5.3dpcm' is valid 
 FAIL syntax:'<transform-function>', initialValue:'scale(2)' is valid Failed to execute 'registerProperty' on 'CSS': The initial value provided does not parse for the given syntax.
 FAIL syntax:'<transform-function>+', initialValue:'translateX(2px) rotate(20deg)' is valid Failed to execute 'registerProperty' on 'CSS': The initial value provided does not parse for the given syntax.
 PASS syntax:'<color>', initialValue:'rgb(12, 34, 56)' is valid 
diff --git a/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing.html b/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing.html
index 2ef7a96..74979f22 100644
--- a/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing.html
+++ b/third_party/WebKit/LayoutTests/custom-properties/register-property-syntax-parsing.html
@@ -60,6 +60,7 @@
 assert_valid("<time>", "2s");
 assert_valid("<time>", "calc(2s - 9ms)");
 assert_valid("<resolution>", "10dpi");
+assert_valid("<resolution>", "3dPpX");
 assert_valid("<resolution>", "-5.3dpcm");
 assert_valid("<transform-function>", "scale(2)");
 assert_valid("<transform-function>+", "translateX(2px) rotate(20deg)");
diff --git a/third_party/WebKit/LayoutTests/editing/inserting/insert-space-at-start-of-wrapped-line.html b/third_party/WebKit/LayoutTests/editing/inserting/insert-space-at-start-of-wrapped-line.html
new file mode 100644
index 0000000..9defdf2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/editing/inserting/insert-space-at-start-of-wrapped-line.html
@@ -0,0 +1,50 @@
+<!doctype HTML>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<style>
+#textarea, #plaintext, #richedit {
+  font-family: 'Courier', monospace;
+  width: 10ch;
+}
+#plaintext, #richedit {
+  border: 1px solid black;
+  white-space: pre-wrap;
+}
+</style>
+<textarea id="textarea">12345     67</textarea>
+<div id="plaintext" contenteditable="plaintext-only">12345     67</div>
+<div id="richedit" contenteditable>12345     67</div>
+<script>
+(function () {
+  if (!window.eventSender) {
+    test(function () {
+      assert_unreached();
+    }, 'This test requires eventSender');
+    return;
+  }
+
+  test(function () {
+    let textarea = document.getElementById('textarea');
+    textarea.focus();
+    textarea.setSelectionRange(10, 10);
+    eventSender.keyDown(' ');
+    assert_equals(textarea.value, '12345     \n 67', 'Line break should be inserted automatically');
+  }, 'Typing space at the start of wrapped line in textarea');
+
+  test(function () {
+    let editor = document.getElementById('plaintext');
+    let textNode = editor.firstChild;
+    window.getSelection().setBaseAndExtent(textNode, 10, textNode, 10);
+    eventSender.keyDown(' ');
+    assert_equals(editor.textContent, '12345     \n 67', 'Line break should be inserted automatically');
+  }, 'Typing space at the start of wrapped line in plaintext-only');
+
+  test(function () {
+    let editor = document.getElementById('richedit');
+    let textNode = editor.firstChild;
+    window.getSelection().setBaseAndExtent(textNode, 10, textNode, 10);
+    eventSender.keyDown(' ');
+    assert_equals(editor.textContent, '12345      67', 'Line break should NOT be inserted automatically');
+  }, 'Typing space at the start of wrapped line in contenteditable');
+})();
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/css/invalidation/sheet-ruleset-invalidation.html b/third_party/WebKit/LayoutTests/fast/css/invalidation/sheet-ruleset-invalidation.html
new file mode 100644
index 0000000..e8a7c78
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/css/invalidation/sheet-ruleset-invalidation.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<style></style>
+<div>
+    <div></div>
+    <div></div>
+    <div></div>
+    <div></div>
+    <div></div>
+    <span></span>
+</div>
+<script>
+    test(() => {
+        assert_true(!!window.internals, "Test requires window.internals.");
+        document.body.offsetTop;
+        document.styleSheets[0].insertRule("span{background:green}", 0);
+        assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1, "Check that only the span is affected.");
+    }, "Inserting a style rule with a type selector should only invalidate elements with that type.");
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/performance/longtasktiming.html b/third_party/WebKit/LayoutTests/fast/performance/longtasktiming.html
index cd5f045..f2db95a 100644
--- a/third_party/WebKit/LayoutTests/fast/performance/longtasktiming.html
+++ b/third_party/WebKit/LayoutTests/fast/performance/longtasktiming.html
@@ -7,17 +7,27 @@
     var observer = new PerformanceObserver(
         t.step_func(function (entryList) {
             var entries = entryList.getEntries();
-            /* TODO(panicker): Update after fixing http://crbug.com/651461 */
-            for (var i = 0; i < entries.length; i++) {
-                assert_equals(entries[i].entryType, "longtask",
-                    "entryType expected to be: longtask");
-                assert_equals(entries[i].name, "same-origin-self",
-                    "name expected to be: same-origin-self");
-                assert_greater_than(entries[i].duration, 50,
-                    "duration expected to be greater than 50ms threshold");
-                assert_equals(entries[i].startTime, Math.floor(entries[i].startTime),
-                    "startTime expected to have 1 miilisecond granularity");
-            }
+            assert_equals(entries.length, 1,
+                "Exactly one entry is expected.");
+            var longtask = entries[0];
+            assert_equals(longtask.entryType, "longtask",
+                "entryType expected to be: longtask");
+            assert_equals(longtask.name, "same-origin-self",
+                "name expected to be: same-origin-self");
+            assert_greater_than(longtask.duration, 50,
+                "duration expected to be greater than 50ms threshold");
+            assert_equals(longtask.startTime, Math.floor(longtask.startTime),
+                "startTime expected to have 1 miillisecond granularity");
+
+            // Assert the TaskAttributionTiming entry in attribution.
+            assert_equals(longtask.attribution.length, 1,
+                "Exactly one attribution entry is expected");
+            var attribution = longtask.attribution[0];
+            assert_equals(attribution.entryType, "taskattribution");
+            assert_equals(attribution.name, "frame");
+            assert_equals(attribution.duration, 0);
+            assert_equals(attribution.startTime, 0);
+
             observer.disconnect();
             t.done();
         })
diff --git a/third_party/WebKit/LayoutTests/fast/text/hyphens/hyphens-auto-nowrap-expected.html b/third_party/WebKit/LayoutTests/fast/text/hyphens/hyphens-auto-nowrap-expected.html
new file mode 100644
index 0000000..618993e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/text/hyphens/hyphens-auto-nowrap-expected.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<style>
+div > div {
+  border: thin solid black;
+  font-family: 'Courier New';
+  width: 5ch;
+  white-space: nowrap;
+}
+</style>
+<div lang="en-us">
+  <div>hy-<br>phenation</div>
+  <div>hyphenation</div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/fast/text/hyphens/hyphens-auto-nowrap.html b/third_party/WebKit/LayoutTests/fast/text/hyphens/hyphens-auto-nowrap.html
new file mode 100644
index 0000000..1aeb4c7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/text/hyphens/hyphens-auto-nowrap.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<style>
+div > div {
+  border: thin solid black;
+  font-family: 'Courier New';
+  -webkit-hyphens: auto;
+  hyphens: auto;
+  width: 5ch;
+}
+.nowrap {
+  white-space: nowrap;
+}
+</style>
+<script>
+if (window.internals)
+  internals.setMockHyphenation('en-us');
+</script>
+<div lang="en-us">
+  <div>hyphenation</div>
+  <div class="nowrap">hyphenation</div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename-abort.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename-abort.html
index f8dca520..b14d301 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename-abort.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename-abort.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <title>IndexedDB: index renaming support in aborted transactions</title>
 <link rel="help"
       href="https://w3c.github.io/IndexedDB/#dom-idbindex-name">
@@ -7,6 +8,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     const dbName = databaseName(testCase);
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename-errors.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename-errors.html
index 1f50f36..b9cbaf2 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename-errors.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename-errors.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <title>IndexedDB: index renaming error handling</title>
 <link rel="help"
       href="https://w3c.github.io/IndexedDB/#dom-idbindex-name">
@@ -7,6 +8,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     return createDatabase(testCase, (database, transaction) => {
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename.html
index 370b83e..7eb182f 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbindex-rename.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <meta name="timeout" content="long">
 <title>IndexedDB: index renaming support</title>
 <link rel="help"
@@ -8,6 +9,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     let authorIndex = null, authorIndex2 = null;
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-abort.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-abort.html
index b59117a8..6e16c31e 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-abort.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-abort.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <title>IndexedDB: object store renaming support in aborted transactions</title>
 <link rel="help"
       href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-name">
@@ -7,6 +8,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     const dbName = databaseName(testCase);
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-errors.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-errors.html
index 8e603ba..9c791f9d 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-errors.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-errors.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <title>IndexedDB: object store renaming error handling</title>
 <link rel="help"
       href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-name">
@@ -7,6 +8,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     return createDatabase(testCase, (database, transaction) => {
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-store.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-store.html
index d07a464..d21cb92 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-store.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/idbobjectstore-rename-store.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <meta name="timeout" content="long">
 <title>IndexedDB: object store renaming support</title>
 <link rel="help"
@@ -8,6 +9,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 // Renames the 'books' store to 'renamed_books'.
 //
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/name-scopes.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/name-scopes.html
index d001a48..59404f64 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/name-scopes.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/name-scopes.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html>
+<!doctype html>
 <meta charset="utf-8">
 <title>
   IndexedDB: scoping for database / object store / index names, and index keys
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-generator-revert.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-generator-revert.html
index 770d623f7..c916a917 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-generator-revert.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-generator-revert.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <title>IndexedDB: aborting transactions reverts an object store's key generator state</title>
 <link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
 <link rel="author" href="pwnall@chromium.org" title="Victor Costan">
@@ -6,6 +7,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     return createDatabase(testCase, (database, transaction) => {
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-index-metadata-revert.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-index-metadata-revert.html
index 88ea28e..0b216f6 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-index-metadata-revert.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-index-metadata-revert.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <title>IndexedDB: aborting transactions reverts index metadata</title>
 <link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
 <link rel="author" href="pwnall@chromium.org" title="Victor Costan">
@@ -6,6 +7,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     let store = null, index = null;
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-multiple-metadata-revert.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-multiple-metadata-revert.html
index 4a00d41..ac61788 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-multiple-metadata-revert.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-multiple-metadata-revert.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <title>IndexedDB: aborting transactions reverts multiple operations on the same metadata</title>
 <link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
 <link rel="author" href="pwnall@chromium.org" title="Victor Costan">
@@ -6,6 +7,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     let store = null, index = null;
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-object-store-metadata-revert.html b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-object-store-metadata-revert.html
index 1a109d0..decc45a 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-object-store-metadata-revert.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/transaction-abort-object-store-metadata-revert.html
@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
 <title>IndexedDB: aborting transactions reverts object store metadata</title>
 <link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
 <link rel="author" href="pwnall@chromium.org" title="Victor Costan">
@@ -6,6 +7,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="support-promises.js"></script>
 <script>
+'use strict';
 
 promise_test(testCase => {
     let store = null, migrationTransaction = null, migrationDatabase = null;
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/WebIDL/current-realm.html b/third_party/WebKit/LayoutTests/imported/wpt/WebIDL/current-realm.html
index c9450e2..fd24709b 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/WebIDL/current-realm.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/WebIDL/current-realm.html
@@ -134,9 +134,6 @@
    test(function() {
      var c = new self[0].FontFace("test", "about:blank"),
          obj = c.load()
-     obj.catch(function(reason) {
-       // Ignore exception when it fails to load because the URL is invalid.
-     });
      assert_global(obj)
 
      obj = FontFace.prototype.load.call(c)
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/ci_built_diff.sh b/third_party/WebKit/LayoutTests/imported/wpt/ci_built_diff.sh
new file mode 100644
index 0000000..112d1694
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/ci_built_diff.sh
@@ -0,0 +1,17 @@
+set -ex
+
+# Diff PNGs based on pixel-for-pixel identity
+echo -e '[diff "img"]\n  textconv = identify -quiet -format "%#"' >> .git/config
+echo -e '*.png diff=img' >> .git/info/attributes
+
+# Exclude tests that rely on font rendering
+excluded=(
+    '2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.basic.png'
+    '2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.large.png'
+    '2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.rtl.png'
+    '2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.basic.png'
+)
+
+./update-built-tests.sh
+git update-index --assume-unchanged ${excluded[*]}
+git diff --exit-code
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html b/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html
new file mode 100644
index 0000000..b7cac5e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<title>Set location.protocol from an HTTP URL</title>
+<!-- In particular, valid non-broken schemes that are nevertheless not going to work -->
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<iframe src=/common/blank.html></iframe>
+<iframe src=/common/blank.html></iframe>
+<iframe src=/common/blank.html></iframe>
+<iframe src=/common/blank.html></iframe>
+<iframe src=/common/blank.html></iframe>
+<iframe src=/common/blank.html></iframe>
+<script>
+self.onload = () => {
+  [
+    'x',
+    'data',
+    'file',
+    'ftp',
+    'gopher',
+    'http+x'
+  ].forEach((val, index) => {
+    async_test((t) => {
+      self[index].location.protocol = val
+      t.step_timeout(() => {
+        assert_equals(self[index].location.protocol, location.protocol)
+        assert_equals(self[index].location.host, location.host)
+        assert_equals(self[index].location.port, location.port)
+        t.done()
+      }, 500)
+    }, "Set location.protocol to " + val)
+  })
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html b/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html
new file mode 100644
index 0000000..ba28dc20
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<title>Set location.protocol to a non-broken-non-functioning scheme</title>
+<!-- In particular, valid non-broken schemes that are nevertheless not going to work -->
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+self.onload = () => {
+  [
+    'x',
+    'data',
+    // 'mailto' opens an email client in Firefox...
+    'file',
+    'ftp',
+    'gopher',
+    'http+x'
+  ].forEach((val) => {
+    async_test((t) => {
+      // HTTP URL <iframe>
+      const frame = document.createElement("iframe")
+      frame.src = "/common/blank.html"
+      frame.onload = t.step_func(() => {
+        frame.contentWindow.location.protocol = val
+        t.step_timeout(() => {
+          assert_equals(frame.contentWindow.location.protocol, location.protocol)
+          assert_equals(frame.contentWindow.location.host, location.host)
+          assert_equals(frame.contentWindow.location.port, location.port)
+          t.done()
+        }, 500)
+      })
+      document.body.appendChild(frame)
+    }, "Set HTTP URL frame location.protocol to " + val)
+
+    async_test((t) => {
+      // data URL <iframe>
+      const dataFrame = document.createElement("iframe")
+      const channel = new MessageChannel()
+      dataFrame.src = `data:text/html,<script>
+onmessage = (e) => {
+  let result = false;
+  try {
+    location.protocol = e.data
+  } catch(e) {
+    result = true
+  }
+  setTimeout(() => e.ports[0].postMessage([result, location.protocol]), 100)
+}
+<\/script>`
+      dataFrame.onload = t.step_func(() => {
+        dataFrame.contentWindow.postMessage(val, "*", [channel.port2])
+      })
+      channel.port1.onmessage = t.step_func_done((e) => {
+        assert_false(e.data[0])
+        assert_equals(e.data[1], "data:")
+      })
+      document.body.appendChild(dataFrame)
+    }, "Set data URL frame location.protocol to " + val)
+  })
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter.html b/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter.html
new file mode 100644
index 0000000..ef92f7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<title>Set location.protocol to broken schemes</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<iframe src="data:text/html,<script>
+onmessage = (e) => {
+  let results = [];
+  e.data.forEach((val) => {
+    try {
+      location.protocol = val;
+      results.push('failure')
+    } catch(e) {
+      results.push(e.name)
+    }
+  });
+  parent.postMessage(results, '*')
+}
+</script>"></iframe>
+<iframe srcdoc="<script>
+onmessage = (e) => {
+  let results = [];
+  e.data.forEach((val) => {
+    try {
+      location.protocol = val;
+      results.push('failure')
+    } catch(e) {
+      results.push(e.name)
+    }
+  });
+  parent.postMessage(results, '*')
+}
+</script>"></iframe>
+<script>
+  let broken = [
+    '\x00',
+    '\x01',
+    '\x0A',
+    '\x20',
+    '\x21',
+    '\x7F',
+    '\x80',
+    '\xFF',
+    ':',
+    '†',
+    '\x00x',
+    '\x01x',
+    '\x0Ax',
+    '\x20x',
+    '\x21x',
+    '\x7Fx',
+    '\x80x',
+    '\xFFx',
+    ':x',
+    '†x',
+    '\x00X',
+    '\x01X',
+    '\x0AX',
+    '\x20X',
+    '\x21X',
+    '\x7FX',
+    '\x80X',
+    '\xFFX',
+    ':X',
+    '†X',
+    'x\x00',
+    'x\x01',
+    'x\x0A',
+    'x\x20',
+    'x\x21',
+    'x\x7F',
+    'x\x80',
+    'x\xFF',
+    'x†',
+    'X\x00',
+    'X\x01',
+    'X\x0A',
+    'X\x20',
+    'X\x21',
+    'X\x7F',
+    'X\x80',
+    'X\xFF',
+    'X†',
+    'a\x0A',
+    'a+-.\x0A'
+  ]
+  ;broken.forEach((val) => {
+    test(() => {
+      assert_throws("SyntaxError", () => { location.protocol = val })
+    }, encodeURI(val) + " (percent-encoded) is not a scheme")
+  })
+  let c = 0
+  async_test((t) => {
+    self.onload = t.step_func(() => {
+      self.onmessage = t.step_func((e) => {
+        assert_array_equals(e.data, ("SyntaxError ".repeat(49) + "SyntaxError").split(" "))
+        c++
+        if(c === 2) {
+          t.done()
+        }
+      })
+      self[0].postMessage(broken, "*")
+      self[1].postMessage(broken, "*")
+    })
+  }, "Equivalent tests for data URL and srcdoc <iframe>s")
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_entities01.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_entities01.html
index c3af61b..ce641e46 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_entities01.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_entities01.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['16c694bcf0b3ff3723fa070eea7e1e82ef12a337','05e04b39ef06e2367a33326f5dd566913aa6628f','fbf7d9fec595585869c5c595d5588b34fd175278','e59b0a76d7bcfb429b27e00e469f35e08a9bdd1a','5ea854d6ecd4d6dd459cb36d4faf3ed36e11c073','119cd15b852615cd0fce759769b4a3788595e3bb','9c00a1833e8cf4af28c8bd94902412ad7052b4b0','b5bcdcbc6e88b380be0e48ca2620fbbb8e92e497','bf6c90305b2856c2d9c9a146dfff867fe7a5e0f3','6b9c8d175a3d7b6cf04ffd72e44a7dc88686460f','76c184d9ce64b8a52c2e67eafeb8d332c096f2be','4c30f8f931eb44c2f208e837555c0cc444dd4612','1db77ef761092d65ce847c0bcd6e7cb892db754d','284c18aa40a73e4052525a9ffb30b23182f237ea','6b336a43e394d3ab7ceb2ab54c63409e8a27aded','436c30dd76bf9b5c2b29a181d9a9412ec0ab4bdf','1373a52ddcb71f20f29d92abb6714eaabeba7424','d60f4f324a1ad9c09c4d3590c8c537af2852eeb4','d21511e2df56c306c78e1449c960c66e565e016e','39107d16f24d4c7bcd40ad1239b5f4f677877ee8','a44b740e8b2349e75c9eb0376f665eab13ff821d','a0e38b1c19eba037b34c68864634cff032f0b892','390d9571a24be0961c8fcd78c69eea16a6414246','ceba8404405dd3b3b423c45411bde15bf72a846d','f8dd2fccc21d3a08790a7877186840a692adf111','d526830d439d3c4e966b22fbedf819d465d3107b','240af7bacbfecce6e2a973de9c89fad817fb8d42','d657585ca1df5b86693fca8a0a2eae76bd9b1c2b','b508fcffb2d9f2424c7837270e51824321fb4570','897ab551df27df14418a46ff1c3acef8338c53f3','493a472ccf903088c813ff6874d54482a161df8f','67d19edb1f6ecbbb6ccb90df2345e52e5c58efc3','dded422b7406c966c944555f220d7d3dfcf2a143','60a76c9e10e4ac53f836f9e45eb0518dd0b7b73b','b47fcc6a614247319908b00935f10ec134399917','3b5c7d0331ae900e1179eaf3545c78d147434fbf','a0f119508046dbb4f8059232f6e99f66c1e8e7a6','daab384be8471edeb755353c5dccaad0c415dac5','8485e4d103a517615f39c0d0b71fe5065c5437db','4c28749faddb096d1f04792b7daf039268c43181','c84c576954c4c493528eaa34233c926653152be5','b2797e18c499df32296545225c259dbf4bea2908','5b2dfe6f187413faecd91336bd353c05768ea722','34af7be5bcff18ec869a306b19daea70f61f7088','8f2e74688427858fc1a895fc472d074a0528a7ae','530d6251a43d688e69959237e519812585de8266','bced9b8c339d0d2838ea0fffe9a64027b4f3a877','9c9e8079df25999c606bc84f46b348544a23b9b4','ec61d22b3bc6f93e54bbff964311bba9a3a06b21','391f0136aebdd0e874c8eb85651ffda7e9f86f24','e2974e7029b008539aacc1ee885705764f8c53f4','23e105ca5329cc0338a96fe7e088ba9b319c46d1','87af28752724c400edef3970e52440639be5b1a8','f50d9e39e2bda3d8c0b1c69d1f1e4e86c4b39ac3','12827fadb8d36b829e9c2c7315e0848d2d7ef278','f603997321070e6ccada6fefe4240a9e6c7e870a','a88e381bf36e74aaa8ac5b0877153b7158bae579','11019fa64a25748a5bfb864fc200ec2710b54aa3','3d238b9146102bd11e898ff4913f86e8ded65be4','a1375bfde7be56e514471700e030b1c7e7090e2f','7936b73efa385d183e93453bea24fd0c4dff4742','41cdf6978b0c48e7044d5e4534fc8bb08de4cdf2','5138f572a4db2e2edc2d723e1bb87af72ab501f4','f30757617b6df330deba1cb607e8d47f71bda13f','a6fd8cdca1fa8cf07519d9a0c5b779eafa438b70','ada342466887e85d89c3b815b127bfced036ac76','74bd99a9263f0b8e8a5fac4d2684fe37d5a1a9cc',];
+      var order = ['16c694bcf0b3ff3723fa070eea7e1e82ef12a337','05e04b39ef06e2367a33326f5dd566913aa6628f','fbf7d9fec595585869c5c595d5588b34fd175278','e59b0a76d7bcfb429b27e00e469f35e08a9bdd1a','5ea854d6ecd4d6dd459cb36d4faf3ed36e11c073','119cd15b852615cd0fce759769b4a3788595e3bb','9c00a1833e8cf4af28c8bd94902412ad7052b4b0','b5bcdcbc6e88b380be0e48ca2620fbbb8e92e497','bf6c90305b2856c2d9c9a146dfff867fe7a5e0f3','6b9c8d175a3d7b6cf04ffd72e44a7dc88686460f','76c184d9ce64b8a52c2e67eafeb8d332c096f2be','4c30f8f931eb44c2f208e837555c0cc444dd4612','1db77ef761092d65ce847c0bcd6e7cb892db754d','284c18aa40a73e4052525a9ffb30b23182f237ea','6b336a43e394d3ab7ceb2ab54c63409e8a27aded','436c30dd76bf9b5c2b29a181d9a9412ec0ab4bdf','1373a52ddcb71f20f29d92abb6714eaabeba7424','d60f4f324a1ad9c09c4d3590c8c537af2852eeb4','d21511e2df56c306c78e1449c960c66e565e016e','39107d16f24d4c7bcd40ad1239b5f4f677877ee8','a44b740e8b2349e75c9eb0376f665eab13ff821d','a0e38b1c19eba037b34c68864634cff032f0b892','390d9571a24be0961c8fcd78c69eea16a6414246','ceba8404405dd3b3b423c45411bde15bf72a846d','f8dd2fccc21d3a08790a7877186840a692adf111','d526830d439d3c4e966b22fbedf819d465d3107b','240af7bacbfecce6e2a973de9c89fad817fb8d42','d657585ca1df5b86693fca8a0a2eae76bd9b1c2b','b508fcffb2d9f2424c7837270e51824321fb4570','897ab551df27df14418a46ff1c3acef8338c53f3','493a472ccf903088c813ff6874d54482a161df8f','67d19edb1f6ecbbb6ccb90df2345e52e5c58efc3','dded422b7406c966c944555f220d7d3dfcf2a143','60a76c9e10e4ac53f836f9e45eb0518dd0b7b73b','b47fcc6a614247319908b00935f10ec134399917','3b5c7d0331ae900e1179eaf3545c78d147434fbf','a0f119508046dbb4f8059232f6e99f66c1e8e7a6','daab384be8471edeb755353c5dccaad0c415dac5','8485e4d103a517615f39c0d0b71fe5065c5437db','4c28749faddb096d1f04792b7daf039268c43181','c84c576954c4c493528eaa34233c926653152be5','b2797e18c499df32296545225c259dbf4bea2908','5b2dfe6f187413faecd91336bd353c05768ea722','34af7be5bcff18ec869a306b19daea70f61f7088','8f2e74688427858fc1a895fc472d074a0528a7ae','530d6251a43d688e69959237e519812585de8266','bced9b8c339d0d2838ea0fffe9a64027b4f3a877','9c9e8079df25999c606bc84f46b348544a23b9b4','ec61d22b3bc6f93e54bbff964311bba9a3a06b21','391f0136aebdd0e874c8eb85651ffda7e9f86f24','e2974e7029b008539aacc1ee885705764f8c53f4','23e105ca5329cc0338a96fe7e088ba9b319c46d1','87af28752724c400edef3970e52440639be5b1a8','f50d9e39e2bda3d8c0b1c69d1f1e4e86c4b39ac3','12827fadb8d36b829e9c2c7315e0848d2d7ef278','f603997321070e6ccada6fefe4240a9e6c7e870a','a88e381bf36e74aaa8ac5b0877153b7158bae579','11019fa64a25748a5bfb864fc200ec2710b54aa3','3d238b9146102bd11e898ff4913f86e8ded65be4','a1375bfde7be56e514471700e030b1c7e7090e2f','7936b73efa385d183e93453bea24fd0c4dff4742','41cdf6978b0c48e7044d5e4534fc8bb08de4cdf2','5138f572a4db2e2edc2d723e1bb87af72ab501f4','f30757617b6df330deba1cb607e8d47f71bda13f','a6fd8cdca1fa8cf07519d9a0c5b779eafa438b70','ada342466887e85d89c3b815b127bfced036ac76','74bd99a9263f0b8e8a5fac4d2684fe37d5a1a9cc','bffe7b00046407080251ab6bf58cb97ce2a34893','5aef37f1f2b9ac45adfade044c882eb09a297569','6e2d817539fb3b2023c7bcb88ad220c136f70cf0','d4ac52727ff405f61a1d878a0aa1951ae5264c80','d2584faaa4dda5283955b2dc22812a018d04a72d','56dc3e612fbfa06cfeb26957e357defcf73aa220',];
       var tests = {
-          "16c694bcf0b3ff3723fa070eea7e1e82ef12a337":[async_test('html5lib_entities01.html 16c694bcf0b3ff3723fa070eea7e1e82ef12a337'), "FOO%26gt%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%3EBAR%22"],"05e04b39ef06e2367a33326f5dd566913aa6628f":[async_test('html5lib_entities01.html 05e04b39ef06e2367a33326f5dd566913aa6628f'), "FOO%26gtBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%3EBAR%22"],"fbf7d9fec595585869c5c595d5588b34fd175278":[async_test('html5lib_entities01.html fbf7d9fec595585869c5c595d5588b34fd175278'), "FOO%26gt%20BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%3E%20BAR%22"],"e59b0a76d7bcfb429b27e00e469f35e08a9bdd1a":[async_test('html5lib_entities01.html e59b0a76d7bcfb429b27e00e469f35e08a9bdd1a'), "FOO%26gt%3B%3B%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%3E%3B%3BBAR%22"],"5ea854d6ecd4d6dd459cb36d4faf3ed36e11c073":[async_test('html5lib_entities01.html 5ea854d6ecd4d6dd459cb36d4faf3ed36e11c073'), "I%27m%20%26notit%3B%20I%20tell%20you", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22I%27m%20%C2%ACit%3B%20I%20tell%20you%22"],"119cd15b852615cd0fce759769b4a3788595e3bb":[async_test('html5lib_entities01.html 119cd15b852615cd0fce759769b4a3788595e3bb'), "I%27m%20%26notin%3B%20I%20tell%20you", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22I%27m%20%E2%88%89%20I%20tell%20you%22"],"9c00a1833e8cf4af28c8bd94902412ad7052b4b0":[async_test('html5lib_entities01.html 9c00a1833e8cf4af28c8bd94902412ad7052b4b0'), "FOO%26%20BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%20BAR%22"],"b5bcdcbc6e88b380be0e48ca2620fbbb8e92e497":[async_test('html5lib_entities01.html b5bcdcbc6e88b380be0e48ca2620fbbb8e92e497'), "FOO%26%3CBAR%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%22%0A%7C%20%20%20%20%20%3Cbar%3E"],"bf6c90305b2856c2d9c9a146dfff867fe7a5e0f3":[async_test('html5lib_entities01.html bf6c90305b2856c2d9c9a146dfff867fe7a5e0f3'), "FOO%26%26%26%26gt%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%26%26%3EBAR%22"],"6b9c8d175a3d7b6cf04ffd72e44a7dc88686460f":[async_test('html5lib_entities01.html 6b9c8d175a3d7b6cf04ffd72e44a7dc88686460f'), "FOO%26%2341%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%29BAR%22"],"76c184d9ce64b8a52c2e67eafeb8d332c096f2be":[async_test('html5lib_entities01.html 76c184d9ce64b8a52c2e67eafeb8d332c096f2be'), "FOO%26%23x41%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOABAR%22"],"4c30f8f931eb44c2f208e837555c0cc444dd4612":[async_test('html5lib_entities01.html 4c30f8f931eb44c2f208e837555c0cc444dd4612'), "FOO%26%23X41%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOABAR%22"],"1db77ef761092d65ce847c0bcd6e7cb892db754d":[async_test('html5lib_entities01.html 1db77ef761092d65ce847c0bcd6e7cb892db754d'), "FOO%26%23BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%23BAR%22"],"284c18aa40a73e4052525a9ffb30b23182f237ea":[async_test('html5lib_entities01.html 284c18aa40a73e4052525a9ffb30b23182f237ea'), "FOO%26%23ZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%23ZOO%22"],"6b336a43e394d3ab7ceb2ab54c63409e8a27aded":[async_test('html5lib_entities01.html 6b336a43e394d3ab7ceb2ab54c63409e8a27aded'), "FOO%26%23xBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%BAR%22"],"436c30dd76bf9b5c2b29a181d9a9412ec0ab4bdf":[async_test('html5lib_entities01.html 436c30dd76bf9b5c2b29a181d9a9412ec0ab4bdf'), "FOO%26%23xZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%23xZOO%22"],"1373a52ddcb71f20f29d92abb6714eaabeba7424":[async_test('html5lib_entities01.html 1373a52ddcb71f20f29d92abb6714eaabeba7424'), "FOO%26%23XZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%23XZOO%22"],"d60f4f324a1ad9c09c4d3590c8c537af2852eeb4":[async_test('html5lib_entities01.html d60f4f324a1ad9c09c4d3590c8c537af2852eeb4'), "FOO%26%2341BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%29BAR%22"],"d21511e2df56c306c78e1449c960c66e565e016e":[async_test('html5lib_entities01.html d21511e2df56c306c78e1449c960c66e565e016e'), "FOO%26%23x41BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E4%86%BAR%22"],"39107d16f24d4c7bcd40ad1239b5f4f677877ee8":[async_test('html5lib_entities01.html 39107d16f24d4c7bcd40ad1239b5f4f677877ee8'), "FOO%26%23x41ZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOAZOO%22"],"a44b740e8b2349e75c9eb0376f665eab13ff821d":[async_test('html5lib_entities01.html a44b740e8b2349e75c9eb0376f665eab13ff821d'), "FOO%26%23x0000%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"a0e38b1c19eba037b34c68864634cff032f0b892":[async_test('html5lib_entities01.html a0e38b1c19eba037b34c68864634cff032f0b892'), "FOO%26%23x0078%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOxZOO%22"],"390d9571a24be0961c8fcd78c69eea16a6414246":[async_test('html5lib_entities01.html 390d9571a24be0961c8fcd78c69eea16a6414246'), "FOO%26%23x0079%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOyZOO%22"],"ceba8404405dd3b3b423c45411bde15bf72a846d":[async_test('html5lib_entities01.html ceba8404405dd3b3b423c45411bde15bf72a846d'), "FOO%26%23x0080%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%82%ACZOO%22"],"f8dd2fccc21d3a08790a7877186840a692adf111":[async_test('html5lib_entities01.html f8dd2fccc21d3a08790a7877186840a692adf111'), "FOO%26%23x0081%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%81ZOO%22"],"d526830d439d3c4e966b22fbedf819d465d3107b":[async_test('html5lib_entities01.html d526830d439d3c4e966b22fbedf819d465d3107b'), "FOO%26%23x0082%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%9AZOO%22"],"240af7bacbfecce6e2a973de9c89fad817fb8d42":[async_test('html5lib_entities01.html 240af7bacbfecce6e2a973de9c89fad817fb8d42'), "FOO%26%23x0083%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C6%92ZOO%22"],"d657585ca1df5b86693fca8a0a2eae76bd9b1c2b":[async_test('html5lib_entities01.html d657585ca1df5b86693fca8a0a2eae76bd9b1c2b'), "FOO%26%23x0084%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%9EZOO%22"],"b508fcffb2d9f2424c7837270e51824321fb4570":[async_test('html5lib_entities01.html b508fcffb2d9f2424c7837270e51824321fb4570'), "FOO%26%23x0085%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%A6ZOO%22"],"897ab551df27df14418a46ff1c3acef8338c53f3":[async_test('html5lib_entities01.html 897ab551df27df14418a46ff1c3acef8338c53f3'), "FOO%26%23x0086%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%A0ZOO%22"],"493a472ccf903088c813ff6874d54482a161df8f":[async_test('html5lib_entities01.html 493a472ccf903088c813ff6874d54482a161df8f'), "FOO%26%23x0087%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%A1ZOO%22"],"67d19edb1f6ecbbb6ccb90df2345e52e5c58efc3":[async_test('html5lib_entities01.html 67d19edb1f6ecbbb6ccb90df2345e52e5c58efc3'), "FOO%26%23x0088%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%CB%86ZOO%22"],"dded422b7406c966c944555f220d7d3dfcf2a143":[async_test('html5lib_entities01.html dded422b7406c966c944555f220d7d3dfcf2a143'), "FOO%26%23x0089%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%B0ZOO%22"],"60a76c9e10e4ac53f836f9e45eb0518dd0b7b73b":[async_test('html5lib_entities01.html 60a76c9e10e4ac53f836f9e45eb0518dd0b7b73b'), "FOO%26%23x008A%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%A0ZOO%22"],"b47fcc6a614247319908b00935f10ec134399917":[async_test('html5lib_entities01.html b47fcc6a614247319908b00935f10ec134399917'), "FOO%26%23x008B%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%B9ZOO%22"],"3b5c7d0331ae900e1179eaf3545c78d147434fbf":[async_test('html5lib_entities01.html 3b5c7d0331ae900e1179eaf3545c78d147434fbf'), "FOO%26%23x008C%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%92ZOO%22"],"a0f119508046dbb4f8059232f6e99f66c1e8e7a6":[async_test('html5lib_entities01.html a0f119508046dbb4f8059232f6e99f66c1e8e7a6'), "FOO%26%23x008D%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%8DZOO%22"],"daab384be8471edeb755353c5dccaad0c415dac5":[async_test('html5lib_entities01.html daab384be8471edeb755353c5dccaad0c415dac5'), "FOO%26%23x008E%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%BDZOO%22"],"8485e4d103a517615f39c0d0b71fe5065c5437db":[async_test('html5lib_entities01.html 8485e4d103a517615f39c0d0b71fe5065c5437db'), "FOO%26%23x008F%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%8FZOO%22"],"4c28749faddb096d1f04792b7daf039268c43181":[async_test('html5lib_entities01.html 4c28749faddb096d1f04792b7daf039268c43181'), "FOO%26%23x0090%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%90ZOO%22"],"c84c576954c4c493528eaa34233c926653152be5":[async_test('html5lib_entities01.html c84c576954c4c493528eaa34233c926653152be5'), "FOO%26%23x0091%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%98ZOO%22"],"b2797e18c499df32296545225c259dbf4bea2908":[async_test('html5lib_entities01.html b2797e18c499df32296545225c259dbf4bea2908'), "FOO%26%23x0092%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%99ZOO%22"],"5b2dfe6f187413faecd91336bd353c05768ea722":[async_test('html5lib_entities01.html 5b2dfe6f187413faecd91336bd353c05768ea722'), "FOO%26%23x0093%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%9CZOO%22"],"34af7be5bcff18ec869a306b19daea70f61f7088":[async_test('html5lib_entities01.html 34af7be5bcff18ec869a306b19daea70f61f7088'), "FOO%26%23x0094%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%9DZOO%22"],"8f2e74688427858fc1a895fc472d074a0528a7ae":[async_test('html5lib_entities01.html 8f2e74688427858fc1a895fc472d074a0528a7ae'), "FOO%26%23x0095%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%A2ZOO%22"],"530d6251a43d688e69959237e519812585de8266":[async_test('html5lib_entities01.html 530d6251a43d688e69959237e519812585de8266'), "FOO%26%23x0096%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%93ZOO%22"],"bced9b8c339d0d2838ea0fffe9a64027b4f3a877":[async_test('html5lib_entities01.html bced9b8c339d0d2838ea0fffe9a64027b4f3a877'), "FOO%26%23x0097%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%94ZOO%22"],"9c9e8079df25999c606bc84f46b348544a23b9b4":[async_test('html5lib_entities01.html 9c9e8079df25999c606bc84f46b348544a23b9b4'), "FOO%26%23x0098%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%CB%9CZOO%22"],"ec61d22b3bc6f93e54bbff964311bba9a3a06b21":[async_test('html5lib_entities01.html ec61d22b3bc6f93e54bbff964311bba9a3a06b21'), "FOO%26%23x0099%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%84%A2ZOO%22"],"391f0136aebdd0e874c8eb85651ffda7e9f86f24":[async_test('html5lib_entities01.html 391f0136aebdd0e874c8eb85651ffda7e9f86f24'), "FOO%26%23x009A%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%A1ZOO%22"],"e2974e7029b008539aacc1ee885705764f8c53f4":[async_test('html5lib_entities01.html e2974e7029b008539aacc1ee885705764f8c53f4'), "FOO%26%23x009B%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%BAZOO%22"],"23e105ca5329cc0338a96fe7e088ba9b319c46d1":[async_test('html5lib_entities01.html 23e105ca5329cc0338a96fe7e088ba9b319c46d1'), "FOO%26%23x009C%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%93ZOO%22"],"87af28752724c400edef3970e52440639be5b1a8":[async_test('html5lib_entities01.html 87af28752724c400edef3970e52440639be5b1a8'), "FOO%26%23x009D%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%9DZOO%22"],"f50d9e39e2bda3d8c0b1c69d1f1e4e86c4b39ac3":[async_test('html5lib_entities01.html f50d9e39e2bda3d8c0b1c69d1f1e4e86c4b39ac3'), "FOO%26%23x009E%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%BEZOO%22"],"12827fadb8d36b829e9c2c7315e0848d2d7ef278":[async_test('html5lib_entities01.html 12827fadb8d36b829e9c2c7315e0848d2d7ef278'), "FOO%26%23x009F%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%B8ZOO%22"],"f603997321070e6ccada6fefe4240a9e6c7e870a":[async_test('html5lib_entities01.html f603997321070e6ccada6fefe4240a9e6c7e870a'), "FOO%26%23x00A0%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%A0ZOO%22"],"a88e381bf36e74aaa8ac5b0877153b7158bae579":[async_test('html5lib_entities01.html a88e381bf36e74aaa8ac5b0877153b7158bae579'), "FOO%26%23xD7FF%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%ED%9F%BFZOO%22"],"11019fa64a25748a5bfb864fc200ec2710b54aa3":[async_test('html5lib_entities01.html 11019fa64a25748a5bfb864fc200ec2710b54aa3'), "FOO%26%23xD800%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"3d238b9146102bd11e898ff4913f86e8ded65be4":[async_test('html5lib_entities01.html 3d238b9146102bd11e898ff4913f86e8ded65be4'), "FOO%26%23xD801%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"a1375bfde7be56e514471700e030b1c7e7090e2f":[async_test('html5lib_entities01.html a1375bfde7be56e514471700e030b1c7e7090e2f'), "FOO%26%23xDFFE%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"7936b73efa385d183e93453bea24fd0c4dff4742":[async_test('html5lib_entities01.html 7936b73efa385d183e93453bea24fd0c4dff4742'), "FOO%26%23xDFFF%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"41cdf6978b0c48e7044d5e4534fc8bb08de4cdf2":[async_test('html5lib_entities01.html 41cdf6978b0c48e7044d5e4534fc8bb08de4cdf2'), "FOO%26%23xE000%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EE%80%80ZOO%22"],"5138f572a4db2e2edc2d723e1bb87af72ab501f4":[async_test('html5lib_entities01.html 5138f572a4db2e2edc2d723e1bb87af72ab501f4'), "FOO%26%23x10FFFE%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%F4%8F%BF%BEZOO%22"],"f30757617b6df330deba1cb607e8d47f71bda13f":[async_test('html5lib_entities01.html f30757617b6df330deba1cb607e8d47f71bda13f'), "FOO%26%23x1087D4%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%F4%88%9F%94ZOO%22"],"a6fd8cdca1fa8cf07519d9a0c5b779eafa438b70":[async_test('html5lib_entities01.html a6fd8cdca1fa8cf07519d9a0c5b779eafa438b70'), "FOO%26%23x10FFFF%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%F4%8F%BF%BFZOO%22"],"ada342466887e85d89c3b815b127bfced036ac76":[async_test('html5lib_entities01.html ada342466887e85d89c3b815b127bfced036ac76'), "FOO%26%23x110000%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"74bd99a9263f0b8e8a5fac4d2684fe37d5a1a9cc":[async_test('html5lib_entities01.html 74bd99a9263f0b8e8a5fac4d2684fe37d5a1a9cc'), "FOO%26%23xFFFFFF%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],
+          "16c694bcf0b3ff3723fa070eea7e1e82ef12a337":[async_test('html5lib_entities01.html 16c694bcf0b3ff3723fa070eea7e1e82ef12a337'), "FOO%26gt%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%3EBAR%22"],"05e04b39ef06e2367a33326f5dd566913aa6628f":[async_test('html5lib_entities01.html 05e04b39ef06e2367a33326f5dd566913aa6628f'), "FOO%26gtBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%3EBAR%22"],"fbf7d9fec595585869c5c595d5588b34fd175278":[async_test('html5lib_entities01.html fbf7d9fec595585869c5c595d5588b34fd175278'), "FOO%26gt%20BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%3E%20BAR%22"],"e59b0a76d7bcfb429b27e00e469f35e08a9bdd1a":[async_test('html5lib_entities01.html e59b0a76d7bcfb429b27e00e469f35e08a9bdd1a'), "FOO%26gt%3B%3B%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%3E%3B%3BBAR%22"],"5ea854d6ecd4d6dd459cb36d4faf3ed36e11c073":[async_test('html5lib_entities01.html 5ea854d6ecd4d6dd459cb36d4faf3ed36e11c073'), "I%27m%20%26notit%3B%20I%20tell%20you", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22I%27m%20%C2%ACit%3B%20I%20tell%20you%22"],"119cd15b852615cd0fce759769b4a3788595e3bb":[async_test('html5lib_entities01.html 119cd15b852615cd0fce759769b4a3788595e3bb'), "I%27m%20%26notin%3B%20I%20tell%20you", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22I%27m%20%E2%88%89%20I%20tell%20you%22"],"9c00a1833e8cf4af28c8bd94902412ad7052b4b0":[async_test('html5lib_entities01.html 9c00a1833e8cf4af28c8bd94902412ad7052b4b0'), "FOO%26%20BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%20BAR%22"],"b5bcdcbc6e88b380be0e48ca2620fbbb8e92e497":[async_test('html5lib_entities01.html b5bcdcbc6e88b380be0e48ca2620fbbb8e92e497'), "FOO%26%3CBAR%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%22%0A%7C%20%20%20%20%20%3Cbar%3E"],"bf6c90305b2856c2d9c9a146dfff867fe7a5e0f3":[async_test('html5lib_entities01.html bf6c90305b2856c2d9c9a146dfff867fe7a5e0f3'), "FOO%26%26%26%26gt%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%26%26%3EBAR%22"],"6b9c8d175a3d7b6cf04ffd72e44a7dc88686460f":[async_test('html5lib_entities01.html 6b9c8d175a3d7b6cf04ffd72e44a7dc88686460f'), "FOO%26%2341%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%29BAR%22"],"76c184d9ce64b8a52c2e67eafeb8d332c096f2be":[async_test('html5lib_entities01.html 76c184d9ce64b8a52c2e67eafeb8d332c096f2be'), "FOO%26%23x41%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOABAR%22"],"4c30f8f931eb44c2f208e837555c0cc444dd4612":[async_test('html5lib_entities01.html 4c30f8f931eb44c2f208e837555c0cc444dd4612'), "FOO%26%23X41%3BBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOABAR%22"],"1db77ef761092d65ce847c0bcd6e7cb892db754d":[async_test('html5lib_entities01.html 1db77ef761092d65ce847c0bcd6e7cb892db754d'), "FOO%26%23BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%23BAR%22"],"284c18aa40a73e4052525a9ffb30b23182f237ea":[async_test('html5lib_entities01.html 284c18aa40a73e4052525a9ffb30b23182f237ea'), "FOO%26%23ZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%23ZOO%22"],"6b336a43e394d3ab7ceb2ab54c63409e8a27aded":[async_test('html5lib_entities01.html 6b336a43e394d3ab7ceb2ab54c63409e8a27aded'), "FOO%26%23xBAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%BAR%22"],"436c30dd76bf9b5c2b29a181d9a9412ec0ab4bdf":[async_test('html5lib_entities01.html 436c30dd76bf9b5c2b29a181d9a9412ec0ab4bdf'), "FOO%26%23xZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%23xZOO%22"],"1373a52ddcb71f20f29d92abb6714eaabeba7424":[async_test('html5lib_entities01.html 1373a52ddcb71f20f29d92abb6714eaabeba7424'), "FOO%26%23XZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%26%23XZOO%22"],"d60f4f324a1ad9c09c4d3590c8c537af2852eeb4":[async_test('html5lib_entities01.html d60f4f324a1ad9c09c4d3590c8c537af2852eeb4'), "FOO%26%2341BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%29BAR%22"],"d21511e2df56c306c78e1449c960c66e565e016e":[async_test('html5lib_entities01.html d21511e2df56c306c78e1449c960c66e565e016e'), "FOO%26%23x41BAR", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E4%86%BAR%22"],"39107d16f24d4c7bcd40ad1239b5f4f677877ee8":[async_test('html5lib_entities01.html 39107d16f24d4c7bcd40ad1239b5f4f677877ee8'), "FOO%26%23x41ZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOAZOO%22"],"a44b740e8b2349e75c9eb0376f665eab13ff821d":[async_test('html5lib_entities01.html a44b740e8b2349e75c9eb0376f665eab13ff821d'), "FOO%26%23x0000%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"a0e38b1c19eba037b34c68864634cff032f0b892":[async_test('html5lib_entities01.html a0e38b1c19eba037b34c68864634cff032f0b892'), "FOO%26%23x0078%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOxZOO%22"],"390d9571a24be0961c8fcd78c69eea16a6414246":[async_test('html5lib_entities01.html 390d9571a24be0961c8fcd78c69eea16a6414246'), "FOO%26%23x0079%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOOyZOO%22"],"ceba8404405dd3b3b423c45411bde15bf72a846d":[async_test('html5lib_entities01.html ceba8404405dd3b3b423c45411bde15bf72a846d'), "FOO%26%23x0080%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%82%ACZOO%22"],"f8dd2fccc21d3a08790a7877186840a692adf111":[async_test('html5lib_entities01.html f8dd2fccc21d3a08790a7877186840a692adf111'), "FOO%26%23x0081%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%81ZOO%22"],"d526830d439d3c4e966b22fbedf819d465d3107b":[async_test('html5lib_entities01.html d526830d439d3c4e966b22fbedf819d465d3107b'), "FOO%26%23x0082%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%9AZOO%22"],"240af7bacbfecce6e2a973de9c89fad817fb8d42":[async_test('html5lib_entities01.html 240af7bacbfecce6e2a973de9c89fad817fb8d42'), "FOO%26%23x0083%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C6%92ZOO%22"],"d657585ca1df5b86693fca8a0a2eae76bd9b1c2b":[async_test('html5lib_entities01.html d657585ca1df5b86693fca8a0a2eae76bd9b1c2b'), "FOO%26%23x0084%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%9EZOO%22"],"b508fcffb2d9f2424c7837270e51824321fb4570":[async_test('html5lib_entities01.html b508fcffb2d9f2424c7837270e51824321fb4570'), "FOO%26%23x0085%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%A6ZOO%22"],"897ab551df27df14418a46ff1c3acef8338c53f3":[async_test('html5lib_entities01.html 897ab551df27df14418a46ff1c3acef8338c53f3'), "FOO%26%23x0086%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%A0ZOO%22"],"493a472ccf903088c813ff6874d54482a161df8f":[async_test('html5lib_entities01.html 493a472ccf903088c813ff6874d54482a161df8f'), "FOO%26%23x0087%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%A1ZOO%22"],"67d19edb1f6ecbbb6ccb90df2345e52e5c58efc3":[async_test('html5lib_entities01.html 67d19edb1f6ecbbb6ccb90df2345e52e5c58efc3'), "FOO%26%23x0088%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%CB%86ZOO%22"],"dded422b7406c966c944555f220d7d3dfcf2a143":[async_test('html5lib_entities01.html dded422b7406c966c944555f220d7d3dfcf2a143'), "FOO%26%23x0089%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%B0ZOO%22"],"60a76c9e10e4ac53f836f9e45eb0518dd0b7b73b":[async_test('html5lib_entities01.html 60a76c9e10e4ac53f836f9e45eb0518dd0b7b73b'), "FOO%26%23x008A%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%A0ZOO%22"],"b47fcc6a614247319908b00935f10ec134399917":[async_test('html5lib_entities01.html b47fcc6a614247319908b00935f10ec134399917'), "FOO%26%23x008B%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%B9ZOO%22"],"3b5c7d0331ae900e1179eaf3545c78d147434fbf":[async_test('html5lib_entities01.html 3b5c7d0331ae900e1179eaf3545c78d147434fbf'), "FOO%26%23x008C%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%92ZOO%22"],"a0f119508046dbb4f8059232f6e99f66c1e8e7a6":[async_test('html5lib_entities01.html a0f119508046dbb4f8059232f6e99f66c1e8e7a6'), "FOO%26%23x008D%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%8DZOO%22"],"daab384be8471edeb755353c5dccaad0c415dac5":[async_test('html5lib_entities01.html daab384be8471edeb755353c5dccaad0c415dac5'), "FOO%26%23x008E%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%BDZOO%22"],"8485e4d103a517615f39c0d0b71fe5065c5437db":[async_test('html5lib_entities01.html 8485e4d103a517615f39c0d0b71fe5065c5437db'), "FOO%26%23x008F%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%8FZOO%22"],"4c28749faddb096d1f04792b7daf039268c43181":[async_test('html5lib_entities01.html 4c28749faddb096d1f04792b7daf039268c43181'), "FOO%26%23x0090%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%90ZOO%22"],"c84c576954c4c493528eaa34233c926653152be5":[async_test('html5lib_entities01.html c84c576954c4c493528eaa34233c926653152be5'), "FOO%26%23x0091%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%98ZOO%22"],"b2797e18c499df32296545225c259dbf4bea2908":[async_test('html5lib_entities01.html b2797e18c499df32296545225c259dbf4bea2908'), "FOO%26%23x0092%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%99ZOO%22"],"5b2dfe6f187413faecd91336bd353c05768ea722":[async_test('html5lib_entities01.html 5b2dfe6f187413faecd91336bd353c05768ea722'), "FOO%26%23x0093%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%9CZOO%22"],"34af7be5bcff18ec869a306b19daea70f61f7088":[async_test('html5lib_entities01.html 34af7be5bcff18ec869a306b19daea70f61f7088'), "FOO%26%23x0094%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%9DZOO%22"],"8f2e74688427858fc1a895fc472d074a0528a7ae":[async_test('html5lib_entities01.html 8f2e74688427858fc1a895fc472d074a0528a7ae'), "FOO%26%23x0095%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%A2ZOO%22"],"530d6251a43d688e69959237e519812585de8266":[async_test('html5lib_entities01.html 530d6251a43d688e69959237e519812585de8266'), "FOO%26%23x0096%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%93ZOO%22"],"bced9b8c339d0d2838ea0fffe9a64027b4f3a877":[async_test('html5lib_entities01.html bced9b8c339d0d2838ea0fffe9a64027b4f3a877'), "FOO%26%23x0097%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%94ZOO%22"],"9c9e8079df25999c606bc84f46b348544a23b9b4":[async_test('html5lib_entities01.html 9c9e8079df25999c606bc84f46b348544a23b9b4'), "FOO%26%23x0098%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%CB%9CZOO%22"],"ec61d22b3bc6f93e54bbff964311bba9a3a06b21":[async_test('html5lib_entities01.html ec61d22b3bc6f93e54bbff964311bba9a3a06b21'), "FOO%26%23x0099%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%84%A2ZOO%22"],"391f0136aebdd0e874c8eb85651ffda7e9f86f24":[async_test('html5lib_entities01.html 391f0136aebdd0e874c8eb85651ffda7e9f86f24'), "FOO%26%23x009A%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%A1ZOO%22"],"e2974e7029b008539aacc1ee885705764f8c53f4":[async_test('html5lib_entities01.html e2974e7029b008539aacc1ee885705764f8c53f4'), "FOO%26%23x009B%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%E2%80%BAZOO%22"],"23e105ca5329cc0338a96fe7e088ba9b319c46d1":[async_test('html5lib_entities01.html 23e105ca5329cc0338a96fe7e088ba9b319c46d1'), "FOO%26%23x009C%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%93ZOO%22"],"87af28752724c400edef3970e52440639be5b1a8":[async_test('html5lib_entities01.html 87af28752724c400edef3970e52440639be5b1a8'), "FOO%26%23x009D%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%9DZOO%22"],"f50d9e39e2bda3d8c0b1c69d1f1e4e86c4b39ac3":[async_test('html5lib_entities01.html f50d9e39e2bda3d8c0b1c69d1f1e4e86c4b39ac3'), "FOO%26%23x009E%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%BEZOO%22"],"12827fadb8d36b829e9c2c7315e0848d2d7ef278":[async_test('html5lib_entities01.html 12827fadb8d36b829e9c2c7315e0848d2d7ef278'), "FOO%26%23x009F%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C5%B8ZOO%22"],"f603997321070e6ccada6fefe4240a9e6c7e870a":[async_test('html5lib_entities01.html f603997321070e6ccada6fefe4240a9e6c7e870a'), "FOO%26%23x00A0%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%C2%A0ZOO%22"],"a88e381bf36e74aaa8ac5b0877153b7158bae579":[async_test('html5lib_entities01.html a88e381bf36e74aaa8ac5b0877153b7158bae579'), "FOO%26%23xD7FF%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%ED%9F%BFZOO%22"],"11019fa64a25748a5bfb864fc200ec2710b54aa3":[async_test('html5lib_entities01.html 11019fa64a25748a5bfb864fc200ec2710b54aa3'), "FOO%26%23xD800%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"3d238b9146102bd11e898ff4913f86e8ded65be4":[async_test('html5lib_entities01.html 3d238b9146102bd11e898ff4913f86e8ded65be4'), "FOO%26%23xD801%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"a1375bfde7be56e514471700e030b1c7e7090e2f":[async_test('html5lib_entities01.html a1375bfde7be56e514471700e030b1c7e7090e2f'), "FOO%26%23xDFFE%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"7936b73efa385d183e93453bea24fd0c4dff4742":[async_test('html5lib_entities01.html 7936b73efa385d183e93453bea24fd0c4dff4742'), "FOO%26%23xDFFF%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"41cdf6978b0c48e7044d5e4534fc8bb08de4cdf2":[async_test('html5lib_entities01.html 41cdf6978b0c48e7044d5e4534fc8bb08de4cdf2'), "FOO%26%23xE000%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EE%80%80ZOO%22"],"5138f572a4db2e2edc2d723e1bb87af72ab501f4":[async_test('html5lib_entities01.html 5138f572a4db2e2edc2d723e1bb87af72ab501f4'), "FOO%26%23x10FFFE%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%F4%8F%BF%BEZOO%22"],"f30757617b6df330deba1cb607e8d47f71bda13f":[async_test('html5lib_entities01.html f30757617b6df330deba1cb607e8d47f71bda13f'), "FOO%26%23x1087D4%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%F4%88%9F%94ZOO%22"],"a6fd8cdca1fa8cf07519d9a0c5b779eafa438b70":[async_test('html5lib_entities01.html a6fd8cdca1fa8cf07519d9a0c5b779eafa438b70'), "FOO%26%23x10FFFF%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%F4%8F%BF%BFZOO%22"],"ada342466887e85d89c3b815b127bfced036ac76":[async_test('html5lib_entities01.html ada342466887e85d89c3b815b127bfced036ac76'), "FOO%26%23x110000%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"74bd99a9263f0b8e8a5fac4d2684fe37d5a1a9cc":[async_test('html5lib_entities01.html 74bd99a9263f0b8e8a5fac4d2684fe37d5a1a9cc'), "FOO%26%23xFFFFFF%3BZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"bffe7b00046407080251ab6bf58cb97ce2a34893":[async_test('html5lib_entities01.html bffe7b00046407080251ab6bf58cb97ce2a34893'), "FOO%26%2311111111111", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BD%22"],"5aef37f1f2b9ac45adfade044c882eb09a297569":[async_test('html5lib_entities01.html 5aef37f1f2b9ac45adfade044c882eb09a297569'), "FOO%26%231111111111", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BD%22"],"6e2d817539fb3b2023c7bcb88ad220c136f70cf0":[async_test('html5lib_entities01.html 6e2d817539fb3b2023c7bcb88ad220c136f70cf0'), "FOO%26%23111111111111", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BD%22"],"d4ac52727ff405f61a1d878a0aa1951ae5264c80":[async_test('html5lib_entities01.html d4ac52727ff405f61a1d878a0aa1951ae5264c80'), "FOO%26%2311111111111ZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"d2584faaa4dda5283955b2dc22812a018d04a72d":[async_test('html5lib_entities01.html d2584faaa4dda5283955b2dc22812a018d04a72d'), "FOO%26%231111111111ZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],"56dc3e612fbfa06cfeb26957e357defcf73aa220":[async_test('html5lib_entities01.html 56dc3e612fbfa06cfeb26957e357defcf73aa220'), "FOO%26%23111111111111ZOO", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22FOO%EF%BF%BDZOO%22"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_entities02.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_entities02.html
index fdfddde..20df8ed 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_entities02.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_entities02.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['ea66863900b0b42deee5a77c58a432c2215c32ac','bc2a229b7c801ad045da76f411faf1d4c89886d0','e30755b30108f65919767f57a2200097b638f2b4','17c5acad9075755a413541d57d0d135338450834','ec40a7216b4ac918c5e16cae66bfb8b69bcfabce','54d2e9d13436e6850a5257e8028122581cf7088d','99c8496d0ea75429a5836de44dd18708974f6de8','7e4e70e57f63968ebba82682a2629158bd053a65','dca2db4f61b5fd60121e3da3e15065654f8d8a0c','fe22904d5f3936bedc1fa110e6bde48895b399a0','6553483a30141fcff05787287c2c212df9f468e8','88d7c74afcb27bbee3e3255d9116dce9c3dc6d73','db5d22d3350e0a51d675dc17c641c73251a4739d','ea08276faa7ba526e612fc1e80047d705cd29885','c59d1cfe1b36e75e0f57664e45bef7023a73c9e9','f9d3950620f8adcbe5f9a0542c7967de4be65963','8e35dacd7c296f054e58f1ce83719401c8aff8a0','48edddaa93bbebc5cd1615cc67422ca6508e47a2','9c69a29b53eebd93db20f12d405335274098e662','565c5f6744a27602bb466d6df77803a80f064752','742984a32ecd86cb9cdedffbba47eb212e19c80f','f908b529ac9ca5366e1160856db2c3d17e3898c9','1294ffc6bee2ee41f65a60ac48ba445b99504286','ba7d8cdd4b40020f7af6bdde75a3574b5771fac9','ce23051409f58749cbce6836bc4c7c21e9c548cf',];
+      var order = ['ea66863900b0b42deee5a77c58a432c2215c32ac','bc2a229b7c801ad045da76f411faf1d4c89886d0','e30755b30108f65919767f57a2200097b638f2b4','17c5acad9075755a413541d57d0d135338450834','ec40a7216b4ac918c5e16cae66bfb8b69bcfabce','54d2e9d13436e6850a5257e8028122581cf7088d','99c8496d0ea75429a5836de44dd18708974f6de8','7e4e70e57f63968ebba82682a2629158bd053a65','dca2db4f61b5fd60121e3da3e15065654f8d8a0c','fe22904d5f3936bedc1fa110e6bde48895b399a0','6553483a30141fcff05787287c2c212df9f468e8','88d7c74afcb27bbee3e3255d9116dce9c3dc6d73','db5d22d3350e0a51d675dc17c641c73251a4739d','ea08276faa7ba526e612fc1e80047d705cd29885','c59d1cfe1b36e75e0f57664e45bef7023a73c9e9','f9d3950620f8adcbe5f9a0542c7967de4be65963','8e35dacd7c296f054e58f1ce83719401c8aff8a0','48edddaa93bbebc5cd1615cc67422ca6508e47a2','9c69a29b53eebd93db20f12d405335274098e662','565c5f6744a27602bb466d6df77803a80f064752','742984a32ecd86cb9cdedffbba47eb212e19c80f','f908b529ac9ca5366e1160856db2c3d17e3898c9','1294ffc6bee2ee41f65a60ac48ba445b99504286','ba7d8cdd4b40020f7af6bdde75a3574b5771fac9','ce23051409f58749cbce6836bc4c7c21e9c548cf','6bbeec30b849cebd1366ebb2e6d2a6c1790e8c68',];
       var tests = {
-          "ea66863900b0b42deee5a77c58a432c2215c32ac":[async_test('html5lib_entities02.html ea66863900b0b42deee5a77c58a432c2215c32ac'), "%3Cdiv%20bar%3D%22ZZ%26gt%3BYY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3EYY%22"],"bc2a229b7c801ad045da76f411faf1d4c89886d0":[async_test('html5lib_entities02.html bc2a229b7c801ad045da76f411faf1d4c89886d0'), "%3Cdiv%20bar%3D%22ZZ%26%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26%22"],"e30755b30108f65919767f57a2200097b638f2b4":[async_test('html5lib_entities02.html e30755b30108f65919767f57a2200097b638f2b4'), "%3Cdiv%20bar%3D%27ZZ%26%27%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26%22"],"17c5acad9075755a413541d57d0d135338450834":[async_test('html5lib_entities02.html 17c5acad9075755a413541d57d0d135338450834'), "%3Cdiv%20bar%3DZZ%26%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26%22"],"ec40a7216b4ac918c5e16cae66bfb8b69bcfabce":[async_test('html5lib_entities02.html ec40a7216b4ac918c5e16cae66bfb8b69bcfabce'), "%3Cdiv%20bar%3D%22ZZ%26gt%3DYY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gt%3DYY%22"],"54d2e9d13436e6850a5257e8028122581cf7088d":[async_test('html5lib_entities02.html 54d2e9d13436e6850a5257e8028122581cf7088d'), "%3Cdiv%20bar%3D%22ZZ%26gt0YY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gt0YY%22"],"99c8496d0ea75429a5836de44dd18708974f6de8":[async_test('html5lib_entities02.html 99c8496d0ea75429a5836de44dd18708974f6de8'), "%3Cdiv%20bar%3D%22ZZ%26gt9YY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gt9YY%22"],"7e4e70e57f63968ebba82682a2629158bd053a65":[async_test('html5lib_entities02.html 7e4e70e57f63968ebba82682a2629158bd053a65'), "%3Cdiv%20bar%3D%22ZZ%26gtaYY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gtaYY%22"],"dca2db4f61b5fd60121e3da3e15065654f8d8a0c":[async_test('html5lib_entities02.html dca2db4f61b5fd60121e3da3e15065654f8d8a0c'), "%3Cdiv%20bar%3D%22ZZ%26gtZYY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gtZYY%22"],"fe22904d5f3936bedc1fa110e6bde48895b399a0":[async_test('html5lib_entities02.html fe22904d5f3936bedc1fa110e6bde48895b399a0'), "%3Cdiv%20bar%3D%22ZZ%26gt%20YY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3E%20YY%22"],"6553483a30141fcff05787287c2c212df9f468e8":[async_test('html5lib_entities02.html 6553483a30141fcff05787287c2c212df9f468e8'), "%3Cdiv%20bar%3D%22ZZ%26gt%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3E%22"],"88d7c74afcb27bbee3e3255d9116dce9c3dc6d73":[async_test('html5lib_entities02.html 88d7c74afcb27bbee3e3255d9116dce9c3dc6d73'), "%3Cdiv%20bar%3D%27ZZ%26gt%27%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3E%22"],"db5d22d3350e0a51d675dc17c641c73251a4739d":[async_test('html5lib_entities02.html db5d22d3350e0a51d675dc17c641c73251a4739d'), "%3Cdiv%20bar%3DZZ%26gt%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3E%22"],"ea08276faa7ba526e612fc1e80047d705cd29885":[async_test('html5lib_entities02.html ea08276faa7ba526e612fc1e80047d705cd29885'), "%3Cdiv%20bar%3D%22ZZ%26pound_id%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%C2%A3_id%3D23%22"],"c59d1cfe1b36e75e0f57664e45bef7023a73c9e9":[async_test('html5lib_entities02.html c59d1cfe1b36e75e0f57664e45bef7023a73c9e9'), "%3Cdiv%20bar%3D%22ZZ%26prod_id%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26prod_id%3D23%22"],"f9d3950620f8adcbe5f9a0542c7967de4be65963":[async_test('html5lib_entities02.html f9d3950620f8adcbe5f9a0542c7967de4be65963'), "%3Cdiv%20bar%3D%22ZZ%26pound%3B_id%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%C2%A3_id%3D23%22"],"8e35dacd7c296f054e58f1ce83719401c8aff8a0":[async_test('html5lib_entities02.html 8e35dacd7c296f054e58f1ce83719401c8aff8a0'), "%3Cdiv%20bar%3D%22ZZ%26prod%3B_id%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%E2%88%8F_id%3D23%22"],"48edddaa93bbebc5cd1615cc67422ca6508e47a2":[async_test('html5lib_entities02.html 48edddaa93bbebc5cd1615cc67422ca6508e47a2'), "%3Cdiv%20bar%3D%22ZZ%26pound%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26pound%3D23%22"],"9c69a29b53eebd93db20f12d405335274098e662":[async_test('html5lib_entities02.html 9c69a29b53eebd93db20f12d405335274098e662'), "%3Cdiv%20bar%3D%22ZZ%26prod%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26prod%3D23%22"],"565c5f6744a27602bb466d6df77803a80f064752":[async_test('html5lib_entities02.html 565c5f6744a27602bb466d6df77803a80f064752'), "%3Cdiv%3EZZ%26pound_id%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%C2%A3_id%3D23%22"],"742984a32ecd86cb9cdedffbba47eb212e19c80f":[async_test('html5lib_entities02.html 742984a32ecd86cb9cdedffbba47eb212e19c80f'), "%3Cdiv%3EZZ%26prod_id%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%26prod_id%3D23%22"],"f908b529ac9ca5366e1160856db2c3d17e3898c9":[async_test('html5lib_entities02.html f908b529ac9ca5366e1160856db2c3d17e3898c9'), "%3Cdiv%3EZZ%26pound%3B_id%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%C2%A3_id%3D23%22"],"1294ffc6bee2ee41f65a60ac48ba445b99504286":[async_test('html5lib_entities02.html 1294ffc6bee2ee41f65a60ac48ba445b99504286'), "%3Cdiv%3EZZ%26prod%3B_id%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%E2%88%8F_id%3D23%22"],"ba7d8cdd4b40020f7af6bdde75a3574b5771fac9":[async_test('html5lib_entities02.html ba7d8cdd4b40020f7af6bdde75a3574b5771fac9'), "%3Cdiv%3EZZ%26pound%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%C2%A3%3D23%22"],"ce23051409f58749cbce6836bc4c7c21e9c548cf":[async_test('html5lib_entities02.html ce23051409f58749cbce6836bc4c7c21e9c548cf'), "%3Cdiv%3EZZ%26prod%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%26prod%3D23%22"],
+          "ea66863900b0b42deee5a77c58a432c2215c32ac":[async_test('html5lib_entities02.html ea66863900b0b42deee5a77c58a432c2215c32ac'), "%3Cdiv%20bar%3D%22ZZ%26gt%3BYY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3EYY%22"],"bc2a229b7c801ad045da76f411faf1d4c89886d0":[async_test('html5lib_entities02.html bc2a229b7c801ad045da76f411faf1d4c89886d0'), "%3Cdiv%20bar%3D%22ZZ%26%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26%22"],"e30755b30108f65919767f57a2200097b638f2b4":[async_test('html5lib_entities02.html e30755b30108f65919767f57a2200097b638f2b4'), "%3Cdiv%20bar%3D%27ZZ%26%27%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26%22"],"17c5acad9075755a413541d57d0d135338450834":[async_test('html5lib_entities02.html 17c5acad9075755a413541d57d0d135338450834'), "%3Cdiv%20bar%3DZZ%26%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26%22"],"ec40a7216b4ac918c5e16cae66bfb8b69bcfabce":[async_test('html5lib_entities02.html ec40a7216b4ac918c5e16cae66bfb8b69bcfabce'), "%3Cdiv%20bar%3D%22ZZ%26gt%3DYY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gt%3DYY%22"],"54d2e9d13436e6850a5257e8028122581cf7088d":[async_test('html5lib_entities02.html 54d2e9d13436e6850a5257e8028122581cf7088d'), "%3Cdiv%20bar%3D%22ZZ%26gt0YY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gt0YY%22"],"99c8496d0ea75429a5836de44dd18708974f6de8":[async_test('html5lib_entities02.html 99c8496d0ea75429a5836de44dd18708974f6de8'), "%3Cdiv%20bar%3D%22ZZ%26gt9YY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gt9YY%22"],"7e4e70e57f63968ebba82682a2629158bd053a65":[async_test('html5lib_entities02.html 7e4e70e57f63968ebba82682a2629158bd053a65'), "%3Cdiv%20bar%3D%22ZZ%26gtaYY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gtaYY%22"],"dca2db4f61b5fd60121e3da3e15065654f8d8a0c":[async_test('html5lib_entities02.html dca2db4f61b5fd60121e3da3e15065654f8d8a0c'), "%3Cdiv%20bar%3D%22ZZ%26gtZYY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26gtZYY%22"],"fe22904d5f3936bedc1fa110e6bde48895b399a0":[async_test('html5lib_entities02.html fe22904d5f3936bedc1fa110e6bde48895b399a0'), "%3Cdiv%20bar%3D%22ZZ%26gt%20YY%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3E%20YY%22"],"6553483a30141fcff05787287c2c212df9f468e8":[async_test('html5lib_entities02.html 6553483a30141fcff05787287c2c212df9f468e8'), "%3Cdiv%20bar%3D%22ZZ%26gt%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3E%22"],"88d7c74afcb27bbee3e3255d9116dce9c3dc6d73":[async_test('html5lib_entities02.html 88d7c74afcb27bbee3e3255d9116dce9c3dc6d73'), "%3Cdiv%20bar%3D%27ZZ%26gt%27%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3E%22"],"db5d22d3350e0a51d675dc17c641c73251a4739d":[async_test('html5lib_entities02.html db5d22d3350e0a51d675dc17c641c73251a4739d'), "%3Cdiv%20bar%3DZZ%26gt%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%3E%22"],"ea08276faa7ba526e612fc1e80047d705cd29885":[async_test('html5lib_entities02.html ea08276faa7ba526e612fc1e80047d705cd29885'), "%3Cdiv%20bar%3D%22ZZ%26pound_id%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%C2%A3_id%3D23%22"],"c59d1cfe1b36e75e0f57664e45bef7023a73c9e9":[async_test('html5lib_entities02.html c59d1cfe1b36e75e0f57664e45bef7023a73c9e9'), "%3Cdiv%20bar%3D%22ZZ%26prod_id%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26prod_id%3D23%22"],"f9d3950620f8adcbe5f9a0542c7967de4be65963":[async_test('html5lib_entities02.html f9d3950620f8adcbe5f9a0542c7967de4be65963'), "%3Cdiv%20bar%3D%22ZZ%26pound%3B_id%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%C2%A3_id%3D23%22"],"8e35dacd7c296f054e58f1ce83719401c8aff8a0":[async_test('html5lib_entities02.html 8e35dacd7c296f054e58f1ce83719401c8aff8a0'), "%3Cdiv%20bar%3D%22ZZ%26prod%3B_id%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%E2%88%8F_id%3D23%22"],"48edddaa93bbebc5cd1615cc67422ca6508e47a2":[async_test('html5lib_entities02.html 48edddaa93bbebc5cd1615cc67422ca6508e47a2'), "%3Cdiv%20bar%3D%22ZZ%26pound%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26pound%3D23%22"],"9c69a29b53eebd93db20f12d405335274098e662":[async_test('html5lib_entities02.html 9c69a29b53eebd93db20f12d405335274098e662'), "%3Cdiv%20bar%3D%22ZZ%26prod%3D23%22%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22ZZ%26prod%3D23%22"],"565c5f6744a27602bb466d6df77803a80f064752":[async_test('html5lib_entities02.html 565c5f6744a27602bb466d6df77803a80f064752'), "%3Cdiv%3EZZ%26pound_id%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%C2%A3_id%3D23%22"],"742984a32ecd86cb9cdedffbba47eb212e19c80f":[async_test('html5lib_entities02.html 742984a32ecd86cb9cdedffbba47eb212e19c80f'), "%3Cdiv%3EZZ%26prod_id%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%26prod_id%3D23%22"],"f908b529ac9ca5366e1160856db2c3d17e3898c9":[async_test('html5lib_entities02.html f908b529ac9ca5366e1160856db2c3d17e3898c9'), "%3Cdiv%3EZZ%26pound%3B_id%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%C2%A3_id%3D23%22"],"1294ffc6bee2ee41f65a60ac48ba445b99504286":[async_test('html5lib_entities02.html 1294ffc6bee2ee41f65a60ac48ba445b99504286'), "%3Cdiv%3EZZ%26prod%3B_id%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%E2%88%8F_id%3D23%22"],"ba7d8cdd4b40020f7af6bdde75a3574b5771fac9":[async_test('html5lib_entities02.html ba7d8cdd4b40020f7af6bdde75a3574b5771fac9'), "%3Cdiv%3EZZ%26pound%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%C2%A3%3D23%22"],"ce23051409f58749cbce6836bc4c7c21e9c548cf":[async_test('html5lib_entities02.html ce23051409f58749cbce6836bc4c7c21e9c548cf'), "%3Cdiv%3EZZ%26prod%3D23%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%26prod%3D23%22"],"6bbeec30b849cebd1366ebb2e6d2a6c1790e8c68":[async_test('html5lib_entities02.html 6bbeec30b849cebd1366ebb2e6d2a6c1790e8c68'), "%3Cdiv%3EZZ%26AElig%3D%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22ZZ%C3%86%3D%22"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_adoption01.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_adoption01.html
new file mode 100644
index 0000000..d3b07f4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_adoption01.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>HTML 5 Parser tests html5lib_innerHTML_adoption01.html</title>
+    <meta name="timeout" content="long">
+  </head>
+  <body>
+    <h1>html5lib Parser Test</h1>
+    <div id="log"></div>
+    <script src="common.js"></script>
+    <script src="test.js"></script>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script>
+      var num_iframes = 8;
+      var order = ['0bf80e1546d4c221354aa9734f61713b7d64ee6d',];
+      var tests = {
+          "0bf80e1546d4c221354aa9734f61713b7d64ee6d":[async_test('html5lib_innerHTML_adoption01.html 0bf80e1546d4c221354aa9734f61713b7d64ee6d'), "%3Cb%3E%3Cem%3E%3Cfoo%3E%3Cfoob%3E%3Cfooc%3E%3Caside%3E%3C/b%3E%3C/em%3E", "%23document%0A%7C%20%3Cb%3E%0A%7C%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%3Cfoob%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cfooc%3E%0A%7C%20%3Caside%3E%0A%7C%20%20%20%3Cb%3E", 'div'],
+      }
+      init_tests("innerHTML");
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_foreign-fragment.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_foreign-fragment.html
new file mode 100644
index 0000000..102a46a3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_foreign-fragment.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>HTML 5 Parser tests html5lib_innerHTML_foreign-fragment.html</title>
+    <meta name="timeout" content="long">
+  </head>
+  <body>
+    <h1>html5lib Parser Test</h1>
+    <div id="log"></div>
+    <script src="common.js"></script>
+    <script src="test.js"></script>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script>
+      var num_iframes = 8;
+      var order = ['4917b7458e1fff6c5cb21d7baf6863cc9550c61e','b6d19b8ccacd2fde354df002b856f649ae91b20e','0c2411aa96ee023941778adaa11977890b232dc3','af0d0fc82bcd7e5ba5bc40f781701552b19bb862','0135b05656c198b96a9e0f94333aa2c0190ec795','60d4a82dede2a297d6306278a19897d021075c6e','f862d10d81a600b69e7fabd1474ca854ce08cca7','5d1db05a97609488e6749ff191294713aec9a90f','8804aa42daebb5ff2ab0015c6e89d8e40e7a8610','34b599e68117799324663b39aa3ba469bffb2dcb','cc2199d299947f304e204c867bed2c7e910d50cc','87965749e4321e6ea69352296e89af9372af419e','db3b9be701b6878b437ea7096ac3b7ba8c0e2b57','148291c826fd7d1d455a7636f00ce6d6f6c3e890','2007abb6eef0427335962c65b7c8d7315f508afd','2e22f45e60f67be00f4827a4ca18f6bce7d7aacb','ba901841df046ba97bff9470e995f9792cb4aba5','439bec6b2c990ad6650baef76ebfb08220b186cf','6b7a24dd43b1f9059baee275caefabbef4b2d131','0a323099fae55bee0bf410053a7b5dae30ac6621','0b4329325579cf075c3a220f1e19825804e5775f','d2f37bafc0cd3bf4530cc1f6ef2fd261e0720201','6d037965d612d849672a73f2e8649ea90907483d','5bcd7fe5efe9d5a750a8cc293db28b686644cb13','9db26efc179b9a1be9cc7ea3086e4a9554e42562','e2bb8b2426ee1452f323274b05a458d52bf2f631','387ce2642c063a59c09b0a267cb8d35000e0a5a9','849d87495f6410c685eeceaaa9ce7331aa34c347','8377205f1e8ae86e7b7f2679410ed480ddb6bdab','8f929d7038047d37e8faf1e8956c7fa4c5b6b687','4070c271e57701248ff03bc6a2b9e714b69a8d61','59e76a925187915211a6ec38d0908a30577240c0','ea8e786baa7f216bc0346e425991ec6665142d82','1b2d5a4c9bed75970b2a6d71c33e52788c736fac','3657e075c88c2088e844cfb5140d344083c0b85a','909832844e7ff22822696f30c9ad9aba08b86a25','6ed082cc506da530d3128c24b8980cb551f28c43','18609521e139b2ffea10b1cd0cab5dc133b921c4','14e07b0c2adecfe362428885346c200e89f08e66','0cb505b329a178f11563ae05fe553f33f57d01cd','b4c43a4fcdaa1a4c753674c4f92987b70d54d80b','7021fb0933e92112b94ee54b923efb6bc71e3b07','7c4b1614e2180b6649f3b02cf5c4a9d735166e1b','bdeacb9250263776c63c2c7f731717c389bdc34c','2c46c15bdba5835b0f2f0e9eb5bc8566047b7d6d','8dfcfbf823ad6c7b6f7b81efc352f29b4e41e8be','74a8a40517c6fe110f0c71af7efb56d459ea8227','0c1782eb0f62f616627f0132729d6a194f8b7546','9dc5a819afe33d6babc04edc8f92cb8045f0f006','1a7663e45ee098567d82d0fa4351794cc7ef26f9','74fc819300ea11a14c04d5840d1daf6f998be64c','fe33f97f6a5482b2663340572a0d79309199c815','dfaa71da17a62d7f5de9f180beefcf36a05ce447','822f22f8f09e3a5cc1575f17487f3138543ce138','48e58a3e03d51a1676401ad872c03b96c52d3e2e','4e716ca1a2ba1079c8e163f8ba13dfc448abbf0f','33b553bb92ae345ef57f85312ad6e04c742f151e',];
+      var tests = {
+          "4917b7458e1fff6c5cb21d7baf6863cc9550c61e":[async_test('html5lib_innerHTML_foreign-fragment.html 4917b7458e1fff6c5cb21d7baf6863cc9550c61e'), "%3Cnobr%3EX", "%23document%0A%7C%20%3Csvg%20nobr%3E%0A%7C%20%20%20%22X%22", 'svg path'],"b6d19b8ccacd2fde354df002b856f649ae91b20e":[async_test('html5lib_innerHTML_foreign-fragment.html b6d19b8ccacd2fde354df002b856f649ae91b20e'), "%3Cfont%20color%3E%3C/font%3EX", "%23document%0A%7C%20%3Csvg%20font%3E%0A%7C%20%20%20color%3D%22%22%0A%7C%20%22X%22", 'svg path'],"0c2411aa96ee023941778adaa11977890b232dc3":[async_test('html5lib_innerHTML_foreign-fragment.html 0c2411aa96ee023941778adaa11977890b232dc3'), "%3Cfont%3E%3C/font%3EX", "%23document%0A%7C%20%3Csvg%20font%3E%0A%7C%20%22X%22", 'svg path'],"af0d0fc82bcd7e5ba5bc40f781701552b19bb862":[async_test('html5lib_innerHTML_foreign-fragment.html af0d0fc82bcd7e5ba5bc40f781701552b19bb862'), "%3Cg%3E%3C/path%3EX", "%23document%0A%7C%20%3Csvg%20g%3E%0A%7C%20%20%20%22X%22", 'svg path'],"0135b05656c198b96a9e0f94333aa2c0190ec795":[async_test('html5lib_innerHTML_foreign-fragment.html 0135b05656c198b96a9e0f94333aa2c0190ec795'), "%3C/path%3EX", "%23document%0A%7C%20%22X%22", 'svg path'],"60d4a82dede2a297d6306278a19897d021075c6e":[async_test('html5lib_innerHTML_foreign-fragment.html 60d4a82dede2a297d6306278a19897d021075c6e'), "%3C/foreignObject%3EX", "%23document%0A%7C%20%22X%22", 'svg foreignObject'],"f862d10d81a600b69e7fabd1474ca854ce08cca7":[async_test('html5lib_innerHTML_foreign-fragment.html f862d10d81a600b69e7fabd1474ca854ce08cca7'), "%3C/desc%3EX", "%23document%0A%7C%20%22X%22", 'svg desc'],"5d1db05a97609488e6749ff191294713aec9a90f":[async_test('html5lib_innerHTML_foreign-fragment.html 5d1db05a97609488e6749ff191294713aec9a90f'), "%3C/title%3EX", "%23document%0A%7C%20%22X%22", 'svg title'],"8804aa42daebb5ff2ab0015c6e89d8e40e7a8610":[async_test('html5lib_innerHTML_foreign-fragment.html 8804aa42daebb5ff2ab0015c6e89d8e40e7a8610'), "%3C/svg%3EX", "%23document%0A%7C%20%22X%22", 'svg svg'],"34b599e68117799324663b39aa3ba469bffb2dcb":[async_test('html5lib_innerHTML_foreign-fragment.html 34b599e68117799324663b39aa3ba469bffb2dcb'), "%3C/mfenced%3EX", "%23document%0A%7C%20%22X%22", 'math mfenced'],"cc2199d299947f304e204c867bed2c7e910d50cc":[async_test('html5lib_innerHTML_foreign-fragment.html cc2199d299947f304e204c867bed2c7e910d50cc'), "%3C/malignmark%3EX", "%23document%0A%7C%20%22X%22", 'math malignmark'],"87965749e4321e6ea69352296e89af9372af419e":[async_test('html5lib_innerHTML_foreign-fragment.html 87965749e4321e6ea69352296e89af9372af419e'), "%3C/math%3EX", "%23document%0A%7C%20%22X%22", 'math math'],"db3b9be701b6878b437ea7096ac3b7ba8c0e2b57":[async_test('html5lib_innerHTML_foreign-fragment.html db3b9be701b6878b437ea7096ac3b7ba8c0e2b57'), "%3C/annotation-xml%3EX", "%23document%0A%7C%20%22X%22", 'math annotation-xml'],"148291c826fd7d1d455a7636f00ce6d6f6c3e890":[async_test('html5lib_innerHTML_foreign-fragment.html 148291c826fd7d1d455a7636f00ce6d6f6c3e890'), "%3C/mtext%3EX", "%23document%0A%7C%20%22X%22", 'math mtext'],"2007abb6eef0427335962c65b7c8d7315f508afd":[async_test('html5lib_innerHTML_foreign-fragment.html 2007abb6eef0427335962c65b7c8d7315f508afd'), "%3C/mi%3EX", "%23document%0A%7C%20%22X%22", 'math mi'],"2e22f45e60f67be00f4827a4ca18f6bce7d7aacb":[async_test('html5lib_innerHTML_foreign-fragment.html 2e22f45e60f67be00f4827a4ca18f6bce7d7aacb'), "%3C/mo%3EX", "%23document%0A%7C%20%22X%22", 'math mo'],"ba901841df046ba97bff9470e995f9792cb4aba5":[async_test('html5lib_innerHTML_foreign-fragment.html ba901841df046ba97bff9470e995f9792cb4aba5'), "%3C/mn%3EX", "%23document%0A%7C%20%22X%22", 'math mn'],"439bec6b2c990ad6650baef76ebfb08220b186cf":[async_test('html5lib_innerHTML_foreign-fragment.html 439bec6b2c990ad6650baef76ebfb08220b186cf'), "%3C/ms%3EX", "%23document%0A%7C%20%22X%22", 'math ms'],"6b7a24dd43b1f9059baee275caefabbef4b2d131":[async_test('html5lib_innerHTML_foreign-fragment.html 6b7a24dd43b1f9059baee275caefabbef4b2d131'), "%3Cb%3E%3C/b%3E%3Cmglyph/%3E%3Ci%3E%3C/i%3E%3Cmalignmark/%3E%3Cu%3E%3C/u%3E%3Cms/%3EX", "%23document%0A%7C%20%3Cb%3E%0A%7C%20%3Cmath%20mglyph%3E%0A%7C%20%3Ci%3E%0A%7C%20%3Cmath%20malignmark%3E%0A%7C%20%3Cu%3E%0A%7C%20%3Cms%3E%0A%7C%20%20%20%22X%22", 'math ms'],"0a323099fae55bee0bf410053a7b5dae30ac6621":[async_test('html5lib_innerHTML_foreign-fragment.html 0a323099fae55bee0bf410053a7b5dae30ac6621'), "%3Cmalignmark%3E%3C/malignmark%3E", "%23document%0A%7C%20%3Cmath%20malignmark%3E", 'math ms'],"0b4329325579cf075c3a220f1e19825804e5775f":[async_test('html5lib_innerHTML_foreign-fragment.html 0b4329325579cf075c3a220f1e19825804e5775f'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cdiv%3E", 'math ms'],"d2f37bafc0cd3bf4530cc1f6ef2fd261e0720201":[async_test('html5lib_innerHTML_foreign-fragment.html d2f37bafc0cd3bf4530cc1f6ef2fd261e0720201'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cfigure%3E", 'math ms'],"6d037965d612d849672a73f2e8649ea90907483d":[async_test('html5lib_innerHTML_foreign-fragment.html 6d037965d612d849672a73f2e8649ea90907483d'), "%3Cb%3E%3C/b%3E%3Cmglyph/%3E%3Ci%3E%3C/i%3E%3Cmalignmark/%3E%3Cu%3E%3C/u%3E%3Cmn/%3EX", "%23document%0A%7C%20%3Cb%3E%0A%7C%20%3Cmath%20mglyph%3E%0A%7C%20%3Ci%3E%0A%7C%20%3Cmath%20malignmark%3E%0A%7C%20%3Cu%3E%0A%7C%20%3Cmn%3E%0A%7C%20%20%20%22X%22", 'math mn'],"5bcd7fe5efe9d5a750a8cc293db28b686644cb13":[async_test('html5lib_innerHTML_foreign-fragment.html 5bcd7fe5efe9d5a750a8cc293db28b686644cb13'), "%3Cmalignmark%3E%3C/malignmark%3E", "%23document%0A%7C%20%3Cmath%20malignmark%3E", 'math mn'],"9db26efc179b9a1be9cc7ea3086e4a9554e42562":[async_test('html5lib_innerHTML_foreign-fragment.html 9db26efc179b9a1be9cc7ea3086e4a9554e42562'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cdiv%3E", 'math mn'],"e2bb8b2426ee1452f323274b05a458d52bf2f631":[async_test('html5lib_innerHTML_foreign-fragment.html e2bb8b2426ee1452f323274b05a458d52bf2f631'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cfigure%3E", 'math mn'],"387ce2642c063a59c09b0a267cb8d35000e0a5a9":[async_test('html5lib_innerHTML_foreign-fragment.html 387ce2642c063a59c09b0a267cb8d35000e0a5a9'), "%3Cb%3E%3C/b%3E%3Cmglyph/%3E%3Ci%3E%3C/i%3E%3Cmalignmark/%3E%3Cu%3E%3C/u%3E%3Cmo/%3EX", "%23document%0A%7C%20%3Cb%3E%0A%7C%20%3Cmath%20mglyph%3E%0A%7C%20%3Ci%3E%0A%7C%20%3Cmath%20malignmark%3E%0A%7C%20%3Cu%3E%0A%7C%20%3Cmo%3E%0A%7C%20%20%20%22X%22", 'math mo'],"849d87495f6410c685eeceaaa9ce7331aa34c347":[async_test('html5lib_innerHTML_foreign-fragment.html 849d87495f6410c685eeceaaa9ce7331aa34c347'), "%3Cmalignmark%3E%3C/malignmark%3E", "%23document%0A%7C%20%3Cmath%20malignmark%3E", 'math mo'],"8377205f1e8ae86e7b7f2679410ed480ddb6bdab":[async_test('html5lib_innerHTML_foreign-fragment.html 8377205f1e8ae86e7b7f2679410ed480ddb6bdab'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cdiv%3E", 'math mo'],"8f929d7038047d37e8faf1e8956c7fa4c5b6b687":[async_test('html5lib_innerHTML_foreign-fragment.html 8f929d7038047d37e8faf1e8956c7fa4c5b6b687'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cfigure%3E", 'math mo'],"4070c271e57701248ff03bc6a2b9e714b69a8d61":[async_test('html5lib_innerHTML_foreign-fragment.html 4070c271e57701248ff03bc6a2b9e714b69a8d61'), "%3Cb%3E%3C/b%3E%3Cmglyph/%3E%3Ci%3E%3C/i%3E%3Cmalignmark/%3E%3Cu%3E%3C/u%3E%3Cmi/%3EX", "%23document%0A%7C%20%3Cb%3E%0A%7C%20%3Cmath%20mglyph%3E%0A%7C%20%3Ci%3E%0A%7C%20%3Cmath%20malignmark%3E%0A%7C%20%3Cu%3E%0A%7C%20%3Cmi%3E%0A%7C%20%20%20%22X%22", 'math mi'],"59e76a925187915211a6ec38d0908a30577240c0":[async_test('html5lib_innerHTML_foreign-fragment.html 59e76a925187915211a6ec38d0908a30577240c0'), "%3Cmalignmark%3E%3C/malignmark%3E", "%23document%0A%7C%20%3Cmath%20malignmark%3E", 'math mi'],"ea8e786baa7f216bc0346e425991ec6665142d82":[async_test('html5lib_innerHTML_foreign-fragment.html ea8e786baa7f216bc0346e425991ec6665142d82'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cdiv%3E", 'math mi'],"1b2d5a4c9bed75970b2a6d71c33e52788c736fac":[async_test('html5lib_innerHTML_foreign-fragment.html 1b2d5a4c9bed75970b2a6d71c33e52788c736fac'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cfigure%3E", 'math mi'],"3657e075c88c2088e844cfb5140d344083c0b85a":[async_test('html5lib_innerHTML_foreign-fragment.html 3657e075c88c2088e844cfb5140d344083c0b85a'), "%3Cb%3E%3C/b%3E%3Cmglyph/%3E%3Ci%3E%3C/i%3E%3Cmalignmark/%3E%3Cu%3E%3C/u%3E%3Cmtext/%3EX", "%23document%0A%7C%20%3Cb%3E%0A%7C%20%3Cmath%20mglyph%3E%0A%7C%20%3Ci%3E%0A%7C%20%3Cmath%20malignmark%3E%0A%7C%20%3Cu%3E%0A%7C%20%3Cmtext%3E%0A%7C%20%20%20%22X%22", 'math mtext'],"909832844e7ff22822696f30c9ad9aba08b86a25":[async_test('html5lib_innerHTML_foreign-fragment.html 909832844e7ff22822696f30c9ad9aba08b86a25'), "%3Cmalignmark%3E%3C/malignmark%3E", "%23document%0A%7C%20%3Cmath%20malignmark%3E", 'math mtext'],"6ed082cc506da530d3128c24b8980cb551f28c43":[async_test('html5lib_innerHTML_foreign-fragment.html 6ed082cc506da530d3128c24b8980cb551f28c43'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cdiv%3E", 'math mtext'],"18609521e139b2ffea10b1cd0cab5dc133b921c4":[async_test('html5lib_innerHTML_foreign-fragment.html 18609521e139b2ffea10b1cd0cab5dc133b921c4'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cfigure%3E", 'math mtext'],"14e07b0c2adecfe362428885346c200e89f08e66":[async_test('html5lib_innerHTML_foreign-fragment.html 14e07b0c2adecfe362428885346c200e89f08e66'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cmath%20div%3E", 'math annotation-xml'],"0cb505b329a178f11563ae05fe553f33f57d01cd":[async_test('html5lib_innerHTML_foreign-fragment.html 0cb505b329a178f11563ae05fe553f33f57d01cd'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cmath%20figure%3E", 'math annotation-xml'],"b4c43a4fcdaa1a4c753674c4f92987b70d54d80b":[async_test('html5lib_innerHTML_foreign-fragment.html b4c43a4fcdaa1a4c753674c4f92987b70d54d80b'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cmath%20div%3E", 'math math'],"7021fb0933e92112b94ee54b923efb6bc71e3b07":[async_test('html5lib_innerHTML_foreign-fragment.html 7021fb0933e92112b94ee54b923efb6bc71e3b07'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cmath%20figure%3E", 'math math'],"7c4b1614e2180b6649f3b02cf5c4a9d735166e1b":[async_test('html5lib_innerHTML_foreign-fragment.html 7c4b1614e2180b6649f3b02cf5c4a9d735166e1b'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cdiv%3E", 'svg foreignObject'],"bdeacb9250263776c63c2c7f731717c389bdc34c":[async_test('html5lib_innerHTML_foreign-fragment.html bdeacb9250263776c63c2c7f731717c389bdc34c'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cfigure%3E", 'svg foreignObject'],"2c46c15bdba5835b0f2f0e9eb5bc8566047b7d6d":[async_test('html5lib_innerHTML_foreign-fragment.html 2c46c15bdba5835b0f2f0e9eb5bc8566047b7d6d'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cdiv%3E", 'svg title'],"8dfcfbf823ad6c7b6f7b81efc352f29b4e41e8be":[async_test('html5lib_innerHTML_foreign-fragment.html 8dfcfbf823ad6c7b6f7b81efc352f29b4e41e8be'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cfigure%3E", 'svg title'],"74a8a40517c6fe110f0c71af7efb56d459ea8227":[async_test('html5lib_innerHTML_foreign-fragment.html 74a8a40517c6fe110f0c71af7efb56d459ea8227'), "%3Cfigure%3E%3C/figure%3E", "%23document%0A%7C%20%3Cfigure%3E", 'svg desc'],"0c1782eb0f62f616627f0132729d6a194f8b7546":[async_test('html5lib_innerHTML_foreign-fragment.html 0c1782eb0f62f616627f0132729d6a194f8b7546'), "%3Cdiv%3E%3Ch1%3EX%3C/h1%3E%3C/div%3E", "%23document%0A%7C%20%3Csvg%20div%3E%0A%7C%20%20%20%3Csvg%20h1%3E%0A%7C%20%20%20%20%20%22X%22", 'svg svg'],"9dc5a819afe33d6babc04edc8f92cb8045f0f006":[async_test('html5lib_innerHTML_foreign-fragment.html 9dc5a819afe33d6babc04edc8f92cb8045f0f006'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Csvg%20div%3E", 'svg svg'],"1a7663e45ee098567d82d0fa4351794cc7ef26f9":[async_test('html5lib_innerHTML_foreign-fragment.html 1a7663e45ee098567d82d0fa4351794cc7ef26f9'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Cdiv%3E", 'svg desc'],"74fc819300ea11a14c04d5840d1daf6f998be64c":[async_test('html5lib_innerHTML_foreign-fragment.html 74fc819300ea11a14c04d5840d1daf6f998be64c'), "%3Cplaintext%3E%3Cfoo%3E", "%23document%0A%7C%20%3Cplaintext%3E%0A%7C%20%20%20%22%3Cfoo%3E%22", 'svg desc'],"fe33f97f6a5482b2663340572a0d79309199c815":[async_test('html5lib_innerHTML_foreign-fragment.html fe33f97f6a5482b2663340572a0d79309199c815'), "%3Cframeset%3EX", "%23document%0A%7C%20%22X%22", 'svg desc'],"dfaa71da17a62d7f5de9f180beefcf36a05ce447":[async_test('html5lib_innerHTML_foreign-fragment.html dfaa71da17a62d7f5de9f180beefcf36a05ce447'), "%3Chead%3EX", "%23document%0A%7C%20%22X%22", 'svg desc'],"822f22f8f09e3a5cc1575f17487f3138543ce138":[async_test('html5lib_innerHTML_foreign-fragment.html 822f22f8f09e3a5cc1575f17487f3138543ce138'), "%3Cbody%3EX", "%23document%0A%7C%20%22X%22", 'svg desc'],"48e58a3e03d51a1676401ad872c03b96c52d3e2e":[async_test('html5lib_innerHTML_foreign-fragment.html 48e58a3e03d51a1676401ad872c03b96c52d3e2e'), "%3Chtml%3EX", "%23document%0A%7C%20%22X%22", 'svg desc'],"4e716ca1a2ba1079c8e163f8ba13dfc448abbf0f":[async_test('html5lib_innerHTML_foreign-fragment.html 4e716ca1a2ba1079c8e163f8ba13dfc448abbf0f'), "%3Chtml%20class%3D%22foo%22%3EX", "%23document%0A%7C%20%22X%22", 'svg desc'],"33b553bb92ae345ef57f85312ad6e04c742f151e":[async_test('html5lib_innerHTML_foreign-fragment.html 33b553bb92ae345ef57f85312ad6e04c742f151e'), "%3Cbody%20class%3D%22foo%22%3EX", "%23document%0A%7C%20%22X%22", 'svg desc'],
+      }
+      init_tests("innerHTML");
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_math.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_math.html
new file mode 100644
index 0000000..ceb810b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_math.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>HTML 5 Parser tests html5lib_innerHTML_math.html</title>
+    <meta name="timeout" content="long">
+  </head>
+  <body>
+    <h1>html5lib Parser Test</h1>
+    <div id="log"></div>
+    <script src="common.js"></script>
+    <script src="test.js"></script>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script>
+      var num_iframes = 8;
+      var order = ['0e7e70d0dcf0c26593203b36cac4fa7f6325613e','fa7d4a31838dbcc16bf73672f2f4486cca185673','d9d2e4c0e926a91f5e704846cdbc855e3cb21949','c04b203803f6b3bec3db65db16854e7e624d13ef','4f95d47164955a6b163935fd8ac89ea200767330','e942ee6666e1dc938aab10fc2374a2240806b439','3537413f7f8166cb0c3a324fef8261be5628611d','c0186fb0fe26b48bcd82d58ebe0c90a423f26c28',];
+      var tests = {
+          "0e7e70d0dcf0c26593203b36cac4fa7f6325613e":[async_test('html5lib_innerHTML_math.html 0e7e70d0dcf0c26593203b36cac4fa7f6325613e'), "%3Cmath%3E%3Ctr%3E%3Ctd%3E%3Cmo%3E%3Ctr%3E", "%23document%0A%7C%20%3Cmath%20math%3E%0A%7C%20%20%20%3Cmath%20tr%3E%0A%7C%20%20%20%20%20%3Cmath%20td%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20mo%3E", 'td'],"fa7d4a31838dbcc16bf73672f2f4486cca185673":[async_test('html5lib_innerHTML_math.html fa7d4a31838dbcc16bf73672f2f4486cca185673'), "%3Cmath%3E%3Ctr%3E%3Ctd%3E%3Cmo%3E%3Ctr%3E", "%23document%0A%7C%20%3Cmath%20math%3E%0A%7C%20%20%20%3Cmath%20tr%3E%0A%7C%20%20%20%20%20%3Cmath%20td%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20mo%3E", 'tr'],"d9d2e4c0e926a91f5e704846cdbc855e3cb21949":[async_test('html5lib_innerHTML_math.html d9d2e4c0e926a91f5e704846cdbc855e3cb21949'), "%3Cmath%3E%3Cthead%3E%3Cmo%3E%3Ctbody%3E", "%23document%0A%7C%20%3Cmath%20math%3E%0A%7C%20%20%20%3Cmath%20thead%3E%0A%7C%20%20%20%20%20%3Cmath%20mo%3E", 'thead'],"c04b203803f6b3bec3db65db16854e7e624d13ef":[async_test('html5lib_innerHTML_math.html c04b203803f6b3bec3db65db16854e7e624d13ef'), "%3Cmath%3E%3Ctfoot%3E%3Cmo%3E%3Ctbody%3E", "%23document%0A%7C%20%3Cmath%20math%3E%0A%7C%20%20%20%3Cmath%20tfoot%3E%0A%7C%20%20%20%20%20%3Cmath%20mo%3E", 'tfoot'],"4f95d47164955a6b163935fd8ac89ea200767330":[async_test('html5lib_innerHTML_math.html 4f95d47164955a6b163935fd8ac89ea200767330'), "%3Cmath%3E%3Ctbody%3E%3Cmo%3E%3Ctfoot%3E", "%23document%0A%7C%20%3Cmath%20math%3E%0A%7C%20%20%20%3Cmath%20tbody%3E%0A%7C%20%20%20%20%20%3Cmath%20mo%3E", 'tbody'],"e942ee6666e1dc938aab10fc2374a2240806b439":[async_test('html5lib_innerHTML_math.html e942ee6666e1dc938aab10fc2374a2240806b439'), "%3Cmath%3E%3Ctbody%3E%3Cmo%3E%3C/table%3E", "%23document%0A%7C%20%3Cmath%20math%3E%0A%7C%20%20%20%3Cmath%20tbody%3E%0A%7C%20%20%20%20%20%3Cmath%20mo%3E", 'tbody'],"3537413f7f8166cb0c3a324fef8261be5628611d":[async_test('html5lib_innerHTML_math.html 3537413f7f8166cb0c3a324fef8261be5628611d'), "%3Cmath%3E%3Cthead%3E%3Cmo%3E%3C/table%3E", "%23document%0A%7C%20%3Cmath%20math%3E%0A%7C%20%20%20%3Cmath%20thead%3E%0A%7C%20%20%20%20%20%3Cmath%20mo%3E", 'tbody'],"c0186fb0fe26b48bcd82d58ebe0c90a423f26c28":[async_test('html5lib_innerHTML_math.html c0186fb0fe26b48bcd82d58ebe0c90a423f26c28'), "%3Cmath%3E%3Ctfoot%3E%3Cmo%3E%3C/table%3E", "%23document%0A%7C%20%3Cmath%20math%3E%0A%7C%20%20%20%3Cmath%20tfoot%3E%0A%7C%20%20%20%20%20%3Cmath%20mo%3E", 'tbody'],
+      }
+      init_tests("innerHTML");
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_webkit02.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_webkit02.html
new file mode 100644
index 0000000..3308d22
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_innerHTML_webkit02.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>HTML 5 Parser tests html5lib_innerHTML_webkit02.html</title>
+    <meta name="timeout" content="long">
+  </head>
+  <body>
+    <h1>html5lib Parser Test</h1>
+    <div id="log"></div>
+    <script src="common.js"></script>
+    <script src="test.js"></script>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script>
+      var num_iframes = 8;
+      var order = ['bafeef55f21b568ab89a91082464614e4ebe7c2f','9461cfc6d9d4f08b05b3a95bbe5baa264f868a44','c2c4647447354abc154f1917a7fbefa4a679d5fb',];
+      var tests = {
+          "bafeef55f21b568ab89a91082464614e4ebe7c2f":[async_test('html5lib_innerHTML_webkit02.html bafeef55f21b568ab89a91082464614e4ebe7c2f'), "%3Cb%3E%3Cem%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Caside%3E%3C/b%3E%3C/em%3E", "%23document%0A%7C%20%3Cb%3E%0A%7C%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%3Caside%3E%0A%7C%20%20%20%3Cb%3E", 'div'],"9461cfc6d9d4f08b05b3a95bbe5baa264f868a44":[async_test('html5lib_innerHTML_webkit02.html 9461cfc6d9d4f08b05b3a95bbe5baa264f868a44'), "%3Cb%3E%3Cem%3E%3Cfoo%3E%3Cfoob%3E%3Cfoob%3E%3Cfoob%3E%3Cfoob%3E%3Cfooc%3E%3Cfooc%3E%3Cfooc%3E%3Cfooc%3E%3Cfood%3E%3Caside%3E%3C/b%3E%3C/em%3E", "%23document%0A%7C%20%3Cb%3E%0A%7C%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%3Cfoob%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cfoob%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cfoob%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoob%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfooc%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfooc%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfooc%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfooc%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfood%3E%0A%7C%20%3Caside%3E%0A%7C%20%20%20%3Cb%3E", 'div'],"c2c4647447354abc154f1917a7fbefa4a679d5fb":[async_test('html5lib_innerHTML_webkit02.html c2c4647447354abc154f1917a7fbefa4a679d5fb'), "%3Coption%3E%3CXH%3Coptgroup%3E%3C/optgroup%3E", "%23document%0A%7C%20%3Coption%3E", 'select'],
+      }
+      init_tests("innerHTML");
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_isindex.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_isindex.html
index e73fb5a..be586123 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_isindex.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_isindex.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['579ca96e69c47b3d2ac83f1aa79a450b745d21f3','cb91f67071d81dd18d7ba9990de8f0f845c375f0','bd8ac64cc8f1422fac94bbe1c8828c0b51dca3f2',];
+      var order = ['579ca96e69c47b3d2ac83f1aa79a450b745d21f3','cb91f67071d81dd18d7ba9990de8f0f845c375f0','bd8ac64cc8f1422fac94bbe1c8828c0b51dca3f2','4303a393c6933743460836cb5e7dd29ca7fd6f43',];
       var tests = {
-          "579ca96e69c47b3d2ac83f1aa79a450b745d21f3":[async_test('html5lib_isindex.html 579ca96e69c47b3d2ac83f1aa79a450b745d21f3'), "%3Cisindex%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%20%20%3Clabel%3E%0A%7C%20%20%20%20%20%20%20%20%20%22This%20is%20a%20searchable%20index.%20Enter%20search%20keywords%3A%20%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20name%3D%22isindex%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E"],"cb91f67071d81dd18d7ba9990de8f0f845c375f0":[async_test('html5lib_isindex.html cb91f67071d81dd18d7ba9990de8f0f845c375f0'), "%3Cisindex%20name%3D%22A%22%20action%3D%22B%22%20prompt%3D%22C%22%20foo%3D%22D%22%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20action%3D%22B%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%20%20%3Clabel%3E%0A%7C%20%20%20%20%20%20%20%20%20%22C%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20foo%3D%22D%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20name%3D%22isindex%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E"],"bd8ac64cc8f1422fac94bbe1c8828c0b51dca3f2":[async_test('html5lib_isindex.html bd8ac64cc8f1422fac94bbe1c8828c0b51dca3f2'), "%3Cform%3E%3Cisindex%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E"],
+          "579ca96e69c47b3d2ac83f1aa79a450b745d21f3":[async_test('html5lib_isindex.html 579ca96e69c47b3d2ac83f1aa79a450b745d21f3'), "%3Cisindex%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cisindex%3E"],"cb91f67071d81dd18d7ba9990de8f0f845c375f0":[async_test('html5lib_isindex.html cb91f67071d81dd18d7ba9990de8f0f845c375f0'), "%3Cisindex%20name%3D%22A%22%20action%3D%22B%22%20prompt%3D%22C%22%20foo%3D%22D%22%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cisindex%3E%0A%7C%20%20%20%20%20%20%20action%3D%22B%22%0A%7C%20%20%20%20%20%20%20foo%3D%22D%22%0A%7C%20%20%20%20%20%20%20name%3D%22A%22%0A%7C%20%20%20%20%20%20%20prompt%3D%22C%22"],"bd8ac64cc8f1422fac94bbe1c8828c0b51dca3f2":[async_test('html5lib_isindex.html bd8ac64cc8f1422fac94bbe1c8828c0b51dca3f2'), "%3Cform%3E%3Cisindex%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Cisindex%3E"],"4303a393c6933743460836cb5e7dd29ca7fd6f43":[async_test('html5lib_isindex.html 4303a393c6933743460836cb5e7dd29ca7fd6f43'), "%3C%21doctype%20html%3E%3Cisindex%3Ex%3C/isindex%3Ex", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cisindex%3E%0A%7C%20%20%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%22x%22"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_menuitem-element.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_menuitem-element.html
new file mode 100644
index 0000000..27246e10
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_menuitem-element.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>HTML 5 Parser tests html5lib_menuitem-element.html</title>
+    <meta name="timeout" content="long">
+    <meta name="variant" content="?run_type=uri">
+    <meta name="variant" content="?run_type=write">
+    <meta name="variant" content="?run_type=write_single">
+  </head>
+  <body>
+    <h1>html5lib Parser Test</h1>
+    <div id="log"></div>
+    <script src="common.js"></script>
+    <script src="test.js"></script>
+    <script src="template.js"></script>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script>
+      var num_iframes = 8;
+      var order = ['e61b5db0435eb768ec21c1aa7355c649e7969c17','9c975c544402eed521499270b0e97cfa78f155b0','d46fa11c0107d59c84778beae84f388f55bffc31','afcd3b1e3317ac609ddab924d836ba1e3873b80f','95c0c6923fe609297c1592f2cb82bb9f2d0f5aed','e2772fe779cbcefb4458f169a0cd495cf7115845','7a9fa28f6207f045ebb0aa49938debd0c1e7123e','798bb352d9f256153340661e1277e44674f1026d','f2b5a63d94f108207a7a998216222dc24bea4850','778c027d06495eb361dd83baa561feb3a21ec3ea','e4670bee2ce790e82c26a33319b7fe082fbbdaea','79307be24287ca5d0533dfa81b91dd826f5f5e0e','9b995cb730b12529e8e755e4a0b0a2e73d1dfcfa','d4586cd7706bbb3a5b127c52c1f2861d1a3fb781','e2adbd7bf4c7480343cfb8f69289c824be613853','b56d35c73f38f04ad6fdf51aa88f4b70a93ddc48','0f95585196dae2b1b5164e8c27897699c464c35f','03664aa93a55daceccc26d99c0aef841d8862af5','6d596b9e342db2306365fbdfb7615377c5b26347','4b712b488be9ee047c139c1b0cd955bae990b8e5',];
+      var tests = {
+          "e61b5db0435eb768ec21c1aa7355c649e7969c17":[async_test('html5lib_menuitem-element.html e61b5db0435eb768ec21c1aa7355c649e7969c17'), "%3Cmenuitem%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E"],"9c975c544402eed521499270b0e97cfa78f155b0":[async_test('html5lib_menuitem-element.html 9c975c544402eed521499270b0e97cfa78f155b0'), "%3C/menuitem%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"d46fa11c0107d59c84778beae84f388f55bffc31":[async_test('html5lib_menuitem-element.html d46fa11c0107d59c84778beae84f388f55bffc31'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmenuitem%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%22A%22"],"afcd3b1e3317ac609ddab924d836ba1e3873b80f":[async_test('html5lib_menuitem-element.html afcd3b1e3317ac609ddab924d836ba1e3873b80f'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmenuitem%3EA%3Cmenuitem%3EB", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%22B%22"],"95c0c6923fe609297c1592f2cb82bb9f2d0f5aed":[async_test('html5lib_menuitem-element.html 95c0c6923fe609297c1592f2cb82bb9f2d0f5aed'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmenuitem%3EA%3Cmenu%3EB%3C/menu%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3Cmenu%3E%0A%7C%20%20%20%20%20%20%20%22B%22"],"e2772fe779cbcefb4458f169a0cd495cf7115845":[async_test('html5lib_menuitem-element.html e2772fe779cbcefb4458f169a0cd495cf7115845'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmenuitem%3EA%3Chr%3EB", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%22B%22"],"7a9fa28f6207f045ebb0aa49938debd0c1e7123e":[async_test('html5lib_menuitem-element.html 7a9fa28f6207f045ebb0aa49938debd0c1e7123e'), "%3C%21DOCTYPE%20html%3E%3Cli%3E%3Cmenuitem%3E%3Cli%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%3Cli%3E"],"798bb352d9f256153340661e1277e44674f1026d":[async_test('html5lib_menuitem-element.html 798bb352d9f256153340661e1277e44674f1026d'), "%3C%21DOCTYPE%20html%3E%3Cmenuitem%3E%3Cp%3E%3C/menuitem%3Ex", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22x%22"],"f2b5a63d94f108207a7a998216222dc24bea4850":[async_test('html5lib_menuitem-element.html f2b5a63d94f108207a7a998216222dc24bea4850'), "%3C%21DOCTYPE%20html%3E%3Cp%3E%3Cb%3E%3C/p%3E%3Cmenuitem%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%3Cmenuitem%3E"],"778c027d06495eb361dd83baa561feb3a21ec3ea":[async_test('html5lib_menuitem-element.html 778c027d06495eb361dd83baa561feb3a21ec3ea'), "%3C%21DOCTYPE%20html%3E%3Cmenuitem%3E%3Casdf%3E%3C/menuitem%3Ex", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%3Casdf%3E%0A%7C%20%20%20%20%20%22x%22"],"e4670bee2ce790e82c26a33319b7fe082fbbdaea":[async_test('html5lib_menuitem-element.html e4670bee2ce790e82c26a33319b7fe082fbbdaea'), "%3C%21DOCTYPE%20html%3E%3C/menuitem%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"79307be24287ca5d0533dfa81b91dd826f5f5e0e":[async_test('html5lib_menuitem-element.html 79307be24287ca5d0533dfa81b91dd826f5f5e0e'), "%3C%21DOCTYPE%20html%3E%3Chtml%3E%3C/menuitem%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"9b995cb730b12529e8e755e4a0b0a2e73d1dfcfa":[async_test('html5lib_menuitem-element.html 9b995cb730b12529e8e755e4a0b0a2e73d1dfcfa'), "%3C%21DOCTYPE%20html%3E%3Chead%3E%3C/menuitem%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"d4586cd7706bbb3a5b127c52c1f2861d1a3fb781":[async_test('html5lib_menuitem-element.html d4586cd7706bbb3a5b127c52c1f2861d1a3fb781'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Cmenuitem%3E%3C/select%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E"],"e2adbd7bf4c7480343cfb8f69289c824be613853":[async_test('html5lib_menuitem-element.html e2adbd7bf4c7480343cfb8f69289c824be613853'), "%3C%21DOCTYPE%20html%3E%3Coption%3E%3Cmenuitem%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Cmenuitem%3E"],"b56d35c73f38f04ad6fdf51aa88f4b70a93ddc48":[async_test('html5lib_menuitem-element.html b56d35c73f38f04ad6fdf51aa88f4b70a93ddc48'), "%3C%21DOCTYPE%20html%3E%3Cmenuitem%3E%3Coption%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E"],"0f95585196dae2b1b5164e8c27897699c464c35f":[async_test('html5lib_menuitem-element.html 0f95585196dae2b1b5164e8c27897699c464c35f'), "%3C%21DOCTYPE%20html%3E%3Cmenuitem%3E%3C/body%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E"],"03664aa93a55daceccc26d99c0aef841d8862af5":[async_test('html5lib_menuitem-element.html 03664aa93a55daceccc26d99c0aef841d8862af5'), "%3C%21DOCTYPE%20html%3E%3Cmenuitem%3E%3C/html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E"],"6d596b9e342db2306365fbdfb7615377c5b26347":[async_test('html5lib_menuitem-element.html 6d596b9e342db2306365fbdfb7615377c5b26347'), "%3C%21DOCTYPE%20html%3E%3Cmenuitem%3E%3Cp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E"],"4b712b488be9ee047c139c1b0cd955bae990b8e5":[async_test('html5lib_menuitem-element.html 4b712b488be9ee047c139c1b0cd955bae990b8e5'), "%3C%21DOCTYPE%20html%3E%3Cmenuitem%3E%3Cli%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E"],
+      }
+      init_tests(get_type());
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_namespace-sensitivity.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_namespace-sensitivity.html
new file mode 100644
index 0000000..2e462a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_namespace-sensitivity.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>HTML 5 Parser tests html5lib_namespace-sensitivity.html</title>
+    <meta name="timeout" content="long">
+    <meta name="variant" content="?run_type=uri">
+    <meta name="variant" content="?run_type=write">
+    <meta name="variant" content="?run_type=write_single">
+  </head>
+  <body>
+    <h1>html5lib Parser Test</h1>
+    <div id="log"></div>
+    <script src="common.js"></script>
+    <script src="test.js"></script>
+    <script src="template.js"></script>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script>
+      var num_iframes = 8;
+      var order = ['de0a2051123e97a540e3aeb58375103bda021122',];
+      var tests = {
+          "de0a2051123e97a540e3aeb58375103bda021122":[async_test('html5lib_namespace-sensitivity.html de0a2051123e97a540e3aeb58375103bda021122'), "%3Cbody%3E%3Ctable%3E%3Ctr%3E%3Ctd%3E%3Csvg%3E%3Ctd%3E%3CforeignObject%3E%3Cspan%3E%3C/td%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20td%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E"],
+      }
+      init_tests(get_type());
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_ruby.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_ruby.html
new file mode 100644
index 0000000..b5b66ba8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_ruby.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>HTML 5 Parser tests html5lib_ruby.html</title>
+    <meta name="timeout" content="long">
+    <meta name="variant" content="?run_type=uri">
+    <meta name="variant" content="?run_type=write">
+    <meta name="variant" content="?run_type=write_single">
+  </head>
+  <body>
+    <h1>html5lib Parser Test</h1>
+    <div id="log"></div>
+    <script src="common.js"></script>
+    <script src="test.js"></script>
+    <script src="template.js"></script>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script>
+      var num_iframes = 8;
+      var order = ['6ee9e8955aa3a8a3af1838c1b728d8392e1cccca','03bbba49b30ec908e06e3c84e1fcede1ac7508ff','de7c3ce0c3484dc3a111d00c34c68f7dea8a013a','720c6bad03d4e4fd5ec7cb06bf4ec8ba5f277486','b3640f1eae210be30f138bbc6dc71e0864240224','3179776aceeadf1740d71e2d2e6385bb84ab97c0','d26f2542fc6fcee4e737b578c8db716a96a22ade','17d5c46418a50b35d893516440b0e091c31bd581','da1e119d0642e3b82a3537326a3fbc3b8c4e9706','bb2028f026500e8f77bd3b8e1f906c28045e6f20','c78f8740b860a39eb27035e19e29b240d0bfa4a8','9e880cf547d015ef52c3377064a9afd92ba26afe','9ed529d1072800af3fcccf268b41d6594480b749','42a6c56b0abc484cbc3d2b7517551c4aa3efc5d3','139a1e8af17546b7964354779331960096481b3c','0050f08d71e8dd050d8129afe674b580387468d9','5f9f25a089e72b4a4e5d7ebbacb440349c53f52f','099a0a617119e858c8e716e0ea9854ed1198ccf1','2cca13809bffb5fa34d03ad73d5727b75d2f96b5','f08a5ba63069cc6eb3804d94ec59b8b33e6f9b91','606924ac3b043141563d94141973a11eda8015ab',];
+      var tests = {
+          "6ee9e8955aa3a8a3af1838c1b728d8392e1cccca":[async_test('html5lib_ruby.html 6ee9e8955aa3a8a3af1838c1b728d8392e1cccca'), "%3Chtml%3E%3Cruby%3Ea%3Crb%3Eb%3Crb%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E"],"03bbba49b30ec908e06e3c84e1fcede1ac7508ff":[async_test('html5lib_ruby.html 03bbba49b30ec908e06e3c84e1fcede1ac7508ff'), "%3Chtml%3E%3Cruby%3Ea%3Crb%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"de7c3ce0c3484dc3a111d00c34c68f7dea8a013a":[async_test('html5lib_ruby.html de7c3ce0c3484dc3a111d00c34c68f7dea8a013a'), "%3Chtml%3E%3Cruby%3Ea%3Crb%3Eb%3Crtc%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E"],"720c6bad03d4e4fd5ec7cb06bf4ec8ba5f277486":[async_test('html5lib_ruby.html 720c6bad03d4e4fd5ec7cb06bf4ec8ba5f277486'), "%3Chtml%3E%3Cruby%3Ea%3Crb%3Eb%3Crp%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E"],"b3640f1eae210be30f138bbc6dc71e0864240224":[async_test('html5lib_ruby.html b3640f1eae210be30f138bbc6dc71e0864240224'), "%3Chtml%3E%3Cruby%3Ea%3Crb%3Eb%3Cspan%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E"],"3179776aceeadf1740d71e2d2e6385bb84ab97c0":[async_test('html5lib_ruby.html 3179776aceeadf1740d71e2d2e6385bb84ab97c0'), "%3Chtml%3E%3Cruby%3Ea%3Crt%3Eb%3Crb%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E"],"d26f2542fc6fcee4e737b578c8db716a96a22ade":[async_test('html5lib_ruby.html d26f2542fc6fcee4e737b578c8db716a96a22ade'), "%3Chtml%3E%3Cruby%3Ea%3Crt%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"17d5c46418a50b35d893516440b0e091c31bd581":[async_test('html5lib_ruby.html 17d5c46418a50b35d893516440b0e091c31bd581'), "%3Chtml%3E%3Cruby%3Ea%3Crt%3Eb%3Crtc%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E"],"da1e119d0642e3b82a3537326a3fbc3b8c4e9706":[async_test('html5lib_ruby.html da1e119d0642e3b82a3537326a3fbc3b8c4e9706'), "%3Chtml%3E%3Cruby%3Ea%3Crt%3Eb%3Crp%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E"],"bb2028f026500e8f77bd3b8e1f906c28045e6f20":[async_test('html5lib_ruby.html bb2028f026500e8f77bd3b8e1f906c28045e6f20'), "%3Chtml%3E%3Cruby%3Ea%3Crt%3Eb%3Cspan%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E"],"c78f8740b860a39eb27035e19e29b240d0bfa4a8":[async_test('html5lib_ruby.html c78f8740b860a39eb27035e19e29b240d0bfa4a8'), "%3Chtml%3E%3Cruby%3Ea%3Crtc%3Eb%3Crb%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E"],"9e880cf547d015ef52c3377064a9afd92ba26afe":[async_test('html5lib_ruby.html 9e880cf547d015ef52c3377064a9afd92ba26afe'), "%3Chtml%3E%3Cruby%3Ea%3Crtc%3Eb%3Crt%3Ec%3Crt%3Ed%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22d%22"],"9ed529d1072800af3fcccf268b41d6594480b749":[async_test('html5lib_ruby.html 9ed529d1072800af3fcccf268b41d6594480b749'), "%3Chtml%3E%3Cruby%3Ea%3Crtc%3Eb%3Crtc%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E"],"42a6c56b0abc484cbc3d2b7517551c4aa3efc5d3":[async_test('html5lib_ruby.html 42a6c56b0abc484cbc3d2b7517551c4aa3efc5d3'), "%3Chtml%3E%3Cruby%3Ea%3Crtc%3Eb%3Crp%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%3Crp%3E"],"139a1e8af17546b7964354779331960096481b3c":[async_test('html5lib_ruby.html 139a1e8af17546b7964354779331960096481b3c'), "%3Chtml%3E%3Cruby%3Ea%3Crtc%3Eb%3Cspan%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E"],"0050f08d71e8dd050d8129afe674b580387468d9":[async_test('html5lib_ruby.html 0050f08d71e8dd050d8129afe674b580387468d9'), "%3Chtml%3E%3Cruby%3Ea%3Crp%3Eb%3Crb%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E"],"5f9f25a089e72b4a4e5d7ebbacb440349c53f52f":[async_test('html5lib_ruby.html 5f9f25a089e72b4a4e5d7ebbacb440349c53f52f'), "%3Chtml%3E%3Cruby%3Ea%3Crp%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"099a0a617119e858c8e716e0ea9854ed1198ccf1":[async_test('html5lib_ruby.html 099a0a617119e858c8e716e0ea9854ed1198ccf1'), "%3Chtml%3E%3Cruby%3Ea%3Crp%3Eb%3Crtc%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E"],"2cca13809bffb5fa34d03ad73d5727b75d2f96b5":[async_test('html5lib_ruby.html 2cca13809bffb5fa34d03ad73d5727b75d2f96b5'), "%3Chtml%3E%3Cruby%3Ea%3Crp%3Eb%3Crp%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E"],"f08a5ba63069cc6eb3804d94ec59b8b33e6f9b91":[async_test('html5lib_ruby.html f08a5ba63069cc6eb3804d94ec59b8b33e6f9b91'), "%3Chtml%3E%3Cruby%3Ea%3Crp%3Eb%3Cspan%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E"],"606924ac3b043141563d94141973a11eda8015ab":[async_test('html5lib_ruby.html 606924ac3b043141563d94141973a11eda8015ab'), "%3Chtml%3E%3Cruby%3E%3Crtc%3E%3Cruby%3Ea%3Crb%3Eb%3Crt%3E%3C/ruby%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Crtc%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Crt%3E"],
+      }
+      init_tests(get_type());
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_template.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_template.html
index 92500dd3..d12c2ca 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_template.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_template.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['010950d55f4eccf16e9c4af1d263bb747294c646','a838bd54410cef059a42eea9606356488e16535b','27fb9111f6675a7e033b867480c0afddcda161a6','aee883a65775489399a003b2371d58248a6aff6f','89b17b54ab343191bf74ef5434f4d2cfac40ea97','c4433556c7414cfd71f27b420f1ffc4348774f5e','3dcce7d97108b3e9ea7fa96f240ac62bf280e74b','a1f587f7ea85ccfe294bd45bfb501e850cb979e0','cd26a7832f13bdc135697321ca6c2fecdca6ef5d','e30571d90b0e56864499961eb7be955994cf72e2','01cbe9f6a25f286b08d8dc4f7b65421e8eb3500c','96cbbcdffe02c86a8b929604c2fd5f3571a18dbe','d51676f55550e960dd0f5fa7fd0bdfa20bdde046','f9dfd9acfd494489c899604649a01d864741f50f','ea00361c265d3ffb47ce636d919c94ca10d58911','d8ebfcf7694c9d04457e796ac73049210313602e','b4d5e6fe9b92e2c8f54199d7cab3da383c42add0','07724ef8f7a4fa61c77ffcd5180d3101c4781502','e90f8aae8fc690540b42b3ffa3e741e7c1dfbf43','687bdf4adda88a316ec69fe20e84720acc5d1fe6','5b232642f472c2b4c0c7511fed464eebe686b427','dc1ac1830a881d1532a1e6fd6d0cfa56d6571da2','c58747a85e8b4f44d7ae63c04cdad783a903c25e','ca59bfdaec7451f704973176fab46e582bd691b2','cf807d6391a58c172b6c15c3b01d2a99ec0e6cf8','350b7ac850e46de79615308fc923649264406104','a31ff44edf7f377543dabdda8141cda9bb6de134','533c5c1b5f0d0cbb1ede2cc5ae927095c5b21f0b','61f79e083005007853c4f8e431559ac8d3845cfd','e802e85f36792b176b73c102c0e8761d9478621d','51d0797ff7653cd7be34458d689146e08a666c7f','d60e4079a18bd6266740cc61d1ca736e9d5098ce','308709292677b4d74c108a811ad7b7acd0bdfc9c','8965cdf9c4e9936262e25c90c7a7f8673840a445','7dccda789764beb489e09be10188af9347335d05','e15be51c77e1a6de35568a099ed339440ce9426d','503d3782e45940c19f096f360a092282b46ab1ea','b4ab56fd9e9cebf479d14adfa523c06d16483a5e','cd8bc9521f9683086a9e8529dd97314a6869daeb','f915e7b3407c24b28c3aad318e5693cc774020f4','3c5eb261787b3d15aff86fa61de773fd7e439b0e','2b57775750c198d4b98b23aed74ff80a866a01f5','dc3d016610f3ab532525a6c2871f03d6b62b0168','6a184d71d00580a26a8b6bd97aafe5503339f3f6','ce570a6c4bcee8b72a03e25508c6dd72e3cc6c35','e0c3d922f7b1f1654f02f716c3d9b31198ce3385','87e67242bf6debcf3b7dca852d10aa0f7b625b28','35ac4d4c972a01d368ed0cacb41370efef0a644d','5226c39dfc2d624ad4191b4eacb7e40c7ae528eb','aa90cd4db6b12e0a47341914a90cc536eec32d64','48af1faf5fcf48a0854af5a5c33656d9ccf6736b','ed3a029ba5e7f59969d65a4fc490a8f13b098cb9','6c8880d54475ad9574e203dcf2e55820b123cc64','275060925a844cb51b29bae660301de9780d68c8','9f82f6ec4c0a48c1d4dfbe6803b94abd553aea88','f094bf7e94a88b86c80a0643e70c8e5ff3354698','35a07ec3b4bf26ea407dc1ddf52f14195a714059','24faa53b271f994a4ff31d5796c8ff47d6f2c3e6','0f1c491b58c2dd3c402a62e37f833bc1f1db8d21','868d918a7b5d8b5c065c15229492bc2022bfbcba','0538efa44e857596c556033a3821d424378aea3f','e7d7bf3973c70d3cf9b0adad2ebed9f25be48d66','c69d0ac542d477b7312bb24981127b8aa8fdb1df','b496a8c13a7bd75b778bb0de489726aee952ae0c','5d6ee61de40274c9626ca78ee208d51276d5662d','9bd9687a65f258adc24450fc5cbd781fff6c038a','db1baeb846d718c773324746524fbd68f2e9436e','4b0ce46c611dbcc016db272ef007f302bee0c897','1a735e1c7f28f8701f3c7fd5e9404b8911916086','0686eedec06b2db1dc283fac92c1ef1a33114c71','d4dfb87ce626f12923056a6cd77448eaf4660ac2','1f295920f2937b2c8023b3761c43a0d4d9e5353c','3b91fa08fad923d387d924cff37fbf6b4c3a5712','45a1c1ad5d99ad67c573096a79253996a664e01b','0fe3a66773c6048c8f6f2c92f2611f65be972ec1','be40897ca411e1507197c31ab2a9f9752a05f769','dcfb1048ed5c40e406b4fbf0cde24c826713907f','78263aeea68ac97903598682013bae9c0c21d547','5aa177ef1a35bf4502dcb867d8e666288982ba99','5d303375907dc4d4380b477e0317c17b660613e9','d822f726927c34b92fe102b13e63920850878f6a','07acdcaeb4fa639296d46673cf28823ddf2a6ca7','58bd846ce1be0caf7560fba2ef19e2c2070ab123','8eeee377e5ab324731cc592f1fa8abe1045ad610','b30690019090149132fc228a7261c5cf2fd149fc','67a209d928804f90fdb66d070201b23f3d0c8a42','12104886b8f87daa937eac30b5ff0e1e074eaa6f','483cc9957a7225fe435112642be59abb4c459a1e','72d8ac431a154c40ab75d53a258d9d80d47689eb','1125967cbbcd404f4cb14d48270b8ec778970d77','32c963e164b9ec82c60e490bb141c1ccc70b992f','574a95fc9c9f2de3aeaa0c9ee1e6967fc3d4770d','332863a7f9e61bff32bd3427ede7a088b790d453','2121db07146781773df9e53b94fa921a805175ce','8675de267cd7e34f2febdee3feb665614d1562fe','c5d26ad923a2b1e988ddd378ca4fb26eb48353e1','eec1542e2fa0e9eafb7f8d4a51eae56b5a31b3c8','b79387a54c3b136db0f28ed96555ff683b3947fe','c477a29a4deb32d072a415fa809a84a4f2beee0c','26e4480c08e1f5f7b6ac8b8c1832ab0312e3b7c5','24b3b50fdd0bf8d5cf2ebaa6bf502d7bcfde1da4','d3704c68528357189eb5826ab66eea071d6137a5','d958f7d44faf772d1fb60f1a8f186f837ca735d9','3fc4d97fa68fc2658356bdbd4e051c867de8de53','94820107bbf3fab3f82de1f717e8413aead7d3a6','657c00ebdda37ae060cc69633ed98482ccc29e18',];
+      var order = ['010950d55f4eccf16e9c4af1d263bb747294c646','a838bd54410cef059a42eea9606356488e16535b','27fb9111f6675a7e033b867480c0afddcda161a6','aee883a65775489399a003b2371d58248a6aff6f','89b17b54ab343191bf74ef5434f4d2cfac40ea97','c4433556c7414cfd71f27b420f1ffc4348774f5e','3dcce7d97108b3e9ea7fa96f240ac62bf280e74b','a1f587f7ea85ccfe294bd45bfb501e850cb979e0','cd26a7832f13bdc135697321ca6c2fecdca6ef5d','e30571d90b0e56864499961eb7be955994cf72e2','01cbe9f6a25f286b08d8dc4f7b65421e8eb3500c','96cbbcdffe02c86a8b929604c2fd5f3571a18dbe','d51676f55550e960dd0f5fa7fd0bdfa20bdde046','f9dfd9acfd494489c899604649a01d864741f50f','ea00361c265d3ffb47ce636d919c94ca10d58911','d8ebfcf7694c9d04457e796ac73049210313602e','b4d5e6fe9b92e2c8f54199d7cab3da383c42add0','07724ef8f7a4fa61c77ffcd5180d3101c4781502','e90f8aae8fc690540b42b3ffa3e741e7c1dfbf43','687bdf4adda88a316ec69fe20e84720acc5d1fe6','5b232642f472c2b4c0c7511fed464eebe686b427','dc1ac1830a881d1532a1e6fd6d0cfa56d6571da2','c58747a85e8b4f44d7ae63c04cdad783a903c25e','ca59bfdaec7451f704973176fab46e582bd691b2','cf807d6391a58c172b6c15c3b01d2a99ec0e6cf8','350b7ac850e46de79615308fc923649264406104','a31ff44edf7f377543dabdda8141cda9bb6de134','533c5c1b5f0d0cbb1ede2cc5ae927095c5b21f0b','61f79e083005007853c4f8e431559ac8d3845cfd','e802e85f36792b176b73c102c0e8761d9478621d','51d0797ff7653cd7be34458d689146e08a666c7f','d60e4079a18bd6266740cc61d1ca736e9d5098ce','308709292677b4d74c108a811ad7b7acd0bdfc9c','8965cdf9c4e9936262e25c90c7a7f8673840a445','7dccda789764beb489e09be10188af9347335d05','e15be51c77e1a6de35568a099ed339440ce9426d','503d3782e45940c19f096f360a092282b46ab1ea','b4ab56fd9e9cebf479d14adfa523c06d16483a5e','cd8bc9521f9683086a9e8529dd97314a6869daeb','f915e7b3407c24b28c3aad318e5693cc774020f4','3c5eb261787b3d15aff86fa61de773fd7e439b0e','2b57775750c198d4b98b23aed74ff80a866a01f5','dc3d016610f3ab532525a6c2871f03d6b62b0168','6a184d71d00580a26a8b6bd97aafe5503339f3f6','ce570a6c4bcee8b72a03e25508c6dd72e3cc6c35','e0c3d922f7b1f1654f02f716c3d9b31198ce3385','87e67242bf6debcf3b7dca852d10aa0f7b625b28','35ac4d4c972a01d368ed0cacb41370efef0a644d','5226c39dfc2d624ad4191b4eacb7e40c7ae528eb','aa90cd4db6b12e0a47341914a90cc536eec32d64','48af1faf5fcf48a0854af5a5c33656d9ccf6736b','ed3a029ba5e7f59969d65a4fc490a8f13b098cb9','6c8880d54475ad9574e203dcf2e55820b123cc64','275060925a844cb51b29bae660301de9780d68c8','9f82f6ec4c0a48c1d4dfbe6803b94abd553aea88','f094bf7e94a88b86c80a0643e70c8e5ff3354698','35a07ec3b4bf26ea407dc1ddf52f14195a714059','24faa53b271f994a4ff31d5796c8ff47d6f2c3e6','0f1c491b58c2dd3c402a62e37f833bc1f1db8d21','868d918a7b5d8b5c065c15229492bc2022bfbcba','0538efa44e857596c556033a3821d424378aea3f','e7d7bf3973c70d3cf9b0adad2ebed9f25be48d66','c69d0ac542d477b7312bb24981127b8aa8fdb1df','b496a8c13a7bd75b778bb0de489726aee952ae0c','5d6ee61de40274c9626ca78ee208d51276d5662d','9bd9687a65f258adc24450fc5cbd781fff6c038a','db1baeb846d718c773324746524fbd68f2e9436e','4b0ce46c611dbcc016db272ef007f302bee0c897','1a735e1c7f28f8701f3c7fd5e9404b8911916086','0686eedec06b2db1dc283fac92c1ef1a33114c71','d4dfb87ce626f12923056a6cd77448eaf4660ac2','1f295920f2937b2c8023b3761c43a0d4d9e5353c','3b91fa08fad923d387d924cff37fbf6b4c3a5712','45a1c1ad5d99ad67c573096a79253996a664e01b','0fe3a66773c6048c8f6f2c92f2611f65be972ec1','be40897ca411e1507197c31ab2a9f9752a05f769','dcfb1048ed5c40e406b4fbf0cde24c826713907f','78263aeea68ac97903598682013bae9c0c21d547','5aa177ef1a35bf4502dcb867d8e666288982ba99','5d303375907dc4d4380b477e0317c17b660613e9','d822f726927c34b92fe102b13e63920850878f6a','07acdcaeb4fa639296d46673cf28823ddf2a6ca7','58bd846ce1be0caf7560fba2ef19e2c2070ab123','8eeee377e5ab324731cc592f1fa8abe1045ad610','b30690019090149132fc228a7261c5cf2fd149fc','67a209d928804f90fdb66d070201b23f3d0c8a42','12104886b8f87daa937eac30b5ff0e1e074eaa6f','483cc9957a7225fe435112642be59abb4c459a1e','72d8ac431a154c40ab75d53a258d9d80d47689eb','1125967cbbcd404f4cb14d48270b8ec778970d77','32c963e164b9ec82c60e490bb141c1ccc70b992f','574a95fc9c9f2de3aeaa0c9ee1e6967fc3d4770d','332863a7f9e61bff32bd3427ede7a088b790d453','2121db07146781773df9e53b94fa921a805175ce','8675de267cd7e34f2febdee3feb665614d1562fe','c5d26ad923a2b1e988ddd378ca4fb26eb48353e1','eec1542e2fa0e9eafb7f8d4a51eae56b5a31b3c8','b79387a54c3b136db0f28ed96555ff683b3947fe','c477a29a4deb32d072a415fa809a84a4f2beee0c','26e4480c08e1f5f7b6ac8b8c1832ab0312e3b7c5','24b3b50fdd0bf8d5cf2ebaa6bf502d7bcfde1da4','d3704c68528357189eb5826ab66eea071d6137a5','d958f7d44faf772d1fb60f1a8f186f837ca735d9','3fc4d97fa68fc2658356bdbd4e051c867de8de53','94820107bbf3fab3f82de1f717e8413aead7d3a6','657c00ebdda37ae060cc69633ed98482ccc29e18','649fc955a4b60ab2a5b881d94c9493eb4a545002',];
       var tests = {
-          "010950d55f4eccf16e9c4af1d263bb747294c646":[async_test('html5lib_template.html 010950d55f4eccf16e9c4af1d263bb747294c646'), "%3Cbody%3E%3Ctemplate%3EHello%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22Hello%22"],"a838bd54410cef059a42eea9606356488e16535b":[async_test('html5lib_template.html a838bd54410cef059a42eea9606356488e16535b'), "%3Ctemplate%3EHello%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22Hello%22%0A%7C%20%20%20%3Cbody%3E"],"27fb9111f6675a7e033b867480c0afddcda161a6":[async_test('html5lib_template.html 27fb9111f6675a7e033b867480c0afddcda161a6'), "%3Ctemplate%3E%3C/template%3E%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"aee883a65775489399a003b2371d58248a6aff6f":[async_test('html5lib_template.html aee883a65775489399a003b2371d58248a6aff6f'), "%3Chtml%3E%3Ctemplate%3EHello%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22Hello%22%0A%7C%20%20%20%3Cbody%3E"],"89b17b54ab343191bf74ef5434f4d2cfac40ea97":[async_test('html5lib_template.html 89b17b54ab343191bf74ef5434f4d2cfac40ea97'), "%3Chead%3E%3Ctemplate%3E%3Cdiv%3E%3C/div%3E%3C/template%3E%3C/head%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3Cbody%3E"],"c4433556c7414cfd71f27b420f1ffc4348774f5e":[async_test('html5lib_template.html c4433556c7414cfd71f27b420f1ffc4348774f5e'), "%3Cdiv%3E%3Ctemplate%3E%3Cdiv%3E%3Cspan%3E%3C/template%3E%3Cb%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E"],"3dcce7d97108b3e9ea7fa96f240ac62bf280e74b":[async_test('html5lib_template.html 3dcce7d97108b3e9ea7fa96f240ac62bf280e74b'), "%3Cdiv%3E%3Ctemplate%3E%3C/div%3EHello", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22Hello%22"],"a1f587f7ea85ccfe294bd45bfb501e850cb979e0":[async_test('html5lib_template.html a1f587f7ea85ccfe294bd45bfb501e850cb979e0'), "%3Cdiv%3E%3C/template%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"cd26a7832f13bdc135697321ca6c2fecdca6ef5d":[async_test('html5lib_template.html cd26a7832f13bdc135697321ca6c2fecdca6ef5d'), "%3Ctable%3E%3Ctemplate%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"e30571d90b0e56864499961eb7be955994cf72e2":[async_test('html5lib_template.html e30571d90b0e56864499961eb7be955994cf72e2'), "%3Ctable%3E%3Ctemplate%3E%3C/template%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"01cbe9f6a25f286b08d8dc4f7b65421e8eb3500c":[async_test('html5lib_template.html 01cbe9f6a25f286b08d8dc4f7b65421e8eb3500c'), "%3Ctable%3E%3Cdiv%3E%3Ctemplate%3E%3C/template%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%3Ctable%3E"],"96cbbcdffe02c86a8b929604c2fd5f3571a18dbe":[async_test('html5lib_template.html 96cbbcdffe02c86a8b929604c2fd5f3571a18dbe'), "%3Ctable%3E%3Ctemplate%3E%3C/template%3E%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"d51676f55550e960dd0f5fa7fd0bdfa20bdde046":[async_test('html5lib_template.html d51676f55550e960dd0f5fa7fd0bdfa20bdde046'), "%3Ctable%3E%20%20%20%3Ctemplate%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%22%20%20%20%22%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"f9dfd9acfd494489c899604649a01d864741f50f":[async_test('html5lib_template.html f9dfd9acfd494489c899604649a01d864741f50f'), "%3Ctable%3E%3Ctbody%3E%3Ctemplate%3E%3C/template%3E%3C/tbody%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"ea00361c265d3ffb47ce636d919c94ca10d58911":[async_test('html5lib_template.html ea00361c265d3ffb47ce636d919c94ca10d58911'), "%3Ctable%3E%3Ctbody%3E%3Ctemplate%3E%3C/tbody%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"d8ebfcf7694c9d04457e796ac73049210313602e":[async_test('html5lib_template.html d8ebfcf7694c9d04457e796ac73049210313602e'), "%3Ctable%3E%3Ctbody%3E%3Ctemplate%3E%3C/template%3E%3C/tbody%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"b4d5e6fe9b92e2c8f54199d7cab3da383c42add0":[async_test('html5lib_template.html b4d5e6fe9b92e2c8f54199d7cab3da383c42add0'), "%3Ctable%3E%3Cthead%3E%3Ctemplate%3E%3C/template%3E%3C/thead%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"07724ef8f7a4fa61c77ffcd5180d3101c4781502":[async_test('html5lib_template.html 07724ef8f7a4fa61c77ffcd5180d3101c4781502'), "%3Ctable%3E%3Ctfoot%3E%3Ctemplate%3E%3C/template%3E%3C/tfoot%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctfoot%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"e90f8aae8fc690540b42b3ffa3e741e7c1dfbf43":[async_test('html5lib_template.html e90f8aae8fc690540b42b3ffa3e741e7c1dfbf43'), "%3Cselect%3E%3Ctemplate%3E%3C/template%3E%3C/select%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"687bdf4adda88a316ec69fe20e84720acc5d1fe6":[async_test('html5lib_template.html 687bdf4adda88a316ec69fe20e84720acc5d1fe6'), "%3Cselect%3E%3Ctemplate%3E%3Coption%3E%3C/option%3E%3C/template%3E%3C/select%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Coption%3E"],"5b232642f472c2b4c0c7511fed464eebe686b427":[async_test('html5lib_template.html 5b232642f472c2b4c0c7511fed464eebe686b427'), "%3Ctemplate%3E%3Coption%3E%3C/option%3E%3C/select%3E%3Coption%3E%3C/option%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%3Cbody%3E"],"dc1ac1830a881d1532a1e6fd6d0cfa56d6571da2":[async_test('html5lib_template.html dc1ac1830a881d1532a1e6fd6d0cfa56d6571da2'), "%3Cselect%3E%3Ctemplate%3E%3C/template%3E%3Coption%3E%3C/select%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%3Coption%3E"],"c58747a85e8b4f44d7ae63c04cdad783a903c25e":[async_test('html5lib_template.html c58747a85e8b4f44d7ae63c04cdad783a903c25e'), "%3Cselect%3E%3Coption%3E%3Ctemplate%3E%3C/template%3E%3C/select%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"ca59bfdaec7451f704973176fab46e582bd691b2":[async_test('html5lib_template.html ca59bfdaec7451f704973176fab46e582bd691b2'), "%3Cselect%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"cf807d6391a58c172b6c15c3b01d2a99ec0e6cf8":[async_test('html5lib_template.html cf807d6391a58c172b6c15c3b01d2a99ec0e6cf8'), "%3Cselect%3E%3Coption%3E%3C/option%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"350b7ac850e46de79615308fc923649264406104":[async_test('html5lib_template.html 350b7ac850e46de79615308fc923649264406104'), "%3Cselect%3E%3Coption%3E%3C/option%3E%3Ctemplate%3E%3Coption%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Coption%3E"],"a31ff44edf7f377543dabdda8141cda9bb6de134":[async_test('html5lib_template.html a31ff44edf7f377543dabdda8141cda9bb6de134'), "%3Ctable%3E%3Cthead%3E%3Ctemplate%3E%3Ctd%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"533c5c1b5f0d0cbb1ede2cc5ae927095c5b21f0b":[async_test('html5lib_template.html 533c5c1b5f0d0cbb1ede2cc5ae927095c5b21f0b'), "%3Ctable%3E%3Ctemplate%3E%3Cthead%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cthead%3E"],"61f79e083005007853c4f8e431559ac8d3845cfd":[async_test('html5lib_template.html 61f79e083005007853c4f8e431559ac8d3845cfd'), "%3Cbody%3E%3Ctable%3E%3Ctemplate%3E%3Ctd%3E%3C/tr%3E%3Cdiv%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"e802e85f36792b176b73c102c0e8761d9478621d":[async_test('html5lib_template.html e802e85f36792b176b73c102c0e8761d9478621d'), "%3Ctable%3E%3Ctemplate%3E%3Cthead%3E%3C/template%3E%3C/thead%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cthead%3E"],"51d0797ff7653cd7be34458d689146e08a666c7f":[async_test('html5lib_template.html 51d0797ff7653cd7be34458d689146e08a666c7f'), "%3Ctable%3E%3Cthead%3E%3Ctemplate%3E%3Ctr%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"d60e4079a18bd6266740cc61d1ca736e9d5098ce":[async_test('html5lib_template.html d60e4079a18bd6266740cc61d1ca736e9d5098ce'), "%3Ctable%3E%3Ctemplate%3E%3Ctr%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"308709292677b4d74c108a811ad7b7acd0bdfc9c":[async_test('html5lib_template.html 308709292677b4d74c108a811ad7b7acd0bdfc9c'), "%3Ctable%3E%3Ctr%3E%3Ctemplate%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"8965cdf9c4e9936262e25c90c7a7f8673840a445":[async_test('html5lib_template.html 8965cdf9c4e9936262e25c90c7a7f8673840a445'), "%3Ctable%3E%3Ctemplate%3E%3Ctr%3E%3Ctemplate%3E%3Ctd%3E%3C/template%3E%3C/tr%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"7dccda789764beb489e09be10188af9347335d05":[async_test('html5lib_template.html 7dccda789764beb489e09be10188af9347335d05'), "%3Ctable%3E%3Ctemplate%3E%3Ctr%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3C/template%3E%3C/tr%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"e15be51c77e1a6de35568a099ed339440ce9426d":[async_test('html5lib_template.html e15be51c77e1a6de35568a099ed339440ce9426d'), "%3Ctable%3E%3Ctemplate%3E%3Ctd%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"503d3782e45940c19f096f360a092282b46ab1ea":[async_test('html5lib_template.html 503d3782e45940c19f096f360a092282b46ab1ea'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"b4ab56fd9e9cebf479d14adfa523c06d16483a5e":[async_test('html5lib_template.html b4ab56fd9e9cebf479d14adfa523c06d16483a5e'), "%3Cbody%3E%3Ctemplate%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3C/template%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"cd8bc9521f9683086a9e8529dd97314a6869daeb":[async_test('html5lib_template.html cd8bc9521f9683086a9e8529dd97314a6869daeb'), "%3Ctable%3E%3Ccolgroup%3E%3Ctemplate%3E%3Ccol%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"f915e7b3407c24b28c3aad318e5693cc774020f4":[async_test('html5lib_template.html f915e7b3407c24b28c3aad318e5693cc774020f4'), "%3Cframeset%3E%3Ctemplate%3E%3Cframe%3E%3C/frame%3E%3C/template%3E%3C/frameset%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"3c5eb261787b3d15aff86fa61de773fd7e439b0e":[async_test('html5lib_template.html 3c5eb261787b3d15aff86fa61de773fd7e439b0e'), "%3Ctemplate%3E%3Cframe%3E%3C/frame%3E%3C/frameset%3E%3Cframe%3E%3C/frame%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"2b57775750c198d4b98b23aed74ff80a866a01f5":[async_test('html5lib_template.html 2b57775750c198d4b98b23aed74ff80a866a01f5'), "%3Ctemplate%3E%3Cdiv%3E%3Cframeset%3E%3Cspan%3E%3C/span%3E%3C/div%3E%3Cspan%3E%3C/span%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%3Cbody%3E"],"dc3d016610f3ab532525a6c2871f03d6b62b0168":[async_test('html5lib_template.html dc3d016610f3ab532525a6c2871f03d6b62b0168'), "%3Cbody%3E%3Ctemplate%3E%3Cdiv%3E%3Cframeset%3E%3Cspan%3E%3C/span%3E%3C/div%3E%3Cspan%3E%3C/span%3E%3C/template%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E"],"6a184d71d00580a26a8b6bd97aafe5503339f3f6":[async_test('html5lib_template.html 6a184d71d00580a26a8b6bd97aafe5503339f3f6'), "%3Cbody%3E%3Ctemplate%3E%3Cscript%3Evar%20i%20%3D%201%3B%3C/script%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22var%20i%20%3D%201%3B%22%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"ce570a6c4bcee8b72a03e25508c6dd72e3cc6c35":[async_test('html5lib_template.html ce570a6c4bcee8b72a03e25508c6dd72e3cc6c35'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3Cdiv%3E%3C/div%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"e0c3d922f7b1f1654f02f716c3d9b31198ce3385":[async_test('html5lib_template.html e0c3d922f7b1f1654f02f716c3d9b31198ce3385'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"87e67242bf6debcf3b7dca852d10aa0f7b625b28":[async_test('html5lib_template.html 87e67242bf6debcf3b7dca852d10aa0f7b625b28'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3C/tr%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"35ac4d4c972a01d368ed0cacb41370efef0a644d":[async_test('html5lib_template.html 35ac4d4c972a01d368ed0cacb41370efef0a644d'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3Ctbody%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"5226c39dfc2d624ad4191b4eacb7e40c7ae528eb":[async_test('html5lib_template.html 5226c39dfc2d624ad4191b4eacb7e40c7ae528eb'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3Ccaption%3E%3C/caption%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"aa90cd4db6b12e0a47341914a90cc536eec32d64":[async_test('html5lib_template.html aa90cd4db6b12e0a47341914a90cc536eec32d64'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3Ccolgroup%3E%3C/caption%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"48af1faf5fcf48a0854af5a5c33656d9ccf6736b":[async_test('html5lib_template.html 48af1faf5fcf48a0854af5a5c33656d9ccf6736b'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3C/table%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"ed3a029ba5e7f59969d65a4fc490a8f13b098cb9":[async_test('html5lib_template.html ed3a029ba5e7f59969d65a4fc490a8f13b098cb9'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3Ctbody%3E%3Ctr%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"6c8880d54475ad9574e203dcf2e55820b123cc64":[async_test('html5lib_template.html 6c8880d54475ad9574e203dcf2e55820b123cc64'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3Ccaption%3E%3Ctr%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"275060925a844cb51b29bae660301de9780d68c8":[async_test('html5lib_template.html 275060925a844cb51b29bae660301de9780d68c8'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3C/table%3E%3Ctr%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"9f82f6ec4c0a48c1d4dfbe6803b94abd553aea88":[async_test('html5lib_template.html 9f82f6ec4c0a48c1d4dfbe6803b94abd553aea88'), "%3Cbody%3E%3Ctemplate%3E%3Cthead%3E%3C/thead%3E%3Ccaption%3E%3C/caption%3E%3Ctbody%3E%3C/tbody%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ccaption%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E"],"f094bf7e94a88b86c80a0643e70c8e5ff3354698":[async_test('html5lib_template.html f094bf7e94a88b86c80a0643e70c8e5ff3354698'), "%3Cbody%3E%3Ctemplate%3E%3Cthead%3E%3C/thead%3E%3C/table%3E%3Ctbody%3E%3C/tbody%3E%3C/template%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E"],"35a07ec3b4bf26ea407dc1ddf52f14195a714059":[async_test('html5lib_template.html 35a07ec3b4bf26ea407dc1ddf52f14195a714059'), "%3Cbody%3E%3Ctemplate%3E%3Cdiv%3E%3Ctr%3E%3C/tr%3E%3C/div%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"24faa53b271f994a4ff31d5796c8ff47d6f2c3e6":[async_test('html5lib_template.html 24faa53b271f994a4ff31d5796c8ff47d6f2c3e6'), "%3Cbody%3E%3Ctemplate%3E%3Cem%3EHello%3C/em%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22Hello%22"],"0f1c491b58c2dd3c402a62e37f833bc1f1db8d21":[async_test('html5lib_template.html 0f1c491b58c2dd3c402a62e37f833bc1f1db8d21'), "%3Cbody%3E%3Ctemplate%3E%3C%21--comment--%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3C%21--%20comment%20--%3E"],"868d918a7b5d8b5c065c15229492bc2022bfbcba":[async_test('html5lib_template.html 868d918a7b5d8b5c065c15229492bc2022bfbcba'), "%3Cbody%3E%3Ctemplate%3E%3Cstyle%3E%3C/style%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"0538efa44e857596c556033a3821d424378aea3f":[async_test('html5lib_template.html 0538efa44e857596c556033a3821d424378aea3f'), "%3Cbody%3E%3Ctemplate%3E%3Cmeta%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"e7d7bf3973c70d3cf9b0adad2ebed9f25be48d66":[async_test('html5lib_template.html e7d7bf3973c70d3cf9b0adad2ebed9f25be48d66'), "%3Cbody%3E%3Ctemplate%3E%3Clink%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Clink%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"c69d0ac542d477b7312bb24981127b8aa8fdb1df":[async_test('html5lib_template.html c69d0ac542d477b7312bb24981127b8aa8fdb1df'), "%3Cbody%3E%3Ctable%3E%3Ccolgroup%3E%3Ctemplate%3E%3Ccol%3E%3C/col%3E%3C/template%3E%3C/colgroup%3E%3C/table%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"b496a8c13a7bd75b778bb0de489726aee952ae0c":[async_test('html5lib_template.html b496a8c13a7bd75b778bb0de489726aee952ae0c'), "%3Cbody%20a%3Db%3E%3Ctemplate%3E%3Cdiv%3E%3C/div%3E%3Cbody%20c%3Dd%3E%3Cdiv%3E%3C/div%3E%3C/body%3E%3C/template%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20a%3D%22b%22%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"5d6ee61de40274c9626ca78ee208d51276d5662d":[async_test('html5lib_template.html 5d6ee61de40274c9626ca78ee208d51276d5662d'), "%3Chtml%20a%3Db%3E%3Ctemplate%3E%3Cdiv%3E%3Chtml%20b%3Dc%3E%3Cspan%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%3Cbody%3E"],"9bd9687a65f258adc24450fc5cbd781fff6c038a":[async_test('html5lib_template.html 9bd9687a65f258adc24450fc5cbd781fff6c038a'), "%3Chtml%20a%3Db%3E%3Ctemplate%3E%3Ccol%3E%3C/col%3E%3Chtml%20b%3Dc%3E%3Ccol%3E%3C/col%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%3Cbody%3E"],"db1baeb846d718c773324746524fbd68f2e9436e":[async_test('html5lib_template.html db1baeb846d718c773324746524fbd68f2e9436e'), "%3Chtml%20a%3Db%3E%3Ctemplate%3E%3Cframe%3E%3C/frame%3E%3Chtml%20b%3Dc%3E%3Cframe%3E%3C/frame%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"4b0ce46c611dbcc016db272ef007f302bee0c897":[async_test('html5lib_template.html 4b0ce46c611dbcc016db272ef007f302bee0c897'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3Ctemplate%3E%3C/template%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"1a735e1c7f28f8701f3c7fd5e9404b8911916086":[async_test('html5lib_template.html 1a735e1c7f28f8701f3c7fd5e9404b8911916086'), "%3Cbody%3E%3Ctemplate%3E%3Cthead%3E%3C/thead%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3C/template%3E%3Ctr%3E%3C/tr%3E%3Ctfoot%3E%3C/tfoot%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctfoot%3E"],"0686eedec06b2db1dc283fac92c1ef1a33114c71":[async_test('html5lib_template.html 0686eedec06b2db1dc283fac92c1ef1a33114c71'), "%3Cbody%3E%3Ctemplate%3E%3Ctemplate%3E%3Cb%3E%3Ctemplate%3E%3C/template%3E%3C/template%3Etext%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22text%22"],"d4dfb87ce626f12923056a6cd77448eaf4660ac2":[async_test('html5lib_template.html d4dfb87ce626f12923056a6cd77448eaf4660ac2'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3Ccolgroup%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"1f295920f2937b2c8023b3761c43a0d4d9e5353c":[async_test('html5lib_template.html 1f295920f2937b2c8023b3761c43a0d4d9e5353c'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3C/colgroup%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"3b91fa08fad923d387d924cff37fbf6b4c3a5712":[async_test('html5lib_template.html 3b91fa08fad923d387d924cff37fbf6b4c3a5712'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3Ccolgroup%3E%3C/template%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"45a1c1ad5d99ad67c573096a79253996a664e01b":[async_test('html5lib_template.html 45a1c1ad5d99ad67c573096a79253996a664e01b'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"0fe3a66773c6048c8f6f2c92f2611f65be972ec1":[async_test('html5lib_template.html 0fe3a66773c6048c8f6f2c92f2611f65be972ec1'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"be40897ca411e1507197c31ab2a9f9752a05f769":[async_test('html5lib_template.html be40897ca411e1507197c31ab2a9f9752a05f769'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3EHello", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"dcfb1048ed5c40e406b4fbf0cde24c826713907f":[async_test('html5lib_template.html dcfb1048ed5c40e406b4fbf0cde24c826713907f'), "%3Cbody%3E%3Ctemplate%3E%3Ci%3E%3Cmenu%3EFoo%3C/i%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmenu%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22Foo%22"],"78263aeea68ac97903598682013bae9c0c21d547":[async_test('html5lib_template.html 78263aeea68ac97903598682013bae9c0c21d547'), "%3Cbody%3E%3Ctemplate%3E%3C/div%3E%3Cdiv%3EFoo%3C/div%3E%3Ctemplate%3E%3C/template%3E%3Ctr%3E%3C/tr%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"5aa177ef1a35bf4502dcb867d8e666288982ba99":[async_test('html5lib_template.html 5aa177ef1a35bf4502dcb867d8e666288982ba99'), "%3Cbody%3E%3Cdiv%3E%3Ctemplate%3E%3C/div%3E%3Ctr%3E%3Ctd%3EFoo%3C/td%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Foo%22"],"5d303375907dc4d4380b477e0317c17b660613e9":[async_test('html5lib_template.html 5d303375907dc4d4380b477e0317c17b660613e9'), "%3Ctemplate%3E%3C/figcaption%3E%3Csub%3E%3Ctable%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Csub%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E"],"d822f726927c34b92fe102b13e63920850878f6a":[async_test('html5lib_template.html d822f726927c34b92fe102b13e63920850878f6a'), "%3Ctemplate%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"07acdcaeb4fa639296d46673cf28823ddf2a6ca7":[async_test('html5lib_template.html 07acdcaeb4fa639296d46673cf28823ddf2a6ca7'), "%3Ctemplate%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3Cbody%3E"],"58bd846ce1be0caf7560fba2ef19e2c2070ab123":[async_test('html5lib_template.html 58bd846ce1be0caf7560fba2ef19e2c2070ab123'), "%3Ctemplate%3E%3Ctemplate%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3Cbody%3E"],"8eeee377e5ab324731cc592f1fa8abe1045ad610":[async_test('html5lib_template.html 8eeee377e5ab324731cc592f1fa8abe1045ad610'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctable%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E"],"b30690019090149132fc228a7261c5cf2fd149fc":[async_test('html5lib_template.html b30690019090149132fc228a7261c5cf2fd149fc'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctbody%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%3Cbody%3E"],"67a209d928804f90fdb66d070201b23f3d0c8a42":[async_test('html5lib_template.html 67a209d928804f90fdb66d070201b23f3d0c8a42'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctr%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%3Cbody%3E"],"12104886b8f87daa937eac30b5ff0e1e074eaa6f":[async_test('html5lib_template.html 12104886b8f87daa937eac30b5ff0e1e074eaa6f'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%3Cbody%3E"],"483cc9957a7225fe435112642be59abb4c459a1e":[async_test('html5lib_template.html 483cc9957a7225fe435112642be59abb4c459a1e'), "%3Ctemplate%3E%3Ctemplate%3E%3Ccaption%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccaption%3E%0A%7C%20%20%20%3Cbody%3E"],"72d8ac431a154c40ab75d53a258d9d80d47689eb":[async_test('html5lib_template.html 72d8ac431a154c40ab75d53a258d9d80d47689eb'), "%3Ctemplate%3E%3Ctemplate%3E%3Ccolgroup%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%3Cbody%3E"],"1125967cbbcd404f4cb14d48270b8ec778970d77":[async_test('html5lib_template.html 1125967cbbcd404f4cb14d48270b8ec778970d77'), "%3Ctemplate%3E%3Ctemplate%3E%3Ccol%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%3Cbody%3E"],"32c963e164b9ec82c60e490bb141c1ccc70b992f":[async_test('html5lib_template.html 32c963e164b9ec82c60e490bb141c1ccc70b992f'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctbody%3E%3Cselect%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%3Cbody%3E"],"574a95fc9c9f2de3aeaa0c9ee1e6967fc3d4770d":[async_test('html5lib_template.html 574a95fc9c9f2de3aeaa0c9ee1e6967fc3d4770d'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctable%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E"],"332863a7f9e61bff32bd3427ede7a088b790d453":[async_test('html5lib_template.html 332863a7f9e61bff32bd3427ede7a088b790d453'), "%3Ctemplate%3E%3Ctemplate%3E%3Cframe%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"2121db07146781773df9e53b94fa921a805175ce":[async_test('html5lib_template.html 2121db07146781773df9e53b94fa921a805175ce'), "%3Ctemplate%3E%3Ctemplate%3E%3Cscript%3Evar%20i", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22var%20i%22%0A%7C%20%20%20%3Cbody%3E"],"8675de267cd7e34f2febdee3feb665614d1562fe":[async_test('html5lib_template.html 8675de267cd7e34f2febdee3feb665614d1562fe'), "%3Ctemplate%3E%3Ctemplate%3E%3Cstyle%3Evar%20i", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22var%20i%22%0A%7C%20%20%20%3Cbody%3E"],"c5d26ad923a2b1e988ddd378ca4fb26eb48353e1":[async_test('html5lib_template.html c5d26ad923a2b1e988ddd378ca4fb26eb48353e1'), "%3Ctemplate%3E%3Ctable%3E%3C/template%3E%3Cbody%3E%3Cspan%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%22Foo%22"],"eec1542e2fa0e9eafb7f8d4a51eae56b5a31b3c8":[async_test('html5lib_template.html eec1542e2fa0e9eafb7f8d4a51eae56b5a31b3c8'), "%3Ctemplate%3E%3Ctd%3E%3C/template%3E%3Cbody%3E%3Cspan%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%22Foo%22"],"b79387a54c3b136db0f28ed96555ff683b3947fe":[async_test('html5lib_template.html b79387a54c3b136db0f28ed96555ff683b3947fe'), "%3Ctemplate%3E%3Cobject%3E%3C/template%3E%3Cbody%3E%3Cspan%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cobject%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%22Foo%22"],"c477a29a4deb32d072a415fa809a84a4f2beee0c":[async_test('html5lib_template.html c477a29a4deb32d072a415fa809a84a4f2beee0c'), "%3Ctemplate%3E%3Csvg%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20template%3E%0A%7C%20%20%20%3Cbody%3E"],"26e4480c08e1f5f7b6ac8b8c1832ab0312e3b7c5":[async_test('html5lib_template.html 26e4480c08e1f5f7b6ac8b8c1832ab0312e3b7c5'), "%3Ctemplate%3E%3Csvg%3E%3Cfoo%3E%3Ctemplate%3E%3CforeignObject%3E%3Cdiv%3E%3C/template%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20foo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20template%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"24b3b50fdd0bf8d5cf2ebaa6bf502d7bcfde1da4":[async_test('html5lib_template.html 24b3b50fdd0bf8d5cf2ebaa6bf502d7bcfde1da4'), "%3Cdummy%3E%3Ctemplate%3E%3Cspan%3E%3C/dummy%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdummy%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E"],"d3704c68528357189eb5826ab66eea071d6137a5":[async_test('html5lib_template.html d3704c68528357189eb5826ab66eea071d6137a5'), "%3Cbody%3E%3Ctable%3E%3Ctr%3E%3Ctd%3E%3Cselect%3E%3Ctemplate%3EFoo%3C/template%3E%3Ccaption%3EA%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%20%20%20%20%3Ccaption%3E%0A%7C%20%20%20%20%20%20%20%20%20%22A%22"],"d958f7d44faf772d1fb60f1a8f186f837ca735d9":[async_test('html5lib_template.html d958f7d44faf772d1fb60f1a8f186f837ca735d9'), "%3Cbody%3E%3C/body%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content"],"3fc4d97fa68fc2658356bdbd4e051c867de8de53":[async_test('html5lib_template.html 3fc4d97fa68fc2658356bdbd4e051c867de8de53'), "%3Chead%3E%3C/head%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"94820107bbf3fab3f82de1f717e8413aead7d3a6":[async_test('html5lib_template.html 94820107bbf3fab3f82de1f717e8413aead7d3a6'), "%3Chead%3E%3C/head%3E%3Ctemplate%3EFoo%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%3Cbody%3E"],"657c00ebdda37ae060cc69633ed98482ccc29e18":[async_test('html5lib_template.html 657c00ebdda37ae060cc69633ed98482ccc29e18'), "%3C%21DOCTYPE%20HTML%3E%3Cdummy%3E%3Ctable%3E%3Ctemplate%3E%3Ctable%3E%3Ctemplate%3E%3Ctable%3E%3Cscript%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdummy%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cscript%3E"],
+          "010950d55f4eccf16e9c4af1d263bb747294c646":[async_test('html5lib_template.html 010950d55f4eccf16e9c4af1d263bb747294c646'), "%3Cbody%3E%3Ctemplate%3EHello%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22Hello%22"],"a838bd54410cef059a42eea9606356488e16535b":[async_test('html5lib_template.html a838bd54410cef059a42eea9606356488e16535b'), "%3Ctemplate%3EHello%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22Hello%22%0A%7C%20%20%20%3Cbody%3E"],"27fb9111f6675a7e033b867480c0afddcda161a6":[async_test('html5lib_template.html 27fb9111f6675a7e033b867480c0afddcda161a6'), "%3Ctemplate%3E%3C/template%3E%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"aee883a65775489399a003b2371d58248a6aff6f":[async_test('html5lib_template.html aee883a65775489399a003b2371d58248a6aff6f'), "%3Chtml%3E%3Ctemplate%3EHello%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22Hello%22%0A%7C%20%20%20%3Cbody%3E"],"89b17b54ab343191bf74ef5434f4d2cfac40ea97":[async_test('html5lib_template.html 89b17b54ab343191bf74ef5434f4d2cfac40ea97'), "%3Chead%3E%3Ctemplate%3E%3Cdiv%3E%3C/div%3E%3C/template%3E%3C/head%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3Cbody%3E"],"c4433556c7414cfd71f27b420f1ffc4348774f5e":[async_test('html5lib_template.html c4433556c7414cfd71f27b420f1ffc4348774f5e'), "%3Cdiv%3E%3Ctemplate%3E%3Cdiv%3E%3Cspan%3E%3C/template%3E%3Cb%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E"],"3dcce7d97108b3e9ea7fa96f240ac62bf280e74b":[async_test('html5lib_template.html 3dcce7d97108b3e9ea7fa96f240ac62bf280e74b'), "%3Cdiv%3E%3Ctemplate%3E%3C/div%3EHello", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22Hello%22"],"a1f587f7ea85ccfe294bd45bfb501e850cb979e0":[async_test('html5lib_template.html a1f587f7ea85ccfe294bd45bfb501e850cb979e0'), "%3Cdiv%3E%3C/template%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"cd26a7832f13bdc135697321ca6c2fecdca6ef5d":[async_test('html5lib_template.html cd26a7832f13bdc135697321ca6c2fecdca6ef5d'), "%3Ctable%3E%3Ctemplate%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"e30571d90b0e56864499961eb7be955994cf72e2":[async_test('html5lib_template.html e30571d90b0e56864499961eb7be955994cf72e2'), "%3Ctable%3E%3Ctemplate%3E%3C/template%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"01cbe9f6a25f286b08d8dc4f7b65421e8eb3500c":[async_test('html5lib_template.html 01cbe9f6a25f286b08d8dc4f7b65421e8eb3500c'), "%3Ctable%3E%3Cdiv%3E%3Ctemplate%3E%3C/template%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%3Ctable%3E"],"96cbbcdffe02c86a8b929604c2fd5f3571a18dbe":[async_test('html5lib_template.html 96cbbcdffe02c86a8b929604c2fd5f3571a18dbe'), "%3Ctable%3E%3Ctemplate%3E%3C/template%3E%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"d51676f55550e960dd0f5fa7fd0bdfa20bdde046":[async_test('html5lib_template.html d51676f55550e960dd0f5fa7fd0bdfa20bdde046'), "%3Ctable%3E%20%20%20%3Ctemplate%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%22%20%20%20%22%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"f9dfd9acfd494489c899604649a01d864741f50f":[async_test('html5lib_template.html f9dfd9acfd494489c899604649a01d864741f50f'), "%3Ctable%3E%3Ctbody%3E%3Ctemplate%3E%3C/template%3E%3C/tbody%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"ea00361c265d3ffb47ce636d919c94ca10d58911":[async_test('html5lib_template.html ea00361c265d3ffb47ce636d919c94ca10d58911'), "%3Ctable%3E%3Ctbody%3E%3Ctemplate%3E%3C/tbody%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"d8ebfcf7694c9d04457e796ac73049210313602e":[async_test('html5lib_template.html d8ebfcf7694c9d04457e796ac73049210313602e'), "%3Ctable%3E%3Ctbody%3E%3Ctemplate%3E%3C/template%3E%3C/tbody%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"b4d5e6fe9b92e2c8f54199d7cab3da383c42add0":[async_test('html5lib_template.html b4d5e6fe9b92e2c8f54199d7cab3da383c42add0'), "%3Ctable%3E%3Cthead%3E%3Ctemplate%3E%3C/template%3E%3C/thead%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"07724ef8f7a4fa61c77ffcd5180d3101c4781502":[async_test('html5lib_template.html 07724ef8f7a4fa61c77ffcd5180d3101c4781502'), "%3Ctable%3E%3Ctfoot%3E%3Ctemplate%3E%3C/template%3E%3C/tfoot%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctfoot%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"e90f8aae8fc690540b42b3ffa3e741e7c1dfbf43":[async_test('html5lib_template.html e90f8aae8fc690540b42b3ffa3e741e7c1dfbf43'), "%3Cselect%3E%3Ctemplate%3E%3C/template%3E%3C/select%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"687bdf4adda88a316ec69fe20e84720acc5d1fe6":[async_test('html5lib_template.html 687bdf4adda88a316ec69fe20e84720acc5d1fe6'), "%3Cselect%3E%3Ctemplate%3E%3Coption%3E%3C/option%3E%3C/template%3E%3C/select%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Coption%3E"],"5b232642f472c2b4c0c7511fed464eebe686b427":[async_test('html5lib_template.html 5b232642f472c2b4c0c7511fed464eebe686b427'), "%3Ctemplate%3E%3Coption%3E%3C/option%3E%3C/select%3E%3Coption%3E%3C/option%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%3Cbody%3E"],"dc1ac1830a881d1532a1e6fd6d0cfa56d6571da2":[async_test('html5lib_template.html dc1ac1830a881d1532a1e6fd6d0cfa56d6571da2'), "%3Cselect%3E%3Ctemplate%3E%3C/template%3E%3Coption%3E%3C/select%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%3Coption%3E"],"c58747a85e8b4f44d7ae63c04cdad783a903c25e":[async_test('html5lib_template.html c58747a85e8b4f44d7ae63c04cdad783a903c25e'), "%3Cselect%3E%3Coption%3E%3Ctemplate%3E%3C/template%3E%3C/select%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"ca59bfdaec7451f704973176fab46e582bd691b2":[async_test('html5lib_template.html ca59bfdaec7451f704973176fab46e582bd691b2'), "%3Cselect%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"cf807d6391a58c172b6c15c3b01d2a99ec0e6cf8":[async_test('html5lib_template.html cf807d6391a58c172b6c15c3b01d2a99ec0e6cf8'), "%3Cselect%3E%3Coption%3E%3C/option%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content"],"350b7ac850e46de79615308fc923649264406104":[async_test('html5lib_template.html 350b7ac850e46de79615308fc923649264406104'), "%3Cselect%3E%3Coption%3E%3C/option%3E%3Ctemplate%3E%3Coption%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Coption%3E"],"a31ff44edf7f377543dabdda8141cda9bb6de134":[async_test('html5lib_template.html a31ff44edf7f377543dabdda8141cda9bb6de134'), "%3Ctable%3E%3Cthead%3E%3Ctemplate%3E%3Ctd%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"533c5c1b5f0d0cbb1ede2cc5ae927095c5b21f0b":[async_test('html5lib_template.html 533c5c1b5f0d0cbb1ede2cc5ae927095c5b21f0b'), "%3Ctable%3E%3Ctemplate%3E%3Cthead%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cthead%3E"],"61f79e083005007853c4f8e431559ac8d3845cfd":[async_test('html5lib_template.html 61f79e083005007853c4f8e431559ac8d3845cfd'), "%3Cbody%3E%3Ctable%3E%3Ctemplate%3E%3Ctd%3E%3C/tr%3E%3Cdiv%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"e802e85f36792b176b73c102c0e8761d9478621d":[async_test('html5lib_template.html e802e85f36792b176b73c102c0e8761d9478621d'), "%3Ctable%3E%3Ctemplate%3E%3Cthead%3E%3C/template%3E%3C/thead%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cthead%3E"],"51d0797ff7653cd7be34458d689146e08a666c7f":[async_test('html5lib_template.html 51d0797ff7653cd7be34458d689146e08a666c7f'), "%3Ctable%3E%3Cthead%3E%3Ctemplate%3E%3Ctr%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"d60e4079a18bd6266740cc61d1ca736e9d5098ce":[async_test('html5lib_template.html d60e4079a18bd6266740cc61d1ca736e9d5098ce'), "%3Ctable%3E%3Ctemplate%3E%3Ctr%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"308709292677b4d74c108a811ad7b7acd0bdfc9c":[async_test('html5lib_template.html 308709292677b4d74c108a811ad7b7acd0bdfc9c'), "%3Ctable%3E%3Ctr%3E%3Ctemplate%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"8965cdf9c4e9936262e25c90c7a7f8673840a445":[async_test('html5lib_template.html 8965cdf9c4e9936262e25c90c7a7f8673840a445'), "%3Ctable%3E%3Ctemplate%3E%3Ctr%3E%3Ctemplate%3E%3Ctd%3E%3C/template%3E%3C/tr%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"7dccda789764beb489e09be10188af9347335d05":[async_test('html5lib_template.html 7dccda789764beb489e09be10188af9347335d05'), "%3Ctable%3E%3Ctemplate%3E%3Ctr%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3C/template%3E%3C/tr%3E%3C/template%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"e15be51c77e1a6de35568a099ed339440ce9426d":[async_test('html5lib_template.html e15be51c77e1a6de35568a099ed339440ce9426d'), "%3Ctable%3E%3Ctemplate%3E%3Ctd%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"503d3782e45940c19f096f360a092282b46ab1ea":[async_test('html5lib_template.html 503d3782e45940c19f096f360a092282b46ab1ea'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"b4ab56fd9e9cebf479d14adfa523c06d16483a5e":[async_test('html5lib_template.html b4ab56fd9e9cebf479d14adfa523c06d16483a5e'), "%3Cbody%3E%3Ctemplate%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3C/template%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"cd8bc9521f9683086a9e8529dd97314a6869daeb":[async_test('html5lib_template.html cd8bc9521f9683086a9e8529dd97314a6869daeb'), "%3Ctable%3E%3Ccolgroup%3E%3Ctemplate%3E%3Ccol%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"f915e7b3407c24b28c3aad318e5693cc774020f4":[async_test('html5lib_template.html f915e7b3407c24b28c3aad318e5693cc774020f4'), "%3Cframeset%3E%3Ctemplate%3E%3Cframe%3E%3C/frame%3E%3C/template%3E%3C/frameset%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"3c5eb261787b3d15aff86fa61de773fd7e439b0e":[async_test('html5lib_template.html 3c5eb261787b3d15aff86fa61de773fd7e439b0e'), "%3Ctemplate%3E%3Cframe%3E%3C/frame%3E%3C/frameset%3E%3Cframe%3E%3C/frame%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"2b57775750c198d4b98b23aed74ff80a866a01f5":[async_test('html5lib_template.html 2b57775750c198d4b98b23aed74ff80a866a01f5'), "%3Ctemplate%3E%3Cdiv%3E%3Cframeset%3E%3Cspan%3E%3C/span%3E%3C/div%3E%3Cspan%3E%3C/span%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%3Cbody%3E"],"dc3d016610f3ab532525a6c2871f03d6b62b0168":[async_test('html5lib_template.html dc3d016610f3ab532525a6c2871f03d6b62b0168'), "%3Cbody%3E%3Ctemplate%3E%3Cdiv%3E%3Cframeset%3E%3Cspan%3E%3C/span%3E%3C/div%3E%3Cspan%3E%3C/span%3E%3C/template%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E"],"6a184d71d00580a26a8b6bd97aafe5503339f3f6":[async_test('html5lib_template.html 6a184d71d00580a26a8b6bd97aafe5503339f3f6'), "%3Cbody%3E%3Ctemplate%3E%3Cscript%3Evar%20i%20%3D%201%3B%3C/script%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22var%20i%20%3D%201%3B%22%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"ce570a6c4bcee8b72a03e25508c6dd72e3cc6c35":[async_test('html5lib_template.html ce570a6c4bcee8b72a03e25508c6dd72e3cc6c35'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3Cdiv%3E%3C/div%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"e0c3d922f7b1f1654f02f716c3d9b31198ce3385":[async_test('html5lib_template.html e0c3d922f7b1f1654f02f716c3d9b31198ce3385'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"87e67242bf6debcf3b7dca852d10aa0f7b625b28":[async_test('html5lib_template.html 87e67242bf6debcf3b7dca852d10aa0f7b625b28'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3C/tr%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"35ac4d4c972a01d368ed0cacb41370efef0a644d":[async_test('html5lib_template.html 35ac4d4c972a01d368ed0cacb41370efef0a644d'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3Ctbody%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"5226c39dfc2d624ad4191b4eacb7e40c7ae528eb":[async_test('html5lib_template.html 5226c39dfc2d624ad4191b4eacb7e40c7ae528eb'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3Ccaption%3E%3C/caption%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"aa90cd4db6b12e0a47341914a90cc536eec32d64":[async_test('html5lib_template.html aa90cd4db6b12e0a47341914a90cc536eec32d64'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3Ccolgroup%3E%3C/caption%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"48af1faf5fcf48a0854af5a5c33656d9ccf6736b":[async_test('html5lib_template.html 48af1faf5fcf48a0854af5a5c33656d9ccf6736b'), "%3Cbody%3E%3Ctemplate%3E%3Ctd%3E%3C/td%3E%3C/table%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"ed3a029ba5e7f59969d65a4fc490a8f13b098cb9":[async_test('html5lib_template.html ed3a029ba5e7f59969d65a4fc490a8f13b098cb9'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3Ctbody%3E%3Ctr%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"6c8880d54475ad9574e203dcf2e55820b123cc64":[async_test('html5lib_template.html 6c8880d54475ad9574e203dcf2e55820b123cc64'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3Ccaption%3E%3Ctr%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"275060925a844cb51b29bae660301de9780d68c8":[async_test('html5lib_template.html 275060925a844cb51b29bae660301de9780d68c8'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3C/table%3E%3Ctr%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"9f82f6ec4c0a48c1d4dfbe6803b94abd553aea88":[async_test('html5lib_template.html 9f82f6ec4c0a48c1d4dfbe6803b94abd553aea88'), "%3Cbody%3E%3Ctemplate%3E%3Cthead%3E%3C/thead%3E%3Ccaption%3E%3C/caption%3E%3Ctbody%3E%3C/tbody%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ccaption%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E"],"f094bf7e94a88b86c80a0643e70c8e5ff3354698":[async_test('html5lib_template.html f094bf7e94a88b86c80a0643e70c8e5ff3354698'), "%3Cbody%3E%3Ctemplate%3E%3Cthead%3E%3C/thead%3E%3C/table%3E%3Ctbody%3E%3C/tbody%3E%3C/template%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E"],"35a07ec3b4bf26ea407dc1ddf52f14195a714059":[async_test('html5lib_template.html 35a07ec3b4bf26ea407dc1ddf52f14195a714059'), "%3Cbody%3E%3Ctemplate%3E%3Cdiv%3E%3Ctr%3E%3C/tr%3E%3C/div%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"24faa53b271f994a4ff31d5796c8ff47d6f2c3e6":[async_test('html5lib_template.html 24faa53b271f994a4ff31d5796c8ff47d6f2c3e6'), "%3Cbody%3E%3Ctemplate%3E%3Cem%3EHello%3C/em%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22Hello%22"],"0f1c491b58c2dd3c402a62e37f833bc1f1db8d21":[async_test('html5lib_template.html 0f1c491b58c2dd3c402a62e37f833bc1f1db8d21'), "%3Cbody%3E%3Ctemplate%3E%3C%21--comment--%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3C%21--%20comment%20--%3E"],"868d918a7b5d8b5c065c15229492bc2022bfbcba":[async_test('html5lib_template.html 868d918a7b5d8b5c065c15229492bc2022bfbcba'), "%3Cbody%3E%3Ctemplate%3E%3Cstyle%3E%3C/style%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"0538efa44e857596c556033a3821d424378aea3f":[async_test('html5lib_template.html 0538efa44e857596c556033a3821d424378aea3f'), "%3Cbody%3E%3Ctemplate%3E%3Cmeta%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"e7d7bf3973c70d3cf9b0adad2ebed9f25be48d66":[async_test('html5lib_template.html e7d7bf3973c70d3cf9b0adad2ebed9f25be48d66'), "%3Cbody%3E%3Ctemplate%3E%3Clink%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Clink%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"c69d0ac542d477b7312bb24981127b8aa8fdb1df":[async_test('html5lib_template.html c69d0ac542d477b7312bb24981127b8aa8fdb1df'), "%3Cbody%3E%3Ctable%3E%3Ccolgroup%3E%3Ctemplate%3E%3Ccol%3E%3C/col%3E%3C/template%3E%3C/colgroup%3E%3C/table%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"b496a8c13a7bd75b778bb0de489726aee952ae0c":[async_test('html5lib_template.html b496a8c13a7bd75b778bb0de489726aee952ae0c'), "%3Cbody%20a%3Db%3E%3Ctemplate%3E%3Cdiv%3E%3C/div%3E%3Cbody%20c%3Dd%3E%3Cdiv%3E%3C/div%3E%3C/body%3E%3C/template%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20a%3D%22b%22%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"5d6ee61de40274c9626ca78ee208d51276d5662d":[async_test('html5lib_template.html 5d6ee61de40274c9626ca78ee208d51276d5662d'), "%3Chtml%20a%3Db%3E%3Ctemplate%3E%3Cdiv%3E%3Chtml%20b%3Dc%3E%3Cspan%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%3Cbody%3E"],"9bd9687a65f258adc24450fc5cbd781fff6c038a":[async_test('html5lib_template.html 9bd9687a65f258adc24450fc5cbd781fff6c038a'), "%3Chtml%20a%3Db%3E%3Ctemplate%3E%3Ccol%3E%3C/col%3E%3Chtml%20b%3Dc%3E%3Ccol%3E%3C/col%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%3Cbody%3E"],"db1baeb846d718c773324746524fbd68f2e9436e":[async_test('html5lib_template.html db1baeb846d718c773324746524fbd68f2e9436e'), "%3Chtml%20a%3Db%3E%3Ctemplate%3E%3Cframe%3E%3C/frame%3E%3Chtml%20b%3Dc%3E%3Cframe%3E%3C/frame%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"4b0ce46c611dbcc016db272ef007f302bee0c897":[async_test('html5lib_template.html 4b0ce46c611dbcc016db272ef007f302bee0c897'), "%3Cbody%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3Ctemplate%3E%3C/template%3E%3Ctd%3E%3C/td%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"1a735e1c7f28f8701f3c7fd5e9404b8911916086":[async_test('html5lib_template.html 1a735e1c7f28f8701f3c7fd5e9404b8911916086'), "%3Cbody%3E%3Ctemplate%3E%3Cthead%3E%3C/thead%3E%3Ctemplate%3E%3Ctr%3E%3C/tr%3E%3C/template%3E%3Ctr%3E%3C/tr%3E%3Ctfoot%3E%3C/tfoot%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctfoot%3E"],"0686eedec06b2db1dc283fac92c1ef1a33114c71":[async_test('html5lib_template.html 0686eedec06b2db1dc283fac92c1ef1a33114c71'), "%3Cbody%3E%3Ctemplate%3E%3Ctemplate%3E%3Cb%3E%3Ctemplate%3E%3C/template%3E%3C/template%3Etext%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22text%22"],"d4dfb87ce626f12923056a6cd77448eaf4660ac2":[async_test('html5lib_template.html d4dfb87ce626f12923056a6cd77448eaf4660ac2'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3Ccolgroup%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"1f295920f2937b2c8023b3761c43a0d4d9e5353c":[async_test('html5lib_template.html 1f295920f2937b2c8023b3761c43a0d4d9e5353c'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3C/colgroup%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"3b91fa08fad923d387d924cff37fbf6b4c3a5712":[async_test('html5lib_template.html 3b91fa08fad923d387d924cff37fbf6b4c3a5712'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3Ccolgroup%3E%3C/template%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"45a1c1ad5d99ad67c573096a79253996a664e01b":[async_test('html5lib_template.html 45a1c1ad5d99ad67c573096a79253996a664e01b'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"0fe3a66773c6048c8f6f2c92f2611f65be972ec1":[async_test('html5lib_template.html 0fe3a66773c6048c8f6f2c92f2611f65be972ec1'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"be40897ca411e1507197c31ab2a9f9752a05f769":[async_test('html5lib_template.html be40897ca411e1507197c31ab2a9f9752a05f769'), "%3Cbody%3E%3Ctemplate%3E%3Ccol%3EHello", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ccol%3E"],"dcfb1048ed5c40e406b4fbf0cde24c826713907f":[async_test('html5lib_template.html dcfb1048ed5c40e406b4fbf0cde24c826713907f'), "%3Cbody%3E%3Ctemplate%3E%3Ci%3E%3Cmenu%3EFoo%3C/i%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmenu%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22Foo%22"],"78263aeea68ac97903598682013bae9c0c21d547":[async_test('html5lib_template.html 78263aeea68ac97903598682013bae9c0c21d547'), "%3Cbody%3E%3Ctemplate%3E%3C/div%3E%3Cdiv%3EFoo%3C/div%3E%3Ctemplate%3E%3C/template%3E%3Ctr%3E%3C/tr%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content"],"5aa177ef1a35bf4502dcb867d8e666288982ba99":[async_test('html5lib_template.html 5aa177ef1a35bf4502dcb867d8e666288982ba99'), "%3Cbody%3E%3Cdiv%3E%3Ctemplate%3E%3C/div%3E%3Ctr%3E%3Ctd%3EFoo%3C/td%3E%3C/tr%3E%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Foo%22"],"5d303375907dc4d4380b477e0317c17b660613e9":[async_test('html5lib_template.html 5d303375907dc4d4380b477e0317c17b660613e9'), "%3Ctemplate%3E%3C/figcaption%3E%3Csub%3E%3Ctable%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Csub%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E"],"d822f726927c34b92fe102b13e63920850878f6a":[async_test('html5lib_template.html d822f726927c34b92fe102b13e63920850878f6a'), "%3Ctemplate%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"07acdcaeb4fa639296d46673cf28823ddf2a6ca7":[async_test('html5lib_template.html 07acdcaeb4fa639296d46673cf28823ddf2a6ca7'), "%3Ctemplate%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3Cbody%3E"],"58bd846ce1be0caf7560fba2ef19e2c2070ab123":[async_test('html5lib_template.html 58bd846ce1be0caf7560fba2ef19e2c2070ab123'), "%3Ctemplate%3E%3Ctemplate%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3Cbody%3E"],"8eeee377e5ab324731cc592f1fa8abe1045ad610":[async_test('html5lib_template.html 8eeee377e5ab324731cc592f1fa8abe1045ad610'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctable%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E"],"b30690019090149132fc228a7261c5cf2fd149fc":[async_test('html5lib_template.html b30690019090149132fc228a7261c5cf2fd149fc'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctbody%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%3Cbody%3E"],"67a209d928804f90fdb66d070201b23f3d0c8a42":[async_test('html5lib_template.html 67a209d928804f90fdb66d070201b23f3d0c8a42'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctr%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%3Cbody%3E"],"12104886b8f87daa937eac30b5ff0e1e074eaa6f":[async_test('html5lib_template.html 12104886b8f87daa937eac30b5ff0e1e074eaa6f'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%3Cbody%3E"],"483cc9957a7225fe435112642be59abb4c459a1e":[async_test('html5lib_template.html 483cc9957a7225fe435112642be59abb4c459a1e'), "%3Ctemplate%3E%3Ctemplate%3E%3Ccaption%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccaption%3E%0A%7C%20%20%20%3Cbody%3E"],"72d8ac431a154c40ab75d53a258d9d80d47689eb":[async_test('html5lib_template.html 72d8ac431a154c40ab75d53a258d9d80d47689eb'), "%3Ctemplate%3E%3Ctemplate%3E%3Ccolgroup%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%3Cbody%3E"],"1125967cbbcd404f4cb14d48270b8ec778970d77":[async_test('html5lib_template.html 1125967cbbcd404f4cb14d48270b8ec778970d77'), "%3Ctemplate%3E%3Ctemplate%3E%3Ccol%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%3Cbody%3E"],"32c963e164b9ec82c60e490bb141c1ccc70b992f":[async_test('html5lib_template.html 32c963e164b9ec82c60e490bb141c1ccc70b992f'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctbody%3E%3Cselect%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%3Cbody%3E"],"574a95fc9c9f2de3aeaa0c9ee1e6967fc3d4770d":[async_test('html5lib_template.html 574a95fc9c9f2de3aeaa0c9ee1e6967fc3d4770d'), "%3Ctemplate%3E%3Ctemplate%3E%3Ctable%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E"],"332863a7f9e61bff32bd3427ede7a088b790d453":[async_test('html5lib_template.html 332863a7f9e61bff32bd3427ede7a088b790d453'), "%3Ctemplate%3E%3Ctemplate%3E%3Cframe%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"2121db07146781773df9e53b94fa921a805175ce":[async_test('html5lib_template.html 2121db07146781773df9e53b94fa921a805175ce'), "%3Ctemplate%3E%3Ctemplate%3E%3Cscript%3Evar%20i", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22var%20i%22%0A%7C%20%20%20%3Cbody%3E"],"8675de267cd7e34f2febdee3feb665614d1562fe":[async_test('html5lib_template.html 8675de267cd7e34f2febdee3feb665614d1562fe'), "%3Ctemplate%3E%3Ctemplate%3E%3Cstyle%3Evar%20i", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22var%20i%22%0A%7C%20%20%20%3Cbody%3E"],"c5d26ad923a2b1e988ddd378ca4fb26eb48353e1":[async_test('html5lib_template.html c5d26ad923a2b1e988ddd378ca4fb26eb48353e1'), "%3Ctemplate%3E%3Ctable%3E%3C/template%3E%3Cbody%3E%3Cspan%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%22Foo%22"],"eec1542e2fa0e9eafb7f8d4a51eae56b5a31b3c8":[async_test('html5lib_template.html eec1542e2fa0e9eafb7f8d4a51eae56b5a31b3c8'), "%3Ctemplate%3E%3Ctd%3E%3C/template%3E%3Cbody%3E%3Cspan%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%22Foo%22"],"b79387a54c3b136db0f28ed96555ff683b3947fe":[async_test('html5lib_template.html b79387a54c3b136db0f28ed96555ff683b3947fe'), "%3Ctemplate%3E%3Cobject%3E%3C/template%3E%3Cbody%3E%3Cspan%3EFoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Cobject%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%22Foo%22"],"c477a29a4deb32d072a415fa809a84a4f2beee0c":[async_test('html5lib_template.html c477a29a4deb32d072a415fa809a84a4f2beee0c'), "%3Ctemplate%3E%3Csvg%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20template%3E%0A%7C%20%20%20%3Cbody%3E"],"26e4480c08e1f5f7b6ac8b8c1832ab0312e3b7c5":[async_test('html5lib_template.html 26e4480c08e1f5f7b6ac8b8c1832ab0312e3b7c5'), "%3Ctemplate%3E%3Csvg%3E%3Cfoo%3E%3Ctemplate%3E%3CforeignObject%3E%3Cdiv%3E%3C/template%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20foo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20template%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"24b3b50fdd0bf8d5cf2ebaa6bf502d7bcfde1da4":[async_test('html5lib_template.html 24b3b50fdd0bf8d5cf2ebaa6bf502d7bcfde1da4'), "%3Cdummy%3E%3Ctemplate%3E%3Cspan%3E%3C/dummy%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdummy%3E%0A%7C%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E"],"d3704c68528357189eb5826ab66eea071d6137a5":[async_test('html5lib_template.html d3704c68528357189eb5826ab66eea071d6137a5'), "%3Cbody%3E%3Ctable%3E%3Ctr%3E%3Ctd%3E%3Cselect%3E%3Ctemplate%3EFoo%3C/template%3E%3Ccaption%3EA%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%20%20%20%20%3Ccaption%3E%0A%7C%20%20%20%20%20%20%20%20%20%22A%22"],"d958f7d44faf772d1fb60f1a8f186f837ca735d9":[async_test('html5lib_template.html d958f7d44faf772d1fb60f1a8f186f837ca735d9'), "%3Cbody%3E%3C/body%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content"],"3fc4d97fa68fc2658356bdbd4e051c867de8de53":[async_test('html5lib_template.html 3fc4d97fa68fc2658356bdbd4e051c867de8de53'), "%3Chead%3E%3C/head%3E%3Ctemplate%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%3Cbody%3E"],"94820107bbf3fab3f82de1f717e8413aead7d3a6":[async_test('html5lib_template.html 94820107bbf3fab3f82de1f717e8413aead7d3a6'), "%3Chead%3E%3C/head%3E%3Ctemplate%3EFoo%3C/template%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%22Foo%22%0A%7C%20%20%20%3Cbody%3E"],"657c00ebdda37ae060cc69633ed98482ccc29e18":[async_test('html5lib_template.html 657c00ebdda37ae060cc69633ed98482ccc29e18'), "%3C%21DOCTYPE%20HTML%3E%3Cdummy%3E%3Ctable%3E%3Ctemplate%3E%3Ctable%3E%3Ctemplate%3E%3Ctable%3E%3Cscript%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdummy%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cscript%3E"],"649fc955a4b60ab2a5b881d94c9493eb4a545002":[async_test('html5lib_template.html 649fc955a4b60ab2a5b881d94c9493eb4a545002'), "%3Ctemplate%3E%3Ca%3E%3Ctable%3E%3Ca%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctemplate%3E%0A%7C%20%20%20%20%20%20%20content%0A%7C%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%3Cbody%3E"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests11.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests11.html
index e21b032..f088b69 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests11.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests11.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['d3a8de194ffc676baf08142bcda59ba18dcde2ba','7ab36bc30d0d6bee4be899f13baed214e1ff0a74','45b6adfc38d306084d105aa7779a3b4fb83c031f','b6ce0d4b36700a2f000199109155d1869f3c8d2f','39c50f080b2b9ae9e7a1070679ab97d7b814f9ec','6d1fa1599f75625fe4d019abb04a064cf6ed39e8','791437ece7ba684e00162d1dd79dfe540e3621a7','af40d26164229c29b9be77ed6dd7dda780cba55c','16e68d18f8f0fb81013fe77a30b7d396c5081e5e',];
+      var order = ['ba7a66dfcf59885c08e8638d15b01df3878531e7','e69c7c08a54ca868ab33b2825d998fa6c3cac90e','0e5897aafe87e460f84576c2d1d983504d12a7db','f71dd198831309fc9ccd66ef91cde63fda9b9bda','a8f7a23601363454b4a13f66aed99ec9708ae87b','f8f7f6c576acc9eb874acb0dce6988f0f7b6fc5f','fb4dc9f70129a8a045fca3a1e3acee052d0990b3','8f77b846acce75edf1988ea655c79f1de4321de9','39c50f080b2b9ae9e7a1070679ab97d7b814f9ec','6d1fa1599f75625fe4d019abb04a064cf6ed39e8','791437ece7ba684e00162d1dd79dfe540e3621a7','af40d26164229c29b9be77ed6dd7dda780cba55c','16e68d18f8f0fb81013fe77a30b7d396c5081e5e',];
       var tests = {
-          "d3a8de194ffc676baf08142bcda59ba18dcde2ba":[async_test('html5lib_tests11.html d3a8de194ffc676baf08142bcda59ba18dcde2ba'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%20attributeName%3D%27%27%20attributeType%3D%27%27%20baseFrequency%3D%27%27%20baseProfile%3D%27%27%20calcMode%3D%27%27%20clipPathUnits%3D%27%27%20contentScriptType%3D%27%27%20contentStyleType%3D%27%27%20diffuseConstant%3D%27%27%20edgeMode%3D%27%27%20externalResourcesRequired%3D%27%27%20filterRes%3D%27%27%20filterUnits%3D%27%27%20glyphRef%3D%27%27%20gradientTransform%3D%27%27%20gradientUnits%3D%27%27%20kernelMatrix%3D%27%27%20kernelUnitLength%3D%27%27%20keyPoints%3D%27%27%20keySplines%3D%27%27%20keyTimes%3D%27%27%20lengthAdjust%3D%27%27%20limitingConeAngle%3D%27%27%20markerHeight%3D%27%27%20markerUnits%3D%27%27%20markerWidth%3D%27%27%20maskContentUnits%3D%27%27%20maskUnits%3D%27%27%20numOctaves%3D%27%27%20pathLength%3D%27%27%20patternContentUnits%3D%27%27%20patternTransform%3D%27%27%20patternUnits%3D%27%27%20pointsAtX%3D%27%27%20pointsAtY%3D%27%27%20pointsAtZ%3D%27%27%20preserveAlpha%3D%27%27%20preserveAspectRatio%3D%27%27%20primitiveUnits%3D%27%27%20refX%3D%27%27%20refY%3D%27%27%20repeatCount%3D%27%27%20repeatDur%3D%27%27%20requiredExtensions%3D%27%27%20requiredFeatures%3D%27%27%20specularConstant%3D%27%27%20specularExponent%3D%27%27%20spreadMethod%3D%27%27%20startOffset%3D%27%27%20stdDeviation%3D%27%27%20stitchTiles%3D%27%27%20surfaceScale%3D%27%27%20systemLanguage%3D%27%27%20tableValues%3D%27%27%20targetX%3D%27%27%20targetY%3D%27%27%20textLength%3D%27%27%20viewBox%3D%27%27%20viewTarget%3D%27%27%20xChannelSelector%3D%27%27%20yChannelSelector%3D%27%27%20zoomAndPan%3D%27%27%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20attributeName%3D%22%22%0A%7C%20%20%20%20%20%20%20attributeType%3D%22%22%0A%7C%20%20%20%20%20%20%20baseFrequency%3D%22%22%0A%7C%20%20%20%20%20%20%20baseProfile%3D%22%22%0A%7C%20%20%20%20%20%20%20calcMode%3D%22%22%0A%7C%20%20%20%20%20%20%20clipPathUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20contentscripttype%3D%22%22%0A%7C%20%20%20%20%20%20%20contentstyletype%3D%22%22%0A%7C%20%20%20%20%20%20%20diffuseConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20edgeMode%3D%22%22%0A%7C%20%20%20%20%20%20%20externalresourcesrequired%3D%22%22%0A%7C%20%20%20%20%20%20%20filterUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22%0A%7C%20%20%20%20%20%20%20glyphRef%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelMatrix%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelUnitLength%3D%22%22%0A%7C%20%20%20%20%20%20%20keyPoints%3D%22%22%0A%7C%20%20%20%20%20%20%20keySplines%3D%22%22%0A%7C%20%20%20%20%20%20%20keyTimes%3D%22%22%0A%7C%20%20%20%20%20%20%20lengthAdjust%3D%22%22%0A%7C%20%20%20%20%20%20%20limitingConeAngle%3D%22%22%0A%7C%20%20%20%20%20%20%20markerHeight%3D%22%22%0A%7C%20%20%20%20%20%20%20markerUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20markerWidth%3D%22%22%0A%7C%20%20%20%20%20%20%20maskContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20maskUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20numOctaves%3D%22%22%0A%7C%20%20%20%20%20%20%20pathLength%3D%22%22%0A%7C%20%20%20%20%20%20%20patternContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20patternTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20patternUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtX%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtY%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtZ%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAlpha%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAspectRatio%3D%22%22%0A%7C%20%20%20%20%20%20%20primitiveUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20refX%3D%22%22%0A%7C%20%20%20%20%20%20%20refY%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatCount%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatDur%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredExtensions%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredFeatures%3D%22%22%0A%7C%20%20%20%20%20%20%20specularConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20specularExponent%3D%22%22%0A%7C%20%20%20%20%20%20%20spreadMethod%3D%22%22%0A%7C%20%20%20%20%20%20%20startOffset%3D%22%22%0A%7C%20%20%20%20%20%20%20stdDeviation%3D%22%22%0A%7C%20%20%20%20%20%20%20stitchTiles%3D%22%22%0A%7C%20%20%20%20%20%20%20surfaceScale%3D%22%22%0A%7C%20%20%20%20%20%20%20systemLanguage%3D%22%22%0A%7C%20%20%20%20%20%20%20tableValues%3D%22%22%0A%7C%20%20%20%20%20%20%20targetX%3D%22%22%0A%7C%20%20%20%20%20%20%20targetY%3D%22%22%0A%7C%20%20%20%20%20%20%20textLength%3D%22%22%0A%7C%20%20%20%20%20%20%20viewBox%3D%22%22%0A%7C%20%20%20%20%20%20%20viewTarget%3D%22%22%0A%7C%20%20%20%20%20%20%20xChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20yChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20zoomAndPan%3D%22%22"],"7ab36bc30d0d6bee4be899f13baed214e1ff0a74":[async_test('html5lib_tests11.html 7ab36bc30d0d6bee4be899f13baed214e1ff0a74'), "%3C%21DOCTYPE%20html%3E%3CBODY%3E%3CSVG%20ATTRIBUTENAME%3D%27%27%20ATTRIBUTETYPE%3D%27%27%20BASEFREQUENCY%3D%27%27%20BASEPROFILE%3D%27%27%20CALCMODE%3D%27%27%20CLIPPATHUNITS%3D%27%27%20CONTENTSCRIPTTYPE%3D%27%27%20CONTENTSTYLETYPE%3D%27%27%20DIFFUSECONSTANT%3D%27%27%20EDGEMODE%3D%27%27%20EXTERNALRESOURCESREQUIRED%3D%27%27%20FILTERRES%3D%27%27%20FILTERUNITS%3D%27%27%20GLYPHREF%3D%27%27%20GRADIENTTRANSFORM%3D%27%27%20GRADIENTUNITS%3D%27%27%20KERNELMATRIX%3D%27%27%20KERNELUNITLENGTH%3D%27%27%20KEYPOINTS%3D%27%27%20KEYSPLINES%3D%27%27%20KEYTIMES%3D%27%27%20LENGTHADJUST%3D%27%27%20LIMITINGCONEANGLE%3D%27%27%20MARKERHEIGHT%3D%27%27%20MARKERUNITS%3D%27%27%20MARKERWIDTH%3D%27%27%20MASKCONTENTUNITS%3D%27%27%20MASKUNITS%3D%27%27%20NUMOCTAVES%3D%27%27%20PATHLENGTH%3D%27%27%20PATTERNCONTENTUNITS%3D%27%27%20PATTERNTRANSFORM%3D%27%27%20PATTERNUNITS%3D%27%27%20POINTSATX%3D%27%27%20POINTSATY%3D%27%27%20POINTSATZ%3D%27%27%20PRESERVEALPHA%3D%27%27%20PRESERVEASPECTRATIO%3D%27%27%20PRIMITIVEUNITS%3D%27%27%20REFX%3D%27%27%20REFY%3D%27%27%20REPEATCOUNT%3D%27%27%20REPEATDUR%3D%27%27%20REQUIREDEXTENSIONS%3D%27%27%20REQUIREDFEATURES%3D%27%27%20SPECULARCONSTANT%3D%27%27%20SPECULAREXPONENT%3D%27%27%20SPREADMETHOD%3D%27%27%20STARTOFFSET%3D%27%27%20STDDEVIATION%3D%27%27%20STITCHTILES%3D%27%27%20SURFACESCALE%3D%27%27%20SYSTEMLANGUAGE%3D%27%27%20TABLEVALUES%3D%27%27%20TARGETX%3D%27%27%20TARGETY%3D%27%27%20TEXTLENGTH%3D%27%27%20VIEWBOX%3D%27%27%20VIEWTARGET%3D%27%27%20XCHANNELSELECTOR%3D%27%27%20YCHANNELSELECTOR%3D%27%27%20ZOOMANDPAN%3D%27%27%3E%3C/SVG%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20attributeName%3D%22%22%0A%7C%20%20%20%20%20%20%20attributeType%3D%22%22%0A%7C%20%20%20%20%20%20%20baseFrequency%3D%22%22%0A%7C%20%20%20%20%20%20%20baseProfile%3D%22%22%0A%7C%20%20%20%20%20%20%20calcMode%3D%22%22%0A%7C%20%20%20%20%20%20%20clipPathUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20contentscripttype%3D%22%22%0A%7C%20%20%20%20%20%20%20contentstyletype%3D%22%22%0A%7C%20%20%20%20%20%20%20diffuseConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20edgeMode%3D%22%22%0A%7C%20%20%20%20%20%20%20externalresourcesrequired%3D%22%22%0A%7C%20%20%20%20%20%20%20filterUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22%0A%7C%20%20%20%20%20%20%20glyphRef%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelMatrix%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelUnitLength%3D%22%22%0A%7C%20%20%20%20%20%20%20keyPoints%3D%22%22%0A%7C%20%20%20%20%20%20%20keySplines%3D%22%22%0A%7C%20%20%20%20%20%20%20keyTimes%3D%22%22%0A%7C%20%20%20%20%20%20%20lengthAdjust%3D%22%22%0A%7C%20%20%20%20%20%20%20limitingConeAngle%3D%22%22%0A%7C%20%20%20%20%20%20%20markerHeight%3D%22%22%0A%7C%20%20%20%20%20%20%20markerUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20markerWidth%3D%22%22%0A%7C%20%20%20%20%20%20%20maskContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20maskUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20numOctaves%3D%22%22%0A%7C%20%20%20%20%20%20%20pathLength%3D%22%22%0A%7C%20%20%20%20%20%20%20patternContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20patternTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20patternUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtX%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtY%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtZ%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAlpha%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAspectRatio%3D%22%22%0A%7C%20%20%20%20%20%20%20primitiveUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20refX%3D%22%22%0A%7C%20%20%20%20%20%20%20refY%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatCount%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatDur%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredExtensions%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredFeatures%3D%22%22%0A%7C%20%20%20%20%20%20%20specularConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20specularExponent%3D%22%22%0A%7C%20%20%20%20%20%20%20spreadMethod%3D%22%22%0A%7C%20%20%20%20%20%20%20startOffset%3D%22%22%0A%7C%20%20%20%20%20%20%20stdDeviation%3D%22%22%0A%7C%20%20%20%20%20%20%20stitchTiles%3D%22%22%0A%7C%20%20%20%20%20%20%20surfaceScale%3D%22%22%0A%7C%20%20%20%20%20%20%20systemLanguage%3D%22%22%0A%7C%20%20%20%20%20%20%20tableValues%3D%22%22%0A%7C%20%20%20%20%20%20%20targetX%3D%22%22%0A%7C%20%20%20%20%20%20%20targetY%3D%22%22%0A%7C%20%20%20%20%20%20%20textLength%3D%22%22%0A%7C%20%20%20%20%20%20%20viewBox%3D%22%22%0A%7C%20%20%20%20%20%20%20viewTarget%3D%22%22%0A%7C%20%20%20%20%20%20%20xChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20yChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20zoomAndPan%3D%22%22"],"45b6adfc38d306084d105aa7779a3b4fb83c031f":[async_test('html5lib_tests11.html 45b6adfc38d306084d105aa7779a3b4fb83c031f'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%20attributename%3D%27%27%20attributetype%3D%27%27%20basefrequency%3D%27%27%20baseprofile%3D%27%27%20calcmode%3D%27%27%20clippathunits%3D%27%27%20contentscripttype%3D%27%27%20contentstyletype%3D%27%27%20diffuseconstant%3D%27%27%20edgemode%3D%27%27%20externalresourcesrequired%3D%27%27%20filterres%3D%27%27%20filterunits%3D%27%27%20glyphref%3D%27%27%20gradienttransform%3D%27%27%20gradientunits%3D%27%27%20kernelmatrix%3D%27%27%20kernelunitlength%3D%27%27%20keypoints%3D%27%27%20keysplines%3D%27%27%20keytimes%3D%27%27%20lengthadjust%3D%27%27%20limitingconeangle%3D%27%27%20markerheight%3D%27%27%20markerunits%3D%27%27%20markerwidth%3D%27%27%20maskcontentunits%3D%27%27%20maskunits%3D%27%27%20numoctaves%3D%27%27%20pathlength%3D%27%27%20patterncontentunits%3D%27%27%20patterntransform%3D%27%27%20patternunits%3D%27%27%20pointsatx%3D%27%27%20pointsaty%3D%27%27%20pointsatz%3D%27%27%20preservealpha%3D%27%27%20preserveaspectratio%3D%27%27%20primitiveunits%3D%27%27%20refx%3D%27%27%20refy%3D%27%27%20repeatcount%3D%27%27%20repeatdur%3D%27%27%20requiredextensions%3D%27%27%20requiredfeatures%3D%27%27%20specularconstant%3D%27%27%20specularexponent%3D%27%27%20spreadmethod%3D%27%27%20startoffset%3D%27%27%20stddeviation%3D%27%27%20stitchtiles%3D%27%27%20surfacescale%3D%27%27%20systemlanguage%3D%27%27%20tablevalues%3D%27%27%20targetx%3D%27%27%20targety%3D%27%27%20textlength%3D%27%27%20viewbox%3D%27%27%20viewtarget%3D%27%27%20xchannelselector%3D%27%27%20ychannelselector%3D%27%27%20zoomandpan%3D%27%27%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20attributeName%3D%22%22%0A%7C%20%20%20%20%20%20%20attributeType%3D%22%22%0A%7C%20%20%20%20%20%20%20baseFrequency%3D%22%22%0A%7C%20%20%20%20%20%20%20baseProfile%3D%22%22%0A%7C%20%20%20%20%20%20%20calcMode%3D%22%22%0A%7C%20%20%20%20%20%20%20clipPathUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20contentscripttype%3D%22%22%0A%7C%20%20%20%20%20%20%20contentstyletype%3D%22%22%0A%7C%20%20%20%20%20%20%20diffuseConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20edgeMode%3D%22%22%0A%7C%20%20%20%20%20%20%20externalresourcesrequired%3D%22%22%0A%7C%20%20%20%20%20%20%20filterUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22%0A%7C%20%20%20%20%20%20%20glyphRef%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelMatrix%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelUnitLength%3D%22%22%0A%7C%20%20%20%20%20%20%20keyPoints%3D%22%22%0A%7C%20%20%20%20%20%20%20keySplines%3D%22%22%0A%7C%20%20%20%20%20%20%20keyTimes%3D%22%22%0A%7C%20%20%20%20%20%20%20lengthAdjust%3D%22%22%0A%7C%20%20%20%20%20%20%20limitingConeAngle%3D%22%22%0A%7C%20%20%20%20%20%20%20markerHeight%3D%22%22%0A%7C%20%20%20%20%20%20%20markerUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20markerWidth%3D%22%22%0A%7C%20%20%20%20%20%20%20maskContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20maskUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20numOctaves%3D%22%22%0A%7C%20%20%20%20%20%20%20pathLength%3D%22%22%0A%7C%20%20%20%20%20%20%20patternContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20patternTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20patternUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtX%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtY%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtZ%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAlpha%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAspectRatio%3D%22%22%0A%7C%20%20%20%20%20%20%20primitiveUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20refX%3D%22%22%0A%7C%20%20%20%20%20%20%20refY%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatCount%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatDur%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredExtensions%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredFeatures%3D%22%22%0A%7C%20%20%20%20%20%20%20specularConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20specularExponent%3D%22%22%0A%7C%20%20%20%20%20%20%20spreadMethod%3D%22%22%0A%7C%20%20%20%20%20%20%20startOffset%3D%22%22%0A%7C%20%20%20%20%20%20%20stdDeviation%3D%22%22%0A%7C%20%20%20%20%20%20%20stitchTiles%3D%22%22%0A%7C%20%20%20%20%20%20%20surfaceScale%3D%22%22%0A%7C%20%20%20%20%20%20%20systemLanguage%3D%22%22%0A%7C%20%20%20%20%20%20%20tableValues%3D%22%22%0A%7C%20%20%20%20%20%20%20targetX%3D%22%22%0A%7C%20%20%20%20%20%20%20targetY%3D%22%22%0A%7C%20%20%20%20%20%20%20textLength%3D%22%22%0A%7C%20%20%20%20%20%20%20viewBox%3D%22%22%0A%7C%20%20%20%20%20%20%20viewTarget%3D%22%22%0A%7C%20%20%20%20%20%20%20xChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20yChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20zoomAndPan%3D%22%22"],"b6ce0d4b36700a2f000199109155d1869f3c8d2f":[async_test('html5lib_tests11.html b6ce0d4b36700a2f000199109155d1869f3c8d2f'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmath%20attributeName%3D%27%27%20attributeType%3D%27%27%20baseFrequency%3D%27%27%20baseProfile%3D%27%27%20calcMode%3D%27%27%20clipPathUnits%3D%27%27%20contentScriptType%3D%27%27%20contentStyleType%3D%27%27%20diffuseConstant%3D%27%27%20edgeMode%3D%27%27%20externalResourcesRequired%3D%27%27%20filterRes%3D%27%27%20filterUnits%3D%27%27%20glyphRef%3D%27%27%20gradientTransform%3D%27%27%20gradientUnits%3D%27%27%20kernelMatrix%3D%27%27%20kernelUnitLength%3D%27%27%20keyPoints%3D%27%27%20keySplines%3D%27%27%20keyTimes%3D%27%27%20lengthAdjust%3D%27%27%20limitingConeAngle%3D%27%27%20markerHeight%3D%27%27%20markerUnits%3D%27%27%20markerWidth%3D%27%27%20maskContentUnits%3D%27%27%20maskUnits%3D%27%27%20numOctaves%3D%27%27%20pathLength%3D%27%27%20patternContentUnits%3D%27%27%20patternTransform%3D%27%27%20patternUnits%3D%27%27%20pointsAtX%3D%27%27%20pointsAtY%3D%27%27%20pointsAtZ%3D%27%27%20preserveAlpha%3D%27%27%20preserveAspectRatio%3D%27%27%20primitiveUnits%3D%27%27%20refX%3D%27%27%20refY%3D%27%27%20repeatCount%3D%27%27%20repeatDur%3D%27%27%20requiredExtensions%3D%27%27%20requiredFeatures%3D%27%27%20specularConstant%3D%27%27%20specularExponent%3D%27%27%20spreadMethod%3D%27%27%20startOffset%3D%27%27%20stdDeviation%3D%27%27%20stitchTiles%3D%27%27%20surfaceScale%3D%27%27%20systemLanguage%3D%27%27%20tableValues%3D%27%27%20targetX%3D%27%27%20targetY%3D%27%27%20textLength%3D%27%27%20viewBox%3D%27%27%20viewTarget%3D%27%27%20xChannelSelector%3D%27%27%20yChannelSelector%3D%27%27%20zoomAndPan%3D%27%27%3E%3C/math%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20attributename%3D%22%22%0A%7C%20%20%20%20%20%20%20attributetype%3D%22%22%0A%7C%20%20%20%20%20%20%20basefrequency%3D%22%22%0A%7C%20%20%20%20%20%20%20baseprofile%3D%22%22%0A%7C%20%20%20%20%20%20%20calcmode%3D%22%22%0A%7C%20%20%20%20%20%20%20clippathunits%3D%22%22%0A%7C%20%20%20%20%20%20%20contentscripttype%3D%22%22%0A%7C%20%20%20%20%20%20%20contentstyletype%3D%22%22%0A%7C%20%20%20%20%20%20%20diffuseconstant%3D%22%22%0A%7C%20%20%20%20%20%20%20edgemode%3D%22%22%0A%7C%20%20%20%20%20%20%20externalresourcesrequired%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22%0A%7C%20%20%20%20%20%20%20filterunits%3D%22%22%0A%7C%20%20%20%20%20%20%20glyphref%3D%22%22%0A%7C%20%20%20%20%20%20%20gradienttransform%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientunits%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelmatrix%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelunitlength%3D%22%22%0A%7C%20%20%20%20%20%20%20keypoints%3D%22%22%0A%7C%20%20%20%20%20%20%20keysplines%3D%22%22%0A%7C%20%20%20%20%20%20%20keytimes%3D%22%22%0A%7C%20%20%20%20%20%20%20lengthadjust%3D%22%22%0A%7C%20%20%20%20%20%20%20limitingconeangle%3D%22%22%0A%7C%20%20%20%20%20%20%20markerheight%3D%22%22%0A%7C%20%20%20%20%20%20%20markerunits%3D%22%22%0A%7C%20%20%20%20%20%20%20markerwidth%3D%22%22%0A%7C%20%20%20%20%20%20%20maskcontentunits%3D%22%22%0A%7C%20%20%20%20%20%20%20maskunits%3D%22%22%0A%7C%20%20%20%20%20%20%20numoctaves%3D%22%22%0A%7C%20%20%20%20%20%20%20pathlength%3D%22%22%0A%7C%20%20%20%20%20%20%20patterncontentunits%3D%22%22%0A%7C%20%20%20%20%20%20%20patterntransform%3D%22%22%0A%7C%20%20%20%20%20%20%20patternunits%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsatx%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsaty%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsatz%3D%22%22%0A%7C%20%20%20%20%20%20%20preservealpha%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveaspectratio%3D%22%22%0A%7C%20%20%20%20%20%20%20primitiveunits%3D%22%22%0A%7C%20%20%20%20%20%20%20refx%3D%22%22%0A%7C%20%20%20%20%20%20%20refy%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatcount%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatdur%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredextensions%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredfeatures%3D%22%22%0A%7C%20%20%20%20%20%20%20specularconstant%3D%22%22%0A%7C%20%20%20%20%20%20%20specularexponent%3D%22%22%0A%7C%20%20%20%20%20%20%20spreadmethod%3D%22%22%0A%7C%20%20%20%20%20%20%20startoffset%3D%22%22%0A%7C%20%20%20%20%20%20%20stddeviation%3D%22%22%0A%7C%20%20%20%20%20%20%20stitchtiles%3D%22%22%0A%7C%20%20%20%20%20%20%20surfacescale%3D%22%22%0A%7C%20%20%20%20%20%20%20systemlanguage%3D%22%22%0A%7C%20%20%20%20%20%20%20tablevalues%3D%22%22%0A%7C%20%20%20%20%20%20%20targetx%3D%22%22%0A%7C%20%20%20%20%20%20%20targety%3D%22%22%0A%7C%20%20%20%20%20%20%20textlength%3D%22%22%0A%7C%20%20%20%20%20%20%20viewbox%3D%22%22%0A%7C%20%20%20%20%20%20%20viewtarget%3D%22%22%0A%7C%20%20%20%20%20%20%20xchannelselector%3D%22%22%0A%7C%20%20%20%20%20%20%20ychannelselector%3D%22%22%0A%7C%20%20%20%20%20%20%20zoomandpan%3D%22%22"],"39c50f080b2b9ae9e7a1070679ab97d7b814f9ec":[async_test('html5lib_tests11.html 39c50f080b2b9ae9e7a1070679ab97d7b814f9ec'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%3E%3CaltGlyph%20/%3E%3CaltGlyphDef%20/%3E%3CaltGlyphItem%20/%3E%3CanimateColor%20/%3E%3CanimateMotion%20/%3E%3CanimateTransform%20/%3E%3CclipPath%20/%3E%3CfeBlend%20/%3E%3CfeColorMatrix%20/%3E%3CfeComponentTransfer%20/%3E%3CfeComposite%20/%3E%3CfeConvolveMatrix%20/%3E%3CfeDiffuseLighting%20/%3E%3CfeDisplacementMap%20/%3E%3CfeDistantLight%20/%3E%3CfeFlood%20/%3E%3CfeFuncA%20/%3E%3CfeFuncB%20/%3E%3CfeFuncG%20/%3E%3CfeFuncR%20/%3E%3CfeGaussianBlur%20/%3E%3CfeImage%20/%3E%3CfeMerge%20/%3E%3CfeMergeNode%20/%3E%3CfeMorphology%20/%3E%3CfeOffset%20/%3E%3CfePointLight%20/%3E%3CfeSpecularLighting%20/%3E%3CfeSpotLight%20/%3E%3CfeTile%20/%3E%3CfeTurbulence%20/%3E%3CforeignObject%20/%3E%3CglyphRef%20/%3E%3ClinearGradient%20/%3E%3CradialGradient%20/%3E%3CtextPath%20/%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyph%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphDef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphItem%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateColor%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateMotion%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateTransform%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20clipPath%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feBlend%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feColorMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComponentTransfer%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComposite%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feConvolveMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDiffuseLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDisplacementMap%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDistantLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFlood%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncA%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncB%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncG%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncR%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feGaussianBlur%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feImage%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMerge%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMergeNode%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMorphology%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feOffset%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20fePointLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpecularLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpotLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTile%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTurbulence%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20glyphRef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20linearGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20radialGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20textPath%3E"],"6d1fa1599f75625fe4d019abb04a064cf6ed39e8":[async_test('html5lib_tests11.html 6d1fa1599f75625fe4d019abb04a064cf6ed39e8'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%3E%3Caltglyph%20/%3E%3Caltglyphdef%20/%3E%3Caltglyphitem%20/%3E%3Canimatecolor%20/%3E%3Canimatemotion%20/%3E%3Canimatetransform%20/%3E%3Cclippath%20/%3E%3Cfeblend%20/%3E%3Cfecolormatrix%20/%3E%3Cfecomponenttransfer%20/%3E%3Cfecomposite%20/%3E%3Cfeconvolvematrix%20/%3E%3Cfediffuselighting%20/%3E%3Cfedisplacementmap%20/%3E%3Cfedistantlight%20/%3E%3Cfeflood%20/%3E%3Cfefunca%20/%3E%3Cfefuncb%20/%3E%3Cfefuncg%20/%3E%3Cfefuncr%20/%3E%3Cfegaussianblur%20/%3E%3Cfeimage%20/%3E%3Cfemerge%20/%3E%3Cfemergenode%20/%3E%3Cfemorphology%20/%3E%3Cfeoffset%20/%3E%3Cfepointlight%20/%3E%3Cfespecularlighting%20/%3E%3Cfespotlight%20/%3E%3Cfetile%20/%3E%3Cfeturbulence%20/%3E%3Cforeignobject%20/%3E%3Cglyphref%20/%3E%3Clineargradient%20/%3E%3Cradialgradient%20/%3E%3Ctextpath%20/%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyph%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphDef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphItem%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateColor%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateMotion%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateTransform%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20clipPath%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feBlend%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feColorMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComponentTransfer%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComposite%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feConvolveMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDiffuseLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDisplacementMap%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDistantLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFlood%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncA%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncB%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncG%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncR%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feGaussianBlur%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feImage%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMerge%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMergeNode%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMorphology%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feOffset%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20fePointLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpecularLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpotLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTile%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTurbulence%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20glyphRef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20linearGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20radialGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20textPath%3E"],"791437ece7ba684e00162d1dd79dfe540e3621a7":[async_test('html5lib_tests11.html 791437ece7ba684e00162d1dd79dfe540e3621a7'), "%3C%21DOCTYPE%20html%3E%3CBODY%3E%3CSVG%3E%3CALTGLYPH%20/%3E%3CALTGLYPHDEF%20/%3E%3CALTGLYPHITEM%20/%3E%3CANIMATECOLOR%20/%3E%3CANIMATEMOTION%20/%3E%3CANIMATETRANSFORM%20/%3E%3CCLIPPATH%20/%3E%3CFEBLEND%20/%3E%3CFECOLORMATRIX%20/%3E%3CFECOMPONENTTRANSFER%20/%3E%3CFECOMPOSITE%20/%3E%3CFECONVOLVEMATRIX%20/%3E%3CFEDIFFUSELIGHTING%20/%3E%3CFEDISPLACEMENTMAP%20/%3E%3CFEDISTANTLIGHT%20/%3E%3CFEFLOOD%20/%3E%3CFEFUNCA%20/%3E%3CFEFUNCB%20/%3E%3CFEFUNCG%20/%3E%3CFEFUNCR%20/%3E%3CFEGAUSSIANBLUR%20/%3E%3CFEIMAGE%20/%3E%3CFEMERGE%20/%3E%3CFEMERGENODE%20/%3E%3CFEMORPHOLOGY%20/%3E%3CFEOFFSET%20/%3E%3CFEPOINTLIGHT%20/%3E%3CFESPECULARLIGHTING%20/%3E%3CFESPOTLIGHT%20/%3E%3CFETILE%20/%3E%3CFETURBULENCE%20/%3E%3CFOREIGNOBJECT%20/%3E%3CGLYPHREF%20/%3E%3CLINEARGRADIENT%20/%3E%3CRADIALGRADIENT%20/%3E%3CTEXTPATH%20/%3E%3C/SVG%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyph%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphDef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphItem%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateColor%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateMotion%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateTransform%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20clipPath%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feBlend%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feColorMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComponentTransfer%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComposite%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feConvolveMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDiffuseLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDisplacementMap%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDistantLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFlood%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncA%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncB%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncG%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncR%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feGaussianBlur%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feImage%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMerge%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMergeNode%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMorphology%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feOffset%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20fePointLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpecularLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpotLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTile%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTurbulence%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20glyphRef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20linearGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20radialGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20textPath%3E"],"af40d26164229c29b9be77ed6dd7dda780cba55c":[async_test('html5lib_tests11.html af40d26164229c29b9be77ed6dd7dda780cba55c'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmath%3E%3CaltGlyph%20/%3E%3CaltGlyphDef%20/%3E%3CaltGlyphItem%20/%3E%3CanimateColor%20/%3E%3CanimateMotion%20/%3E%3CanimateTransform%20/%3E%3CclipPath%20/%3E%3CfeBlend%20/%3E%3CfeColorMatrix%20/%3E%3CfeComponentTransfer%20/%3E%3CfeComposite%20/%3E%3CfeConvolveMatrix%20/%3E%3CfeDiffuseLighting%20/%3E%3CfeDisplacementMap%20/%3E%3CfeDistantLight%20/%3E%3CfeFlood%20/%3E%3CfeFuncA%20/%3E%3CfeFuncB%20/%3E%3CfeFuncG%20/%3E%3CfeFuncR%20/%3E%3CfeGaussianBlur%20/%3E%3CfeImage%20/%3E%3CfeMerge%20/%3E%3CfeMergeNode%20/%3E%3CfeMorphology%20/%3E%3CfeOffset%20/%3E%3CfePointLight%20/%3E%3CfeSpecularLighting%20/%3E%3CfeSpotLight%20/%3E%3CfeTile%20/%3E%3CfeTurbulence%20/%3E%3CforeignObject%20/%3E%3CglyphRef%20/%3E%3ClinearGradient%20/%3E%3CradialGradient%20/%3E%3CtextPath%20/%3E%3C/math%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20altglyph%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20altglyphdef%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20altglyphitem%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20animatecolor%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20animatemotion%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20animatetransform%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20clippath%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feblend%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fecolormatrix%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fecomponenttransfer%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fecomposite%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feconvolvematrix%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fediffuselighting%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fedisplacementmap%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fedistantlight%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feflood%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fefunca%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fefuncb%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fefuncg%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fefuncr%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fegaussianblur%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feimage%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20femerge%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20femergenode%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20femorphology%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feoffset%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fepointlight%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fespecularlighting%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fespotlight%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fetile%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feturbulence%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20foreignobject%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20glyphref%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20lineargradient%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20radialgradient%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20textpath%3E"],"16e68d18f8f0fb81013fe77a30b7d396c5081e5e":[async_test('html5lib_tests11.html 16e68d18f8f0fb81013fe77a30b7d396c5081e5e'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%3E%3CsolidColor%20/%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20solidcolor%3E"],
+          "ba7a66dfcf59885c08e8638d15b01df3878531e7":[async_test('html5lib_tests11.html ba7a66dfcf59885c08e8638d15b01df3878531e7'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%20attributeName%3D%27%27%20attributeType%3D%27%27%20baseFrequency%3D%27%27%20baseProfile%3D%27%27%20calcMode%3D%27%27%20clipPathUnits%3D%27%27%20diffuseConstant%3D%27%27%20edgeMode%3D%27%27%20filterUnits%3D%27%27%20glyphRef%3D%27%27%20gradientTransform%3D%27%27%20gradientUnits%3D%27%27%20kernelMatrix%3D%27%27%20kernelUnitLength%3D%27%27%20keyPoints%3D%27%27%20keySplines%3D%27%27%20keyTimes%3D%27%27%20lengthAdjust%3D%27%27%20limitingConeAngle%3D%27%27%20markerHeight%3D%27%27%20markerUnits%3D%27%27%20markerWidth%3D%27%27%20maskContentUnits%3D%27%27%20maskUnits%3D%27%27%20numOctaves%3D%27%27%20pathLength%3D%27%27%20patternContentUnits%3D%27%27%20patternTransform%3D%27%27%20patternUnits%3D%27%27%20pointsAtX%3D%27%27%20pointsAtY%3D%27%27%20pointsAtZ%3D%27%27%20preserveAlpha%3D%27%27%20preserveAspectRatio%3D%27%27%20primitiveUnits%3D%27%27%20refX%3D%27%27%20refY%3D%27%27%20repeatCount%3D%27%27%20repeatDur%3D%27%27%20requiredExtensions%3D%27%27%20requiredFeatures%3D%27%27%20specularConstant%3D%27%27%20specularExponent%3D%27%27%20spreadMethod%3D%27%27%20startOffset%3D%27%27%20stdDeviation%3D%27%27%20stitchTiles%3D%27%27%20surfaceScale%3D%27%27%20systemLanguage%3D%27%27%20tableValues%3D%27%27%20targetX%3D%27%27%20targetY%3D%27%27%20textLength%3D%27%27%20viewBox%3D%27%27%20viewTarget%3D%27%27%20xChannelSelector%3D%27%27%20yChannelSelector%3D%27%27%20zoomAndPan%3D%27%27%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20attributeName%3D%22%22%0A%7C%20%20%20%20%20%20%20attributeType%3D%22%22%0A%7C%20%20%20%20%20%20%20baseFrequency%3D%22%22%0A%7C%20%20%20%20%20%20%20baseProfile%3D%22%22%0A%7C%20%20%20%20%20%20%20calcMode%3D%22%22%0A%7C%20%20%20%20%20%20%20clipPathUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20diffuseConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20edgeMode%3D%22%22%0A%7C%20%20%20%20%20%20%20filterUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20glyphRef%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelMatrix%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelUnitLength%3D%22%22%0A%7C%20%20%20%20%20%20%20keyPoints%3D%22%22%0A%7C%20%20%20%20%20%20%20keySplines%3D%22%22%0A%7C%20%20%20%20%20%20%20keyTimes%3D%22%22%0A%7C%20%20%20%20%20%20%20lengthAdjust%3D%22%22%0A%7C%20%20%20%20%20%20%20limitingConeAngle%3D%22%22%0A%7C%20%20%20%20%20%20%20markerHeight%3D%22%22%0A%7C%20%20%20%20%20%20%20markerUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20markerWidth%3D%22%22%0A%7C%20%20%20%20%20%20%20maskContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20maskUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20numOctaves%3D%22%22%0A%7C%20%20%20%20%20%20%20pathLength%3D%22%22%0A%7C%20%20%20%20%20%20%20patternContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20patternTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20patternUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtX%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtY%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtZ%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAlpha%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAspectRatio%3D%22%22%0A%7C%20%20%20%20%20%20%20primitiveUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20refX%3D%22%22%0A%7C%20%20%20%20%20%20%20refY%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatCount%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatDur%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredExtensions%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredFeatures%3D%22%22%0A%7C%20%20%20%20%20%20%20specularConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20specularExponent%3D%22%22%0A%7C%20%20%20%20%20%20%20spreadMethod%3D%22%22%0A%7C%20%20%20%20%20%20%20startOffset%3D%22%22%0A%7C%20%20%20%20%20%20%20stdDeviation%3D%22%22%0A%7C%20%20%20%20%20%20%20stitchTiles%3D%22%22%0A%7C%20%20%20%20%20%20%20surfaceScale%3D%22%22%0A%7C%20%20%20%20%20%20%20systemLanguage%3D%22%22%0A%7C%20%20%20%20%20%20%20tableValues%3D%22%22%0A%7C%20%20%20%20%20%20%20targetX%3D%22%22%0A%7C%20%20%20%20%20%20%20targetY%3D%22%22%0A%7C%20%20%20%20%20%20%20textLength%3D%22%22%0A%7C%20%20%20%20%20%20%20viewBox%3D%22%22%0A%7C%20%20%20%20%20%20%20viewTarget%3D%22%22%0A%7C%20%20%20%20%20%20%20xChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20yChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20zoomAndPan%3D%22%22"],"e69c7c08a54ca868ab33b2825d998fa6c3cac90e":[async_test('html5lib_tests11.html e69c7c08a54ca868ab33b2825d998fa6c3cac90e'), "%3C%21DOCTYPE%20html%3E%3CBODY%3E%3CSVG%20ATTRIBUTENAME%3D%27%27%20ATTRIBUTETYPE%3D%27%27%20BASEFREQUENCY%3D%27%27%20BASEPROFILE%3D%27%27%20CALCMODE%3D%27%27%20CLIPPATHUNITS%3D%27%27%20DIFFUSECONSTANT%3D%27%27%20EDGEMODE%3D%27%27%20FILTERUNITS%3D%27%27%20GLYPHREF%3D%27%27%20GRADIENTTRANSFORM%3D%27%27%20GRADIENTUNITS%3D%27%27%20KERNELMATRIX%3D%27%27%20KERNELUNITLENGTH%3D%27%27%20KEYPOINTS%3D%27%27%20KEYSPLINES%3D%27%27%20KEYTIMES%3D%27%27%20LENGTHADJUST%3D%27%27%20LIMITINGCONEANGLE%3D%27%27%20MARKERHEIGHT%3D%27%27%20MARKERUNITS%3D%27%27%20MARKERWIDTH%3D%27%27%20MASKCONTENTUNITS%3D%27%27%20MASKUNITS%3D%27%27%20NUMOCTAVES%3D%27%27%20PATHLENGTH%3D%27%27%20PATTERNCONTENTUNITS%3D%27%27%20PATTERNTRANSFORM%3D%27%27%20PATTERNUNITS%3D%27%27%20POINTSATX%3D%27%27%20POINTSATY%3D%27%27%20POINTSATZ%3D%27%27%20PRESERVEALPHA%3D%27%27%20PRESERVEASPECTRATIO%3D%27%27%20PRIMITIVEUNITS%3D%27%27%20REFX%3D%27%27%20REFY%3D%27%27%20REPEATCOUNT%3D%27%27%20REPEATDUR%3D%27%27%20REQUIREDEXTENSIONS%3D%27%27%20REQUIREDFEATURES%3D%27%27%20SPECULARCONSTANT%3D%27%27%20SPECULAREXPONENT%3D%27%27%20SPREADMETHOD%3D%27%27%20STARTOFFSET%3D%27%27%20STDDEVIATION%3D%27%27%20STITCHTILES%3D%27%27%20SURFACESCALE%3D%27%27%20SYSTEMLANGUAGE%3D%27%27%20TABLEVALUES%3D%27%27%20TARGETX%3D%27%27%20TARGETY%3D%27%27%20TEXTLENGTH%3D%27%27%20VIEWBOX%3D%27%27%20VIEWTARGET%3D%27%27%20XCHANNELSELECTOR%3D%27%27%20YCHANNELSELECTOR%3D%27%27%20ZOOMANDPAN%3D%27%27%3E%3C/SVG%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20attributeName%3D%22%22%0A%7C%20%20%20%20%20%20%20attributeType%3D%22%22%0A%7C%20%20%20%20%20%20%20baseFrequency%3D%22%22%0A%7C%20%20%20%20%20%20%20baseProfile%3D%22%22%0A%7C%20%20%20%20%20%20%20calcMode%3D%22%22%0A%7C%20%20%20%20%20%20%20clipPathUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20diffuseConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20edgeMode%3D%22%22%0A%7C%20%20%20%20%20%20%20filterUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20glyphRef%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelMatrix%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelUnitLength%3D%22%22%0A%7C%20%20%20%20%20%20%20keyPoints%3D%22%22%0A%7C%20%20%20%20%20%20%20keySplines%3D%22%22%0A%7C%20%20%20%20%20%20%20keyTimes%3D%22%22%0A%7C%20%20%20%20%20%20%20lengthAdjust%3D%22%22%0A%7C%20%20%20%20%20%20%20limitingConeAngle%3D%22%22%0A%7C%20%20%20%20%20%20%20markerHeight%3D%22%22%0A%7C%20%20%20%20%20%20%20markerUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20markerWidth%3D%22%22%0A%7C%20%20%20%20%20%20%20maskContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20maskUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20numOctaves%3D%22%22%0A%7C%20%20%20%20%20%20%20pathLength%3D%22%22%0A%7C%20%20%20%20%20%20%20patternContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20patternTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20patternUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtX%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtY%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtZ%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAlpha%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAspectRatio%3D%22%22%0A%7C%20%20%20%20%20%20%20primitiveUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20refX%3D%22%22%0A%7C%20%20%20%20%20%20%20refY%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatCount%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatDur%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredExtensions%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredFeatures%3D%22%22%0A%7C%20%20%20%20%20%20%20specularConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20specularExponent%3D%22%22%0A%7C%20%20%20%20%20%20%20spreadMethod%3D%22%22%0A%7C%20%20%20%20%20%20%20startOffset%3D%22%22%0A%7C%20%20%20%20%20%20%20stdDeviation%3D%22%22%0A%7C%20%20%20%20%20%20%20stitchTiles%3D%22%22%0A%7C%20%20%20%20%20%20%20surfaceScale%3D%22%22%0A%7C%20%20%20%20%20%20%20systemLanguage%3D%22%22%0A%7C%20%20%20%20%20%20%20tableValues%3D%22%22%0A%7C%20%20%20%20%20%20%20targetX%3D%22%22%0A%7C%20%20%20%20%20%20%20targetY%3D%22%22%0A%7C%20%20%20%20%20%20%20textLength%3D%22%22%0A%7C%20%20%20%20%20%20%20viewBox%3D%22%22%0A%7C%20%20%20%20%20%20%20viewTarget%3D%22%22%0A%7C%20%20%20%20%20%20%20xChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20yChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20zoomAndPan%3D%22%22"],"0e5897aafe87e460f84576c2d1d983504d12a7db":[async_test('html5lib_tests11.html 0e5897aafe87e460f84576c2d1d983504d12a7db'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%20attributename%3D%27%27%20attributetype%3D%27%27%20basefrequency%3D%27%27%20baseprofile%3D%27%27%20calcmode%3D%27%27%20clippathunits%3D%27%27%20diffuseconstant%3D%27%27%20edgemode%3D%27%27%20filterunits%3D%27%27%20filterres%3D%27%27%20glyphref%3D%27%27%20gradienttransform%3D%27%27%20gradientunits%3D%27%27%20kernelmatrix%3D%27%27%20kernelunitlength%3D%27%27%20keypoints%3D%27%27%20keysplines%3D%27%27%20keytimes%3D%27%27%20lengthadjust%3D%27%27%20limitingconeangle%3D%27%27%20markerheight%3D%27%27%20markerunits%3D%27%27%20markerwidth%3D%27%27%20maskcontentunits%3D%27%27%20maskunits%3D%27%27%20numoctaves%3D%27%27%20pathlength%3D%27%27%20patterncontentunits%3D%27%27%20patterntransform%3D%27%27%20patternunits%3D%27%27%20pointsatx%3D%27%27%20pointsaty%3D%27%27%20pointsatz%3D%27%27%20preservealpha%3D%27%27%20preserveaspectratio%3D%27%27%20primitiveunits%3D%27%27%20refx%3D%27%27%20refy%3D%27%27%20repeatcount%3D%27%27%20repeatdur%3D%27%27%20requiredextensions%3D%27%27%20requiredfeatures%3D%27%27%20specularconstant%3D%27%27%20specularexponent%3D%27%27%20spreadmethod%3D%27%27%20startoffset%3D%27%27%20stddeviation%3D%27%27%20stitchtiles%3D%27%27%20surfacescale%3D%27%27%20systemlanguage%3D%27%27%20tablevalues%3D%27%27%20targetx%3D%27%27%20targety%3D%27%27%20textlength%3D%27%27%20viewbox%3D%27%27%20viewtarget%3D%27%27%20xchannelselector%3D%27%27%20ychannelselector%3D%27%27%20zoomandpan%3D%27%27%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20attributeName%3D%22%22%0A%7C%20%20%20%20%20%20%20attributeType%3D%22%22%0A%7C%20%20%20%20%20%20%20baseFrequency%3D%22%22%0A%7C%20%20%20%20%20%20%20baseProfile%3D%22%22%0A%7C%20%20%20%20%20%20%20calcMode%3D%22%22%0A%7C%20%20%20%20%20%20%20clipPathUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20diffuseConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20edgeMode%3D%22%22%0A%7C%20%20%20%20%20%20%20filterUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22%0A%7C%20%20%20%20%20%20%20glyphRef%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelMatrix%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelUnitLength%3D%22%22%0A%7C%20%20%20%20%20%20%20keyPoints%3D%22%22%0A%7C%20%20%20%20%20%20%20keySplines%3D%22%22%0A%7C%20%20%20%20%20%20%20keyTimes%3D%22%22%0A%7C%20%20%20%20%20%20%20lengthAdjust%3D%22%22%0A%7C%20%20%20%20%20%20%20limitingConeAngle%3D%22%22%0A%7C%20%20%20%20%20%20%20markerHeight%3D%22%22%0A%7C%20%20%20%20%20%20%20markerUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20markerWidth%3D%22%22%0A%7C%20%20%20%20%20%20%20maskContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20maskUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20numOctaves%3D%22%22%0A%7C%20%20%20%20%20%20%20pathLength%3D%22%22%0A%7C%20%20%20%20%20%20%20patternContentUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20patternTransform%3D%22%22%0A%7C%20%20%20%20%20%20%20patternUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtX%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtY%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsAtZ%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAlpha%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveAspectRatio%3D%22%22%0A%7C%20%20%20%20%20%20%20primitiveUnits%3D%22%22%0A%7C%20%20%20%20%20%20%20refX%3D%22%22%0A%7C%20%20%20%20%20%20%20refY%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatCount%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatDur%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredExtensions%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredFeatures%3D%22%22%0A%7C%20%20%20%20%20%20%20specularConstant%3D%22%22%0A%7C%20%20%20%20%20%20%20specularExponent%3D%22%22%0A%7C%20%20%20%20%20%20%20spreadMethod%3D%22%22%0A%7C%20%20%20%20%20%20%20startOffset%3D%22%22%0A%7C%20%20%20%20%20%20%20stdDeviation%3D%22%22%0A%7C%20%20%20%20%20%20%20stitchTiles%3D%22%22%0A%7C%20%20%20%20%20%20%20surfaceScale%3D%22%22%0A%7C%20%20%20%20%20%20%20systemLanguage%3D%22%22%0A%7C%20%20%20%20%20%20%20tableValues%3D%22%22%0A%7C%20%20%20%20%20%20%20targetX%3D%22%22%0A%7C%20%20%20%20%20%20%20targetY%3D%22%22%0A%7C%20%20%20%20%20%20%20textLength%3D%22%22%0A%7C%20%20%20%20%20%20%20viewBox%3D%22%22%0A%7C%20%20%20%20%20%20%20viewTarget%3D%22%22%0A%7C%20%20%20%20%20%20%20xChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20yChannelSelector%3D%22%22%0A%7C%20%20%20%20%20%20%20zoomAndPan%3D%22%22"],"f71dd198831309fc9ccd66ef91cde63fda9b9bda":[async_test('html5lib_tests11.html f71dd198831309fc9ccd66ef91cde63fda9b9bda'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmath%20attributeName%3D%27%27%20attributeType%3D%27%27%20baseFrequency%3D%27%27%20baseProfile%3D%27%27%20calcMode%3D%27%27%20clipPathUnits%3D%27%27%20diffuseConstant%3D%27%27%20edgeMode%3D%27%27%20filterUnits%3D%27%27%20glyphRef%3D%27%27%20gradientTransform%3D%27%27%20gradientUnits%3D%27%27%20kernelMatrix%3D%27%27%20kernelUnitLength%3D%27%27%20keyPoints%3D%27%27%20keySplines%3D%27%27%20keyTimes%3D%27%27%20lengthAdjust%3D%27%27%20limitingConeAngle%3D%27%27%20markerHeight%3D%27%27%20markerUnits%3D%27%27%20markerWidth%3D%27%27%20maskContentUnits%3D%27%27%20maskUnits%3D%27%27%20numOctaves%3D%27%27%20pathLength%3D%27%27%20patternContentUnits%3D%27%27%20patternTransform%3D%27%27%20patternUnits%3D%27%27%20pointsAtX%3D%27%27%20pointsAtY%3D%27%27%20pointsAtZ%3D%27%27%20preserveAlpha%3D%27%27%20preserveAspectRatio%3D%27%27%20primitiveUnits%3D%27%27%20refX%3D%27%27%20refY%3D%27%27%20repeatCount%3D%27%27%20repeatDur%3D%27%27%20requiredExtensions%3D%27%27%20requiredFeatures%3D%27%27%20specularConstant%3D%27%27%20specularExponent%3D%27%27%20spreadMethod%3D%27%27%20startOffset%3D%27%27%20stdDeviation%3D%27%27%20stitchTiles%3D%27%27%20surfaceScale%3D%27%27%20systemLanguage%3D%27%27%20tableValues%3D%27%27%20targetX%3D%27%27%20targetY%3D%27%27%20textLength%3D%27%27%20viewBox%3D%27%27%20viewTarget%3D%27%27%20xChannelSelector%3D%27%27%20yChannelSelector%3D%27%27%20zoomAndPan%3D%27%27%3E%3C/math%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20attributename%3D%22%22%0A%7C%20%20%20%20%20%20%20attributetype%3D%22%22%0A%7C%20%20%20%20%20%20%20basefrequency%3D%22%22%0A%7C%20%20%20%20%20%20%20baseprofile%3D%22%22%0A%7C%20%20%20%20%20%20%20calcmode%3D%22%22%0A%7C%20%20%20%20%20%20%20clippathunits%3D%22%22%0A%7C%20%20%20%20%20%20%20diffuseconstant%3D%22%22%0A%7C%20%20%20%20%20%20%20edgemode%3D%22%22%0A%7C%20%20%20%20%20%20%20filterunits%3D%22%22%0A%7C%20%20%20%20%20%20%20glyphref%3D%22%22%0A%7C%20%20%20%20%20%20%20gradienttransform%3D%22%22%0A%7C%20%20%20%20%20%20%20gradientunits%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelmatrix%3D%22%22%0A%7C%20%20%20%20%20%20%20kernelunitlength%3D%22%22%0A%7C%20%20%20%20%20%20%20keypoints%3D%22%22%0A%7C%20%20%20%20%20%20%20keysplines%3D%22%22%0A%7C%20%20%20%20%20%20%20keytimes%3D%22%22%0A%7C%20%20%20%20%20%20%20lengthadjust%3D%22%22%0A%7C%20%20%20%20%20%20%20limitingconeangle%3D%22%22%0A%7C%20%20%20%20%20%20%20markerheight%3D%22%22%0A%7C%20%20%20%20%20%20%20markerunits%3D%22%22%0A%7C%20%20%20%20%20%20%20markerwidth%3D%22%22%0A%7C%20%20%20%20%20%20%20maskcontentunits%3D%22%22%0A%7C%20%20%20%20%20%20%20maskunits%3D%22%22%0A%7C%20%20%20%20%20%20%20numoctaves%3D%22%22%0A%7C%20%20%20%20%20%20%20pathlength%3D%22%22%0A%7C%20%20%20%20%20%20%20patterncontentunits%3D%22%22%0A%7C%20%20%20%20%20%20%20patterntransform%3D%22%22%0A%7C%20%20%20%20%20%20%20patternunits%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsatx%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsaty%3D%22%22%0A%7C%20%20%20%20%20%20%20pointsatz%3D%22%22%0A%7C%20%20%20%20%20%20%20preservealpha%3D%22%22%0A%7C%20%20%20%20%20%20%20preserveaspectratio%3D%22%22%0A%7C%20%20%20%20%20%20%20primitiveunits%3D%22%22%0A%7C%20%20%20%20%20%20%20refx%3D%22%22%0A%7C%20%20%20%20%20%20%20refy%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatcount%3D%22%22%0A%7C%20%20%20%20%20%20%20repeatdur%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredextensions%3D%22%22%0A%7C%20%20%20%20%20%20%20requiredfeatures%3D%22%22%0A%7C%20%20%20%20%20%20%20specularconstant%3D%22%22%0A%7C%20%20%20%20%20%20%20specularexponent%3D%22%22%0A%7C%20%20%20%20%20%20%20spreadmethod%3D%22%22%0A%7C%20%20%20%20%20%20%20startoffset%3D%22%22%0A%7C%20%20%20%20%20%20%20stddeviation%3D%22%22%0A%7C%20%20%20%20%20%20%20stitchtiles%3D%22%22%0A%7C%20%20%20%20%20%20%20surfacescale%3D%22%22%0A%7C%20%20%20%20%20%20%20systemlanguage%3D%22%22%0A%7C%20%20%20%20%20%20%20tablevalues%3D%22%22%0A%7C%20%20%20%20%20%20%20targetx%3D%22%22%0A%7C%20%20%20%20%20%20%20targety%3D%22%22%0A%7C%20%20%20%20%20%20%20textlength%3D%22%22%0A%7C%20%20%20%20%20%20%20viewbox%3D%22%22%0A%7C%20%20%20%20%20%20%20viewtarget%3D%22%22%0A%7C%20%20%20%20%20%20%20xchannelselector%3D%22%22%0A%7C%20%20%20%20%20%20%20ychannelselector%3D%22%22%0A%7C%20%20%20%20%20%20%20zoomandpan%3D%22%22"],"a8f7a23601363454b4a13f66aed99ec9708ae87b":[async_test('html5lib_tests11.html a8f7a23601363454b4a13f66aed99ec9708ae87b'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%20contentScriptType%3D%27%27%20contentStyleType%3D%27%27%20externalResourcesRequired%3D%27%27%20filterRes%3D%27%27%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20contentscripttype%3D%22%22%0A%7C%20%20%20%20%20%20%20contentstyletype%3D%22%22%0A%7C%20%20%20%20%20%20%20externalresourcesrequired%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22"],"f8f7f6c576acc9eb874acb0dce6988f0f7b6fc5f":[async_test('html5lib_tests11.html f8f7f6c576acc9eb874acb0dce6988f0f7b6fc5f'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%20CONTENTSCRIPTTYPE%3D%27%27%20CONTENTSTYLETYPE%3D%27%27%20EXTERNALRESOURCESREQUIRED%3D%27%27%20FILTERRES%3D%27%27%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20contentscripttype%3D%22%22%0A%7C%20%20%20%20%20%20%20contentstyletype%3D%22%22%0A%7C%20%20%20%20%20%20%20externalresourcesrequired%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22"],"fb4dc9f70129a8a045fca3a1e3acee052d0990b3":[async_test('html5lib_tests11.html fb4dc9f70129a8a045fca3a1e3acee052d0990b3'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%20contentscripttype%3D%27%27%20contentstyletype%3D%27%27%20externalresourcesrequired%3D%27%27%20filterres%3D%27%27%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20contentscripttype%3D%22%22%0A%7C%20%20%20%20%20%20%20contentstyletype%3D%22%22%0A%7C%20%20%20%20%20%20%20externalresourcesrequired%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22"],"8f77b846acce75edf1988ea655c79f1de4321de9":[async_test('html5lib_tests11.html 8f77b846acce75edf1988ea655c79f1de4321de9'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmath%20contentScriptType%3D%27%27%20contentStyleType%3D%27%27%20externalResourcesRequired%3D%27%27%20filterRes%3D%27%27%3E%3C/math%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20contentscripttype%3D%22%22%0A%7C%20%20%20%20%20%20%20contentstyletype%3D%22%22%0A%7C%20%20%20%20%20%20%20externalresourcesrequired%3D%22%22%0A%7C%20%20%20%20%20%20%20filterres%3D%22%22"],"39c50f080b2b9ae9e7a1070679ab97d7b814f9ec":[async_test('html5lib_tests11.html 39c50f080b2b9ae9e7a1070679ab97d7b814f9ec'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%3E%3CaltGlyph%20/%3E%3CaltGlyphDef%20/%3E%3CaltGlyphItem%20/%3E%3CanimateColor%20/%3E%3CanimateMotion%20/%3E%3CanimateTransform%20/%3E%3CclipPath%20/%3E%3CfeBlend%20/%3E%3CfeColorMatrix%20/%3E%3CfeComponentTransfer%20/%3E%3CfeComposite%20/%3E%3CfeConvolveMatrix%20/%3E%3CfeDiffuseLighting%20/%3E%3CfeDisplacementMap%20/%3E%3CfeDistantLight%20/%3E%3CfeFlood%20/%3E%3CfeFuncA%20/%3E%3CfeFuncB%20/%3E%3CfeFuncG%20/%3E%3CfeFuncR%20/%3E%3CfeGaussianBlur%20/%3E%3CfeImage%20/%3E%3CfeMerge%20/%3E%3CfeMergeNode%20/%3E%3CfeMorphology%20/%3E%3CfeOffset%20/%3E%3CfePointLight%20/%3E%3CfeSpecularLighting%20/%3E%3CfeSpotLight%20/%3E%3CfeTile%20/%3E%3CfeTurbulence%20/%3E%3CforeignObject%20/%3E%3CglyphRef%20/%3E%3ClinearGradient%20/%3E%3CradialGradient%20/%3E%3CtextPath%20/%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyph%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphDef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphItem%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateColor%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateMotion%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateTransform%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20clipPath%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feBlend%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feColorMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComponentTransfer%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComposite%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feConvolveMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDiffuseLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDisplacementMap%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDistantLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFlood%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncA%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncB%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncG%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncR%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feGaussianBlur%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feImage%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMerge%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMergeNode%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMorphology%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feOffset%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20fePointLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpecularLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpotLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTile%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTurbulence%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20glyphRef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20linearGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20radialGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20textPath%3E"],"6d1fa1599f75625fe4d019abb04a064cf6ed39e8":[async_test('html5lib_tests11.html 6d1fa1599f75625fe4d019abb04a064cf6ed39e8'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%3E%3Caltglyph%20/%3E%3Caltglyphdef%20/%3E%3Caltglyphitem%20/%3E%3Canimatecolor%20/%3E%3Canimatemotion%20/%3E%3Canimatetransform%20/%3E%3Cclippath%20/%3E%3Cfeblend%20/%3E%3Cfecolormatrix%20/%3E%3Cfecomponenttransfer%20/%3E%3Cfecomposite%20/%3E%3Cfeconvolvematrix%20/%3E%3Cfediffuselighting%20/%3E%3Cfedisplacementmap%20/%3E%3Cfedistantlight%20/%3E%3Cfeflood%20/%3E%3Cfefunca%20/%3E%3Cfefuncb%20/%3E%3Cfefuncg%20/%3E%3Cfefuncr%20/%3E%3Cfegaussianblur%20/%3E%3Cfeimage%20/%3E%3Cfemerge%20/%3E%3Cfemergenode%20/%3E%3Cfemorphology%20/%3E%3Cfeoffset%20/%3E%3Cfepointlight%20/%3E%3Cfespecularlighting%20/%3E%3Cfespotlight%20/%3E%3Cfetile%20/%3E%3Cfeturbulence%20/%3E%3Cforeignobject%20/%3E%3Cglyphref%20/%3E%3Clineargradient%20/%3E%3Cradialgradient%20/%3E%3Ctextpath%20/%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyph%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphDef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphItem%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateColor%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateMotion%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateTransform%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20clipPath%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feBlend%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feColorMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComponentTransfer%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComposite%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feConvolveMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDiffuseLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDisplacementMap%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDistantLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFlood%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncA%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncB%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncG%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncR%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feGaussianBlur%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feImage%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMerge%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMergeNode%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMorphology%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feOffset%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20fePointLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpecularLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpotLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTile%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTurbulence%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20glyphRef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20linearGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20radialGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20textPath%3E"],"791437ece7ba684e00162d1dd79dfe540e3621a7":[async_test('html5lib_tests11.html 791437ece7ba684e00162d1dd79dfe540e3621a7'), "%3C%21DOCTYPE%20html%3E%3CBODY%3E%3CSVG%3E%3CALTGLYPH%20/%3E%3CALTGLYPHDEF%20/%3E%3CALTGLYPHITEM%20/%3E%3CANIMATECOLOR%20/%3E%3CANIMATEMOTION%20/%3E%3CANIMATETRANSFORM%20/%3E%3CCLIPPATH%20/%3E%3CFEBLEND%20/%3E%3CFECOLORMATRIX%20/%3E%3CFECOMPONENTTRANSFER%20/%3E%3CFECOMPOSITE%20/%3E%3CFECONVOLVEMATRIX%20/%3E%3CFEDIFFUSELIGHTING%20/%3E%3CFEDISPLACEMENTMAP%20/%3E%3CFEDISTANTLIGHT%20/%3E%3CFEFLOOD%20/%3E%3CFEFUNCA%20/%3E%3CFEFUNCB%20/%3E%3CFEFUNCG%20/%3E%3CFEFUNCR%20/%3E%3CFEGAUSSIANBLUR%20/%3E%3CFEIMAGE%20/%3E%3CFEMERGE%20/%3E%3CFEMERGENODE%20/%3E%3CFEMORPHOLOGY%20/%3E%3CFEOFFSET%20/%3E%3CFEPOINTLIGHT%20/%3E%3CFESPECULARLIGHTING%20/%3E%3CFESPOTLIGHT%20/%3E%3CFETILE%20/%3E%3CFETURBULENCE%20/%3E%3CFOREIGNOBJECT%20/%3E%3CGLYPHREF%20/%3E%3CLINEARGRADIENT%20/%3E%3CRADIALGRADIENT%20/%3E%3CTEXTPATH%20/%3E%3C/SVG%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyph%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphDef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20altGlyphItem%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateColor%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateMotion%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20animateTransform%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20clipPath%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feBlend%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feColorMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComponentTransfer%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feComposite%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feConvolveMatrix%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDiffuseLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDisplacementMap%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feDistantLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFlood%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncA%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncB%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncG%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feFuncR%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feGaussianBlur%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feImage%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMerge%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMergeNode%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feMorphology%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feOffset%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20fePointLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpecularLighting%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feSpotLight%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTile%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20feTurbulence%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20glyphRef%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20linearGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20radialGradient%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20textPath%3E"],"af40d26164229c29b9be77ed6dd7dda780cba55c":[async_test('html5lib_tests11.html af40d26164229c29b9be77ed6dd7dda780cba55c'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmath%3E%3CaltGlyph%20/%3E%3CaltGlyphDef%20/%3E%3CaltGlyphItem%20/%3E%3CanimateColor%20/%3E%3CanimateMotion%20/%3E%3CanimateTransform%20/%3E%3CclipPath%20/%3E%3CfeBlend%20/%3E%3CfeColorMatrix%20/%3E%3CfeComponentTransfer%20/%3E%3CfeComposite%20/%3E%3CfeConvolveMatrix%20/%3E%3CfeDiffuseLighting%20/%3E%3CfeDisplacementMap%20/%3E%3CfeDistantLight%20/%3E%3CfeFlood%20/%3E%3CfeFuncA%20/%3E%3CfeFuncB%20/%3E%3CfeFuncG%20/%3E%3CfeFuncR%20/%3E%3CfeGaussianBlur%20/%3E%3CfeImage%20/%3E%3CfeMerge%20/%3E%3CfeMergeNode%20/%3E%3CfeMorphology%20/%3E%3CfeOffset%20/%3E%3CfePointLight%20/%3E%3CfeSpecularLighting%20/%3E%3CfeSpotLight%20/%3E%3CfeTile%20/%3E%3CfeTurbulence%20/%3E%3CforeignObject%20/%3E%3CglyphRef%20/%3E%3ClinearGradient%20/%3E%3CradialGradient%20/%3E%3CtextPath%20/%3E%3C/math%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20altglyph%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20altglyphdef%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20altglyphitem%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20animatecolor%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20animatemotion%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20animatetransform%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20clippath%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feblend%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fecolormatrix%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fecomponenttransfer%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fecomposite%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feconvolvematrix%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fediffuselighting%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fedisplacementmap%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fedistantlight%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feflood%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fefunca%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fefuncb%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fefuncg%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fefuncr%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fegaussianblur%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feimage%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20femerge%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20femergenode%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20femorphology%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feoffset%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fepointlight%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fespecularlighting%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fespotlight%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20fetile%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20feturbulence%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20foreignobject%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20glyphref%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20lineargradient%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20radialgradient%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20textpath%3E"],"16e68d18f8f0fb81013fe77a30b7d396c5081e5e":[async_test('html5lib_tests11.html 16e68d18f8f0fb81013fe77a30b7d396c5081e5e'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csvg%3E%3CsolidColor%20/%3E%3C/svg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20solidcolor%3E"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests19.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests19.html
index 151b1217..529cf588 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests19.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests19.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['6135e0cbdbb22a97e8a13c2442c3e9a9e0a53298','6b46dba2f4d7d1a08359ab21fe5e011463dd8746','bd558a6d89fae63fed9c0801e6fd8e8737bc8dc1','a7955e9f06178980cbc13fc4d548f196fef42b13','2fda53e44aa91cb475f8b1aa57e938adcce60d4d','9f55c21807de5c769197a9a2f29f836f08af050b','197605d0b406dbb3de884de6949237dd33669997','73760ab95f224cf93922b45dbe5898005ada203c','1bba57ac3ccda8d4c7a79bde5342eede0bd10d8e','ce477c47f37eea25ad53c88915b75c801e41ee54','3b1730b917da1c33da80ee08d41573c44404c663','94d253ded5fe8c34906a57f0c16daf5f067cf386','ac6b608079815ad00c84b291ad6715eec523ccf4','a68acf7673e0c886fcf8cf609f3a39fb36362de5','266157f051148b068dad52e9786a0bda96e851db','2fd40bb6048be379000d73bc52a50405ca99b356','19652e3b1ec783f279f527ddfb07073684520ab8','e5676878cff9332b572ebfd327e426f87e32ab4d','03bbba49b30ec908e06e3c84e1fcede1ac7508ff','5f9f25a089e72b4a4e5d7ebbacb440349c53f52f','d26f2542fc6fcee4e737b578c8db716a96a22ade','0e8c4b181993b477f4f215d5724b99ad04f18b2d','e3f1de111562f25106efad76583a3b6c0e3516ba','84db6521d1350830f3e46b7d9676527e1b4ee9e2','033d9b356b2a646471de009fa8a75e40500d2dd2','0971186f913b3c7f915817d2b82c73ea6487e932','5257f17c3ecab5b65d74d7c27f0fd492f82ef9b9','b8c3379e60829428188fd57e974ea4d8a7e7ec45','f9ab61cdf08301bcf02208165cc94e6bdbad746c','c6aa9952dcccdde3fc6d4ba104647f049d038e66','3984cbe166b42d77ff6dadc8e1687075db7a8e65','2d78ba34eecedf8261e9a9e3f8858baf00a0d960','8d45a57b7093df38c88dccb1f3fba6a62c810445','871917ed049ff21b35e74e39de2ca1eef6863562','74ad5d3026f1b3eb6553086eb2811eed4418e334','0b1e97138c4d8e8d770f107202e46a18362fd587','02624fcb7ddb77b15e9bc553d8392fc8cd031f68','a2579d287fd8111306e6dcd7248971a6baa4488d','acd1c9218828ea4367920c7a499c54de7f9a618f','36a6346b03982942b4427d5089271a101ebf1605','e58ed5b56f81d057c23be31e068a10e694f52adf','d422166b880468765f34d89075d4db9c4fcbfee9','fc673f5874c0cf1477554dfb733d6292cc01558b','0d2192c16cc224e770abff9e9e89e860aff9da78','d5941f6b68ef817d062636d0d61c24c68d0d86a2','259a085138224e3dfe0dceded2a043e72a8b6d76','869fff76cfe00ff33987de007ce98dc949bf8cbf','c06518cdbf3816faf265644d28d93b7aee9258f7','2fb0cdb3a9f69ca6c3d564e01f89d7173cd51295','138623cd07ccff1ce13bb1aa5dbaaadc962c414f','52e4a8422d6ef591f33f8686842d974dbaa33302','5ba1d0e97f121810025c1d6447a426c669661637','709ec07924db4c9fd66d48eac08575dfdef01d8f','f72edb80bc3be091e4b448cd1de8fe851d623e05','cb7de0dc7e17c1454ceaa7eb49cb9f9476a1f510','511bf4bae15c8119042e5e80b5358b70e7da26c1','c51ee24ef9d92206318cc5bbba784630cd10e531','819d39ae49fd04f0dfce90ac8ed2f8e423bb9329','ef6bdf5b3ba9d41d6c1c08ede60c2e7fb21c6d71','6bf9c038255c31f20d8fbeaebdf3609eb3c9ed75','08983ab2a54f61b09a1df134cdaf51d321f3ef32','2ef94ed028fa71b70540cf41f0884ae0c1cf8077','5c9ed202789fb29566e0d146d155e0d672e8a037','7d766253cbf500df03506dfb7f2cbdd0f0f533c6','4d5629c61993ef0bb83fcbd80ccc6ead7cd776ee','6320d9fa3295984d3da7e4831ced75dfb97d4848','bdb97868e951b7a719fa8b1afc79650bf9aae7a5','81868cde252694a252b6b0c8d366850f8a54736c','20651db48147f8dda189c563f5fa60bfd0913ac0','d098e8a39897cd8453fc18399622e413872b054c','0beb7903dcc0dbee206d8b6e729963a0461eedb3','78e5cdb86bf2aecef4697d70d50499b50de5c25b','cfb1d482e5971a6915c90434f580721b772fc09b','99d8bff8bbcca1c7faa7b6e10b9ff305b9f99594','daaa43db05ffe9bdd8d734a4389fb3c459caddf1','b3d421e57a4135731309152d7f47e26a4866f3d6','aa5eac4b7a0bafdafcd52cb190a8e181ff74144c','91d56a57f4c8af2bce03e9974df0a80f62686fb4','9cbad5cad719a63d2eb7721de6737a346ad42da1','057c2e91a7e6053d39436efe2bc29049f6fa8e82','61e6517e5e82cdaed41ab3e1f6fa927731aa0c82','9274ab4f08baa52c5d7016f6062f186730cfbe6c','fc2fa41ebadc21653b38d70c1097bd4ac5979948','473303e65f26fafacbaf01c11b04d745ff293963','7854276e1637619f693cd87f64542c08c35d40bd','a2d262d392e8d10645ce559edf401df3f3872eb3','d5e50987bf495e285e279ff8670255d9b1314f5d','be54d7506e54a127a05b115a8659a5b52fa57f6c','af389f1a8ef93c457560fd2445df80a6789dab0d','601dfa9502942deb8bf46a91c64f10f649bc1875','4b01442faf29563d3b736d235515f77c20c81863','696a2b60681b0b6758f165a67e29a84b0f75a153','7a48b98cbae5cd7cbbb90f138c0d12da6c4448b3','d7693a0f2be68925250d3aa2cf295b1d1a60bf94','9e4d91f02184de1b1e5d927144bb06d3bc78bb09','9655591702381a52fe0eb3224e63e2d8bfd735e8','fe9aa1c8ec32796e26f3e58022f0e42dc365b5c7','4c9ec04359c3e94d4a56d6932d289f0c4246d1ef','3fcc2f15951b3c3375c3e359cf7888c71187994a','a94b35c317763de75150df6b436c7c153aeb8c51','173b990198dd8fd9534d7808817c19440b75d406','48ed5945491d4ad0c00acfd01c2060a459436d34','392b8d4d25351467da961e4ab011a1d4e970b97a','bd14373173ea3617610fc8154237f59f1a810733','db3c4ddb389a2b8f42ca6b3719007d4de2eccc41','c1741a62627b2e5bb1cfa2b2cd667f3f9f76157e','0d6cf626790e9f06e30ceb6baf3004663b0247e7',];
+      var order = ['6135e0cbdbb22a97e8a13c2442c3e9a9e0a53298','6b46dba2f4d7d1a08359ab21fe5e011463dd8746','bd558a6d89fae63fed9c0801e6fd8e8737bc8dc1','a7955e9f06178980cbc13fc4d548f196fef42b13','2fda53e44aa91cb475f8b1aa57e938adcce60d4d','9f55c21807de5c769197a9a2f29f836f08af050b','197605d0b406dbb3de884de6949237dd33669997','3b1730b917da1c33da80ee08d41573c44404c663','ac6b608079815ad00c84b291ad6715eec523ccf4','a68acf7673e0c886fcf8cf609f3a39fb36362de5','266157f051148b068dad52e9786a0bda96e851db','2fd40bb6048be379000d73bc52a50405ca99b356','19652e3b1ec783f279f527ddfb07073684520ab8','e5676878cff9332b572ebfd327e426f87e32ab4d','03bbba49b30ec908e06e3c84e1fcede1ac7508ff','5f9f25a089e72b4a4e5d7ebbacb440349c53f52f','d26f2542fc6fcee4e737b578c8db716a96a22ade','0e8c4b181993b477f4f215d5724b99ad04f18b2d','e3f1de111562f25106efad76583a3b6c0e3516ba','84db6521d1350830f3e46b7d9676527e1b4ee9e2','033d9b356b2a646471de009fa8a75e40500d2dd2','0971186f913b3c7f915817d2b82c73ea6487e932','5257f17c3ecab5b65d74d7c27f0fd492f82ef9b9','b8c3379e60829428188fd57e974ea4d8a7e7ec45','f9ab61cdf08301bcf02208165cc94e6bdbad746c','c6aa9952dcccdde3fc6d4ba104647f049d038e66','3984cbe166b42d77ff6dadc8e1687075db7a8e65','2d78ba34eecedf8261e9a9e3f8858baf00a0d960','8d45a57b7093df38c88dccb1f3fba6a62c810445','871917ed049ff21b35e74e39de2ca1eef6863562','74ad5d3026f1b3eb6553086eb2811eed4418e334','0b1e97138c4d8e8d770f107202e46a18362fd587','02624fcb7ddb77b15e9bc553d8392fc8cd031f68','a2579d287fd8111306e6dcd7248971a6baa4488d','acd1c9218828ea4367920c7a499c54de7f9a618f','36a6346b03982942b4427d5089271a101ebf1605','e58ed5b56f81d057c23be31e068a10e694f52adf','d422166b880468765f34d89075d4db9c4fcbfee9','fc673f5874c0cf1477554dfb733d6292cc01558b','0d2192c16cc224e770abff9e9e89e860aff9da78','d5941f6b68ef817d062636d0d61c24c68d0d86a2','259a085138224e3dfe0dceded2a043e72a8b6d76','869fff76cfe00ff33987de007ce98dc949bf8cbf','c06518cdbf3816faf265644d28d93b7aee9258f7','2fb0cdb3a9f69ca6c3d564e01f89d7173cd51295','138623cd07ccff1ce13bb1aa5dbaaadc962c414f','52e4a8422d6ef591f33f8686842d974dbaa33302','5ba1d0e97f121810025c1d6447a426c669661637','709ec07924db4c9fd66d48eac08575dfdef01d8f','f72edb80bc3be091e4b448cd1de8fe851d623e05','cb7de0dc7e17c1454ceaa7eb49cb9f9476a1f510','511bf4bae15c8119042e5e80b5358b70e7da26c1','c51ee24ef9d92206318cc5bbba784630cd10e531','819d39ae49fd04f0dfce90ac8ed2f8e423bb9329','ef6bdf5b3ba9d41d6c1c08ede60c2e7fb21c6d71','6bf9c038255c31f20d8fbeaebdf3609eb3c9ed75','08983ab2a54f61b09a1df134cdaf51d321f3ef32','2ef94ed028fa71b70540cf41f0884ae0c1cf8077','5c9ed202789fb29566e0d146d155e0d672e8a037','7d766253cbf500df03506dfb7f2cbdd0f0f533c6','4d5629c61993ef0bb83fcbd80ccc6ead7cd776ee','6320d9fa3295984d3da7e4831ced75dfb97d4848','bdb97868e951b7a719fa8b1afc79650bf9aae7a5','81868cde252694a252b6b0c8d366850f8a54736c','20651db48147f8dda189c563f5fa60bfd0913ac0','d098e8a39897cd8453fc18399622e413872b054c','0beb7903dcc0dbee206d8b6e729963a0461eedb3','78e5cdb86bf2aecef4697d70d50499b50de5c25b','cfb1d482e5971a6915c90434f580721b772fc09b','99d8bff8bbcca1c7faa7b6e10b9ff305b9f99594','daaa43db05ffe9bdd8d734a4389fb3c459caddf1','b3d421e57a4135731309152d7f47e26a4866f3d6','aa5eac4b7a0bafdafcd52cb190a8e181ff74144c','91d56a57f4c8af2bce03e9974df0a80f62686fb4','9cbad5cad719a63d2eb7721de6737a346ad42da1','057c2e91a7e6053d39436efe2bc29049f6fa8e82','61e6517e5e82cdaed41ab3e1f6fa927731aa0c82','9274ab4f08baa52c5d7016f6062f186730cfbe6c','fc2fa41ebadc21653b38d70c1097bd4ac5979948','473303e65f26fafacbaf01c11b04d745ff293963','7854276e1637619f693cd87f64542c08c35d40bd','a2d262d392e8d10645ce559edf401df3f3872eb3','d5e50987bf495e285e279ff8670255d9b1314f5d','be54d7506e54a127a05b115a8659a5b52fa57f6c','af389f1a8ef93c457560fd2445df80a6789dab0d','601dfa9502942deb8bf46a91c64f10f649bc1875','4b01442faf29563d3b736d235515f77c20c81863','696a2b60681b0b6758f165a67e29a84b0f75a153','7a48b98cbae5cd7cbbb90f138c0d12da6c4448b3','d7693a0f2be68925250d3aa2cf295b1d1a60bf94','9e4d91f02184de1b1e5d927144bb06d3bc78bb09','9655591702381a52fe0eb3224e63e2d8bfd735e8','fe9aa1c8ec32796e26f3e58022f0e42dc365b5c7','4c9ec04359c3e94d4a56d6932d289f0c4246d1ef','3fcc2f15951b3c3375c3e359cf7888c71187994a','a94b35c317763de75150df6b436c7c153aeb8c51','173b990198dd8fd9534d7808817c19440b75d406','48ed5945491d4ad0c00acfd01c2060a459436d34','392b8d4d25351467da961e4ab011a1d4e970b97a','bd14373173ea3617610fc8154237f59f1a810733','db3c4ddb389a2b8f42ca6b3719007d4de2eccc41','c1741a62627b2e5bb1cfa2b2cd667f3f9f76157e','0d6cf626790e9f06e30ceb6baf3004663b0247e7',];
       var tests = {
-          "6135e0cbdbb22a97e8a13c2442c3e9a9e0a53298":[async_test('html5lib_tests19.html 6135e0cbdbb22a97e8a13c2442c3e9a9e0a53298'), "%3C%21doctype%20html%3E%3Cmath%3E%3Cmn%20DefinitionUrl%3D%22foo%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20mn%3E%0A%7C%20%20%20%20%20%20%20%20%20definitionURL%3D%22foo%22"],"6b46dba2f4d7d1a08359ab21fe5e011463dd8746":[async_test('html5lib_tests19.html 6b46dba2f4d7d1a08359ab21fe5e011463dd8746'), "%3C%21doctype%20html%3E%3Chtml%3E%3C/p%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3C%21--%20foo%20--%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"bd558a6d89fae63fed9c0801e6fd8e8737bc8dc1":[async_test('html5lib_tests19.html bd558a6d89fae63fed9c0801e6fd8e8737bc8dc1'), "%3C%21doctype%20html%3E%3Chead%3E%3C/head%3E%3C/p%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3C%21--%20foo%20--%3E%0A%7C%20%20%20%3Cbody%3E"],"a7955e9f06178980cbc13fc4d548f196fef42b13":[async_test('html5lib_tests19.html a7955e9f06178980cbc13fc4d548f196fef42b13'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cp%3E%3Cpre%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cpre%3E"],"2fda53e44aa91cb475f8b1aa57e938adcce60d4d":[async_test('html5lib_tests19.html 2fda53e44aa91cb475f8b1aa57e938adcce60d4d'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cp%3E%3Clisting%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Clisting%3E"],"9f55c21807de5c769197a9a2f29f836f08af050b":[async_test('html5lib_tests19.html 9f55c21807de5c769197a9a2f29f836f08af050b'), "%3C%21doctype%20html%3E%3Cp%3E%3Cplaintext%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E"],"197605d0b406dbb3de884de6949237dd33669997":[async_test('html5lib_tests19.html 197605d0b406dbb3de884de6949237dd33669997'), "%3C%21doctype%20html%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Ch1%3E"],"73760ab95f224cf93922b45dbe5898005ada203c":[async_test('html5lib_tests19.html 73760ab95f224cf93922b45dbe5898005ada203c'), "%3C%21doctype%20html%3E%3Cform%3E%3Cisindex%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E"],"1bba57ac3ccda8d4c7a79bde5342eede0bd10d8e":[async_test('html5lib_tests19.html 1bba57ac3ccda8d4c7a79bde5342eede0bd10d8e'), "%3C%21doctype%20html%3E%3Cisindex%20action%3D%22POST%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20action%3D%22POST%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%20%20%3Clabel%3E%0A%7C%20%20%20%20%20%20%20%20%20%22This%20is%20a%20searchable%20index.%20Enter%20search%20keywords%3A%20%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20name%3D%22isindex%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E"],"ce477c47f37eea25ad53c88915b75c801e41ee54":[async_test('html5lib_tests19.html ce477c47f37eea25ad53c88915b75c801e41ee54'), "%3C%21doctype%20html%3E%3Cisindex%20prompt%3D%22this%20is%20isindex%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%20%20%3Clabel%3E%0A%7C%20%20%20%20%20%20%20%20%20%22this%20is%20isindex%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20name%3D%22isindex%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E"],"3b1730b917da1c33da80ee08d41573c44404c663":[async_test('html5lib_tests19.html 3b1730b917da1c33da80ee08d41573c44404c663'), "%3C%21doctype%20html%3E%3Cisindex%20type%3D%22hidden%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%20%20%3Clabel%3E%0A%7C%20%20%20%20%20%20%20%20%20%22This%20is%20a%20searchable%20index.%20Enter%20search%20keywords%3A%20%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20name%3D%22isindex%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20type%3D%22hidden%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E"],"94d253ded5fe8c34906a57f0c16daf5f067cf386":[async_test('html5lib_tests19.html 94d253ded5fe8c34906a57f0c16daf5f067cf386'), "%3C%21doctype%20html%3E%3Cisindex%20name%3D%22foo%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%20%20%3Clabel%3E%0A%7C%20%20%20%20%20%20%20%20%20%22This%20is%20a%20searchable%20index.%20Enter%20search%20keywords%3A%20%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20name%3D%22isindex%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E"],"ac6b608079815ad00c84b291ad6715eec523ccf4":[async_test('html5lib_tests19.html ac6b608079815ad00c84b291ad6715eec523ccf4'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cp%3E%3Crp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Crp%3E"],"a68acf7673e0c886fcf8cf609f3a39fb36362de5":[async_test('html5lib_tests19.html a68acf7673e0c886fcf8cf609f3a39fb36362de5'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cdiv%3E%3Cspan%3E%3Crp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Crp%3E"],"266157f051148b068dad52e9786a0bda96e851db":[async_test('html5lib_tests19.html 266157f051148b068dad52e9786a0bda96e851db'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cdiv%3E%3Cp%3E%3Crp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crp%3E"],"2fd40bb6048be379000d73bc52a50405ca99b356":[async_test('html5lib_tests19.html 2fd40bb6048be379000d73bc52a50405ca99b356'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cp%3E%3Crt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"19652e3b1ec783f279f527ddfb07073684520ab8":[async_test('html5lib_tests19.html 19652e3b1ec783f279f527ddfb07073684520ab8'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cdiv%3E%3Cspan%3E%3Crt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Crt%3E"],"e5676878cff9332b572ebfd327e426f87e32ab4d":[async_test('html5lib_tests19.html e5676878cff9332b572ebfd327e426f87e32ab4d'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cdiv%3E%3Cp%3E%3Crt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crt%3E"],"03bbba49b30ec908e06e3c84e1fcede1ac7508ff":[async_test('html5lib_tests19.html 03bbba49b30ec908e06e3c84e1fcede1ac7508ff'), "%3Chtml%3E%3Cruby%3Ea%3Crb%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"5f9f25a089e72b4a4e5d7ebbacb440349c53f52f":[async_test('html5lib_tests19.html 5f9f25a089e72b4a4e5d7ebbacb440349c53f52f'), "%3Chtml%3E%3Cruby%3Ea%3Crp%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"d26f2542fc6fcee4e737b578c8db716a96a22ade":[async_test('html5lib_tests19.html d26f2542fc6fcee4e737b578c8db716a96a22ade'), "%3Chtml%3E%3Cruby%3Ea%3Crt%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"0e8c4b181993b477f4f215d5724b99ad04f18b2d":[async_test('html5lib_tests19.html 0e8c4b181993b477f4f215d5724b99ad04f18b2d'), "%3Chtml%3E%3Cruby%3Ea%3Crtc%3Eb%3Crt%3Ec%3Crb%3Ed%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22d%22"],"e3f1de111562f25106efad76583a3b6c0e3516ba":[async_test('html5lib_tests19.html e3f1de111562f25106efad76583a3b6c0e3516ba'), "%3C%21doctype%20html%3E%3Cmath/%3E%3Cfoo%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%3Cfoo%3E"],"84db6521d1350830f3e46b7d9676527e1b4ee9e2":[async_test('html5lib_tests19.html 84db6521d1350830f3e46b7d9676527e1b4ee9e2'), "%3C%21doctype%20html%3E%3Csvg/%3E%3Cfoo%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%3Cfoo%3E"],"033d9b356b2a646471de009fa8a75e40500d2dd2":[async_test('html5lib_tests19.html 033d9b356b2a646471de009fa8a75e40500d2dd2'), "%3C%21doctype%20html%3E%3Cdiv%3E%3C/body%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3C%21--%20foo%20--%3E"],"0971186f913b3c7f915817d2b82c73ea6487e932":[async_test('html5lib_tests19.html 0971186f913b3c7f915817d2b82c73ea6487e932'), "%3C%21doctype%20html%3E%3Ch1%3E%3Cdiv%3E%3Ch3%3E%3Cspan%3E%3C/h1%3Efoo", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ch1%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ch3%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%22foo%22"],"5257f17c3ecab5b65d74d7c27f0fd492f82ef9b9":[async_test('html5lib_tests19.html 5257f17c3ecab5b65d74d7c27f0fd492f82ef9b9'), "%3C%21doctype%20html%3E%3Cp%3E%3C/h3%3Efoo", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%22foo%22"],"b8c3379e60829428188fd57e974ea4d8a7e7ec45":[async_test('html5lib_tests19.html b8c3379e60829428188fd57e974ea4d8a7e7ec45'), "%3C%21doctype%20html%3E%3Ch3%3E%3Cli%3Eabc%3C/h2%3Efoo", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ch3%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%20%20%22abc%22%0A%7C%20%20%20%20%20%22foo%22"],"f9ab61cdf08301bcf02208165cc94e6bdbad746c":[async_test('html5lib_tests19.html f9ab61cdf08301bcf02208165cc94e6bdbad746c'), "%3C%21doctype%20html%3E%3Ctable%3Eabc%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22abc%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3C%21--%20foo%20--%3E"],"c6aa9952dcccdde3fc6d4ba104647f049d038e66":[async_test('html5lib_tests19.html c6aa9952dcccdde3fc6d4ba104647f049d038e66'), "%3C%21doctype%20html%3E%3Ctable%3E%20%20%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%20%20%20%20%3C%21--%20foo%20--%3E"],"3984cbe166b42d77ff6dadc8e1687075db7a8e65":[async_test('html5lib_tests19.html 3984cbe166b42d77ff6dadc8e1687075db7a8e65'), "%3C%21doctype%20html%3E%3Ctable%3E%20b%20%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%20b%20%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3C%21--%20foo%20--%3E"],"2d78ba34eecedf8261e9a9e3f8858baf00a0d960":[async_test('html5lib_tests19.html 2d78ba34eecedf8261e9a9e3f8858baf00a0d960'), "%3C%21doctype%20html%3E%3Cselect%3E%3Coption%3E%3Coption%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E"],"8d45a57b7093df38c88dccb1f3fba6a62c810445":[async_test('html5lib_tests19.html 8d45a57b7093df38c88dccb1f3fba6a62c810445'), "%3C%21doctype%20html%3E%3Cselect%3E%3Coption%3E%3C/optgroup%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E"],"871917ed049ff21b35e74e39de2ca1eef6863562":[async_test('html5lib_tests19.html 871917ed049ff21b35e74e39de2ca1eef6863562'), "%3C%21doctype%20html%3E%3Cdd%3E%3Coptgroup%3E%3Cdd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdd%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E%0A%7C%20%20%20%20%20%3Cdd%3E"],"74ad5d3026f1b3eb6553086eb2811eed4418e334":[async_test('html5lib_tests19.html 74ad5d3026f1b3eb6553086eb2811eed4418e334'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmi%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mi%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"0b1e97138c4d8e8d770f107202e46a18362fd587":[async_test('html5lib_tests19.html 0b1e97138c4d8e8d770f107202e46a18362fd587'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmo%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"02624fcb7ddb77b15e9bc553d8392fc8cd031f68":[async_test('html5lib_tests19.html 02624fcb7ddb77b15e9bc553d8392fc8cd031f68'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmn%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mn%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"a2579d287fd8111306e6dcd7248971a6baa4488d":[async_test('html5lib_tests19.html a2579d287fd8111306e6dcd7248971a6baa4488d'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cms%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20ms%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"acd1c9218828ea4367920c7a499c54de7f9a618f":[async_test('html5lib_tests19.html acd1c9218828ea4367920c7a499c54de7f9a618f'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmtext%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mtext%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"36a6346b03982942b4427d5089271a101ebf1605":[async_test('html5lib_tests19.html 36a6346b03982942b4427d5089271a101ebf1605'), "%3C%21doctype%20html%3E%3Cframeset%3E%3C/noframes%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"e58ed5b56f81d057c23be31e068a10e694f52adf":[async_test('html5lib_tests19.html e58ed5b56f81d057c23be31e068a10e694f52adf'), "%3C%21doctype%20html%3E%3Chtml%20c%3Dd%3E%3Cbody%3E%3C/html%3E%3Chtml%20a%3Db%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20c%3D%22d%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"d422166b880468765f34d89075d4db9c4fcbfee9":[async_test('html5lib_tests19.html d422166b880468765f34d89075d4db9c4fcbfee9'), "%3C%21doctype%20html%3E%3Chtml%20c%3Dd%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3Chtml%20a%3Db%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20c%3D%22d%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"fc673f5874c0cf1477554dfb733d6292cc01558b":[async_test('html5lib_tests19.html fc673f5874c0cf1477554dfb733d6292cc01558b'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%3C%21--%20foo%20--%3E"],"0d2192c16cc224e770abff9e9e89e860aff9da78":[async_test('html5lib_tests19.html 0d2192c16cc224e770abff9e9e89e860aff9da78'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%20%20", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%22%20%20%22"],"d5941f6b68ef817d062636d0d61c24c68d0d86a2":[async_test('html5lib_tests19.html d5941f6b68ef817d062636d0d61c24c68d0d86a2'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3Eabc", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"259a085138224e3dfe0dceded2a043e72a8b6d76":[async_test('html5lib_tests19.html 259a085138224e3dfe0dceded2a043e72a8b6d76'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3Cp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"869fff76cfe00ff33987de007ce98dc949bf8cbf":[async_test('html5lib_tests19.html 869fff76cfe00ff33987de007ce98dc949bf8cbf'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3C/p%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"c06518cdbf3816faf265644d28d93b7aee9258f7":[async_test('html5lib_tests19.html c06518cdbf3816faf265644d28d93b7aee9258f7'), "%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3C%21doctype%20html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"2fb0cdb3a9f69ca6c3d564e01f89d7173cd51295":[async_test('html5lib_tests19.html 2fb0cdb3a9f69ca6c3d564e01f89d7173cd51295'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"138623cd07ccff1ce13bb1aa5dbaaadc962c414f":[async_test('html5lib_tests19.html 138623cd07ccff1ce13bb1aa5dbaaadc962c414f'), "%3C%21doctype%20html%3E%3Cp%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"52e4a8422d6ef591f33f8686842d974dbaa33302":[async_test('html5lib_tests19.html 52e4a8422d6ef591f33f8686842d974dbaa33302'), "%3C%21doctype%20html%3E%3Cp%3Ea%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%22a%22"],"5ba1d0e97f121810025c1d6447a426c669661637":[async_test('html5lib_tests19.html 5ba1d0e97f121810025c1d6447a426c669661637'), "%3C%21doctype%20html%3E%3Cp%3E%20%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"709ec07924db4c9fd66d48eac08575dfdef01d8f":[async_test('html5lib_tests19.html 709ec07924db4c9fd66d48eac08575dfdef01d8f'), "%3C%21doctype%20html%3E%3Cpre%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cpre%3E"],"f72edb80bc3be091e4b448cd1de8fe851d623e05":[async_test('html5lib_tests19.html f72edb80bc3be091e4b448cd1de8fe851d623e05'), "%3C%21doctype%20html%3E%3Clisting%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Clisting%3E"],"cb7de0dc7e17c1454ceaa7eb49cb9f9476a1f510":[async_test('html5lib_tests19.html cb7de0dc7e17c1454ceaa7eb49cb9f9476a1f510'), "%3C%21doctype%20html%3E%3Cli%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cli%3E"],"511bf4bae15c8119042e5e80b5358b70e7da26c1":[async_test('html5lib_tests19.html 511bf4bae15c8119042e5e80b5358b70e7da26c1'), "%3C%21doctype%20html%3E%3Cdd%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdd%3E"],"c51ee24ef9d92206318cc5bbba784630cd10e531":[async_test('html5lib_tests19.html c51ee24ef9d92206318cc5bbba784630cd10e531'), "%3C%21doctype%20html%3E%3Cdt%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdt%3E"],"819d39ae49fd04f0dfce90ac8ed2f8e423bb9329":[async_test('html5lib_tests19.html 819d39ae49fd04f0dfce90ac8ed2f8e423bb9329'), "%3C%21doctype%20html%3E%3Cbutton%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbutton%3E"],"ef6bdf5b3ba9d41d6c1c08ede60c2e7fb21c6d71":[async_test('html5lib_tests19.html ef6bdf5b3ba9d41d6c1c08ede60c2e7fb21c6d71'), "%3C%21doctype%20html%3E%3Capplet%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Capplet%3E"],"6bf9c038255c31f20d8fbeaebdf3609eb3c9ed75":[async_test('html5lib_tests19.html 6bf9c038255c31f20d8fbeaebdf3609eb3c9ed75'), "%3C%21doctype%20html%3E%3Cmarquee%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmarquee%3E"],"08983ab2a54f61b09a1df134cdaf51d321f3ef32":[async_test('html5lib_tests19.html 08983ab2a54f61b09a1df134cdaf51d321f3ef32'), "%3C%21doctype%20html%3E%3Cobject%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cobject%3E"],"2ef94ed028fa71b70540cf41f0884ae0c1cf8077":[async_test('html5lib_tests19.html 2ef94ed028fa71b70540cf41f0884ae0c1cf8077'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E"],"5c9ed202789fb29566e0d146d155e0d672e8a037":[async_test('html5lib_tests19.html 5c9ed202789fb29566e0d146d155e0d672e8a037'), "%3C%21doctype%20html%3E%3Carea%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Carea%3E"],"7d766253cbf500df03506dfb7f2cbdd0f0f533c6":[async_test('html5lib_tests19.html 7d766253cbf500df03506dfb7f2cbdd0f0f533c6'), "%3C%21doctype%20html%3E%3Cbasefont%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cbasefont%3E%0A%7C%20%20%20%3Cframeset%3E"],"4d5629c61993ef0bb83fcbd80ccc6ead7cd776ee":[async_test('html5lib_tests19.html 4d5629c61993ef0bb83fcbd80ccc6ead7cd776ee'), "%3C%21doctype%20html%3E%3Cbgsound%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cbgsound%3E%0A%7C%20%20%20%3Cframeset%3E"],"6320d9fa3295984d3da7e4831ced75dfb97d4848":[async_test('html5lib_tests19.html 6320d9fa3295984d3da7e4831ced75dfb97d4848'), "%3C%21doctype%20html%3E%3Cbr%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbr%3E"],"bdb97868e951b7a719fa8b1afc79650bf9aae7a5":[async_test('html5lib_tests19.html bdb97868e951b7a719fa8b1afc79650bf9aae7a5'), "%3C%21doctype%20html%3E%3Cembed%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cembed%3E"],"81868cde252694a252b6b0c8d366850f8a54736c":[async_test('html5lib_tests19.html 81868cde252694a252b6b0c8d366850f8a54736c'), "%3C%21doctype%20html%3E%3Cimg%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cimg%3E"],"20651db48147f8dda189c563f5fa60bfd0913ac0":[async_test('html5lib_tests19.html 20651db48147f8dda189c563f5fa60bfd0913ac0'), "%3C%21doctype%20html%3E%3Cinput%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E"],"d098e8a39897cd8453fc18399622e413872b054c":[async_test('html5lib_tests19.html d098e8a39897cd8453fc18399622e413872b054c'), "%3C%21doctype%20html%3E%3Ckeygen%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ckeygen%3E"],"0beb7903dcc0dbee206d8b6e729963a0461eedb3":[async_test('html5lib_tests19.html 0beb7903dcc0dbee206d8b6e729963a0461eedb3'), "%3C%21doctype%20html%3E%3Cwbr%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cwbr%3E"],"78e5cdb86bf2aecef4697d70d50499b50de5c25b":[async_test('html5lib_tests19.html 78e5cdb86bf2aecef4697d70d50499b50de5c25b'), "%3C%21doctype%20html%3E%3Chr%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Chr%3E"],"cfb1d482e5971a6915c90434f580721b772fc09b":[async_test('html5lib_tests19.html cfb1d482e5971a6915c90434f580721b772fc09b'), "%3C%21doctype%20html%3E%3Ctextarea%3E%3C/textarea%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctextarea%3E"],"99d8bff8bbcca1c7faa7b6e10b9ff305b9f99594":[async_test('html5lib_tests19.html 99d8bff8bbcca1c7faa7b6e10b9ff305b9f99594'), "%3C%21doctype%20html%3E%3Cxmp%3E%3C/xmp%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cxmp%3E"],"daaa43db05ffe9bdd8d734a4389fb3c459caddf1":[async_test('html5lib_tests19.html daaa43db05ffe9bdd8d734a4389fb3c459caddf1'), "%3C%21doctype%20html%3E%3Ciframe%3E%3C/iframe%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ciframe%3E"],"b3d421e57a4135731309152d7f47e26a4866f3d6":[async_test('html5lib_tests19.html b3d421e57a4135731309152d7f47e26a4866f3d6'), "%3C%21doctype%20html%3E%3Cselect%3E%3C/select%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E"],"aa5eac4b7a0bafdafcd52cb190a8e181ff74144c":[async_test('html5lib_tests19.html aa5eac4b7a0bafdafcd52cb190a8e181ff74144c'), "%3C%21doctype%20html%3E%3Csvg%3E%3C/svg%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"91d56a57f4c8af2bce03e9974df0a80f62686fb4":[async_test('html5lib_tests19.html 91d56a57f4c8af2bce03e9974df0a80f62686fb4'), "%3C%21doctype%20html%3E%3Cmath%3E%3C/math%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"9cbad5cad719a63d2eb7721de6737a346ad42da1":[async_test('html5lib_tests19.html 9cbad5cad719a63d2eb7721de6737a346ad42da1'), "%3C%21doctype%20html%3E%3Csvg%3E%3CforeignObject%3E%3Cdiv%3E%20%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"057c2e91a7e6053d39436efe2bc29049f6fa8e82":[async_test('html5lib_tests19.html 057c2e91a7e6053d39436efe2bc29049f6fa8e82'), "%3C%21doctype%20html%3E%3Csvg%3Ea%3C/svg%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%22a%22"],"61e6517e5e82cdaed41ab3e1f6fa927731aa0c82":[async_test('html5lib_tests19.html 61e6517e5e82cdaed41ab3e1f6fa927731aa0c82'), "%3C%21doctype%20html%3E%3Csvg%3E%20%3C/svg%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"9274ab4f08baa52c5d7016f6062f186730cfbe6c":[async_test('html5lib_tests19.html 9274ab4f08baa52c5d7016f6062f186730cfbe6c'), "%3Chtml%3Eaaa%3Cframeset%3E%3C/frameset%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22aaa%22"],"fc2fa41ebadc21653b38d70c1097bd4ac5979948":[async_test('html5lib_tests19.html fc2fa41ebadc21653b38d70c1097bd4ac5979948'), "%3Chtml%3E%20a%20%3Cframeset%3E%3C/frameset%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22a%20%22"],"473303e65f26fafacbaf01c11b04d745ff293963":[async_test('html5lib_tests19.html 473303e65f26fafacbaf01c11b04d745ff293963'), "%3C%21doctype%20html%3E%3Cdiv%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"7854276e1637619f693cd87f64542c08c35d40bd":[async_test('html5lib_tests19.html 7854276e1637619f693cd87f64542c08c35d40bd'), "%3C%21doctype%20html%3E%3Cdiv%3E%3Cbody%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"a2d262d392e8d10645ce559edf401df3f3872eb3":[async_test('html5lib_tests19.html a2d262d392e8d10645ce559edf401df3f3872eb3'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3C/p%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%22a%22"],"d5e50987bf495e285e279ff8670255d9b1314f5d":[async_test('html5lib_tests19.html d5e50987bf495e285e279ff8670255d9b1314f5d'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmn%3E%3Cspan%3E%3C/p%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mn%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22a%22"],"be54d7506e54a127a05b115a8659a5b52fa57f6c":[async_test('html5lib_tests19.html be54d7506e54a127a05b115a8659a5b52fa57f6c'), "%3C%21doctype%20html%3E%3Cmath%3E%3C/html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E"],"af389f1a8ef93c457560fd2445df80a6789dab0d":[async_test('html5lib_tests19.html af389f1a8ef93c457560fd2445df80a6789dab0d'), "%3C%21doctype%20html%3E%3Cmeta%20charset%3D%22ascii%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20charset%3D%22ascii%22%0A%7C%20%20%20%3Cbody%3E"],"601dfa9502942deb8bf46a91c64f10f649bc1875":[async_test('html5lib_tests19.html 601dfa9502942deb8bf46a91c64f10f649bc1875'), "%3C%21doctype%20html%3E%3Cmeta%20http-equiv%3D%22content-type%22%20content%3D%22text/html%3Bcharset%3Dascii%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20content%3D%22text/html%3Bcharset%3Dascii%22%0A%7C%20%20%20%20%20%20%20http-equiv%3D%22content-type%22%0A%7C%20%20%20%3Cbody%3E"],"4b01442faf29563d3b736d235515f77c20c81863":[async_test('html5lib_tests19.html 4b01442faf29563d3b736d235515f77c20c81863'), "%3C%21doctype%20html%3E%3Chead%3E%3C%21--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa--%3E%3Cmeta%20charset%3D%22utf8%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3C%21--%20aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%20--%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20charset%3D%22utf8%22%0A%7C%20%20%20%3Cbody%3E"],"696a2b60681b0b6758f165a67e29a84b0f75a153":[async_test('html5lib_tests19.html 696a2b60681b0b6758f165a67e29a84b0f75a153'), "%3C%21doctype%20html%3E%3Chtml%20a%3Db%3E%3Chead%3E%3C/head%3E%3Chtml%20c%3Dd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20c%3D%22d%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"7a48b98cbae5cd7cbbb90f138c0d12da6c4448b3":[async_test('html5lib_tests19.html 7a48b98cbae5cd7cbbb90f138c0d12da6c4448b3'), "%3C%21doctype%20html%3E%3Cimage/%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cimg%3E"],"d7693a0f2be68925250d3aa2cf295b1d1a60bf94":[async_test('html5lib_tests19.html d7693a0f2be68925250d3aa2cf295b1d1a60bf94'), "%3C%21doctype%20html%3Ea%3Ci%3Eb%3Ctable%3Ec%3Cb%3Ed%3C/i%3Ee%3C/b%3Ef", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22bc%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22de%22%0A%7C%20%20%20%20%20%20%20%22f%22%0A%7C%20%20%20%20%20%20%20%3Ctable%3E"],"9e4d91f02184de1b1e5d927144bb06d3bc78bb09":[async_test('html5lib_tests19.html 9e4d91f02184de1b1e5d927144bb06d3bc78bb09'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ci%3Ea%3Cb%3Eb%3Cdiv%3Ec%3Ca%3Ed%3C/i%3Ee%3C/b%3Ef", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22d%22%0A%7C%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22e%22%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%22f%22%0A%7C%20%20%20%20%20%3Ctable%3E"],"9655591702381a52fe0eb3224e63e2d8bfd735e8":[async_test('html5lib_tests19.html 9655591702381a52fe0eb3224e63e2d8bfd735e8'), "%3C%21doctype%20html%3E%3Ci%3Ea%3Cb%3Eb%3Cdiv%3Ec%3Ca%3Ed%3C/i%3Ee%3C/b%3Ef", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22d%22%0A%7C%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22e%22%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%22f%22"],"fe9aa1c8ec32796e26f3e58022f0e42dc365b5c7":[async_test('html5lib_tests19.html fe9aa1c8ec32796e26f3e58022f0e42dc365b5c7'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ci%3Ea%3Cb%3Eb%3Cdiv%3Ec%3C/i%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%3Ctable%3E"],"4c9ec04359c3e94d4a56d6932d289f0c4246d1ef":[async_test('html5lib_tests19.html 4c9ec04359c3e94d4a56d6932d289f0c4246d1ef'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ci%3Ea%3Cdiv%3Eb%3Ctr%3Ec%3Cb%3Ed%3C/i%3Ee", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22d%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%22e%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"3fcc2f15951b3c3375c3e359cf7888c71187994a":[async_test('html5lib_tests19.html 3fcc2f15951b3c3375c3e359cf7888c71187994a'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ctd%3E%3Ctable%3E%3Ci%3Ea%3Cdiv%3Eb%3Cb%3Ec%3C/i%3Ed", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22d%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E"],"a94b35c317763de75150df6b436c7c153aeb8c51":[async_test('html5lib_tests19.html a94b35c317763de75150df6b436c7c153aeb8c51'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cbgsound%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbgsound%3E"],"173b990198dd8fd9534d7808817c19440b75d406":[async_test('html5lib_tests19.html 173b990198dd8fd9534d7808817c19440b75d406'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cbasefont%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbasefont%3E"],"48ed5945491d4ad0c00acfd01c2060a459436d34":[async_test('html5lib_tests19.html 48ed5945491d4ad0c00acfd01c2060a459436d34'), "%3C%21doctype%20html%3E%3Ca%3E%3Cb%3E%3C/a%3E%3Cbasefont%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cbasefont%3E"],"392b8d4d25351467da961e4ab011a1d4e970b97a":[async_test('html5lib_tests19.html 392b8d4d25351467da961e4ab011a1d4e970b97a'), "%3C%21doctype%20html%3E%3Ca%3E%3Cb%3E%3C/a%3E%3Cbgsound%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cbgsound%3E"],"bd14373173ea3617610fc8154237f59f1a810733":[async_test('html5lib_tests19.html bd14373173ea3617610fc8154237f59f1a810733'), "%3C%21doctype%20html%3E%3Cfigcaption%3E%3Carticle%3E%3C/figcaption%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfigcaption%3E%0A%7C%20%20%20%20%20%20%20%3Carticle%3E%0A%7C%20%20%20%20%20%22a%22"],"db3c4ddb389a2b8f42ca6b3719007d4de2eccc41":[async_test('html5lib_tests19.html db3c4ddb389a2b8f42ca6b3719007d4de2eccc41'), "%3C%21doctype%20html%3E%3Csummary%3E%3Carticle%3E%3C/summary%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csummary%3E%0A%7C%20%20%20%20%20%20%20%3Carticle%3E%0A%7C%20%20%20%20%20%22a%22"],"c1741a62627b2e5bb1cfa2b2cd667f3f9f76157e":[async_test('html5lib_tests19.html c1741a62627b2e5bb1cfa2b2cd667f3f9f76157e'), "%3C%21doctype%20html%3E%3Cp%3E%3Ca%3E%3Cplaintext%3Eb", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22"],"0d6cf626790e9f06e30ceb6baf3004663b0247e7":[async_test('html5lib_tests19.html 0d6cf626790e9f06e30ceb6baf3004663b0247e7'), "%3C%21DOCTYPE%20html%3E%3Cdiv%3Ea%3Ca%3E%3C/div%3Eb%3Cp%3Ec%3C/p%3Ed", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%22d%22"],
+          "6135e0cbdbb22a97e8a13c2442c3e9a9e0a53298":[async_test('html5lib_tests19.html 6135e0cbdbb22a97e8a13c2442c3e9a9e0a53298'), "%3C%21doctype%20html%3E%3Cmath%3E%3Cmn%20DefinitionUrl%3D%22foo%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20mn%3E%0A%7C%20%20%20%20%20%20%20%20%20definitionURL%3D%22foo%22"],"6b46dba2f4d7d1a08359ab21fe5e011463dd8746":[async_test('html5lib_tests19.html 6b46dba2f4d7d1a08359ab21fe5e011463dd8746'), "%3C%21doctype%20html%3E%3Chtml%3E%3C/p%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3C%21--%20foo%20--%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"bd558a6d89fae63fed9c0801e6fd8e8737bc8dc1":[async_test('html5lib_tests19.html bd558a6d89fae63fed9c0801e6fd8e8737bc8dc1'), "%3C%21doctype%20html%3E%3Chead%3E%3C/head%3E%3C/p%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3C%21--%20foo%20--%3E%0A%7C%20%20%20%3Cbody%3E"],"a7955e9f06178980cbc13fc4d548f196fef42b13":[async_test('html5lib_tests19.html a7955e9f06178980cbc13fc4d548f196fef42b13'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cp%3E%3Cpre%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cpre%3E"],"2fda53e44aa91cb475f8b1aa57e938adcce60d4d":[async_test('html5lib_tests19.html 2fda53e44aa91cb475f8b1aa57e938adcce60d4d'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cp%3E%3Clisting%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Clisting%3E"],"9f55c21807de5c769197a9a2f29f836f08af050b":[async_test('html5lib_tests19.html 9f55c21807de5c769197a9a2f29f836f08af050b'), "%3C%21doctype%20html%3E%3Cp%3E%3Cplaintext%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E"],"197605d0b406dbb3de884de6949237dd33669997":[async_test('html5lib_tests19.html 197605d0b406dbb3de884de6949237dd33669997'), "%3C%21doctype%20html%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Ch1%3E"],"3b1730b917da1c33da80ee08d41573c44404c663":[async_test('html5lib_tests19.html 3b1730b917da1c33da80ee08d41573c44404c663'), "%3C%21doctype%20html%3E%3Cisindex%20type%3D%22hidden%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cisindex%3E%0A%7C%20%20%20%20%20%20%20type%3D%22hidden%22"],"ac6b608079815ad00c84b291ad6715eec523ccf4":[async_test('html5lib_tests19.html ac6b608079815ad00c84b291ad6715eec523ccf4'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cp%3E%3Crp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Crp%3E"],"a68acf7673e0c886fcf8cf609f3a39fb36362de5":[async_test('html5lib_tests19.html a68acf7673e0c886fcf8cf609f3a39fb36362de5'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cdiv%3E%3Cspan%3E%3Crp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Crp%3E"],"266157f051148b068dad52e9786a0bda96e851db":[async_test('html5lib_tests19.html 266157f051148b068dad52e9786a0bda96e851db'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cdiv%3E%3Cp%3E%3Crp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crp%3E"],"2fd40bb6048be379000d73bc52a50405ca99b356":[async_test('html5lib_tests19.html 2fd40bb6048be379000d73bc52a50405ca99b356'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cp%3E%3Crt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"19652e3b1ec783f279f527ddfb07073684520ab8":[async_test('html5lib_tests19.html 19652e3b1ec783f279f527ddfb07073684520ab8'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cdiv%3E%3Cspan%3E%3Crt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Crt%3E"],"e5676878cff9332b572ebfd327e426f87e32ab4d":[async_test('html5lib_tests19.html e5676878cff9332b572ebfd327e426f87e32ab4d'), "%3C%21doctype%20html%3E%3Cruby%3E%3Cdiv%3E%3Cp%3E%3Crt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crt%3E"],"03bbba49b30ec908e06e3c84e1fcede1ac7508ff":[async_test('html5lib_tests19.html 03bbba49b30ec908e06e3c84e1fcede1ac7508ff'), "%3Chtml%3E%3Cruby%3Ea%3Crb%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"5f9f25a089e72b4a4e5d7ebbacb440349c53f52f":[async_test('html5lib_tests19.html 5f9f25a089e72b4a4e5d7ebbacb440349c53f52f'), "%3Chtml%3E%3Cruby%3Ea%3Crp%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"d26f2542fc6fcee4e737b578c8db716a96a22ade":[async_test('html5lib_tests19.html d26f2542fc6fcee4e737b578c8db716a96a22ade'), "%3Chtml%3E%3Cruby%3Ea%3Crt%3Eb%3Crt%3E%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Crt%3E"],"0e8c4b181993b477f4f215d5724b99ad04f18b2d":[async_test('html5lib_tests19.html 0e8c4b181993b477f4f215d5724b99ad04f18b2d'), "%3Chtml%3E%3Cruby%3Ea%3Crtc%3Eb%3Crt%3Ec%3Crb%3Ed%3C/ruby%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Crtc%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%3Crb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22d%22"],"e3f1de111562f25106efad76583a3b6c0e3516ba":[async_test('html5lib_tests19.html e3f1de111562f25106efad76583a3b6c0e3516ba'), "%3C%21doctype%20html%3E%3Cmath/%3E%3Cfoo%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%3Cfoo%3E"],"84db6521d1350830f3e46b7d9676527e1b4ee9e2":[async_test('html5lib_tests19.html 84db6521d1350830f3e46b7d9676527e1b4ee9e2'), "%3C%21doctype%20html%3E%3Csvg/%3E%3Cfoo%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%3Cfoo%3E"],"033d9b356b2a646471de009fa8a75e40500d2dd2":[async_test('html5lib_tests19.html 033d9b356b2a646471de009fa8a75e40500d2dd2'), "%3C%21doctype%20html%3E%3Cdiv%3E%3C/body%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%3C%21--%20foo%20--%3E"],"0971186f913b3c7f915817d2b82c73ea6487e932":[async_test('html5lib_tests19.html 0971186f913b3c7f915817d2b82c73ea6487e932'), "%3C%21doctype%20html%3E%3Ch1%3E%3Cdiv%3E%3Ch3%3E%3Cspan%3E%3C/h1%3Efoo", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ch1%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ch3%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%22foo%22"],"5257f17c3ecab5b65d74d7c27f0fd492f82ef9b9":[async_test('html5lib_tests19.html 5257f17c3ecab5b65d74d7c27f0fd492f82ef9b9'), "%3C%21doctype%20html%3E%3Cp%3E%3C/h3%3Efoo", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%22foo%22"],"b8c3379e60829428188fd57e974ea4d8a7e7ec45":[async_test('html5lib_tests19.html b8c3379e60829428188fd57e974ea4d8a7e7ec45'), "%3C%21doctype%20html%3E%3Ch3%3E%3Cli%3Eabc%3C/h2%3Efoo", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ch3%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%20%20%22abc%22%0A%7C%20%20%20%20%20%22foo%22"],"f9ab61cdf08301bcf02208165cc94e6bdbad746c":[async_test('html5lib_tests19.html f9ab61cdf08301bcf02208165cc94e6bdbad746c'), "%3C%21doctype%20html%3E%3Ctable%3Eabc%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22abc%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3C%21--%20foo%20--%3E"],"c6aa9952dcccdde3fc6d4ba104647f049d038e66":[async_test('html5lib_tests19.html c6aa9952dcccdde3fc6d4ba104647f049d038e66'), "%3C%21doctype%20html%3E%3Ctable%3E%20%20%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%20%20%20%20%3C%21--%20foo%20--%3E"],"3984cbe166b42d77ff6dadc8e1687075db7a8e65":[async_test('html5lib_tests19.html 3984cbe166b42d77ff6dadc8e1687075db7a8e65'), "%3C%21doctype%20html%3E%3Ctable%3E%20b%20%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%20b%20%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3C%21--%20foo%20--%3E"],"2d78ba34eecedf8261e9a9e3f8858baf00a0d960":[async_test('html5lib_tests19.html 2d78ba34eecedf8261e9a9e3f8858baf00a0d960'), "%3C%21doctype%20html%3E%3Cselect%3E%3Coption%3E%3Coption%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E"],"8d45a57b7093df38c88dccb1f3fba6a62c810445":[async_test('html5lib_tests19.html 8d45a57b7093df38c88dccb1f3fba6a62c810445'), "%3C%21doctype%20html%3E%3Cselect%3E%3Coption%3E%3C/optgroup%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E"],"871917ed049ff21b35e74e39de2ca1eef6863562":[async_test('html5lib_tests19.html 871917ed049ff21b35e74e39de2ca1eef6863562'), "%3C%21doctype%20html%3E%3Cdd%3E%3Coptgroup%3E%3Cdd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdd%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E%0A%7C%20%20%20%20%20%3Cdd%3E"],"74ad5d3026f1b3eb6553086eb2811eed4418e334":[async_test('html5lib_tests19.html 74ad5d3026f1b3eb6553086eb2811eed4418e334'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmi%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mi%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"0b1e97138c4d8e8d770f107202e46a18362fd587":[async_test('html5lib_tests19.html 0b1e97138c4d8e8d770f107202e46a18362fd587'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmo%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"02624fcb7ddb77b15e9bc553d8392fc8cd031f68":[async_test('html5lib_tests19.html 02624fcb7ddb77b15e9bc553d8392fc8cd031f68'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmn%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mn%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"a2579d287fd8111306e6dcd7248971a6baa4488d":[async_test('html5lib_tests19.html a2579d287fd8111306e6dcd7248971a6baa4488d'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cms%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20ms%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"acd1c9218828ea4367920c7a499c54de7f9a618f":[async_test('html5lib_tests19.html acd1c9218828ea4367920c7a499c54de7f9a618f'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmtext%3E%3Cp%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mtext%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"36a6346b03982942b4427d5089271a101ebf1605":[async_test('html5lib_tests19.html 36a6346b03982942b4427d5089271a101ebf1605'), "%3C%21doctype%20html%3E%3Cframeset%3E%3C/noframes%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"e58ed5b56f81d057c23be31e068a10e694f52adf":[async_test('html5lib_tests19.html e58ed5b56f81d057c23be31e068a10e694f52adf'), "%3C%21doctype%20html%3E%3Chtml%20c%3Dd%3E%3Cbody%3E%3C/html%3E%3Chtml%20a%3Db%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20c%3D%22d%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"d422166b880468765f34d89075d4db9c4fcbfee9":[async_test('html5lib_tests19.html d422166b880468765f34d89075d4db9c4fcbfee9'), "%3C%21doctype%20html%3E%3Chtml%20c%3Dd%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3Chtml%20a%3Db%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20c%3D%22d%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"fc673f5874c0cf1477554dfb733d6292cc01558b":[async_test('html5lib_tests19.html fc673f5874c0cf1477554dfb733d6292cc01558b'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%3C%21--%20foo%20--%3E"],"0d2192c16cc224e770abff9e9e89e860aff9da78":[async_test('html5lib_tests19.html 0d2192c16cc224e770abff9e9e89e860aff9da78'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%20%20", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%22%20%20%22"],"d5941f6b68ef817d062636d0d61c24c68d0d86a2":[async_test('html5lib_tests19.html d5941f6b68ef817d062636d0d61c24c68d0d86a2'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3Eabc", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"259a085138224e3dfe0dceded2a043e72a8b6d76":[async_test('html5lib_tests19.html 259a085138224e3dfe0dceded2a043e72a8b6d76'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3Cp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"869fff76cfe00ff33987de007ce98dc949bf8cbf":[async_test('html5lib_tests19.html 869fff76cfe00ff33987de007ce98dc949bf8cbf'), "%3C%21doctype%20html%3E%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3C/p%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"c06518cdbf3816faf265644d28d93b7aee9258f7":[async_test('html5lib_tests19.html c06518cdbf3816faf265644d28d93b7aee9258f7'), "%3Chtml%3E%3Cframeset%3E%3C/frameset%3E%3C/html%3E%3C%21doctype%20html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"2fb0cdb3a9f69ca6c3d564e01f89d7173cd51295":[async_test('html5lib_tests19.html 2fb0cdb3a9f69ca6c3d564e01f89d7173cd51295'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"138623cd07ccff1ce13bb1aa5dbaaadc962c414f":[async_test('html5lib_tests19.html 138623cd07ccff1ce13bb1aa5dbaaadc962c414f'), "%3C%21doctype%20html%3E%3Cp%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"52e4a8422d6ef591f33f8686842d974dbaa33302":[async_test('html5lib_tests19.html 52e4a8422d6ef591f33f8686842d974dbaa33302'), "%3C%21doctype%20html%3E%3Cp%3Ea%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%22a%22"],"5ba1d0e97f121810025c1d6447a426c669661637":[async_test('html5lib_tests19.html 5ba1d0e97f121810025c1d6447a426c669661637'), "%3C%21doctype%20html%3E%3Cp%3E%20%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"709ec07924db4c9fd66d48eac08575dfdef01d8f":[async_test('html5lib_tests19.html 709ec07924db4c9fd66d48eac08575dfdef01d8f'), "%3C%21doctype%20html%3E%3Cpre%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cpre%3E"],"f72edb80bc3be091e4b448cd1de8fe851d623e05":[async_test('html5lib_tests19.html f72edb80bc3be091e4b448cd1de8fe851d623e05'), "%3C%21doctype%20html%3E%3Clisting%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Clisting%3E"],"cb7de0dc7e17c1454ceaa7eb49cb9f9476a1f510":[async_test('html5lib_tests19.html cb7de0dc7e17c1454ceaa7eb49cb9f9476a1f510'), "%3C%21doctype%20html%3E%3Cli%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cli%3E"],"511bf4bae15c8119042e5e80b5358b70e7da26c1":[async_test('html5lib_tests19.html 511bf4bae15c8119042e5e80b5358b70e7da26c1'), "%3C%21doctype%20html%3E%3Cdd%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdd%3E"],"c51ee24ef9d92206318cc5bbba784630cd10e531":[async_test('html5lib_tests19.html c51ee24ef9d92206318cc5bbba784630cd10e531'), "%3C%21doctype%20html%3E%3Cdt%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdt%3E"],"819d39ae49fd04f0dfce90ac8ed2f8e423bb9329":[async_test('html5lib_tests19.html 819d39ae49fd04f0dfce90ac8ed2f8e423bb9329'), "%3C%21doctype%20html%3E%3Cbutton%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbutton%3E"],"ef6bdf5b3ba9d41d6c1c08ede60c2e7fb21c6d71":[async_test('html5lib_tests19.html ef6bdf5b3ba9d41d6c1c08ede60c2e7fb21c6d71'), "%3C%21doctype%20html%3E%3Capplet%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Capplet%3E"],"6bf9c038255c31f20d8fbeaebdf3609eb3c9ed75":[async_test('html5lib_tests19.html 6bf9c038255c31f20d8fbeaebdf3609eb3c9ed75'), "%3C%21doctype%20html%3E%3Cmarquee%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmarquee%3E"],"08983ab2a54f61b09a1df134cdaf51d321f3ef32":[async_test('html5lib_tests19.html 08983ab2a54f61b09a1df134cdaf51d321f3ef32'), "%3C%21doctype%20html%3E%3Cobject%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cobject%3E"],"2ef94ed028fa71b70540cf41f0884ae0c1cf8077":[async_test('html5lib_tests19.html 2ef94ed028fa71b70540cf41f0884ae0c1cf8077'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E"],"5c9ed202789fb29566e0d146d155e0d672e8a037":[async_test('html5lib_tests19.html 5c9ed202789fb29566e0d146d155e0d672e8a037'), "%3C%21doctype%20html%3E%3Carea%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Carea%3E"],"7d766253cbf500df03506dfb7f2cbdd0f0f533c6":[async_test('html5lib_tests19.html 7d766253cbf500df03506dfb7f2cbdd0f0f533c6'), "%3C%21doctype%20html%3E%3Cbasefont%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cbasefont%3E%0A%7C%20%20%20%3Cframeset%3E"],"4d5629c61993ef0bb83fcbd80ccc6ead7cd776ee":[async_test('html5lib_tests19.html 4d5629c61993ef0bb83fcbd80ccc6ead7cd776ee'), "%3C%21doctype%20html%3E%3Cbgsound%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cbgsound%3E%0A%7C%20%20%20%3Cframeset%3E"],"6320d9fa3295984d3da7e4831ced75dfb97d4848":[async_test('html5lib_tests19.html 6320d9fa3295984d3da7e4831ced75dfb97d4848'), "%3C%21doctype%20html%3E%3Cbr%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbr%3E"],"bdb97868e951b7a719fa8b1afc79650bf9aae7a5":[async_test('html5lib_tests19.html bdb97868e951b7a719fa8b1afc79650bf9aae7a5'), "%3C%21doctype%20html%3E%3Cembed%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cembed%3E"],"81868cde252694a252b6b0c8d366850f8a54736c":[async_test('html5lib_tests19.html 81868cde252694a252b6b0c8d366850f8a54736c'), "%3C%21doctype%20html%3E%3Cimg%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cimg%3E"],"20651db48147f8dda189c563f5fa60bfd0913ac0":[async_test('html5lib_tests19.html 20651db48147f8dda189c563f5fa60bfd0913ac0'), "%3C%21doctype%20html%3E%3Cinput%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E"],"d098e8a39897cd8453fc18399622e413872b054c":[async_test('html5lib_tests19.html d098e8a39897cd8453fc18399622e413872b054c'), "%3C%21doctype%20html%3E%3Ckeygen%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ckeygen%3E"],"0beb7903dcc0dbee206d8b6e729963a0461eedb3":[async_test('html5lib_tests19.html 0beb7903dcc0dbee206d8b6e729963a0461eedb3'), "%3C%21doctype%20html%3E%3Cwbr%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cwbr%3E"],"78e5cdb86bf2aecef4697d70d50499b50de5c25b":[async_test('html5lib_tests19.html 78e5cdb86bf2aecef4697d70d50499b50de5c25b'), "%3C%21doctype%20html%3E%3Chr%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Chr%3E"],"cfb1d482e5971a6915c90434f580721b772fc09b":[async_test('html5lib_tests19.html cfb1d482e5971a6915c90434f580721b772fc09b'), "%3C%21doctype%20html%3E%3Ctextarea%3E%3C/textarea%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctextarea%3E"],"99d8bff8bbcca1c7faa7b6e10b9ff305b9f99594":[async_test('html5lib_tests19.html 99d8bff8bbcca1c7faa7b6e10b9ff305b9f99594'), "%3C%21doctype%20html%3E%3Cxmp%3E%3C/xmp%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cxmp%3E"],"daaa43db05ffe9bdd8d734a4389fb3c459caddf1":[async_test('html5lib_tests19.html daaa43db05ffe9bdd8d734a4389fb3c459caddf1'), "%3C%21doctype%20html%3E%3Ciframe%3E%3C/iframe%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ciframe%3E"],"b3d421e57a4135731309152d7f47e26a4866f3d6":[async_test('html5lib_tests19.html b3d421e57a4135731309152d7f47e26a4866f3d6'), "%3C%21doctype%20html%3E%3Cselect%3E%3C/select%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E"],"aa5eac4b7a0bafdafcd52cb190a8e181ff74144c":[async_test('html5lib_tests19.html aa5eac4b7a0bafdafcd52cb190a8e181ff74144c'), "%3C%21doctype%20html%3E%3Csvg%3E%3C/svg%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"91d56a57f4c8af2bce03e9974df0a80f62686fb4":[async_test('html5lib_tests19.html 91d56a57f4c8af2bce03e9974df0a80f62686fb4'), "%3C%21doctype%20html%3E%3Cmath%3E%3C/math%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"9cbad5cad719a63d2eb7721de6737a346ad42da1":[async_test('html5lib_tests19.html 9cbad5cad719a63d2eb7721de6737a346ad42da1'), "%3C%21doctype%20html%3E%3Csvg%3E%3CforeignObject%3E%3Cdiv%3E%20%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"057c2e91a7e6053d39436efe2bc29049f6fa8e82":[async_test('html5lib_tests19.html 057c2e91a7e6053d39436efe2bc29049f6fa8e82'), "%3C%21doctype%20html%3E%3Csvg%3Ea%3C/svg%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%22a%22"],"61e6517e5e82cdaed41ab3e1f6fa927731aa0c82":[async_test('html5lib_tests19.html 61e6517e5e82cdaed41ab3e1f6fa927731aa0c82'), "%3C%21doctype%20html%3E%3Csvg%3E%20%3C/svg%3E%3Cframeset%3E%3Cframe%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3Cframe%3E"],"9274ab4f08baa52c5d7016f6062f186730cfbe6c":[async_test('html5lib_tests19.html 9274ab4f08baa52c5d7016f6062f186730cfbe6c'), "%3Chtml%3Eaaa%3Cframeset%3E%3C/frameset%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22aaa%22"],"fc2fa41ebadc21653b38d70c1097bd4ac5979948":[async_test('html5lib_tests19.html fc2fa41ebadc21653b38d70c1097bd4ac5979948'), "%3Chtml%3E%20a%20%3Cframeset%3E%3C/frameset%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22a%20%22"],"473303e65f26fafacbaf01c11b04d745ff293963":[async_test('html5lib_tests19.html 473303e65f26fafacbaf01c11b04d745ff293963'), "%3C%21doctype%20html%3E%3Cdiv%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"7854276e1637619f693cd87f64542c08c35d40bd":[async_test('html5lib_tests19.html 7854276e1637619f693cd87f64542c08c35d40bd'), "%3C%21doctype%20html%3E%3Cdiv%3E%3Cbody%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"a2d262d392e8d10645ce559edf401df3f3872eb3":[async_test('html5lib_tests19.html a2d262d392e8d10645ce559edf401df3f3872eb3'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3C/p%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%22a%22"],"d5e50987bf495e285e279ff8670255d9b1314f5d":[async_test('html5lib_tests19.html d5e50987bf495e285e279ff8670255d9b1314f5d'), "%3C%21doctype%20html%3E%3Cp%3E%3Cmath%3E%3Cmn%3E%3Cspan%3E%3C/p%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mn%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22a%22"],"be54d7506e54a127a05b115a8659a5b52fa57f6c":[async_test('html5lib_tests19.html be54d7506e54a127a05b115a8659a5b52fa57f6c'), "%3C%21doctype%20html%3E%3Cmath%3E%3C/html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E"],"af389f1a8ef93c457560fd2445df80a6789dab0d":[async_test('html5lib_tests19.html af389f1a8ef93c457560fd2445df80a6789dab0d'), "%3C%21doctype%20html%3E%3Cmeta%20charset%3D%22ascii%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20charset%3D%22ascii%22%0A%7C%20%20%20%3Cbody%3E"],"601dfa9502942deb8bf46a91c64f10f649bc1875":[async_test('html5lib_tests19.html 601dfa9502942deb8bf46a91c64f10f649bc1875'), "%3C%21doctype%20html%3E%3Cmeta%20http-equiv%3D%22content-type%22%20content%3D%22text/html%3Bcharset%3Dascii%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20content%3D%22text/html%3Bcharset%3Dascii%22%0A%7C%20%20%20%20%20%20%20http-equiv%3D%22content-type%22%0A%7C%20%20%20%3Cbody%3E"],"4b01442faf29563d3b736d235515f77c20c81863":[async_test('html5lib_tests19.html 4b01442faf29563d3b736d235515f77c20c81863'), "%3C%21doctype%20html%3E%3Chead%3E%3C%21--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa--%3E%3Cmeta%20charset%3D%22utf8%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3C%21--%20aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%20--%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20charset%3D%22utf8%22%0A%7C%20%20%20%3Cbody%3E"],"696a2b60681b0b6758f165a67e29a84b0f75a153":[async_test('html5lib_tests19.html 696a2b60681b0b6758f165a67e29a84b0f75a153'), "%3C%21doctype%20html%3E%3Chtml%20a%3Db%3E%3Chead%3E%3C/head%3E%3Chtml%20c%3Dd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20a%3D%22b%22%0A%7C%20%20%20c%3D%22d%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"7a48b98cbae5cd7cbbb90f138c0d12da6c4448b3":[async_test('html5lib_tests19.html 7a48b98cbae5cd7cbbb90f138c0d12da6c4448b3'), "%3C%21doctype%20html%3E%3Cimage/%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cimg%3E"],"d7693a0f2be68925250d3aa2cf295b1d1a60bf94":[async_test('html5lib_tests19.html d7693a0f2be68925250d3aa2cf295b1d1a60bf94'), "%3C%21doctype%20html%3Ea%3Ci%3Eb%3Ctable%3Ec%3Cb%3Ed%3C/i%3Ee%3C/b%3Ef", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22bc%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22de%22%0A%7C%20%20%20%20%20%20%20%22f%22%0A%7C%20%20%20%20%20%20%20%3Ctable%3E"],"9e4d91f02184de1b1e5d927144bb06d3bc78bb09":[async_test('html5lib_tests19.html 9e4d91f02184de1b1e5d927144bb06d3bc78bb09'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ci%3Ea%3Cb%3Eb%3Cdiv%3Ec%3Ca%3Ed%3C/i%3Ee%3C/b%3Ef", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22d%22%0A%7C%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22e%22%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%22f%22%0A%7C%20%20%20%20%20%3Ctable%3E"],"9655591702381a52fe0eb3224e63e2d8bfd735e8":[async_test('html5lib_tests19.html 9655591702381a52fe0eb3224e63e2d8bfd735e8'), "%3C%21doctype%20html%3E%3Ci%3Ea%3Cb%3Eb%3Cdiv%3Ec%3Ca%3Ed%3C/i%3Ee%3C/b%3Ef", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22d%22%0A%7C%20%20%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22e%22%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%22f%22"],"fe9aa1c8ec32796e26f3e58022f0e42dc365b5c7":[async_test('html5lib_tests19.html fe9aa1c8ec32796e26f3e58022f0e42dc365b5c7'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ci%3Ea%3Cb%3Eb%3Cdiv%3Ec%3C/i%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%3Ctable%3E"],"4c9ec04359c3e94d4a56d6932d289f0c4246d1ef":[async_test('html5lib_tests19.html 4c9ec04359c3e94d4a56d6932d289f0c4246d1ef'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ci%3Ea%3Cdiv%3Eb%3Ctr%3Ec%3Cb%3Ed%3C/i%3Ee", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%22d%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%22e%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"3fcc2f15951b3c3375c3e359cf7888c71187994a":[async_test('html5lib_tests19.html 3fcc2f15951b3c3375c3e359cf7888c71187994a'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ctd%3E%3Ctable%3E%3Ci%3Ea%3Cdiv%3Eb%3Cb%3Ec%3C/i%3Ed", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ci%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22d%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E"],"a94b35c317763de75150df6b436c7c153aeb8c51":[async_test('html5lib_tests19.html a94b35c317763de75150df6b436c7c153aeb8c51'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cbgsound%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbgsound%3E"],"173b990198dd8fd9534d7808817c19440b75d406":[async_test('html5lib_tests19.html 173b990198dd8fd9534d7808817c19440b75d406'), "%3C%21doctype%20html%3E%3Cbody%3E%3Cbasefont%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbasefont%3E"],"48ed5945491d4ad0c00acfd01c2060a459436d34":[async_test('html5lib_tests19.html 48ed5945491d4ad0c00acfd01c2060a459436d34'), "%3C%21doctype%20html%3E%3Ca%3E%3Cb%3E%3C/a%3E%3Cbasefont%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cbasefont%3E"],"392b8d4d25351467da961e4ab011a1d4e970b97a":[async_test('html5lib_tests19.html 392b8d4d25351467da961e4ab011a1d4e970b97a'), "%3C%21doctype%20html%3E%3Ca%3E%3Cb%3E%3C/a%3E%3Cbgsound%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cbgsound%3E"],"bd14373173ea3617610fc8154237f59f1a810733":[async_test('html5lib_tests19.html bd14373173ea3617610fc8154237f59f1a810733'), "%3C%21doctype%20html%3E%3Cfigcaption%3E%3Carticle%3E%3C/figcaption%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfigcaption%3E%0A%7C%20%20%20%20%20%20%20%3Carticle%3E%0A%7C%20%20%20%20%20%22a%22"],"db3c4ddb389a2b8f42ca6b3719007d4de2eccc41":[async_test('html5lib_tests19.html db3c4ddb389a2b8f42ca6b3719007d4de2eccc41'), "%3C%21doctype%20html%3E%3Csummary%3E%3Carticle%3E%3C/summary%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csummary%3E%0A%7C%20%20%20%20%20%20%20%3Carticle%3E%0A%7C%20%20%20%20%20%22a%22"],"c1741a62627b2e5bb1cfa2b2cd667f3f9f76157e":[async_test('html5lib_tests19.html c1741a62627b2e5bb1cfa2b2cd667f3f9f76157e'), "%3C%21doctype%20html%3E%3Cp%3E%3Ca%3E%3Cplaintext%3Eb", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%22b%22"],"0d6cf626790e9f06e30ceb6baf3004663b0247e7":[async_test('html5lib_tests19.html 0d6cf626790e9f06e30ceb6baf3004663b0247e7'), "%3C%21DOCTYPE%20html%3E%3Cdiv%3Ea%3Ca%3E%3C/div%3Eb%3Cp%3Ec%3C/p%3Ed", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%22b%22%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22c%22%0A%7C%20%20%20%20%20%20%20%22d%22"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests2.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests2.html
index a09d593..3f7b72a 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests2.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests2.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['e070301fb578bd639ecbc7ec720fa60222d05826','aaf24dabcb42470e447d241a40def0d136c12b93','b6c1142484570bb90c36e454ee193cca17bb618a','1977644a94de1a04245dfef3f3db69c7ac41aa6f','fb0d7207ed9fbc3fe5d1e0f85ad18c247dfb05a3','d662798ca6dd95a205069658396d0f3d78237233','1ec72d53c4c68f9ca56f037ec53a7dc261886131','2d58ae67534b42e52e34c6b2a275fcb30a878008','14836de42a7fb86b75fef03f08823f90d389b7f3','8ced679aed45a123b97a574f24fba909b65f94dd','932ff3ff2c75f7b28ef562dfa9c7cb208f0712d4','c863d867f843bd66c5303db1634931a36afd3ea9','2221f89de75008a31506b22756a5499bc6bda9bd','7471f6a45872ac6d70f69fc3f4e10b13c7c1ac45','47b9eaef1b5aad0e3963a8d415236fed12702d65','decb4ad6eac317f262b4b87c86b33d2d9d700e75','ffcb1856faa7e09cc892c0f5a4d3353716830784','a259db8ee062d858027148f92811ba0f5796e4b9','bf369032d1e6ebb52ab133e4c4b8c2e872349843','73b97cd984a62703ec54ec4a876ec32aa5fd3b8c','2db9616ed62fc2a26056f3395459869cf556974d','b59aa1c714892618eaccd51696658887fcbd2045','98818e7fda2506603bd208662613edb40297c2d3','e0c43080cf61c0696031bdb097bea4f2a647cfc2','f7753d80a422c40b5fa04d99e52d8ae83369757a','7cbd584aef9508a90c98f80040078149a92ec869','e0f7f130b1e3653dd06f10f3492e4f0bf4cd3cfa','4fb9b13eeb5d8a201884c572764a70477822f2d4','7ec82c93064966931ce76618a0cce4f275aafdaf','a8fb1cffc8683f0c47fdf9963e0d52c627343ff0','8dc47e70b94f2bea514ceaa51153ec1beeeda7ef','571719c0f9e1dae32ef993917b02c57f698be3d9','7f3afa5785d4b7ea37f8bae17226528f2a30e818','37918d1876724d3a8980920cf4cf2cbef2c3ac06','5da4e202a8962cacf567ce864873ddbff73f8217','4ca566310edc49450571677e8ef195883919ec2f','8a559c045c3a880e555d31de4dd3aa0b06930b73','3067a820b0195f9c08b8d0fe1dd7f8d800e10779','e1011849d36ebf9d1577c53d940a75c462dcb1e7','c9938e14b139e9c2af300bacd38f2f3cfca3fe58','0582a2e2c0eb00e0ba60b280187006c5e7de6991','478db7eafb3ac4a6abb8dbe083664c8d3ada35d8','c6abe422542794d7e8196d73283e562c309fe2e3','9fd0577023d0eb3662569333f5f231090439a217','a288ea4fde56fc652f4ec4db0b63af1ddfeac826','0c917166dc089cb23a100af2f07cbf95f164533a','60f3ef7971b3259c3d800da672d886b2db778276','341bdf232d96b774988ee3163c953f2581752335','84570bfd25f23f0f40e31ba0c6a08906a2676b6d','4dbef924230e654860aa288a28f6304a062b3faf','2e8a5d6aa8cb0011b6caa08a44cd8871e4b15b71','06e43760aeadae330ad5ba80c4b93952ba568b29','4e58f3f3c581dec50f939a660fd5b5828396dac4','693974a6cb0defd3e0b2d63b31d420f39c83d262','3e03ddf29af0af9c9ece091251f0c1c5e08a5e41','9a5211623fcdd9fc3ad2ea4addc608d7c2574b90','39f31f0fbfcc91157104d64ca081d4271bc7e838','86d793db69ce071e78a18c85f8345316f09e1790','182036d2ef28f86873aee09b15125c828179c1b4','2a818d5fd74c60ac2bb369fb2355b84edab31777','9f88d21c8b77696f7238064a4ee87931cc16a03f','1d00919bf0b2493dfee7422a24acee9026de5fff','0c48a9e7584ede9d13d606057202883c5cff3eab',];
+      var order = ['e070301fb578bd639ecbc7ec720fa60222d05826','aaf24dabcb42470e447d241a40def0d136c12b93','b6c1142484570bb90c36e454ee193cca17bb618a','1977644a94de1a04245dfef3f3db69c7ac41aa6f','fb0d7207ed9fbc3fe5d1e0f85ad18c247dfb05a3','d662798ca6dd95a205069658396d0f3d78237233','1ec72d53c4c68f9ca56f037ec53a7dc261886131','2d58ae67534b42e52e34c6b2a275fcb30a878008','14836de42a7fb86b75fef03f08823f90d389b7f3','8ced679aed45a123b97a574f24fba909b65f94dd','932ff3ff2c75f7b28ef562dfa9c7cb208f0712d4','c863d867f843bd66c5303db1634931a36afd3ea9','2221f89de75008a31506b22756a5499bc6bda9bd','7471f6a45872ac6d70f69fc3f4e10b13c7c1ac45','47b9eaef1b5aad0e3963a8d415236fed12702d65','decb4ad6eac317f262b4b87c86b33d2d9d700e75','ffcb1856faa7e09cc892c0f5a4d3353716830784','a259db8ee062d858027148f92811ba0f5796e4b9','bf369032d1e6ebb52ab133e4c4b8c2e872349843','73b97cd984a62703ec54ec4a876ec32aa5fd3b8c','2db9616ed62fc2a26056f3395459869cf556974d','b59aa1c714892618eaccd51696658887fcbd2045','98818e7fda2506603bd208662613edb40297c2d3','e0c43080cf61c0696031bdb097bea4f2a647cfc2','f7753d80a422c40b5fa04d99e52d8ae83369757a','7cbd584aef9508a90c98f80040078149a92ec869','e0f7f130b1e3653dd06f10f3492e4f0bf4cd3cfa','4fb9b13eeb5d8a201884c572764a70477822f2d4','7ec82c93064966931ce76618a0cce4f275aafdaf','a8fb1cffc8683f0c47fdf9963e0d52c627343ff0','8dc47e70b94f2bea514ceaa51153ec1beeeda7ef','571719c0f9e1dae32ef993917b02c57f698be3d9','7f3afa5785d4b7ea37f8bae17226528f2a30e818','37918d1876724d3a8980920cf4cf2cbef2c3ac06','5da4e202a8962cacf567ce864873ddbff73f8217','4ca566310edc49450571677e8ef195883919ec2f','8a559c045c3a880e555d31de4dd3aa0b06930b73','3067a820b0195f9c08b8d0fe1dd7f8d800e10779','e1011849d36ebf9d1577c53d940a75c462dcb1e7','c9938e14b139e9c2af300bacd38f2f3cfca3fe58','0582a2e2c0eb00e0ba60b280187006c5e7de6991','478db7eafb3ac4a6abb8dbe083664c8d3ada35d8','c6abe422542794d7e8196d73283e562c309fe2e3','9fd0577023d0eb3662569333f5f231090439a217','0c917166dc089cb23a100af2f07cbf95f164533a','60f3ef7971b3259c3d800da672d886b2db778276','341bdf232d96b774988ee3163c953f2581752335','84570bfd25f23f0f40e31ba0c6a08906a2676b6d','4dbef924230e654860aa288a28f6304a062b3faf','2e8a5d6aa8cb0011b6caa08a44cd8871e4b15b71','06e43760aeadae330ad5ba80c4b93952ba568b29','4e58f3f3c581dec50f939a660fd5b5828396dac4','693974a6cb0defd3e0b2d63b31d420f39c83d262','3e03ddf29af0af9c9ece091251f0c1c5e08a5e41','9a5211623fcdd9fc3ad2ea4addc608d7c2574b90','39f31f0fbfcc91157104d64ca081d4271bc7e838','86d793db69ce071e78a18c85f8345316f09e1790','182036d2ef28f86873aee09b15125c828179c1b4','2a818d5fd74c60ac2bb369fb2355b84edab31777','9f88d21c8b77696f7238064a4ee87931cc16a03f','1d00919bf0b2493dfee7422a24acee9026de5fff','0c48a9e7584ede9d13d606057202883c5cff3eab',];
       var tests = {
-          "e070301fb578bd639ecbc7ec720fa60222d05826":[async_test('html5lib_tests2.html e070301fb578bd639ecbc7ec720fa60222d05826'), "%3C%21DOCTYPE%20html%3ETest", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22Test%22"],"aaf24dabcb42470e447d241a40def0d136c12b93":[async_test('html5lib_tests2.html aaf24dabcb42470e447d241a40def0d136c12b93'), "%3Ctextarea%3Etest%3C/div%3Etest", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctextarea%3E%0A%7C%20%20%20%20%20%20%20%22test%3C/div%3Etest%22"],"b6c1142484570bb90c36e454ee193cca17bb618a":[async_test('html5lib_tests2.html b6c1142484570bb90c36e454ee193cca17bb618a'), "%3Ctable%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"1977644a94de1a04245dfef3f3db69c7ac41aa6f":[async_test('html5lib_tests2.html 1977644a94de1a04245dfef3f3db69c7ac41aa6f'), "%3Ctable%3E%3Ctd%3Etest%3C/tbody%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22test%22"],"fb0d7207ed9fbc3fe5d1e0f85ad18c247dfb05a3":[async_test('html5lib_tests2.html fb0d7207ed9fbc3fe5d1e0f85ad18c247dfb05a3'), "%3Cframe%3Etest", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22test%22"],"d662798ca6dd95a205069658396d0f3d78237233":[async_test('html5lib_tests2.html d662798ca6dd95a205069658396d0f3d78237233'), "%3C%21DOCTYPE%20html%3E%3Cframeset%3Etest", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"1ec72d53c4c68f9ca56f037ec53a7dc261886131":[async_test('html5lib_tests2.html 1ec72d53c4c68f9ca56f037ec53a7dc261886131'), "%3C%21DOCTYPE%20html%3E%3Cframeset%3E%20te%20st", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%22%20%20%22"],"2d58ae67534b42e52e34c6b2a275fcb30a878008":[async_test('html5lib_tests2.html 2d58ae67534b42e52e34c6b2a275fcb30a878008'), "%3C%21DOCTYPE%20html%3E%3Cframeset%3E%3C/frameset%3E%20te%20st", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%22%20%20%22"],"14836de42a7fb86b75fef03f08823f90d389b7f3":[async_test('html5lib_tests2.html 14836de42a7fb86b75fef03f08823f90d389b7f3'), "%3C%21DOCTYPE%20html%3E%3Cframeset%3E%3C%21DOCTYPE%20html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"8ced679aed45a123b97a574f24fba909b65f94dd":[async_test('html5lib_tests2.html 8ced679aed45a123b97a574f24fba909b65f94dd'), "%3C%21DOCTYPE%20html%3E%3Cfont%3E%3Cp%3E%3Cb%3Etest%3C/font%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22test%22"],"932ff3ff2c75f7b28ef562dfa9c7cb208f0712d4":[async_test('html5lib_tests2.html 932ff3ff2c75f7b28ef562dfa9c7cb208f0712d4'), "%3C%21DOCTYPE%20html%3E%3Cdt%3E%3Cdiv%3E%3Cdd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdt%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%3Cdd%3E"],"c863d867f843bd66c5303db1634931a36afd3ea9":[async_test('html5lib_tests2.html c863d867f843bd66c5303db1634931a36afd3ea9'), "%3Cscript%3E%3C/x", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%22%3C/x%22%0A%7C%20%20%20%3Cbody%3E"],"2221f89de75008a31506b22756a5499bc6bda9bd":[async_test('html5lib_tests2.html 2221f89de75008a31506b22756a5499bc6bda9bd'), "%3Ctable%3E%3Cplaintext%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E%0A%7C%20%20%20%20%20%20%20%22%3Ctd%3E%22%0A%7C%20%20%20%20%20%3Ctable%3E"],"7471f6a45872ac6d70f69fc3f4e10b13c7c1ac45":[async_test('html5lib_tests2.html 7471f6a45872ac6d70f69fc3f4e10b13c7c1ac45'), "%3Cplaintext%3E%3C/plaintext%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E%0A%7C%20%20%20%20%20%20%20%22%3C/plaintext%3E%22"],"47b9eaef1b5aad0e3963a8d415236fed12702d65":[async_test('html5lib_tests2.html 47b9eaef1b5aad0e3963a8d415236fed12702d65'), "%3C%21DOCTYPE%20html%3E%3Ctable%3E%3Ctr%3ETEST", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22TEST%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"decb4ad6eac317f262b4b87c86b33d2d9d700e75":[async_test('html5lib_tests2.html decb4ad6eac317f262b4b87c86b33d2d9d700e75'), "%3C%21DOCTYPE%20html%3E%3Cbody%20t1%3D1%3E%3Cbody%20t2%3D2%3E%3Cbody%20t3%3D3%20t4%3D4%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20t1%3D%221%22%0A%7C%20%20%20%20%20t2%3D%222%22%0A%7C%20%20%20%20%20t3%3D%223%22%0A%7C%20%20%20%20%20t4%3D%224%22"],"ffcb1856faa7e09cc892c0f5a4d3353716830784":[async_test('html5lib_tests2.html ffcb1856faa7e09cc892c0f5a4d3353716830784'), "%3C/b%20test", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"a259db8ee062d858027148f92811ba0f5796e4b9":[async_test('html5lib_tests2.html a259db8ee062d858027148f92811ba0f5796e4b9'), "%3C%21DOCTYPE%20html%3E%3C/b%20test%3Cb%20%26%3D%26amp%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22"],"bf369032d1e6ebb52ab133e4c4b8c2e872349843":[async_test('html5lib_tests2.html bf369032d1e6ebb52ab133e4c4b8c2e872349843'), "%3C%21doctypehtml%3E%3CscrIPt%20type%3Dtext/x-foobar%3Bbaz%3EX%3C/SCRipt", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20type%3D%22text/x-foobar%3Bbaz%22%0A%7C%20%20%20%20%20%20%20%22X%3C/SCRipt%22%0A%7C%20%20%20%3Cbody%3E"],"73b97cd984a62703ec54ec4a876ec32aa5fd3b8c":[async_test('html5lib_tests2.html 73b97cd984a62703ec54ec4a876ec32aa5fd3b8c'), "%26", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%22"],"2db9616ed62fc2a26056f3395459869cf556974d":[async_test('html5lib_tests2.html 2db9616ed62fc2a26056f3395459869cf556974d'), "%26%23", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%23%22"],"b59aa1c714892618eaccd51696658887fcbd2045":[async_test('html5lib_tests2.html b59aa1c714892618eaccd51696658887fcbd2045'), "%26%23X", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%23X%22"],"98818e7fda2506603bd208662613edb40297c2d3":[async_test('html5lib_tests2.html 98818e7fda2506603bd208662613edb40297c2d3'), "%26%23x", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%23x%22"],"e0c43080cf61c0696031bdb097bea4f2a647cfc2":[async_test('html5lib_tests2.html e0c43080cf61c0696031bdb097bea4f2a647cfc2'), "%26%2345", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22-%22"],"f7753d80a422c40b5fa04d99e52d8ae83369757a":[async_test('html5lib_tests2.html f7753d80a422c40b5fa04d99e52d8ae83369757a'), "%26x-test", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26x-test%22"],"7cbd584aef9508a90c98f80040078149a92ec869":[async_test('html5lib_tests2.html 7cbd584aef9508a90c98f80040078149a92ec869'), "%3C%21doctypehtml%3E%3Cp%3E%3Cli%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cli%3E"],"e0f7f130b1e3653dd06f10f3492e4f0bf4cd3cfa":[async_test('html5lib_tests2.html e0f7f130b1e3653dd06f10f3492e4f0bf4cd3cfa'), "%3C%21doctypehtml%3E%3Cp%3E%3Cdt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cdt%3E"],"4fb9b13eeb5d8a201884c572764a70477822f2d4":[async_test('html5lib_tests2.html 4fb9b13eeb5d8a201884c572764a70477822f2d4'), "%3C%21doctypehtml%3E%3Cp%3E%3Cdd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cdd%3E"],"7ec82c93064966931ce76618a0cce4f275aafdaf":[async_test('html5lib_tests2.html 7ec82c93064966931ce76618a0cce4f275aafdaf'), "%3C%21doctypehtml%3E%3Cp%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cform%3E"],"a8fb1cffc8683f0c47fdf9963e0d52c627343ff0":[async_test('html5lib_tests2.html a8fb1cffc8683f0c47fdf9963e0d52c627343ff0'), "%3C%21DOCTYPE%20html%3E%3Cp%3E%3C/P%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%22X%22"],"8dc47e70b94f2bea514ceaa51153ec1beeeda7ef":[async_test('html5lib_tests2.html 8dc47e70b94f2bea514ceaa51153ec1beeeda7ef'), "%26AMP", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%22"],"571719c0f9e1dae32ef993917b02c57f698be3d9":[async_test('html5lib_tests2.html 571719c0f9e1dae32ef993917b02c57f698be3d9'), "%26AMp%3B", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26AMp%3B%22"],"7f3afa5785d4b7ea37f8bae17226528f2a30e818":[async_test('html5lib_tests2.html 7f3afa5785d4b7ea37f8bae17226528f2a30e818'), "%3C%21DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody%3E%3CthisISasillyTESTelementNameToMakeSureCrazyTagNamesArePARSEDcorrectLY%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cthisisasillytestelementnametomakesurecrazytagnamesareparsedcorrectly%3E"],"37918d1876724d3a8980920cf4cf2cbef2c3ac06":[async_test('html5lib_tests2.html 37918d1876724d3a8980920cf4cf2cbef2c3ac06'), "%3C%21DOCTYPE%20html%3EX%3C/body%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22XX%22"],"5da4e202a8962cacf567ce864873ddbff73f8217":[async_test('html5lib_tests2.html 5da4e202a8962cacf567ce864873ddbff73f8217'), "%3C%21DOCTYPE%20html%3E%3C%21--%20X", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20%20X%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"4ca566310edc49450571677e8ef195883919ec2f":[async_test('html5lib_tests2.html 4ca566310edc49450571677e8ef195883919ec2f'), "%3C%21DOCTYPE%20html%3E%3Ctable%3E%3Ccaption%3Etest%20TEST%3C/caption%3E%3Ctd%3Etest", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ccaption%3E%0A%7C%20%20%20%20%20%20%20%20%20%22test%20TEST%22%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22test%22"],"8a559c045c3a880e555d31de4dd3aa0b06930b73":[async_test('html5lib_tests2.html 8a559c045c3a880e555d31de4dd3aa0b06930b73'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Coption%3E%3Coptgroup%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E"],"3067a820b0195f9c08b8d0fe1dd7f8d800e10779":[async_test('html5lib_tests2.html 3067a820b0195f9c08b8d0fe1dd7f8d800e10779'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Coptgroup%3E%3Coption%3E%3C/optgroup%3E%3Coption%3E%3Cselect%3E%3Coption%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%3Coption%3E"],"e1011849d36ebf9d1577c53d940a75c462dcb1e7":[async_test('html5lib_tests2.html e1011849d36ebf9d1577c53d940a75c462dcb1e7'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Coptgroup%3E%3Coption%3E%3Coptgroup%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E"],"c9938e14b139e9c2af300bacd38f2f3cfca3fe58":[async_test('html5lib_tests2.html c9938e14b139e9c2af300bacd38f2f3cfca3fe58'), "%3C%21DOCTYPE%20html%3E%3Cdatalist%3E%3Coption%3Efoo%3C/datalist%3Ebar", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdatalist%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%22foo%22%0A%7C%20%20%20%20%20%22bar%22"],"0582a2e2c0eb00e0ba60b280187006c5e7de6991":[async_test('html5lib_tests2.html 0582a2e2c0eb00e0ba60b280187006c5e7de6991'), "%3C%21DOCTYPE%20html%3E%3Cfont%3E%3Cinput%3E%3Cinput%3E%3C/font%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E"],"478db7eafb3ac4a6abb8dbe083664c8d3ada35d8":[async_test('html5lib_tests2.html 478db7eafb3ac4a6abb8dbe083664c8d3ada35d8'), "%3C%21DOCTYPE%20html%3E%3C%21--%20XXX%20-%20XXX%20--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20%20XXX%20-%20XXX%20%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"c6abe422542794d7e8196d73283e562c309fe2e3":[async_test('html5lib_tests2.html c6abe422542794d7e8196d73283e562c309fe2e3'), "%3C%21DOCTYPE%20html%3E%3C%21--%20XXX%20-%20XXX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20%20XXX%20-%20XXX%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"9fd0577023d0eb3662569333f5f231090439a217":[async_test('html5lib_tests2.html 9fd0577023d0eb3662569333f5f231090439a217'), "%3C%21DOCTYPE%20html%3E%3C%21--%20XXX%20-%20XXX%20-%20XXX%20--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20%20XXX%20-%20XXX%20-%20XXX%20%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"a288ea4fde56fc652f4ec4db0b63af1ddfeac826":[async_test('html5lib_tests2.html a288ea4fde56fc652f4ec4db0b63af1ddfeac826'), "%3Cisindex%20test%3Dx%20name%3Dx%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%20%20%3Clabel%3E%0A%7C%20%20%20%20%20%20%20%20%20%22This%20is%20a%20searchable%20index.%20Enter%20search%20keywords%3A%20%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20name%3D%22isindex%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20test%3D%22x%22%0A%7C%20%20%20%20%20%20%20%3Chr%3E"],"0c917166dc089cb23a100af2f07cbf95f164533a":[async_test('html5lib_tests2.html 0c917166dc089cb23a100af2f07cbf95f164533a'), "test%0Atest", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22test%0Atest%22"],"60f3ef7971b3259c3d800da672d886b2db778276":[async_test('html5lib_tests2.html 60f3ef7971b3259c3d800da672d886b2db778276'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ctitle%3Etest%3C/body%3E%3C/title%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22test%3C/body%3E%22"],"341bdf232d96b774988ee3163c953f2581752335":[async_test('html5lib_tests2.html 341bdf232d96b774988ee3163c953f2581752335'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ctitle%3EX%3C/title%3E%3Cmeta%20name%3Dz%3E%3Clink%20rel%3Dfoo%3E%3Cstyle%3E%0Ax%20%7B%20content%3A%22%3C/style%22%20%7D%20%3C/style%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20name%3D%22z%22%0A%7C%20%20%20%20%20%3Clink%3E%0A%7C%20%20%20%20%20%20%20rel%3D%22foo%22%0A%7C%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%22%0Ax%20%7B%20content%3A%22%3C/style%22%20%7D%20%22"],"84570bfd25f23f0f40e31ba0c6a08906a2676b6d":[async_test('html5lib_tests2.html 84570bfd25f23f0f40e31ba0c6a08906a2676b6d'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Coptgroup%3E%3C/optgroup%3E%3C/select%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E"],"4dbef924230e654860aa288a28f6304a062b3faf":[async_test('html5lib_tests2.html 4dbef924230e654860aa288a28f6304a062b3faf'), "%20%0A%20", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"2e8a5d6aa8cb0011b6caa08a44cd8871e4b15b71":[async_test('html5lib_tests2.html 2e8a5d6aa8cb0011b6caa08a44cd8871e4b15b71'), "%3C%21DOCTYPE%20html%3E%20%20%3Chtml%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"06e43760aeadae330ad5ba80c4b93952ba568b29":[async_test('html5lib_tests2.html 06e43760aeadae330ad5ba80c4b93952ba568b29'), "%3C%21DOCTYPE%20html%3E%3Cscript%3E%0A%3C/script%3E%20%20%3Ctitle%3Ex%3C/title%3E%20%20%3C/head%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%3Cbody%3E"],"4e58f3f3c581dec50f939a660fd5b5828396dac4":[async_test('html5lib_tests2.html 4e58f3f3c581dec50f939a660fd5b5828396dac4'), "%3C%21DOCTYPE%20html%3E%3Chtml%3E%3Cbody%3E%3Chtml%20id%3Dx%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20id%3D%22x%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"693974a6cb0defd3e0b2d63b31d420f39c83d262":[async_test('html5lib_tests2.html 693974a6cb0defd3e0b2d63b31d420f39c83d262'), "%3C%21DOCTYPE%20html%3EX%3C/body%3E%3Chtml%20id%3D%22x%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20id%3D%22x%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22"],"3e03ddf29af0af9c9ece091251f0c1c5e08a5e41":[async_test('html5lib_tests2.html 3e03ddf29af0af9c9ece091251f0c1c5e08a5e41'), "%3C%21DOCTYPE%20html%3E%3Chead%3E%3Chtml%20id%3Dx%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20id%3D%22x%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"9a5211623fcdd9fc3ad2ea4addc608d7c2574b90":[async_test('html5lib_tests2.html 9a5211623fcdd9fc3ad2ea4addc608d7c2574b90'), "%3C%21DOCTYPE%20html%3EX%3C/html%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22XX%22"],"39f31f0fbfcc91157104d64ca081d4271bc7e838":[async_test('html5lib_tests2.html 39f31f0fbfcc91157104d64ca081d4271bc7e838'), "%3C%21DOCTYPE%20html%3EX%3C/html%3E%20", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%20%22"],"86d793db69ce071e78a18c85f8345316f09e1790":[async_test('html5lib_tests2.html 86d793db69ce071e78a18c85f8345316f09e1790'), "%3C%21DOCTYPE%20html%3EX%3C/html%3E%3Cp%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%22X%22"],"182036d2ef28f86873aee09b15125c828179c1b4":[async_test('html5lib_tests2.html 182036d2ef28f86873aee09b15125c828179c1b4'), "%3C%21DOCTYPE%20html%3EX%3Cp/x/y/z%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20x%3D%22%22%0A%7C%20%20%20%20%20%20%20y%3D%22%22%0A%7C%20%20%20%20%20%20%20z%3D%22%22"],"2a818d5fd74c60ac2bb369fb2355b84edab31777":[async_test('html5lib_tests2.html 2a818d5fd74c60ac2bb369fb2355b84edab31777'), "%3C%21DOCTYPE%20html%3E%3C%21--x--", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20x%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"9f88d21c8b77696f7238064a4ee87931cc16a03f":[async_test('html5lib_tests2.html 9f88d21c8b77696f7238064a4ee87931cc16a03f'), "%3C%21DOCTYPE%20html%3E%3Ctable%3E%3Ctr%3E%3Ctd%3E%3C/p%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E"],"1d00919bf0b2493dfee7422a24acee9026de5fff":[async_test('html5lib_tests2.html 1d00919bf0b2493dfee7422a24acee9026de5fff'), "%3C%21DOCTYPE%20%3C%21DOCTYPE%20HTML%3E%3E%3C%21--%3C%21--x--%3E--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20%3C%21doctype%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%3E%22%0A%7C%20%20%20%20%20%3C%21--%20%3C%21--x%20--%3E%0A%7C%20%20%20%20%20%22--%3E%22"],"0c48a9e7584ede9d13d606057202883c5cff3eab":[async_test('html5lib_tests2.html 0c48a9e7584ede9d13d606057202883c5cff3eab'), "%3C%21doctype%20html%3E%3Cdiv%3E%3Cform%3E%3C/form%3E%3Cdiv%3E%3C/div%3E%3C/div%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E"],
+          "e070301fb578bd639ecbc7ec720fa60222d05826":[async_test('html5lib_tests2.html e070301fb578bd639ecbc7ec720fa60222d05826'), "%3C%21DOCTYPE%20html%3ETest", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22Test%22"],"aaf24dabcb42470e447d241a40def0d136c12b93":[async_test('html5lib_tests2.html aaf24dabcb42470e447d241a40def0d136c12b93'), "%3Ctextarea%3Etest%3C/div%3Etest", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctextarea%3E%0A%7C%20%20%20%20%20%20%20%22test%3C/div%3Etest%22"],"b6c1142484570bb90c36e454ee193cca17bb618a":[async_test('html5lib_tests2.html b6c1142484570bb90c36e454ee193cca17bb618a'), "%3Ctable%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"1977644a94de1a04245dfef3f3db69c7ac41aa6f":[async_test('html5lib_tests2.html 1977644a94de1a04245dfef3f3db69c7ac41aa6f'), "%3Ctable%3E%3Ctd%3Etest%3C/tbody%3E%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22test%22"],"fb0d7207ed9fbc3fe5d1e0f85ad18c247dfb05a3":[async_test('html5lib_tests2.html fb0d7207ed9fbc3fe5d1e0f85ad18c247dfb05a3'), "%3Cframe%3Etest", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22test%22"],"d662798ca6dd95a205069658396d0f3d78237233":[async_test('html5lib_tests2.html d662798ca6dd95a205069658396d0f3d78237233'), "%3C%21DOCTYPE%20html%3E%3Cframeset%3Etest", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"1ec72d53c4c68f9ca56f037ec53a7dc261886131":[async_test('html5lib_tests2.html 1ec72d53c4c68f9ca56f037ec53a7dc261886131'), "%3C%21DOCTYPE%20html%3E%3Cframeset%3E%20te%20st", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%22%20%20%22"],"2d58ae67534b42e52e34c6b2a275fcb30a878008":[async_test('html5lib_tests2.html 2d58ae67534b42e52e34c6b2a275fcb30a878008'), "%3C%21DOCTYPE%20html%3E%3Cframeset%3E%3C/frameset%3E%20te%20st", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%22%20%20%22"],"14836de42a7fb86b75fef03f08823f90d389b7f3":[async_test('html5lib_tests2.html 14836de42a7fb86b75fef03f08823f90d389b7f3'), "%3C%21DOCTYPE%20html%3E%3Cframeset%3E%3C%21DOCTYPE%20html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"8ced679aed45a123b97a574f24fba909b65f94dd":[async_test('html5lib_tests2.html 8ced679aed45a123b97a574f24fba909b65f94dd'), "%3C%21DOCTYPE%20html%3E%3Cfont%3E%3Cp%3E%3Cb%3Etest%3C/font%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22test%22"],"932ff3ff2c75f7b28ef562dfa9c7cb208f0712d4":[async_test('html5lib_tests2.html 932ff3ff2c75f7b28ef562dfa9c7cb208f0712d4'), "%3C%21DOCTYPE%20html%3E%3Cdt%3E%3Cdiv%3E%3Cdd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdt%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%3Cdd%3E"],"c863d867f843bd66c5303db1634931a36afd3ea9":[async_test('html5lib_tests2.html c863d867f843bd66c5303db1634931a36afd3ea9'), "%3Cscript%3E%3C/x", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%22%3C/x%22%0A%7C%20%20%20%3Cbody%3E"],"2221f89de75008a31506b22756a5499bc6bda9bd":[async_test('html5lib_tests2.html 2221f89de75008a31506b22756a5499bc6bda9bd'), "%3Ctable%3E%3Cplaintext%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E%0A%7C%20%20%20%20%20%20%20%22%3Ctd%3E%22%0A%7C%20%20%20%20%20%3Ctable%3E"],"7471f6a45872ac6d70f69fc3f4e10b13c7c1ac45":[async_test('html5lib_tests2.html 7471f6a45872ac6d70f69fc3f4e10b13c7c1ac45'), "%3Cplaintext%3E%3C/plaintext%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E%0A%7C%20%20%20%20%20%20%20%22%3C/plaintext%3E%22"],"47b9eaef1b5aad0e3963a8d415236fed12702d65":[async_test('html5lib_tests2.html 47b9eaef1b5aad0e3963a8d415236fed12702d65'), "%3C%21DOCTYPE%20html%3E%3Ctable%3E%3Ctr%3ETEST", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22TEST%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"decb4ad6eac317f262b4b87c86b33d2d9d700e75":[async_test('html5lib_tests2.html decb4ad6eac317f262b4b87c86b33d2d9d700e75'), "%3C%21DOCTYPE%20html%3E%3Cbody%20t1%3D1%3E%3Cbody%20t2%3D2%3E%3Cbody%20t3%3D3%20t4%3D4%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20t1%3D%221%22%0A%7C%20%20%20%20%20t2%3D%222%22%0A%7C%20%20%20%20%20t3%3D%223%22%0A%7C%20%20%20%20%20t4%3D%224%22"],"ffcb1856faa7e09cc892c0f5a4d3353716830784":[async_test('html5lib_tests2.html ffcb1856faa7e09cc892c0f5a4d3353716830784'), "%3C/b%20test", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"a259db8ee062d858027148f92811ba0f5796e4b9":[async_test('html5lib_tests2.html a259db8ee062d858027148f92811ba0f5796e4b9'), "%3C%21DOCTYPE%20html%3E%3C/b%20test%3Cb%20%26%3D%26amp%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22"],"bf369032d1e6ebb52ab133e4c4b8c2e872349843":[async_test('html5lib_tests2.html bf369032d1e6ebb52ab133e4c4b8c2e872349843'), "%3C%21doctypehtml%3E%3CscrIPt%20type%3Dtext/x-foobar%3Bbaz%3EX%3C/SCRipt", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20type%3D%22text/x-foobar%3Bbaz%22%0A%7C%20%20%20%20%20%20%20%22X%3C/SCRipt%22%0A%7C%20%20%20%3Cbody%3E"],"73b97cd984a62703ec54ec4a876ec32aa5fd3b8c":[async_test('html5lib_tests2.html 73b97cd984a62703ec54ec4a876ec32aa5fd3b8c'), "%26", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%22"],"2db9616ed62fc2a26056f3395459869cf556974d":[async_test('html5lib_tests2.html 2db9616ed62fc2a26056f3395459869cf556974d'), "%26%23", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%23%22"],"b59aa1c714892618eaccd51696658887fcbd2045":[async_test('html5lib_tests2.html b59aa1c714892618eaccd51696658887fcbd2045'), "%26%23X", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%23X%22"],"98818e7fda2506603bd208662613edb40297c2d3":[async_test('html5lib_tests2.html 98818e7fda2506603bd208662613edb40297c2d3'), "%26%23x", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%23x%22"],"e0c43080cf61c0696031bdb097bea4f2a647cfc2":[async_test('html5lib_tests2.html e0c43080cf61c0696031bdb097bea4f2a647cfc2'), "%26%2345", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22-%22"],"f7753d80a422c40b5fa04d99e52d8ae83369757a":[async_test('html5lib_tests2.html f7753d80a422c40b5fa04d99e52d8ae83369757a'), "%26x-test", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26x-test%22"],"7cbd584aef9508a90c98f80040078149a92ec869":[async_test('html5lib_tests2.html 7cbd584aef9508a90c98f80040078149a92ec869'), "%3C%21doctypehtml%3E%3Cp%3E%3Cli%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cli%3E"],"e0f7f130b1e3653dd06f10f3492e4f0bf4cd3cfa":[async_test('html5lib_tests2.html e0f7f130b1e3653dd06f10f3492e4f0bf4cd3cfa'), "%3C%21doctypehtml%3E%3Cp%3E%3Cdt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cdt%3E"],"4fb9b13eeb5d8a201884c572764a70477822f2d4":[async_test('html5lib_tests2.html 4fb9b13eeb5d8a201884c572764a70477822f2d4'), "%3C%21doctypehtml%3E%3Cp%3E%3Cdd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cdd%3E"],"7ec82c93064966931ce76618a0cce4f275aafdaf":[async_test('html5lib_tests2.html 7ec82c93064966931ce76618a0cce4f275aafdaf'), "%3C%21doctypehtml%3E%3Cp%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cform%3E"],"a8fb1cffc8683f0c47fdf9963e0d52c627343ff0":[async_test('html5lib_tests2.html a8fb1cffc8683f0c47fdf9963e0d52c627343ff0'), "%3C%21DOCTYPE%20html%3E%3Cp%3E%3C/P%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%22X%22"],"8dc47e70b94f2bea514ceaa51153ec1beeeda7ef":[async_test('html5lib_tests2.html 8dc47e70b94f2bea514ceaa51153ec1beeeda7ef'), "%26AMP", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26%22"],"571719c0f9e1dae32ef993917b02c57f698be3d9":[async_test('html5lib_tests2.html 571719c0f9e1dae32ef993917b02c57f698be3d9'), "%26AMp%3B", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%26AMp%3B%22"],"7f3afa5785d4b7ea37f8bae17226528f2a30e818":[async_test('html5lib_tests2.html 7f3afa5785d4b7ea37f8bae17226528f2a30e818'), "%3C%21DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody%3E%3CthisISasillyTESTelementNameToMakeSureCrazyTagNamesArePARSEDcorrectLY%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cthisisasillytestelementnametomakesurecrazytagnamesareparsedcorrectly%3E"],"37918d1876724d3a8980920cf4cf2cbef2c3ac06":[async_test('html5lib_tests2.html 37918d1876724d3a8980920cf4cf2cbef2c3ac06'), "%3C%21DOCTYPE%20html%3EX%3C/body%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22XX%22"],"5da4e202a8962cacf567ce864873ddbff73f8217":[async_test('html5lib_tests2.html 5da4e202a8962cacf567ce864873ddbff73f8217'), "%3C%21DOCTYPE%20html%3E%3C%21--%20X", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20%20X%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"4ca566310edc49450571677e8ef195883919ec2f":[async_test('html5lib_tests2.html 4ca566310edc49450571677e8ef195883919ec2f'), "%3C%21DOCTYPE%20html%3E%3Ctable%3E%3Ccaption%3Etest%20TEST%3C/caption%3E%3Ctd%3Etest", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ccaption%3E%0A%7C%20%20%20%20%20%20%20%20%20%22test%20TEST%22%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22test%22"],"8a559c045c3a880e555d31de4dd3aa0b06930b73":[async_test('html5lib_tests2.html 8a559c045c3a880e555d31de4dd3aa0b06930b73'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Coption%3E%3Coptgroup%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E"],"3067a820b0195f9c08b8d0fe1dd7f8d800e10779":[async_test('html5lib_tests2.html 3067a820b0195f9c08b8d0fe1dd7f8d800e10779'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Coptgroup%3E%3Coption%3E%3C/optgroup%3E%3Coption%3E%3Cselect%3E%3Coption%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%3Coption%3E"],"e1011849d36ebf9d1577c53d940a75c462dcb1e7":[async_test('html5lib_tests2.html e1011849d36ebf9d1577c53d940a75c462dcb1e7'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Coptgroup%3E%3Coption%3E%3Coptgroup%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E"],"c9938e14b139e9c2af300bacd38f2f3cfca3fe58":[async_test('html5lib_tests2.html c9938e14b139e9c2af300bacd38f2f3cfca3fe58'), "%3C%21DOCTYPE%20html%3E%3Cdatalist%3E%3Coption%3Efoo%3C/datalist%3Ebar", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdatalist%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%22foo%22%0A%7C%20%20%20%20%20%22bar%22"],"0582a2e2c0eb00e0ba60b280187006c5e7de6991":[async_test('html5lib_tests2.html 0582a2e2c0eb00e0ba60b280187006c5e7de6991'), "%3C%21DOCTYPE%20html%3E%3Cfont%3E%3Cinput%3E%3Cinput%3E%3C/font%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E"],"478db7eafb3ac4a6abb8dbe083664c8d3ada35d8":[async_test('html5lib_tests2.html 478db7eafb3ac4a6abb8dbe083664c8d3ada35d8'), "%3C%21DOCTYPE%20html%3E%3C%21--%20XXX%20-%20XXX%20--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20%20XXX%20-%20XXX%20%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"c6abe422542794d7e8196d73283e562c309fe2e3":[async_test('html5lib_tests2.html c6abe422542794d7e8196d73283e562c309fe2e3'), "%3C%21DOCTYPE%20html%3E%3C%21--%20XXX%20-%20XXX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20%20XXX%20-%20XXX%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"9fd0577023d0eb3662569333f5f231090439a217":[async_test('html5lib_tests2.html 9fd0577023d0eb3662569333f5f231090439a217'), "%3C%21DOCTYPE%20html%3E%3C%21--%20XXX%20-%20XXX%20-%20XXX%20--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20%20XXX%20-%20XXX%20-%20XXX%20%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"0c917166dc089cb23a100af2f07cbf95f164533a":[async_test('html5lib_tests2.html 0c917166dc089cb23a100af2f07cbf95f164533a'), "test%0Atest", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22test%0Atest%22"],"60f3ef7971b3259c3d800da672d886b2db778276":[async_test('html5lib_tests2.html 60f3ef7971b3259c3d800da672d886b2db778276'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ctitle%3Etest%3C/body%3E%3C/title%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22test%3C/body%3E%22"],"341bdf232d96b774988ee3163c953f2581752335":[async_test('html5lib_tests2.html 341bdf232d96b774988ee3163c953f2581752335'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ctitle%3EX%3C/title%3E%3Cmeta%20name%3Dz%3E%3Clink%20rel%3Dfoo%3E%3Cstyle%3E%0Ax%20%7B%20content%3A%22%3C/style%22%20%7D%20%3C/style%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20name%3D%22z%22%0A%7C%20%20%20%20%20%3Clink%3E%0A%7C%20%20%20%20%20%20%20rel%3D%22foo%22%0A%7C%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%22%0Ax%20%7B%20content%3A%22%3C/style%22%20%7D%20%22"],"84570bfd25f23f0f40e31ba0c6a08906a2676b6d":[async_test('html5lib_tests2.html 84570bfd25f23f0f40e31ba0c6a08906a2676b6d'), "%3C%21DOCTYPE%20html%3E%3Cselect%3E%3Coptgroup%3E%3C/optgroup%3E%3C/select%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coptgroup%3E"],"4dbef924230e654860aa288a28f6304a062b3faf":[async_test('html5lib_tests2.html 4dbef924230e654860aa288a28f6304a062b3faf'), "%20%0A%20", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"2e8a5d6aa8cb0011b6caa08a44cd8871e4b15b71":[async_test('html5lib_tests2.html 2e8a5d6aa8cb0011b6caa08a44cd8871e4b15b71'), "%3C%21DOCTYPE%20html%3E%20%20%3Chtml%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"06e43760aeadae330ad5ba80c4b93952ba568b29":[async_test('html5lib_tests2.html 06e43760aeadae330ad5ba80c4b93952ba568b29'), "%3C%21DOCTYPE%20html%3E%3Cscript%3E%0A%3C/script%3E%20%20%3Ctitle%3Ex%3C/title%3E%20%20%3C/head%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%3Cbody%3E"],"4e58f3f3c581dec50f939a660fd5b5828396dac4":[async_test('html5lib_tests2.html 4e58f3f3c581dec50f939a660fd5b5828396dac4'), "%3C%21DOCTYPE%20html%3E%3Chtml%3E%3Cbody%3E%3Chtml%20id%3Dx%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20id%3D%22x%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"693974a6cb0defd3e0b2d63b31d420f39c83d262":[async_test('html5lib_tests2.html 693974a6cb0defd3e0b2d63b31d420f39c83d262'), "%3C%21DOCTYPE%20html%3EX%3C/body%3E%3Chtml%20id%3D%22x%22%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20id%3D%22x%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22"],"3e03ddf29af0af9c9ece091251f0c1c5e08a5e41":[async_test('html5lib_tests2.html 3e03ddf29af0af9c9ece091251f0c1c5e08a5e41'), "%3C%21DOCTYPE%20html%3E%3Chead%3E%3Chtml%20id%3Dx%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20id%3D%22x%22%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"9a5211623fcdd9fc3ad2ea4addc608d7c2574b90":[async_test('html5lib_tests2.html 9a5211623fcdd9fc3ad2ea4addc608d7c2574b90'), "%3C%21DOCTYPE%20html%3EX%3C/html%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22XX%22"],"39f31f0fbfcc91157104d64ca081d4271bc7e838":[async_test('html5lib_tests2.html 39f31f0fbfcc91157104d64ca081d4271bc7e838'), "%3C%21DOCTYPE%20html%3EX%3C/html%3E%20", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%20%22"],"86d793db69ce071e78a18c85f8345316f09e1790":[async_test('html5lib_tests2.html 86d793db69ce071e78a18c85f8345316f09e1790'), "%3C%21DOCTYPE%20html%3EX%3C/html%3E%3Cp%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%22X%22"],"182036d2ef28f86873aee09b15125c828179c1b4":[async_test('html5lib_tests2.html 182036d2ef28f86873aee09b15125c828179c1b4'), "%3C%21DOCTYPE%20html%3EX%3Cp/x/y/z%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20x%3D%22%22%0A%7C%20%20%20%20%20%20%20y%3D%22%22%0A%7C%20%20%20%20%20%20%20z%3D%22%22"],"2a818d5fd74c60ac2bb369fb2355b84edab31777":[async_test('html5lib_tests2.html 2a818d5fd74c60ac2bb369fb2355b84edab31777'), "%3C%21DOCTYPE%20html%3E%3C%21--x--", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3C%21--%20x%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"9f88d21c8b77696f7238064a4ee87931cc16a03f":[async_test('html5lib_tests2.html 9f88d21c8b77696f7238064a4ee87931cc16a03f'), "%3C%21DOCTYPE%20html%3E%3Ctable%3E%3Ctr%3E%3Ctd%3E%3C/p%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E"],"1d00919bf0b2493dfee7422a24acee9026de5fff":[async_test('html5lib_tests2.html 1d00919bf0b2493dfee7422a24acee9026de5fff'), "%3C%21DOCTYPE%20%3C%21DOCTYPE%20HTML%3E%3E%3C%21--%3C%21--x--%3E--%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20%3C%21doctype%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%3E%22%0A%7C%20%20%20%20%20%3C%21--%20%3C%21--x%20--%3E%0A%7C%20%20%20%20%20%22--%3E%22"],"0c48a9e7584ede9d13d606057202883c5cff3eab":[async_test('html5lib_tests2.html 0c48a9e7584ede9d13d606057202883c5cff3eab'), "%3C%21doctype%20html%3E%3Cdiv%3E%3Cform%3E%3C/form%3E%3Cdiv%3E%3C/div%3E%3C/div%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests20.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests20.html
index 19c904f..778017d 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests20.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests20.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['cbb5f28bedf4361156ef3c9c37e314c6479be137','e108a4952601b4664098344189c875934ea2f7ab','8ecd0d9e2580f78ff920821bd334bd8d04d165e5','ff10749b8b1aca1fba5d07ba86f49612be43caf9','323a6d9f8d2f74e7e5b88599a87dc5673fb7a0b4','bb36fb89d118b55c66f17b24ffff0ca09ccc939b','3fed75e1a7f46a6e2a74a078bfd955e7de05de4f','8cb9d8f92ba130618646d6fd1f307ca73f4e4add','2b9e6cb75876b4a33b77ae4b1bd3ef5e73c4a40e','f95c6bf3f935fad9fc354f4cf6e0161d6ebfb08a','0b07b135bf8399742cc9e6f3d14b2ea32e3354d3','076d3588e85ce9566d9575d1564e72e8480fadc8','dfad8fc515d74c19bad1ab72e7a03d59a11c7778','7ff774f225899091d6d64e5512ada13ce32dd72a','2fd8cab5e3cc4635be76e2d430ad6fe6e79b8167','c7399a2e531694b47b436bd153823f60bba9071e','bc4092e0e1aaa4b97464005963345b4b38e1f2a1','d85e49fc5be07a699f3930464996d7ddb6a8e8bd','09cf43bae3a4d875da56c67a46cf79102b20b456','aa2a707a627408758a0ee845896ef088d6136013','bb0737ce6cdbbcc055771e2400afda545d58778f','454bb6d0471536f7b91793ddbc786761b5733902','3c8ff013bf2e80392671760c8d444730b1923c0a','9a4f0cd0bdc672beb1c1c821599a11fc8a3d139d','f5ca3a789b7451da3e6030443aee6fae734fc7a1','ca8826661175c3a1ff7c6f1ebbfe646b238deb75','9e30ae7bbd1193deb0d3599c071960d395ca01f7','4417ddedee8e753fd6e911192458168d3b77d1e8','2de333e449ca13c462832e799e13795e2cf6e3e4','23d4d0aee62db4adc7381010d80776270a6db47b','5463426618ff46188d19595aa1c7fdd86c6909b3','2649b566bd2bccc59813286d647269ad251e2fdf','5df7907b99976e4051d1dd433e2bdbeb4ce200e3','a7e70930137ff8338778253ac93dc66f11eef966','b92100bddc318e13996fbe96c087c35152cbb4e3','f55b68de8cf9ec17e0512a6caae94e0fbf151260','7fb0d4342e3ed3fabee650b83ce66ffb2f66c173','72a6100cd60dd49f780168137ed09e27a8090b34',];
+      var order = ['cbb5f28bedf4361156ef3c9c37e314c6479be137','e108a4952601b4664098344189c875934ea2f7ab','8ecd0d9e2580f78ff920821bd334bd8d04d165e5','ff10749b8b1aca1fba5d07ba86f49612be43caf9','323a6d9f8d2f74e7e5b88599a87dc5673fb7a0b4','bb36fb89d118b55c66f17b24ffff0ca09ccc939b','3fed75e1a7f46a6e2a74a078bfd955e7de05de4f','8cb9d8f92ba130618646d6fd1f307ca73f4e4add','2b9e6cb75876b4a33b77ae4b1bd3ef5e73c4a40e','f95c6bf3f935fad9fc354f4cf6e0161d6ebfb08a','0b07b135bf8399742cc9e6f3d14b2ea32e3354d3','076d3588e85ce9566d9575d1564e72e8480fadc8','dfad8fc515d74c19bad1ab72e7a03d59a11c7778','7ff774f225899091d6d64e5512ada13ce32dd72a','2fd8cab5e3cc4635be76e2d430ad6fe6e79b8167','c7399a2e531694b47b436bd153823f60bba9071e','bc4092e0e1aaa4b97464005963345b4b38e1f2a1','d85e49fc5be07a699f3930464996d7ddb6a8e8bd','09cf43bae3a4d875da56c67a46cf79102b20b456','aa2a707a627408758a0ee845896ef088d6136013','bb0737ce6cdbbcc055771e2400afda545d58778f','454bb6d0471536f7b91793ddbc786761b5733902','3c8ff013bf2e80392671760c8d444730b1923c0a','9a4f0cd0bdc672beb1c1c821599a11fc8a3d139d','f5ca3a789b7451da3e6030443aee6fae734fc7a1','ca8826661175c3a1ff7c6f1ebbfe646b238deb75','9e30ae7bbd1193deb0d3599c071960d395ca01f7','4417ddedee8e753fd6e911192458168d3b77d1e8','2de333e449ca13c462832e799e13795e2cf6e3e4','23d4d0aee62db4adc7381010d80776270a6db47b','5463426618ff46188d19595aa1c7fdd86c6909b3','2649b566bd2bccc59813286d647269ad251e2fdf','5df7907b99976e4051d1dd433e2bdbeb4ce200e3','a7e70930137ff8338778253ac93dc66f11eef966','b92100bddc318e13996fbe96c087c35152cbb4e3','f55b68de8cf9ec17e0512a6caae94e0fbf151260','7fb0d4342e3ed3fabee650b83ce66ffb2f66c173','72a6100cd60dd49f780168137ed09e27a8090b34','09ee3f414d08c8a3923e7c72380868617d1a4554','3b854aa3549b6f5cac96176766fccd25c965b5fe','bbc36dce52efacdede3cf4d94582ace2a3fca9fc','d4b924764bf49ceb39aa4f63dc81b7c05bbda84d','19a6c1a25813323193c67a54904a41e389918f48',];
       var tests = {
-          "cbb5f28bedf4361156ef3c9c37e314c6479be137":[async_test('html5lib_tests20.html cbb5f28bedf4361156ef3c9c37e314c6479be137'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cbutton%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E"],"e108a4952601b4664098344189c875934ea2f7ab":[async_test('html5lib_tests20.html e108a4952601b4664098344189c875934ea2f7ab'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Caddress%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Caddress%3E"],"8ecd0d9e2580f78ff920821bd334bd8d04d165e5":[async_test('html5lib_tests20.html 8ecd0d9e2580f78ff920821bd334bd8d04d165e5'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cblockquote%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cblockquote%3E"],"ff10749b8b1aca1fba5d07ba86f49612be43caf9":[async_test('html5lib_tests20.html ff10749b8b1aca1fba5d07ba86f49612be43caf9'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cmenu%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmenu%3E"],"323a6d9f8d2f74e7e5b88599a87dc5673fb7a0b4":[async_test('html5lib_tests20.html 323a6d9f8d2f74e7e5b88599a87dc5673fb7a0b4'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E"],"bb36fb89d118b55c66f17b24ffff0ca09ccc939b":[async_test('html5lib_tests20.html bb36fb89d118b55c66f17b24ffff0ca09ccc939b'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cul%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cul%3E"],"3fed75e1a7f46a6e2a74a078bfd955e7de05de4f":[async_test('html5lib_tests20.html 3fed75e1a7f46a6e2a74a078bfd955e7de05de4f'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"8cb9d8f92ba130618646d6fd1f307ca73f4e4add":[async_test('html5lib_tests20.html 8cb9d8f92ba130618646d6fd1f307ca73f4e4add'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Ch6%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ch6%3E"],"2b9e6cb75876b4a33b77ae4b1bd3ef5e73c4a40e":[async_test('html5lib_tests20.html 2b9e6cb75876b4a33b77ae4b1bd3ef5e73c4a40e'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Clisting%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Clisting%3E"],"f95c6bf3f935fad9fc354f4cf6e0161d6ebfb08a":[async_test('html5lib_tests20.html f95c6bf3f935fad9fc354f4cf6e0161d6ebfb08a'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cpre%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cpre%3E"],"0b07b135bf8399742cc9e6f3d14b2ea32e3354d3":[async_test('html5lib_tests20.html 0b07b135bf8399742cc9e6f3d14b2ea32e3354d3'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cform%3E"],"076d3588e85ce9566d9575d1564e72e8480fadc8":[async_test('html5lib_tests20.html 076d3588e85ce9566d9575d1564e72e8480fadc8'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cli%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cli%3E"],"dfad8fc515d74c19bad1ab72e7a03d59a11c7778":[async_test('html5lib_tests20.html dfad8fc515d74c19bad1ab72e7a03d59a11c7778'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cdd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdd%3E"],"7ff774f225899091d6d64e5512ada13ce32dd72a":[async_test('html5lib_tests20.html 7ff774f225899091d6d64e5512ada13ce32dd72a'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cdt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdt%3E"],"2fd8cab5e3cc4635be76e2d430ad6fe6e79b8167":[async_test('html5lib_tests20.html 2fd8cab5e3cc4635be76e2d430ad6fe6e79b8167'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cplaintext%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cplaintext%3E"],"c7399a2e531694b47b436bd153823f60bba9071e":[async_test('html5lib_tests20.html c7399a2e531694b47b436bd153823f60bba9071e'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Ctable%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctable%3E"],"bc4092e0e1aaa4b97464005963345b4b38e1f2a1":[async_test('html5lib_tests20.html bc4092e0e1aaa4b97464005963345b4b38e1f2a1'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Chr%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Chr%3E"],"d85e49fc5be07a699f3930464996d7ddb6a8e8bd":[async_test('html5lib_tests20.html d85e49fc5be07a699f3930464996d7ddb6a8e8bd'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cxmp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cxmp%3E"],"09cf43bae3a4d875da56c67a46cf79102b20b456":[async_test('html5lib_tests20.html 09cf43bae3a4d875da56c67a46cf79102b20b456'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3C/p%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E"],"aa2a707a627408758a0ee845896ef088d6136013":[async_test('html5lib_tests20.html aa2a707a627408758a0ee845896ef088d6136013'), "%3C%21doctype%20html%3E%3Caddress%3E%3Cbutton%3E%3C/address%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Caddress%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%22a%22"],"bb0737ce6cdbbcc055771e2400afda545d58778f":[async_test('html5lib_tests20.html bb0737ce6cdbbcc055771e2400afda545d58778f'), "%3Cp%3E%3Ctable%3E%3C/p%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E"],"454bb6d0471536f7b91793ddbc786761b5733902":[async_test('html5lib_tests20.html 454bb6d0471536f7b91793ddbc786761b5733902'), "%3C%21doctype%20html%3E%3Csvg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E"],"3c8ff013bf2e80392671760c8d444730b1923c0a":[async_test('html5lib_tests20.html 3c8ff013bf2e80392671760c8d444730b1923c0a'), "%3C%21doctype%20html%3E%3Cp%3E%3Cfigcaption%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cfigcaption%3E"],"9a4f0cd0bdc672beb1c1c821599a11fc8a3d139d":[async_test('html5lib_tests20.html 9a4f0cd0bdc672beb1c1c821599a11fc8a3d139d'), "%3C%21doctype%20html%3E%3Cp%3E%3Csummary%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Csummary%3E"],"f5ca3a789b7451da3e6030443aee6fae734fc7a1":[async_test('html5lib_tests20.html f5ca3a789b7451da3e6030443aee6fae734fc7a1'), "%3C%21doctype%20html%3E%3Cform%3E%3Ctable%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E"],"ca8826661175c3a1ff7c6f1ebbfe646b238deb75":[async_test('html5lib_tests20.html ca8826661175c3a1ff7c6f1ebbfe646b238deb75'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cform%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cform%3E"],"9e30ae7bbd1193deb0d3599c071960d395ca01f7":[async_test('html5lib_tests20.html 9e30ae7bbd1193deb0d3599c071960d395ca01f7'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cform%3E%3C/table%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cform%3E"],"4417ddedee8e753fd6e911192458168d3b77d1e8":[async_test('html5lib_tests20.html 4417ddedee8e753fd6e911192458168d3b77d1e8'), "%3C%21doctype%20html%3E%3Csvg%3E%3CforeignObject%3E%3Cp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E"],"2de333e449ca13c462832e799e13795e2cf6e3e4":[async_test('html5lib_tests20.html 2de333e449ca13c462832e799e13795e2cf6e3e4'), "%3C%21doctype%20html%3E%3Csvg%3E%3Ctitle%3Eabc", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%20%20%20%20%22abc%22"],"23d4d0aee62db4adc7381010d80776270a6db47b":[async_test('html5lib_tests20.html 23d4d0aee62db4adc7381010d80776270a6db47b'), "%3Coption%3E%3Cspan%3E%3Coption%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E"],"5463426618ff46188d19595aa1c7fdd86c6909b3":[async_test('html5lib_tests20.html 5463426618ff46188d19595aa1c7fdd86c6909b3'), "%3Coption%3E%3Coption%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%3Coption%3E"],"2649b566bd2bccc59813286d647269ad251e2fdf":[async_test('html5lib_tests20.html 2649b566bd2bccc59813286d647269ad251e2fdf'), "%3Cmath%3E%3Cannotation-xml%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"5df7907b99976e4051d1dd433e2bdbeb4ce200e3":[async_test('html5lib_tests20.html 5df7907b99976e4051d1dd433e2bdbeb4ce200e3'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22application/svg%2Bxml%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22application/svg%2Bxml%22%0A%7C%20%20%20%20%20%3Cdiv%3E"],"a7e70930137ff8338778253ac93dc66f11eef966":[async_test('html5lib_tests20.html a7e70930137ff8338778253ac93dc66f11eef966'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22application/xhtml%2Bxml%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22application/xhtml%2Bxml%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"b92100bddc318e13996fbe96c087c35152cbb4e3":[async_test('html5lib_tests20.html b92100bddc318e13996fbe96c087c35152cbb4e3'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22aPPlication/xhtmL%2BxMl%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22aPPlication/xhtmL%2BxMl%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"f55b68de8cf9ec17e0512a6caae94e0fbf151260":[async_test('html5lib_tests20.html f55b68de8cf9ec17e0512a6caae94e0fbf151260'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22text/html%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22text/html%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"7fb0d4342e3ed3fabee650b83ce66ffb2f66c173":[async_test('html5lib_tests20.html 7fb0d4342e3ed3fabee650b83ce66ffb2f66c173'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22Text/htmL%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22Text/htmL%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"72a6100cd60dd49f780168137ed09e27a8090b34":[async_test('html5lib_tests20.html 72a6100cd60dd49f780168137ed09e27a8090b34'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22%20text/html%20%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22%20text/html%20%22%0A%7C%20%20%20%20%20%3Cdiv%3E"],
+          "cbb5f28bedf4361156ef3c9c37e314c6479be137":[async_test('html5lib_tests20.html cbb5f28bedf4361156ef3c9c37e314c6479be137'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cbutton%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E"],"e108a4952601b4664098344189c875934ea2f7ab":[async_test('html5lib_tests20.html e108a4952601b4664098344189c875934ea2f7ab'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Caddress%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Caddress%3E"],"8ecd0d9e2580f78ff920821bd334bd8d04d165e5":[async_test('html5lib_tests20.html 8ecd0d9e2580f78ff920821bd334bd8d04d165e5'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cblockquote%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cblockquote%3E"],"ff10749b8b1aca1fba5d07ba86f49612be43caf9":[async_test('html5lib_tests20.html ff10749b8b1aca1fba5d07ba86f49612be43caf9'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cmenu%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmenu%3E"],"323a6d9f8d2f74e7e5b88599a87dc5673fb7a0b4":[async_test('html5lib_tests20.html 323a6d9f8d2f74e7e5b88599a87dc5673fb7a0b4'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E"],"bb36fb89d118b55c66f17b24ffff0ca09ccc939b":[async_test('html5lib_tests20.html bb36fb89d118b55c66f17b24ffff0ca09ccc939b'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cul%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cul%3E"],"3fed75e1a7f46a6e2a74a078bfd955e7de05de4f":[async_test('html5lib_tests20.html 3fed75e1a7f46a6e2a74a078bfd955e7de05de4f'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Ch1%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ch1%3E"],"8cb9d8f92ba130618646d6fd1f307ca73f4e4add":[async_test('html5lib_tests20.html 8cb9d8f92ba130618646d6fd1f307ca73f4e4add'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Ch6%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ch6%3E"],"2b9e6cb75876b4a33b77ae4b1bd3ef5e73c4a40e":[async_test('html5lib_tests20.html 2b9e6cb75876b4a33b77ae4b1bd3ef5e73c4a40e'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Clisting%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Clisting%3E"],"f95c6bf3f935fad9fc354f4cf6e0161d6ebfb08a":[async_test('html5lib_tests20.html f95c6bf3f935fad9fc354f4cf6e0161d6ebfb08a'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cpre%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cpre%3E"],"0b07b135bf8399742cc9e6f3d14b2ea32e3354d3":[async_test('html5lib_tests20.html 0b07b135bf8399742cc9e6f3d14b2ea32e3354d3'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cform%3E"],"076d3588e85ce9566d9575d1564e72e8480fadc8":[async_test('html5lib_tests20.html 076d3588e85ce9566d9575d1564e72e8480fadc8'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cli%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cli%3E"],"dfad8fc515d74c19bad1ab72e7a03d59a11c7778":[async_test('html5lib_tests20.html dfad8fc515d74c19bad1ab72e7a03d59a11c7778'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cdd%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdd%3E"],"7ff774f225899091d6d64e5512ada13ce32dd72a":[async_test('html5lib_tests20.html 7ff774f225899091d6d64e5512ada13ce32dd72a'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cdt%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdt%3E"],"2fd8cab5e3cc4635be76e2d430ad6fe6e79b8167":[async_test('html5lib_tests20.html 2fd8cab5e3cc4635be76e2d430ad6fe6e79b8167'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cplaintext%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cplaintext%3E"],"c7399a2e531694b47b436bd153823f60bba9071e":[async_test('html5lib_tests20.html c7399a2e531694b47b436bd153823f60bba9071e'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Ctable%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctable%3E"],"bc4092e0e1aaa4b97464005963345b4b38e1f2a1":[async_test('html5lib_tests20.html bc4092e0e1aaa4b97464005963345b4b38e1f2a1'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Chr%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Chr%3E"],"d85e49fc5be07a699f3930464996d7ddb6a8e8bd":[async_test('html5lib_tests20.html d85e49fc5be07a699f3930464996d7ddb6a8e8bd'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3Cxmp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cxmp%3E"],"09cf43bae3a4d875da56c67a46cf79102b20b456":[async_test('html5lib_tests20.html 09cf43bae3a4d875da56c67a46cf79102b20b456'), "%3C%21doctype%20html%3E%3Cp%3E%3Cbutton%3E%3C/p%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E"],"aa2a707a627408758a0ee845896ef088d6136013":[async_test('html5lib_tests20.html aa2a707a627408758a0ee845896ef088d6136013'), "%3C%21doctype%20html%3E%3Caddress%3E%3Cbutton%3E%3C/address%3Ea", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Caddress%3E%0A%7C%20%20%20%20%20%20%20%3Cbutton%3E%0A%7C%20%20%20%20%20%22a%22"],"bb0737ce6cdbbcc055771e2400afda545d58778f":[async_test('html5lib_tests20.html bb0737ce6cdbbcc055771e2400afda545d58778f'), "%3Cp%3E%3Ctable%3E%3C/p%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E"],"454bb6d0471536f7b91793ddbc786761b5733902":[async_test('html5lib_tests20.html 454bb6d0471536f7b91793ddbc786761b5733902'), "%3C%21doctype%20html%3E%3Csvg%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E"],"3c8ff013bf2e80392671760c8d444730b1923c0a":[async_test('html5lib_tests20.html 3c8ff013bf2e80392671760c8d444730b1923c0a'), "%3C%21doctype%20html%3E%3Cp%3E%3Cfigcaption%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cfigcaption%3E"],"9a4f0cd0bdc672beb1c1c821599a11fc8a3d139d":[async_test('html5lib_tests20.html 9a4f0cd0bdc672beb1c1c821599a11fc8a3d139d'), "%3C%21doctype%20html%3E%3Cp%3E%3Csummary%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Csummary%3E"],"f5ca3a789b7451da3e6030443aee6fae734fc7a1":[async_test('html5lib_tests20.html f5ca3a789b7451da3e6030443aee6fae734fc7a1'), "%3C%21doctype%20html%3E%3Cform%3E%3Ctable%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cform%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E"],"ca8826661175c3a1ff7c6f1ebbfe646b238deb75":[async_test('html5lib_tests20.html ca8826661175c3a1ff7c6f1ebbfe646b238deb75'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cform%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cform%3E"],"9e30ae7bbd1193deb0d3599c071960d395ca01f7":[async_test('html5lib_tests20.html 9e30ae7bbd1193deb0d3599c071960d395ca01f7'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cform%3E%3C/table%3E%3Cform%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cform%3E"],"4417ddedee8e753fd6e911192458168d3b77d1e8":[async_test('html5lib_tests20.html 4417ddedee8e753fd6e911192458168d3b77d1e8'), "%3C%21doctype%20html%3E%3Csvg%3E%3CforeignObject%3E%3Cp%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E"],"2de333e449ca13c462832e799e13795e2cf6e3e4":[async_test('html5lib_tests20.html 2de333e449ca13c462832e799e13795e2cf6e3e4'), "%3C%21doctype%20html%3E%3Csvg%3E%3Ctitle%3Eabc", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%20%20%20%20%22abc%22"],"23d4d0aee62db4adc7381010d80776270a6db47b":[async_test('html5lib_tests20.html 23d4d0aee62db4adc7381010d80776270a6db47b'), "%3Coption%3E%3Cspan%3E%3Coption%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E"],"5463426618ff46188d19595aa1c7fdd86c6909b3":[async_test('html5lib_tests20.html 5463426618ff46188d19595aa1c7fdd86c6909b3'), "%3Coption%3E%3Coption%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%3Coption%3E"],"2649b566bd2bccc59813286d647269ad251e2fdf":[async_test('html5lib_tests20.html 2649b566bd2bccc59813286d647269ad251e2fdf'), "%3Cmath%3E%3Cannotation-xml%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"5df7907b99976e4051d1dd433e2bdbeb4ce200e3":[async_test('html5lib_tests20.html 5df7907b99976e4051d1dd433e2bdbeb4ce200e3'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22application/svg%2Bxml%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22application/svg%2Bxml%22%0A%7C%20%20%20%20%20%3Cdiv%3E"],"a7e70930137ff8338778253ac93dc66f11eef966":[async_test('html5lib_tests20.html a7e70930137ff8338778253ac93dc66f11eef966'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22application/xhtml%2Bxml%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22application/xhtml%2Bxml%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"b92100bddc318e13996fbe96c087c35152cbb4e3":[async_test('html5lib_tests20.html b92100bddc318e13996fbe96c087c35152cbb4e3'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22aPPlication/xhtmL%2BxMl%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22aPPlication/xhtmL%2BxMl%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"f55b68de8cf9ec17e0512a6caae94e0fbf151260":[async_test('html5lib_tests20.html f55b68de8cf9ec17e0512a6caae94e0fbf151260'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22text/html%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22text/html%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"7fb0d4342e3ed3fabee650b83ce66ffb2f66c173":[async_test('html5lib_tests20.html 7fb0d4342e3ed3fabee650b83ce66ffb2f66c173'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22Text/htmL%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22Text/htmL%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"72a6100cd60dd49f780168137ed09e27a8090b34":[async_test('html5lib_tests20.html 72a6100cd60dd49f780168137ed09e27a8090b34'), "%3Cmath%3E%3Cannotation-xml%20encoding%3D%22%20text/html%20%22%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20encoding%3D%22%20text/html%20%22%0A%7C%20%20%20%20%20%3Cdiv%3E"],"09ee3f414d08c8a3923e7c72380868617d1a4554":[async_test('html5lib_tests20.html 09ee3f414d08c8a3923e7c72380868617d1a4554'), "%3Cmath%3E%3Cannotation-xml%3E%20%3C/annotation-xml%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20%22%20%22"],"3b854aa3549b6f5cac96176766fccd25c965b5fe":[async_test('html5lib_tests20.html 3b854aa3549b6f5cac96176766fccd25c965b5fe'), "%3Cmath%3E%3Cannotation-xml%3Ec%3C/annotation-xml%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20%22c%22"],"bbc36dce52efacdede3cf4d94582ace2a3fca9fc":[async_test('html5lib_tests20.html bbc36dce52efacdede3cf4d94582ace2a3fca9fc'), "%3Cmath%3E%3Cannotation-xml%3E%3C%21--foo--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20%3C%21--%20foo%20--%3E"],"d4b924764bf49ceb39aa4f63dc81b7c05bbda84d":[async_test('html5lib_tests20.html d4b924764bf49ceb39aa4f63dc81b7c05bbda84d'), "%3Cmath%3E%3Cannotation-xml%3E%3C/svg%3Ex", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20%22x%22"],"19a6c1a25813323193c67a54904a41e389918f48":[async_test('html5lib_tests20.html 19a6c1a25813323193c67a54904a41e389918f48'), "%3Cmath%3E%3Cannotation-xml%3E%3Csvg%3Ex", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20annotation-xml%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22x%22"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests25.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests25.html
index 2ae12eb..eba94fa 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests25.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests25.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['025adbb619bdef9ad228a6b378b9dd6bef9f93dc','7e561454888535bc5c68e7396de2f4206c81e97d','a14bdd90f5a745296e74c23951245cb7c5046ed1','421ad19f7854b9c8e28a0595a8dd20d6bfcd5376','7e8234523fbf67d37ab60f593e1fc3ac67706651','c705ceb6fb37865e6965641ea80137baf44176b6','277da0c4c937f3852d8a7cacf4e4b426a30b3dda','de4aa726e09215ba9c50b97d257e6c6b880107f1','d46fa11c0107d59c84778beae84f388f55bffc31','578e08f11628dc9841f3eb21c016e1e28cec0304','a6e5387b48c4d0399a802215f7fa206bd0d3b492','d56d47bc9d9c7472fb1706bdecda1bbd165dcf91','2779456edd8407b403561e0cf339c8c2308c88b8','17d197ab2416adec6eb92e398c2db6f7efc98b58','1ccc6e280f6dc773e2e00f2cb70cd96e97078296','48ddaacf5355643f27ef704ece88b227f51fc7cb','bf29bfbd56c9863d19e4d66cd67a0dc1813b2e86','73fc7c062b68d4f89579683dbb7f1eaef4ec27f1','057bc2d868d2f365cb2c0b4d07c231d2fa2b23b7','7f684d19be362ec9aa4fe7ecbba4ff3fc9730a43','d79f9119d02447226cc2d151044e6cffc5409e81',];
+      var order = ['025adbb619bdef9ad228a6b378b9dd6bef9f93dc','7e561454888535bc5c68e7396de2f4206c81e97d','a14bdd90f5a745296e74c23951245cb7c5046ed1','421ad19f7854b9c8e28a0595a8dd20d6bfcd5376','7e8234523fbf67d37ab60f593e1fc3ac67706651','c705ceb6fb37865e6965641ea80137baf44176b6','277da0c4c937f3852d8a7cacf4e4b426a30b3dda','de4aa726e09215ba9c50b97d257e6c6b880107f1','578e08f11628dc9841f3eb21c016e1e28cec0304','a6e5387b48c4d0399a802215f7fa206bd0d3b492','d56d47bc9d9c7472fb1706bdecda1bbd165dcf91','2779456edd8407b403561e0cf339c8c2308c88b8','17d197ab2416adec6eb92e398c2db6f7efc98b58','1ccc6e280f6dc773e2e00f2cb70cd96e97078296','48ddaacf5355643f27ef704ece88b227f51fc7cb','bf29bfbd56c9863d19e4d66cd67a0dc1813b2e86','73fc7c062b68d4f89579683dbb7f1eaef4ec27f1','057bc2d868d2f365cb2c0b4d07c231d2fa2b23b7','7f684d19be362ec9aa4fe7ecbba4ff3fc9730a43','d79f9119d02447226cc2d151044e6cffc5409e81',];
       var tests = {
-          "025adbb619bdef9ad228a6b378b9dd6bef9f93dc":[async_test('html5lib_tests25.html 025adbb619bdef9ad228a6b378b9dd6bef9f93dc'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cfoo%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%22A%22"],"7e561454888535bc5c68e7396de2f4206c81e97d":[async_test('html5lib_tests25.html 7e561454888535bc5c68e7396de2f4206c81e97d'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Carea%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Carea%3E%0A%7C%20%20%20%20%20%22A%22"],"a14bdd90f5a745296e74c23951245cb7c5046ed1":[async_test('html5lib_tests25.html a14bdd90f5a745296e74c23951245cb7c5046ed1'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cbase%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbase%3E%0A%7C%20%20%20%20%20%22A%22"],"421ad19f7854b9c8e28a0595a8dd20d6bfcd5376":[async_test('html5lib_tests25.html 421ad19f7854b9c8e28a0595a8dd20d6bfcd5376'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cbasefont%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbasefont%3E%0A%7C%20%20%20%20%20%22A%22"],"7e8234523fbf67d37ab60f593e1fc3ac67706651":[async_test('html5lib_tests25.html 7e8234523fbf67d37ab60f593e1fc3ac67706651'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cbgsound%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbgsound%3E%0A%7C%20%20%20%20%20%22A%22"],"c705ceb6fb37865e6965641ea80137baf44176b6":[async_test('html5lib_tests25.html c705ceb6fb37865e6965641ea80137baf44176b6'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cbr%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbr%3E%0A%7C%20%20%20%20%20%22A%22"],"277da0c4c937f3852d8a7cacf4e4b426a30b3dda":[async_test('html5lib_tests25.html 277da0c4c937f3852d8a7cacf4e4b426a30b3dda'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ccol%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%22"],"de4aa726e09215ba9c50b97d257e6c6b880107f1":[async_test('html5lib_tests25.html de4aa726e09215ba9c50b97d257e6c6b880107f1'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ccommand%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ccommand%3E%0A%7C%20%20%20%20%20%20%20%22A%22"],"d46fa11c0107d59c84778beae84f388f55bffc31":[async_test('html5lib_tests25.html d46fa11c0107d59c84778beae84f388f55bffc31'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmenuitem%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmenuitem%3E%0A%7C%20%20%20%20%20%22A%22"],"578e08f11628dc9841f3eb21c016e1e28cec0304":[async_test('html5lib_tests25.html 578e08f11628dc9841f3eb21c016e1e28cec0304'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cembed%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cembed%3E%0A%7C%20%20%20%20%20%22A%22"],"a6e5387b48c4d0399a802215f7fa206bd0d3b492":[async_test('html5lib_tests25.html a6e5387b48c4d0399a802215f7fa206bd0d3b492'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cframe%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%22"],"d56d47bc9d9c7472fb1706bdecda1bbd165dcf91":[async_test('html5lib_tests25.html d56d47bc9d9c7472fb1706bdecda1bbd165dcf91'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Chr%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%22A%22"],"2779456edd8407b403561e0cf339c8c2308c88b8":[async_test('html5lib_tests25.html 2779456edd8407b403561e0cf339c8c2308c88b8'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cimg%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cimg%3E%0A%7C%20%20%20%20%20%22A%22"],"17d197ab2416adec6eb92e398c2db6f7efc98b58":[async_test('html5lib_tests25.html 17d197ab2416adec6eb92e398c2db6f7efc98b58'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cinput%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%22A%22"],"1ccc6e280f6dc773e2e00f2cb70cd96e97078296":[async_test('html5lib_tests25.html 1ccc6e280f6dc773e2e00f2cb70cd96e97078296'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ckeygen%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ckeygen%3E%0A%7C%20%20%20%20%20%22A%22"],"48ddaacf5355643f27ef704ece88b227f51fc7cb":[async_test('html5lib_tests25.html 48ddaacf5355643f27ef704ece88b227f51fc7cb'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Clink%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Clink%3E%0A%7C%20%20%20%20%20%22A%22"],"bf29bfbd56c9863d19e4d66cd67a0dc1813b2e86":[async_test('html5lib_tests25.html bf29bfbd56c9863d19e4d66cd67a0dc1813b2e86'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmeta%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%22A%22"],"73fc7c062b68d4f89579683dbb7f1eaef4ec27f1":[async_test('html5lib_tests25.html 73fc7c062b68d4f89579683dbb7f1eaef4ec27f1'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cparam%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cparam%3E%0A%7C%20%20%20%20%20%22A%22"],"057bc2d868d2f365cb2c0b4d07c231d2fa2b23b7":[async_test('html5lib_tests25.html 057bc2d868d2f365cb2c0b4d07c231d2fa2b23b7'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csource%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csource%3E%0A%7C%20%20%20%20%20%22A%22"],"7f684d19be362ec9aa4fe7ecbba4ff3fc9730a43":[async_test('html5lib_tests25.html 7f684d19be362ec9aa4fe7ecbba4ff3fc9730a43'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ctrack%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctrack%3E%0A%7C%20%20%20%20%20%22A%22"],"d79f9119d02447226cc2d151044e6cffc5409e81":[async_test('html5lib_tests25.html d79f9119d02447226cc2d151044e6cffc5409e81'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cwbr%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cwbr%3E%0A%7C%20%20%20%20%20%22A%22"],
+          "025adbb619bdef9ad228a6b378b9dd6bef9f93dc":[async_test('html5lib_tests25.html 025adbb619bdef9ad228a6b378b9dd6bef9f93dc'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cfoo%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%22A%22"],"7e561454888535bc5c68e7396de2f4206c81e97d":[async_test('html5lib_tests25.html 7e561454888535bc5c68e7396de2f4206c81e97d'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Carea%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Carea%3E%0A%7C%20%20%20%20%20%22A%22"],"a14bdd90f5a745296e74c23951245cb7c5046ed1":[async_test('html5lib_tests25.html a14bdd90f5a745296e74c23951245cb7c5046ed1'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cbase%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbase%3E%0A%7C%20%20%20%20%20%22A%22"],"421ad19f7854b9c8e28a0595a8dd20d6bfcd5376":[async_test('html5lib_tests25.html 421ad19f7854b9c8e28a0595a8dd20d6bfcd5376'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cbasefont%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbasefont%3E%0A%7C%20%20%20%20%20%22A%22"],"7e8234523fbf67d37ab60f593e1fc3ac67706651":[async_test('html5lib_tests25.html 7e8234523fbf67d37ab60f593e1fc3ac67706651'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cbgsound%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbgsound%3E%0A%7C%20%20%20%20%20%22A%22"],"c705ceb6fb37865e6965641ea80137baf44176b6":[async_test('html5lib_tests25.html c705ceb6fb37865e6965641ea80137baf44176b6'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cbr%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbr%3E%0A%7C%20%20%20%20%20%22A%22"],"277da0c4c937f3852d8a7cacf4e4b426a30b3dda":[async_test('html5lib_tests25.html 277da0c4c937f3852d8a7cacf4e4b426a30b3dda'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ccol%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%22"],"de4aa726e09215ba9c50b97d257e6c6b880107f1":[async_test('html5lib_tests25.html de4aa726e09215ba9c50b97d257e6c6b880107f1'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ccommand%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ccommand%3E%0A%7C%20%20%20%20%20%20%20%22A%22"],"578e08f11628dc9841f3eb21c016e1e28cec0304":[async_test('html5lib_tests25.html 578e08f11628dc9841f3eb21c016e1e28cec0304'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cembed%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cembed%3E%0A%7C%20%20%20%20%20%22A%22"],"a6e5387b48c4d0399a802215f7fa206bd0d3b492":[async_test('html5lib_tests25.html a6e5387b48c4d0399a802215f7fa206bd0d3b492'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cframe%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%22"],"d56d47bc9d9c7472fb1706bdecda1bbd165dcf91":[async_test('html5lib_tests25.html d56d47bc9d9c7472fb1706bdecda1bbd165dcf91'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Chr%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Chr%3E%0A%7C%20%20%20%20%20%22A%22"],"2779456edd8407b403561e0cf339c8c2308c88b8":[async_test('html5lib_tests25.html 2779456edd8407b403561e0cf339c8c2308c88b8'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cimg%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cimg%3E%0A%7C%20%20%20%20%20%22A%22"],"17d197ab2416adec6eb92e398c2db6f7efc98b58":[async_test('html5lib_tests25.html 17d197ab2416adec6eb92e398c2db6f7efc98b58'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cinput%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%22A%22"],"1ccc6e280f6dc773e2e00f2cb70cd96e97078296":[async_test('html5lib_tests25.html 1ccc6e280f6dc773e2e00f2cb70cd96e97078296'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ckeygen%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ckeygen%3E%0A%7C%20%20%20%20%20%22A%22"],"48ddaacf5355643f27ef704ece88b227f51fc7cb":[async_test('html5lib_tests25.html 48ddaacf5355643f27ef704ece88b227f51fc7cb'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Clink%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Clink%3E%0A%7C%20%20%20%20%20%22A%22"],"bf29bfbd56c9863d19e4d66cd67a0dc1813b2e86":[async_test('html5lib_tests25.html bf29bfbd56c9863d19e4d66cd67a0dc1813b2e86'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cmeta%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%22A%22"],"73fc7c062b68d4f89579683dbb7f1eaef4ec27f1":[async_test('html5lib_tests25.html 73fc7c062b68d4f89579683dbb7f1eaef4ec27f1'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cparam%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cparam%3E%0A%7C%20%20%20%20%20%22A%22"],"057bc2d868d2f365cb2c0b4d07c231d2fa2b23b7":[async_test('html5lib_tests25.html 057bc2d868d2f365cb2c0b4d07c231d2fa2b23b7'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Csource%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csource%3E%0A%7C%20%20%20%20%20%22A%22"],"7f684d19be362ec9aa4fe7ecbba4ff3fc9730a43":[async_test('html5lib_tests25.html 7f684d19be362ec9aa4fe7ecbba4ff3fc9730a43'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Ctrack%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctrack%3E%0A%7C%20%20%20%20%20%22A%22"],"d79f9119d02447226cc2d151044e6cffc5409e81":[async_test('html5lib_tests25.html d79f9119d02447226cc2d151044e6cffc5409e81'), "%3C%21DOCTYPE%20html%3E%3Cbody%3E%3Cwbr%3EA", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cwbr%3E%0A%7C%20%20%20%20%20%22A%22"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests7.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests7.html
index 8a74e16..47cff7d 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests7.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_tests7.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['7cb496e242a4dc9aed321252b5ca6ebf4f02ebcd','c0cffec1e999db2aefb2f6beb679fd9620566dbd','7c644a6da21bfd551385b0a5044b82cf7be0a22f','52fde917ba333b89afeff0e31104421455f4bf1b','a8f53ca779c0e5fc484771c4ec2aa6fb6d609779','e4ce65a5fb6a3726b341ec94da583dee7c2c8232','8779e761986b4c724bfe73fee95b7972145fb4d3','620e44a8a55e82cec0d51e9d93025d8a5c4456fc','37b910b755c2df155a3129d5a1150f0c0fdd7934','868bff3a23219b836fdc702063d637f817ce65e1','a33a56f5571b4bcb23138ffb60df3824f5c53773','8ba11b54fa74a1c229d079b2902d6e33e139f33b','84e2152c284f4dfee7d8d12846c08b2c025578a6','8e3432411baa59cbef731ab3ba2703cb5d518453','e2f6144290512430ad25bbf9598eae77288c7b7a','350ebd648764d585f4aa0c29b925e6276579e9d0','9120ef80d3ee017007f3510121ddf7eba31b79e0','2026cd3ed42e41c168dd37c8c2675584f4eef335','ff2e324237e22efc8430ad7137d50d6d3d311820','02c9eb822611b0c206b544e0f2e5044695195ba8','cb3d1a50dd56a85135a0856cfa1c23a091ef2af4','13847685cfff75642823a0e78c6ef232ecb9d94b','99bb5e9a6e0daf62ba418dd97b5e8e3925f4137e','7a8e5ec2c95e725717c564dd49bfa86c2e1a88ba','17dcea170bb74d18ed4776dbb98f0bac6a11364d','9457c10c9f987bbc95937b34763fe956d61d237b','0fa23bb5d8b2a591afb1842b8f4c00c490c127b4','f6d60b3ae48e2b69b4c25125f9b5a3ab4867521b','5b0b3edcc3ce9fdc9f58eb62d326865ca0aab8c8',];
+      var order = ['7cb496e242a4dc9aed321252b5ca6ebf4f02ebcd','c0cffec1e999db2aefb2f6beb679fd9620566dbd','7c644a6da21bfd551385b0a5044b82cf7be0a22f','52fde917ba333b89afeff0e31104421455f4bf1b','a8f53ca779c0e5fc484771c4ec2aa6fb6d609779','e4ce65a5fb6a3726b341ec94da583dee7c2c8232','8779e761986b4c724bfe73fee95b7972145fb4d3','620e44a8a55e82cec0d51e9d93025d8a5c4456fc','37b910b755c2df155a3129d5a1150f0c0fdd7934','868bff3a23219b836fdc702063d637f817ce65e1','a33a56f5571b4bcb23138ffb60df3824f5c53773','facf5e60205451cf740f64628b8608f0aee30f3a','8ba11b54fa74a1c229d079b2902d6e33e139f33b','84e2152c284f4dfee7d8d12846c08b2c025578a6','8e3432411baa59cbef731ab3ba2703cb5d518453','e2f6144290512430ad25bbf9598eae77288c7b7a','350ebd648764d585f4aa0c29b925e6276579e9d0','9120ef80d3ee017007f3510121ddf7eba31b79e0','2026cd3ed42e41c168dd37c8c2675584f4eef335','ff2e324237e22efc8430ad7137d50d6d3d311820','02c9eb822611b0c206b544e0f2e5044695195ba8','cb3d1a50dd56a85135a0856cfa1c23a091ef2af4','13847685cfff75642823a0e78c6ef232ecb9d94b','99bb5e9a6e0daf62ba418dd97b5e8e3925f4137e','7a8e5ec2c95e725717c564dd49bfa86c2e1a88ba','17dcea170bb74d18ed4776dbb98f0bac6a11364d','9457c10c9f987bbc95937b34763fe956d61d237b','0fa23bb5d8b2a591afb1842b8f4c00c490c127b4','f6d60b3ae48e2b69b4c25125f9b5a3ab4867521b','5b0b3edcc3ce9fdc9f58eb62d326865ca0aab8c8',];
       var tests = {
-          "7cb496e242a4dc9aed321252b5ca6ebf4f02ebcd":[async_test('html5lib_tests7.html 7cb496e242a4dc9aed321252b5ca6ebf4f02ebcd'), "%3C%21doctype%20html%3E%3Cbody%3E%3Ctitle%3EX%3C/title%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22"],"c0cffec1e999db2aefb2f6beb679fd9620566dbd":[async_test('html5lib_tests7.html c0cffec1e999db2aefb2f6beb679fd9620566dbd'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ctitle%3EX%3C/title%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Ctable%3E"],"7c644a6da21bfd551385b0a5044b82cf7be0a22f":[async_test('html5lib_tests7.html 7c644a6da21bfd551385b0a5044b82cf7be0a22f'), "%3C%21doctype%20html%3E%3Chead%3E%3C/head%3E%3Ctitle%3EX%3C/title%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%3Cbody%3E"],"52fde917ba333b89afeff0e31104421455f4bf1b":[async_test('html5lib_tests7.html 52fde917ba333b89afeff0e31104421455f4bf1b'), "%3C%21doctype%20html%3E%3C/head%3E%3Ctitle%3EX%3C/title%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%3Cbody%3E"],"a8f53ca779c0e5fc484771c4ec2aa6fb6d609779":[async_test('html5lib_tests7.html a8f53ca779c0e5fc484771c4ec2aa6fb6d609779'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cmeta%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%3Ctable%3E"],"e4ce65a5fb6a3726b341ec94da583dee7c2c8232":[async_test('html5lib_tests7.html e4ce65a5fb6a3726b341ec94da583dee7c2c8232'), "%3C%21doctype%20html%3E%3Ctable%3EX%3Ctr%3E%3Ctd%3E%3Ctable%3E%20%3Cmeta%3E%3C/table%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%20%22"],"8779e761986b4c724bfe73fee95b7972145fb4d3":[async_test('html5lib_tests7.html 8779e761986b4c724bfe73fee95b7972145fb4d3'), "%3C%21doctype%20html%3E%3Chtml%3E%20%3Chead%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"620e44a8a55e82cec0d51e9d93025d8a5c4456fc":[async_test('html5lib_tests7.html 620e44a8a55e82cec0d51e9d93025d8a5c4456fc'), "%3C%21doctype%20html%3E%20%3Chead%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"37b910b755c2df155a3129d5a1150f0c0fdd7934":[async_test('html5lib_tests7.html 37b910b755c2df155a3129d5a1150f0c0fdd7934'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cstyle%3E%20%3Ctr%3Ex%20%3C/style%3E%20%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%20%20%22%20%3Ctr%3Ex%20%22%0A%7C%20%20%20%20%20%20%20%22%20%22"],"868bff3a23219b836fdc702063d637f817ce65e1":[async_test('html5lib_tests7.html 868bff3a23219b836fdc702063d637f817ce65e1'), "%3C%21doctype%20html%3E%3Ctable%3E%3CTBODY%3E%3Cscript%3E%20%3Ctr%3Ex%20%3C/script%3E%20%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22%20%3Ctr%3Ex%20%22%0A%7C%20%20%20%20%20%20%20%20%20%22%20%22"],"a33a56f5571b4bcb23138ffb60df3824f5c53773":[async_test('html5lib_tests7.html a33a56f5571b4bcb23138ffb60df3824f5c53773'), "%3C%21doctype%20html%3E%3Cp%3E%3Capplet%3E%3Cp%3EX%3C/p%3E%3C/applet%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Capplet%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22X%22"],"8ba11b54fa74a1c229d079b2902d6e33e139f33b":[async_test('html5lib_tests7.html 8ba11b54fa74a1c229d079b2902d6e33e139f33b'), "%3C%21doctype%20html%3E%3Clisting%3E%0AX%3C/listing%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Clisting%3E%0A%7C%20%20%20%20%20%20%20%22X%22"],"84e2152c284f4dfee7d8d12846c08b2c025578a6":[async_test('html5lib_tests7.html 84e2152c284f4dfee7d8d12846c08b2c025578a6'), "%3C%21doctype%20html%3E%3Cselect%3E%3Cinput%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%22X%22"],"8e3432411baa59cbef731ab3ba2703cb5d518453":[async_test('html5lib_tests7.html 8e3432411baa59cbef731ab3ba2703cb5d518453'), "%3C%21doctype%20html%3E%3Cselect%3E%3Cselect%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%22X%22"],"e2f6144290512430ad25bbf9598eae77288c7b7a":[async_test('html5lib_tests7.html e2f6144290512430ad25bbf9598eae77288c7b7a'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cinput%20type%3DhidDEN%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"350ebd648764d585f4aa0c29b925e6276579e9d0":[async_test('html5lib_tests7.html 350ebd648764d585f4aa0c29b925e6276579e9d0'), "%3C%21doctype%20html%3E%3Ctable%3EX%3Cinput%20type%3DhidDEN%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"9120ef80d3ee017007f3510121ddf7eba31b79e0":[async_test('html5lib_tests7.html 9120ef80d3ee017007f3510121ddf7eba31b79e0'), "%3C%21doctype%20html%3E%3Ctable%3E%20%20%3Cinput%20type%3DhidDEN%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"2026cd3ed42e41c168dd37c8c2675584f4eef335":[async_test('html5lib_tests7.html 2026cd3ed42e41c168dd37c8c2675584f4eef335'), "%3C%21doctype%20html%3E%3Ctable%3E%20%20%3Cinput%20type%3D%27hidDEN%27%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"ff2e324237e22efc8430ad7137d50d6d3d311820":[async_test('html5lib_tests7.html ff2e324237e22efc8430ad7137d50d6d3d311820'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cinput%20type%3D%22%20hidden%22%3E%3Cinput%20type%3DhidDEN%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20type%3D%22%20hidden%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"02c9eb822611b0c206b544e0f2e5044695195ba8":[async_test('html5lib_tests7.html 02c9eb822611b0c206b544e0f2e5044695195ba8'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cselect%3EX%3Ctr%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"cb3d1a50dd56a85135a0856cfa1c23a091ef2af4":[async_test('html5lib_tests7.html cb3d1a50dd56a85135a0856cfa1c23a091ef2af4'), "%3C%21doctype%20html%3E%3Cselect%3EX%3C/select%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%22X%22"],"13847685cfff75642823a0e78c6ef232ecb9d94b":[async_test('html5lib_tests7.html 13847685cfff75642823a0e78c6ef232ecb9d94b'), "%3C%21DOCTYPE%20hTmL%3E%3Chtml%3E%3C/html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"99bb5e9a6e0daf62ba418dd97b5e8e3925f4137e":[async_test('html5lib_tests7.html 99bb5e9a6e0daf62ba418dd97b5e8e3925f4137e'), "%3C%21DOCTYPE%20HTML%3E%3Chtml%3E%3C/html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"7a8e5ec2c95e725717c564dd49bfa86c2e1a88ba":[async_test('html5lib_tests7.html 7a8e5ec2c95e725717c564dd49bfa86c2e1a88ba'), "%3Cdiv%3E%3Cp%3Ea%3C/x%3E%20b", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22a%20b%22"],"17dcea170bb74d18ed4776dbb98f0bac6a11364d":[async_test('html5lib_tests7.html 17dcea170bb74d18ed4776dbb98f0bac6a11364d'), "%3Ctable%3E%3Ctr%3E%3Ctd%3E%3Ccode%3E%3C/code%3E%20%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccode%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22%20%22"],"9457c10c9f987bbc95937b34763fe956d61d237b":[async_test('html5lib_tests7.html 9457c10c9f987bbc95937b34763fe956d61d237b'), "%3Ctable%3E%3Cb%3E%3Ctr%3E%3Ctd%3Eaaa%3C/td%3E%3C/tr%3Ebbb%3C/table%3Eccc", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%22bbb%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22aaa%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%22ccc%22"],"0fa23bb5d8b2a591afb1842b8f4c00c490c127b4":[async_test('html5lib_tests7.html 0fa23bb5d8b2a591afb1842b8f4c00c490c127b4'), "A%3Ctable%3E%3Ctr%3E%20B%3C/tr%3E%20B%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%20B%20B%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"f6d60b3ae48e2b69b4c25125f9b5a3ab4867521b":[async_test('html5lib_tests7.html f6d60b3ae48e2b69b4c25125f9b5a3ab4867521b'), "A%3Ctable%3E%3Ctr%3E%20B%3C/tr%3E%20%3C/em%3EC%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%20BC%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%22%20%22"],"5b0b3edcc3ce9fdc9f58eb62d326865ca0aab8c8":[async_test('html5lib_tests7.html 5b0b3edcc3ce9fdc9f58eb62d326865ca0aab8c8'), "%3Cselect%3E%3Ckeygen%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%3Ckeygen%3E"],
+          "7cb496e242a4dc9aed321252b5ca6ebf4f02ebcd":[async_test('html5lib_tests7.html 7cb496e242a4dc9aed321252b5ca6ebf4f02ebcd'), "%3C%21doctype%20html%3E%3Cbody%3E%3Ctitle%3EX%3C/title%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22"],"c0cffec1e999db2aefb2f6beb679fd9620566dbd":[async_test('html5lib_tests7.html c0cffec1e999db2aefb2f6beb679fd9620566dbd'), "%3C%21doctype%20html%3E%3Ctable%3E%3Ctitle%3EX%3C/title%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Ctable%3E"],"7c644a6da21bfd551385b0a5044b82cf7be0a22f":[async_test('html5lib_tests7.html 7c644a6da21bfd551385b0a5044b82cf7be0a22f'), "%3C%21doctype%20html%3E%3Chead%3E%3C/head%3E%3Ctitle%3EX%3C/title%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%3Cbody%3E"],"52fde917ba333b89afeff0e31104421455f4bf1b":[async_test('html5lib_tests7.html 52fde917ba333b89afeff0e31104421455f4bf1b'), "%3C%21doctype%20html%3E%3C/head%3E%3Ctitle%3EX%3C/title%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%3Cbody%3E"],"a8f53ca779c0e5fc484771c4ec2aa6fb6d609779":[async_test('html5lib_tests7.html a8f53ca779c0e5fc484771c4ec2aa6fb6d609779'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cmeta%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%3Ctable%3E"],"e4ce65a5fb6a3726b341ec94da583dee7c2c8232":[async_test('html5lib_tests7.html e4ce65a5fb6a3726b341ec94da583dee7c2c8232'), "%3C%21doctype%20html%3E%3Ctable%3EX%3Ctr%3E%3Ctd%3E%3Ctable%3E%20%3Cmeta%3E%3C/table%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%20%22"],"8779e761986b4c724bfe73fee95b7972145fb4d3":[async_test('html5lib_tests7.html 8779e761986b4c724bfe73fee95b7972145fb4d3'), "%3C%21doctype%20html%3E%3Chtml%3E%20%3Chead%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"620e44a8a55e82cec0d51e9d93025d8a5c4456fc":[async_test('html5lib_tests7.html 620e44a8a55e82cec0d51e9d93025d8a5c4456fc'), "%3C%21doctype%20html%3E%20%3Chead%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"37b910b755c2df155a3129d5a1150f0c0fdd7934":[async_test('html5lib_tests7.html 37b910b755c2df155a3129d5a1150f0c0fdd7934'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cstyle%3E%20%3Ctr%3Ex%20%3C/style%3E%20%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%20%20%22%20%3Ctr%3Ex%20%22%0A%7C%20%20%20%20%20%20%20%22%20%22"],"868bff3a23219b836fdc702063d637f817ce65e1":[async_test('html5lib_tests7.html 868bff3a23219b836fdc702063d637f817ce65e1'), "%3C%21doctype%20html%3E%3Ctable%3E%3CTBODY%3E%3Cscript%3E%20%3Ctr%3Ex%20%3C/script%3E%20%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22%20%3Ctr%3Ex%20%22%0A%7C%20%20%20%20%20%20%20%20%20%22%20%22"],"a33a56f5571b4bcb23138ffb60df3824f5c53773":[async_test('html5lib_tests7.html a33a56f5571b4bcb23138ffb60df3824f5c53773'), "%3C%21doctype%20html%3E%3Cp%3E%3Capplet%3E%3Cp%3EX%3C/p%3E%3C/applet%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Capplet%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22X%22"],"facf5e60205451cf740f64628b8608f0aee30f3a":[async_test('html5lib_tests7.html facf5e60205451cf740f64628b8608f0aee30f3a'), "%3C%21doctype%20html%3E%3Cp%3E%3Cobject%20type%3D%22application/x-non-existant-plugin%22%3E%3Cp%3EX%3C/p%3E%3C/object%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cobject%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22application/x-non-existant-plugin%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22X%22"],"8ba11b54fa74a1c229d079b2902d6e33e139f33b":[async_test('html5lib_tests7.html 8ba11b54fa74a1c229d079b2902d6e33e139f33b'), "%3C%21doctype%20html%3E%3Clisting%3E%0AX%3C/listing%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Clisting%3E%0A%7C%20%20%20%20%20%20%20%22X%22"],"84e2152c284f4dfee7d8d12846c08b2c025578a6":[async_test('html5lib_tests7.html 84e2152c284f4dfee7d8d12846c08b2c025578a6'), "%3C%21doctype%20html%3E%3Cselect%3E%3Cinput%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%22X%22"],"8e3432411baa59cbef731ab3ba2703cb5d518453":[async_test('html5lib_tests7.html 8e3432411baa59cbef731ab3ba2703cb5d518453'), "%3C%21doctype%20html%3E%3Cselect%3E%3Cselect%3EX", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%22X%22"],"e2f6144290512430ad25bbf9598eae77288c7b7a":[async_test('html5lib_tests7.html e2f6144290512430ad25bbf9598eae77288c7b7a'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cinput%20type%3DhidDEN%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"350ebd648764d585f4aa0c29b925e6276579e9d0":[async_test('html5lib_tests7.html 350ebd648764d585f4aa0c29b925e6276579e9d0'), "%3C%21doctype%20html%3E%3Ctable%3EX%3Cinput%20type%3DhidDEN%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"9120ef80d3ee017007f3510121ddf7eba31b79e0":[async_test('html5lib_tests7.html 9120ef80d3ee017007f3510121ddf7eba31b79e0'), "%3C%21doctype%20html%3E%3Ctable%3E%20%20%3Cinput%20type%3DhidDEN%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"2026cd3ed42e41c168dd37c8c2675584f4eef335":[async_test('html5lib_tests7.html 2026cd3ed42e41c168dd37c8c2675584f4eef335'), "%3C%21doctype%20html%3E%3Ctable%3E%20%20%3Cinput%20type%3D%27hidDEN%27%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%22%20%20%22%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"ff2e324237e22efc8430ad7137d50d6d3d311820":[async_test('html5lib_tests7.html ff2e324237e22efc8430ad7137d50d6d3d311820'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cinput%20type%3D%22%20hidden%22%3E%3Cinput%20type%3DhidDEN%3E%3C/table%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20type%3D%22%20hidden%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20%20%20type%3D%22hidDEN%22"],"02c9eb822611b0c206b544e0f2e5044695195ba8":[async_test('html5lib_tests7.html 02c9eb822611b0c206b544e0f2e5044695195ba8'), "%3C%21doctype%20html%3E%3Ctable%3E%3Cselect%3EX%3Ctr%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%22X%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"cb3d1a50dd56a85135a0856cfa1c23a091ef2af4":[async_test('html5lib_tests7.html cb3d1a50dd56a85135a0856cfa1c23a091ef2af4'), "%3C%21doctype%20html%3E%3Cselect%3EX%3C/select%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%22X%22"],"13847685cfff75642823a0e78c6ef232ecb9d94b":[async_test('html5lib_tests7.html 13847685cfff75642823a0e78c6ef232ecb9d94b'), "%3C%21DOCTYPE%20hTmL%3E%3Chtml%3E%3C/html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"99bb5e9a6e0daf62ba418dd97b5e8e3925f4137e":[async_test('html5lib_tests7.html 99bb5e9a6e0daf62ba418dd97b5e8e3925f4137e'), "%3C%21DOCTYPE%20HTML%3E%3Chtml%3E%3C/html%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"7a8e5ec2c95e725717c564dd49bfa86c2e1a88ba":[async_test('html5lib_tests7.html 7a8e5ec2c95e725717c564dd49bfa86c2e1a88ba'), "%3Cdiv%3E%3Cp%3Ea%3C/x%3E%20b", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%20%20%22a%20b%22"],"17dcea170bb74d18ed4776dbb98f0bac6a11364d":[async_test('html5lib_tests7.html 17dcea170bb74d18ed4776dbb98f0bac6a11364d'), "%3Ctable%3E%3Ctr%3E%3Ctd%3E%3Ccode%3E%3C/code%3E%20%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccode%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22%20%22"],"9457c10c9f987bbc95937b34763fe956d61d237b":[async_test('html5lib_tests7.html 9457c10c9f987bbc95937b34763fe956d61d237b'), "%3Ctable%3E%3Cb%3E%3Ctr%3E%3Ctd%3Eaaa%3C/td%3E%3C/tr%3Ebbb%3C/table%3Eccc", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%22bbb%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22aaa%22%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%22ccc%22"],"0fa23bb5d8b2a591afb1842b8f4c00c490c127b4":[async_test('html5lib_tests7.html 0fa23bb5d8b2a591afb1842b8f4c00c490c127b4'), "A%3Ctable%3E%3Ctr%3E%20B%3C/tr%3E%20B%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%20B%20B%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"f6d60b3ae48e2b69b4c25125f9b5a3ab4867521b":[async_test('html5lib_tests7.html f6d60b3ae48e2b69b4c25125f9b5a3ab4867521b'), "A%3Ctable%3E%3Ctr%3E%20B%3C/tr%3E%20%3C/em%3EC%3C/table%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%20BC%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%22%20%22"],"5b0b3edcc3ce9fdc9f58eb62d326865ca0aab8c8":[async_test('html5lib_tests7.html 5b0b3edcc3ce9fdc9f58eb62d326865ca0aab8c8'), "%3Cselect%3E%3Ckeygen%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%3Ckeygen%3E"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_webkit01.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_webkit01.html
index 43f07f5..1f8dd28 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_webkit01.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_webkit01.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['4235382bf15f93f7dd1096832ae74cc71edef4d7','9906bb30ae08654f4c67bf6d97040abbca91082d','97974a9c541d97c7bb5bd8ba97c2ccbe0c6e55bd','f30960ce7d5b25adc846e47823f977616d38b296','f3ed3ec3a14058fd97c9aad83299bc8836d21283','f073fda1df7d917e37a207c326bdc4db0b4b3481','5533bf52e328c5748a203be1bb245848de592783','5b753a783c228a1b423152d9707cf900e57bc5da','eea9ac89544ec31fb78f7629ea0e065bd7422c98','03a99ca235d60b3191a3c5671ff7df5ffca5372d','c37bc2e44b2765025f58c9680a560c1a3dc3ab93','c6b4dc9c0041dd5a069741dbf228f03439115b8d','d4613a2b82f5d4ec251149508096f8071a8714d5','0f78a3fae382185ef9ac8f767efafb401249c1e1','375260e547e078df727a3669f5c8dcef7ccf71a7','3bea2bf663be5de2bbcdad57ac95c5933e266d42','19944775fd9dd871fbc4cf813eb105c29bc5d834','25b53e528a0ad0b002c8a26b7260213a24981860','ce59a8ae9cf138cb81fd017711097d1643c6f227','913071287591cc570d512c824b419d9a172d4339','2669743ff272e43978ac0f8a2f2c602ec9036c26','a9e759bf3ce415ad6216c58ee906639c03ffa03f','bbbea9a3752a36a64f2b62f15383406b16113fe7','e0910f26aac678f50612da8d05d20aa29e140655','f30a9e97cdf3c54ffccaa7b9c2067ff109317530','0d99b69e40dbb898cd4a188aa4920042c30815b4','a20991a86f6d34fd67ddb4002e3972d82230d879','006dbf89bfa3df51d837e7557c3e32dfbc6f0f4c','7e8f1399f9c87dbd103303c6051873079b265360','5081f4afe652b92f23e80d275f67dec9139df8e3','f904db0ad0c00794f8a2ca238b4c36084993c741','d56fcf271bf902fc4739f055f031f0d11620057c','a897ca0ad0492945709d0772c91e33d485ddf9c7','7274654c671e2e1715a017a239a98399496b7ba6','346ed4219453716e3fee23ccddf283fde408d349','4d1b6f58e6bb11d27e2097f656abdd1122a45a67','bb7bc3a43938aef67cffb49084f27cc678cd9b7a','992947d22821e1eb7b9116a99420b6c7f5ad46f2','88eca99701e0ad1fda391722e5f0cdcf1e2b667d','4b36a9545e5d8df93c447eaa8b1dc42d704d9c61','dc2437252e38b998fec43311653af309a65ef35f','ec499b1124d241faaa28e2f985ecf5f3fa00fcf8','cd236e537fa5d967d11efea30d96cd6ef6c9f46b','2ee90ed930fca8db8278161af28adde1e0c3907b','a785e349a36349db19df18c06032315c6356486c','401c8625b8574b46d03b8e95acd29358c82b53d3','1390b296dc6152683e9de9820194bca39e18cbd6','7dc7e88fa9eba71234bdb4037a15a4f70183a466',];
+      var order = ['4235382bf15f93f7dd1096832ae74cc71edef4d7','9906bb30ae08654f4c67bf6d97040abbca91082d','97974a9c541d97c7bb5bd8ba97c2ccbe0c6e55bd','f30960ce7d5b25adc846e47823f977616d38b296','f3ed3ec3a14058fd97c9aad83299bc8836d21283','f073fda1df7d917e37a207c326bdc4db0b4b3481','5533bf52e328c5748a203be1bb245848de592783','5b753a783c228a1b423152d9707cf900e57bc5da','eea9ac89544ec31fb78f7629ea0e065bd7422c98','03a99ca235d60b3191a3c5671ff7df5ffca5372d','c37bc2e44b2765025f58c9680a560c1a3dc3ab93','c6b4dc9c0041dd5a069741dbf228f03439115b8d','d4613a2b82f5d4ec251149508096f8071a8714d5','0f78a3fae382185ef9ac8f767efafb401249c1e1','375260e547e078df727a3669f5c8dcef7ccf71a7','3bea2bf663be5de2bbcdad57ac95c5933e266d42','19944775fd9dd871fbc4cf813eb105c29bc5d834','25b53e528a0ad0b002c8a26b7260213a24981860','ce59a8ae9cf138cb81fd017711097d1643c6f227','913071287591cc570d512c824b419d9a172d4339','2669743ff272e43978ac0f8a2f2c602ec9036c26','a9e759bf3ce415ad6216c58ee906639c03ffa03f','bbbea9a3752a36a64f2b62f15383406b16113fe7','e0910f26aac678f50612da8d05d20aa29e140655','f30a9e97cdf3c54ffccaa7b9c2067ff109317530','0d99b69e40dbb898cd4a188aa4920042c30815b4','a20991a86f6d34fd67ddb4002e3972d82230d879','006dbf89bfa3df51d837e7557c3e32dfbc6f0f4c','7e8f1399f9c87dbd103303c6051873079b265360','5081f4afe652b92f23e80d275f67dec9139df8e3','f904db0ad0c00794f8a2ca238b4c36084993c741','d56fcf271bf902fc4739f055f031f0d11620057c','a897ca0ad0492945709d0772c91e33d485ddf9c7','7274654c671e2e1715a017a239a98399496b7ba6','346ed4219453716e3fee23ccddf283fde408d349','4d1b6f58e6bb11d27e2097f656abdd1122a45a67','bb7bc3a43938aef67cffb49084f27cc678cd9b7a','992947d22821e1eb7b9116a99420b6c7f5ad46f2','88eca99701e0ad1fda391722e5f0cdcf1e2b667d','4b36a9545e5d8df93c447eaa8b1dc42d704d9c61','dc2437252e38b998fec43311653af309a65ef35f','ec499b1124d241faaa28e2f985ecf5f3fa00fcf8','cd236e537fa5d967d11efea30d96cd6ef6c9f46b','2ee90ed930fca8db8278161af28adde1e0c3907b','9804e9659cd045f199d9f58ef85c2639724359aa','a785e349a36349db19df18c06032315c6356486c','401c8625b8574b46d03b8e95acd29358c82b53d3','1390b296dc6152683e9de9820194bca39e18cbd6','7dc7e88fa9eba71234bdb4037a15a4f70183a466',];
       var tests = {
-          "4235382bf15f93f7dd1096832ae74cc71edef4d7":[async_test('html5lib_webkit01.html 4235382bf15f93f7dd1096832ae74cc71edef4d7'), "Test", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22Test%22"],"9906bb30ae08654f4c67bf6d97040abbca91082d":[async_test('html5lib_webkit01.html 9906bb30ae08654f4c67bf6d97040abbca91082d'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"97974a9c541d97c7bb5bd8ba97c2ccbe0c6e55bd":[async_test('html5lib_webkit01.html 97974a9c541d97c7bb5bd8ba97c2ccbe0c6e55bd'), "%3Cdiv%3ETest%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Test%22"],"f30960ce7d5b25adc846e47823f977616d38b296":[async_test('html5lib_webkit01.html f30960ce7d5b25adc846e47823f977616d38b296'), "%3Cdi", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"f3ed3ec3a14058fd97c9aad83299bc8836d21283":[async_test('html5lib_webkit01.html f3ed3ec3a14058fd97c9aad83299bc8836d21283'), "%3Cdiv%3EHello%3C/div%3E%0A%3Cscript%3E%0Aconsole.log%28%22PASS%22%29%3B%0A%3C/script%3E%0A%3Cdiv%3EBye%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Hello%22%0A%7C%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%22%0Aconsole.log%28%22PASS%22%29%3B%0A%22%0A%7C%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Bye%22"],"f073fda1df7d917e37a207c326bdc4db0b4b3481":[async_test('html5lib_webkit01.html f073fda1df7d917e37a207c326bdc4db0b4b3481'), "%3Cdiv%20foo%3D%22bar%22%3EHello%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20foo%3D%22bar%22%0A%7C%20%20%20%20%20%20%20%22Hello%22"],"5533bf52e328c5748a203be1bb245848de592783":[async_test('html5lib_webkit01.html 5533bf52e328c5748a203be1bb245848de592783'), "%3Cdiv%3EHello%3C/div%3E%0A%3Cscript%3E%0Aconsole.log%28%22FOO%3Cspan%3EBAR%3C/span%3EBAZ%22%29%3B%0A%3C/script%3E%0A%3Cdiv%3EBye%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Hello%22%0A%7C%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%22%0Aconsole.log%28%22FOO%3Cspan%3EBAR%3C/span%3EBAZ%22%29%3B%0A%22%0A%7C%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Bye%22"],"5b753a783c228a1b423152d9707cf900e57bc5da":[async_test('html5lib_webkit01.html 5b753a783c228a1b423152d9707cf900e57bc5da'), "%3Cfoo%20bar%3D%22baz%22%3E%3C/foo%3E%3Cpotato%20quack%3D%22duck%22%3E%3C/potato%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22baz%22%0A%7C%20%20%20%20%20%3Cpotato%3E%0A%7C%20%20%20%20%20%20%20quack%3D%22duck%22"],"eea9ac89544ec31fb78f7629ea0e065bd7422c98":[async_test('html5lib_webkit01.html eea9ac89544ec31fb78f7629ea0e065bd7422c98'), "%3Cfoo%20bar%3D%22baz%22%3E%3Cpotato%20quack%3D%22duck%22%3E%3C/potato%3E%3C/foo%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22baz%22%0A%7C%20%20%20%20%20%20%20%3Cpotato%3E%0A%7C%20%20%20%20%20%20%20%20%20quack%3D%22duck%22"],"03a99ca235d60b3191a3c5671ff7df5ffca5372d":[async_test('html5lib_webkit01.html 03a99ca235d60b3191a3c5671ff7df5ffca5372d'), "%3Cfoo%3E%3C/foo%20bar%3D%22baz%22%3E%3Cpotato%3E%3C/potato%20quack%3D%22duck%22%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%3Cpotato%3E"],"c37bc2e44b2765025f58c9680a560c1a3dc3ab93":[async_test('html5lib_webkit01.html c37bc2e44b2765025f58c9680a560c1a3dc3ab93'), "%3C/%20tttt%3E", "%23document%0A%7C%20%3C%21--%20%20tttt%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"c6b4dc9c0041dd5a069741dbf228f03439115b8d":[async_test('html5lib_webkit01.html c6b4dc9c0041dd5a069741dbf228f03439115b8d'), "%3Cdiv%20FOO%20%3E%3Cimg%3E%3Cimg%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20foo%3D%22%22%0A%7C%20%20%20%20%20%20%20%3Cimg%3E%0A%7C%20%20%20%20%20%20%20%3Cimg%3E"],"d4613a2b82f5d4ec251149508096f8071a8714d5":[async_test('html5lib_webkit01.html d4613a2b82f5d4ec251149508096f8071a8714d5'), "%3Cp%3ETest%3C/p%3Cp%3ETest2%3C/p%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%22TestTest2%22"],"0f78a3fae382185ef9ac8f767efafb401249c1e1":[async_test('html5lib_webkit01.html 0f78a3fae382185ef9ac8f767efafb401249c1e1'), "%3Crdar%3A//problem/6869687%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Crdar%3A%3E%0A%7C%20%20%20%20%20%20%206869687%3D%22%22%0A%7C%20%20%20%20%20%20%20problem%3D%22%22"],"375260e547e078df727a3669f5c8dcef7ccf71a7":[async_test('html5lib_webkit01.html 375260e547e078df727a3669f5c8dcef7ccf71a7'), "%3CA%3Etest%3C%20/A%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%22test%3C%20/A%3E%22"],"3bea2bf663be5de2bbcdad57ac95c5933e266d42":[async_test('html5lib_webkit01.html 3bea2bf663be5de2bbcdad57ac95c5933e266d42'), "%26lt%3B", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%3C%22"],"19944775fd9dd871fbc4cf813eb105c29bc5d834":[async_test('html5lib_webkit01.html 19944775fd9dd871fbc4cf813eb105c29bc5d834'), "%3Cbody%20foo%3D%27bar%27%3E%3Cbody%20foo%3D%27baz%27%20yo%3D%27mama%27%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20foo%3D%22bar%22%0A%7C%20%20%20%20%20yo%3D%22mama%22"],"25b53e528a0ad0b002c8a26b7260213a24981860":[async_test('html5lib_webkit01.html 25b53e528a0ad0b002c8a26b7260213a24981860'), "%3Cbody%3E%3C/br%20foo%3D%22bar%22%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbr%3E"],"ce59a8ae9cf138cb81fd017711097d1643c6f227":[async_test('html5lib_webkit01.html ce59a8ae9cf138cb81fd017711097d1643c6f227'), "%3Cbdy%3E%3Cbr%20foo%3D%22bar%22%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbdy%3E%0A%7C%20%20%20%20%20%20%20%3Cbr%3E%0A%7C%20%20%20%20%20%20%20%20%20foo%3D%22bar%22"],"913071287591cc570d512c824b419d9a172d4339":[async_test('html5lib_webkit01.html 913071287591cc570d512c824b419d9a172d4339'), "%3Cbody%3E%3C/body%3E%3C/br%20foo%3D%22bar%22%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbr%3E"],"2669743ff272e43978ac0f8a2f2c602ec9036c26":[async_test('html5lib_webkit01.html 2669743ff272e43978ac0f8a2f2c602ec9036c26'), "%3Cbdy%3E%3C/body%3E%3Cbr%20foo%3D%22bar%22%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbdy%3E%0A%7C%20%20%20%20%20%20%20%3Cbr%3E%0A%7C%20%20%20%20%20%20%20%20%20foo%3D%22bar%22"],"a9e759bf3ce415ad6216c58ee906639c03ffa03f":[async_test('html5lib_webkit01.html a9e759bf3ce415ad6216c58ee906639c03ffa03f'), "%3Chtml%3E%3Cbody%3E%3C/body%3E%3C/html%3E%3C%21--%20Hi%20there%20--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%3C%21--%20%20Hi%20there%20%20--%3E"],"bbbea9a3752a36a64f2b62f15383406b16113fe7":[async_test('html5lib_webkit01.html bbbea9a3752a36a64f2b62f15383406b16113fe7'), "%3Chtml%3E%3Cbody%3E%3C/body%3E%3C/html%3Ex%3C%21--%20Hi%20there%20--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%3C%21--%20%20Hi%20there%20%20--%3E"],"e0910f26aac678f50612da8d05d20aa29e140655":[async_test('html5lib_webkit01.html e0910f26aac678f50612da8d05d20aa29e140655'), "%3Chtml%3E%3Cbody%3E%3C/body%3E%3C/html%3Ex%3C%21--%20Hi%20there%20--%3E%3C/html%3E%3C%21--%20Again%20--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%3C%21--%20%20Hi%20there%20%20--%3E%0A%7C%20%3C%21--%20%20Again%20%20--%3E"],"f30a9e97cdf3c54ffccaa7b9c2067ff109317530":[async_test('html5lib_webkit01.html f30a9e97cdf3c54ffccaa7b9c2067ff109317530'), "%3Chtml%3E%3Cbody%3E%3C/body%3E%3C/html%3Ex%3C%21--%20Hi%20there%20--%3E%3C/body%3E%3C/html%3E%3C%21--%20Again%20--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%3C%21--%20%20Hi%20there%20%20--%3E%0A%7C%20%3C%21--%20%20Again%20%20--%3E"],"0d99b69e40dbb898cd4a188aa4920042c30815b4":[async_test('html5lib_webkit01.html 0d99b69e40dbb898cd4a188aa4920042c30815b4'), "%3Chtml%3E%3Cbody%3E%3Cruby%3E%3Cdiv%3E%3Crp%3Exx%3C/rp%3E%3C/div%3E%3C/ruby%3E%3C/body%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22xx%22"],"a20991a86f6d34fd67ddb4002e3972d82230d879":[async_test('html5lib_webkit01.html a20991a86f6d34fd67ddb4002e3972d82230d879'), "%3Chtml%3E%3Cbody%3E%3Cruby%3E%3Cdiv%3E%3Crt%3Exx%3C/rt%3E%3C/div%3E%3C/ruby%3E%3C/body%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22xx%22"],"006dbf89bfa3df51d837e7557c3e32dfbc6f0f4c":[async_test('html5lib_webkit01.html 006dbf89bfa3df51d837e7557c3e32dfbc6f0f4c'), "%3Chtml%3E%3Cframeset%3E%3C%21--1--%3E%3Cnoframes%3EA%3C/noframes%3E%3C%21--2--%3E%3C/frameset%3E%3C%21--3--%3E%3Cnoframes%3EB%3C/noframes%3E%3C%21--4--%3E%3C/html%3E%3C%21--5--%3E%3Cnoframes%3EC%3C/noframes%3E%3C%21--6--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3C%21--%201%20--%3E%0A%7C%20%20%20%20%20%3Cnoframes%3E%0A%7C%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3C%21--%202%20--%3E%0A%7C%20%20%20%3C%21--%203%20--%3E%0A%7C%20%20%20%3Cnoframes%3E%0A%7C%20%20%20%20%20%22B%22%0A%7C%20%20%20%3C%21--%204%20--%3E%0A%7C%20%20%20%3Cnoframes%3E%0A%7C%20%20%20%20%20%22C%22%0A%7C%20%3C%21--%205%20--%3E%0A%7C%20%3C%21--%206%20--%3E"],"7e8f1399f9c87dbd103303c6051873079b265360":[async_test('html5lib_webkit01.html 7e8f1399f9c87dbd103303c6051873079b265360'), "%3Cselect%3E%3Coption%3EA%3Cselect%3E%3Coption%3EB%3Cselect%3E%3Coption%3EC%3Cselect%3E%3Coption%3ED%3Cselect%3E%3Coption%3EE%3Cselect%3E%3Coption%3EF%3Cselect%3E%3Coption%3EG%3Cselect%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%22B%22%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22C%22%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%22D%22%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22E%22%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%22F%22%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22G%22"],"5081f4afe652b92f23e80d275f67dec9139df8e3":[async_test('html5lib_webkit01.html 5081f4afe652b92f23e80d275f67dec9139df8e3'), "%3Cdd%3E%3Cdd%3E%3Cdt%3E%3Cdt%3E%3Cdd%3E%3Cli%3E%3Cli%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdd%3E%0A%7C%20%20%20%20%20%3Cdd%3E%0A%7C%20%20%20%20%20%3Cdt%3E%0A%7C%20%20%20%20%20%3Cdt%3E%0A%7C%20%20%20%20%20%3Cdd%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E"],"f904db0ad0c00794f8a2ca238b4c36084993c741":[async_test('html5lib_webkit01.html f904db0ad0c00794f8a2ca238b4c36084993c741'), "%3Cdiv%3E%3Cb%3E%3C/div%3E%3Cdiv%3E%3Cnobr%3Ea%3Cnobr%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cnobr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cnobr%3E"],"d56fcf271bf902fc4739f055f031f0d11620057c":[async_test('html5lib_webkit01.html d56fcf271bf902fc4739f055f031f0d11620057c'), "%3Chead%3E%3C/head%3E%0A%3Cbody%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%22%0A%22%0A%7C%20%20%20%3Cbody%3E"],"a897ca0ad0492945709d0772c91e33d485ddf9c7":[async_test('html5lib_webkit01.html a897ca0ad0492945709d0772c91e33d485ddf9c7'), "%3Chead%3E%3C/head%3E%20%3Cstyle%3E%3C/style%3Eddd", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%22%20%22%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22ddd%22"],"7274654c671e2e1715a017a239a98399496b7ba6":[async_test('html5lib_webkit01.html 7274654c671e2e1715a017a239a98399496b7ba6'), "%3Ckbd%3E%3Ctable%3E%3C/kbd%3E%3Ccol%3E%3Cselect%3E%3Ctr%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ckbd%3E%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"346ed4219453716e3fee23ccddf283fde408d349":[async_test('html5lib_webkit01.html 346ed4219453716e3fee23ccddf283fde408d349'), "%3Ckbd%3E%3Ctable%3E%3C/kbd%3E%3Ccol%3E%3Cselect%3E%3Ctr%3E%3C/table%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ckbd%3E%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E"],"4d1b6f58e6bb11d27e2097f656abdd1122a45a67":[async_test('html5lib_webkit01.html 4d1b6f58e6bb11d27e2097f656abdd1122a45a67'), "%3Ca%3E%3Cli%3E%3Cstyle%3E%3C/style%3E%3Ctitle%3E%3C/title%3E%3C/a%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctitle%3E"],"bb7bc3a43938aef67cffb49084f27cc678cd9b7a":[async_test('html5lib_webkit01.html bb7bc3a43938aef67cffb49084f27cc678cd9b7a'), "%3Cfont%3E%3C/p%3E%3Cp%3E%3Cmeta%3E%3Ctitle%3E%3C/title%3E%3C/font%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctitle%3E"],"992947d22821e1eb7b9116a99420b6c7f5ad46f2":[async_test('html5lib_webkit01.html 992947d22821e1eb7b9116a99420b6c7f5ad46f2'), "%3Ca%3E%3Ccenter%3E%3Ctitle%3E%3C/title%3E%3Ca%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%3Ccenter%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E"],"88eca99701e0ad1fda391722e5f0cdcf1e2b667d":[async_test('html5lib_webkit01.html 88eca99701e0ad1fda391722e5f0cdcf1e2b667d'), "%3Csvg%3E%3Ctitle%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"4b36a9545e5d8df93c447eaa8b1dc42d704d9c61":[async_test('html5lib_webkit01.html 4b36a9545e5d8df93c447eaa8b1dc42d704d9c61'), "%3Csvg%3E%3Ctitle%3E%3Crect%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crect%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"dc2437252e38b998fec43311653af309a65ef35f":[async_test('html5lib_webkit01.html dc2437252e38b998fec43311653af309a65ef35f'), "%3Csvg%3E%3Ctitle%3E%3Csvg%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"ec499b1124d241faaa28e2f985ecf5f3fa00fcf8":[async_test('html5lib_webkit01.html ec499b1124d241faaa28e2f985ecf5f3fa00fcf8'), "%3Cimg%20%3C%3D%22%22%20FAIL%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cimg%3E%0A%7C%20%20%20%20%20%20%20%3C%3D%22%22%0A%7C%20%20%20%20%20%20%20fail%3D%22%22"],"cd236e537fa5d967d11efea30d96cd6ef6c9f46b":[async_test('html5lib_webkit01.html cd236e537fa5d967d11efea30d96cd6ef6c9f46b'), "%3Cul%3E%3Cli%3E%3Cdiv%20id%3D%27foo%27/%3EA%3C/li%3E%3Cli%3EB%3Cdiv%3EC%3C/div%3E%3C/li%3E%3C/ul%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cul%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20id%3D%22foo%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%20%20%22B%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22C%22"],"2ee90ed930fca8db8278161af28adde1e0c3907b":[async_test('html5lib_webkit01.html 2ee90ed930fca8db8278161af28adde1e0c3907b'), "%3Csvg%3E%3Cem%3E%3Cdesc%3E%3C/em%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%3Cdesc%3E"],"a785e349a36349db19df18c06032315c6356486c":[async_test('html5lib_webkit01.html a785e349a36349db19df18c06032315c6356486c'), "%3Csvg%3E%3Ctfoot%3E%3C/mi%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20tfoot%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20td%3E"],"401c8625b8574b46d03b8e95acd29358c82b53d3":[async_test('html5lib_webkit01.html 401c8625b8574b46d03b8e95acd29358c82b53d3'), "%3Cmath%3E%3Cmrow%3E%3Cmrow%3E%3Cmn%3E1%3C/mn%3E%3C/mrow%3E%3Cmi%3Ea%3C/mi%3E%3C/mrow%3E%3C/math%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20mrow%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mrow%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cmath%20mn%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%221%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mi%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22a%22"],"1390b296dc6152683e9de9820194bca39e18cbd6":[async_test('html5lib_webkit01.html 1390b296dc6152683e9de9820194bca39e18cbd6'), "%3C%21doctype%20html%3E%3Cinput%20type%3D%22hidden%22%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"7dc7e88fa9eba71234bdb4037a15a4f70183a466":[async_test('html5lib_webkit01.html 7dc7e88fa9eba71234bdb4037a15a4f70183a466'), "%3C%21doctype%20html%3E%3Cinput%20type%3D%22button%22%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20type%3D%22button%22"],
+          "4235382bf15f93f7dd1096832ae74cc71edef4d7":[async_test('html5lib_webkit01.html 4235382bf15f93f7dd1096832ae74cc71edef4d7'), "Test", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22Test%22"],"9906bb30ae08654f4c67bf6d97040abbca91082d":[async_test('html5lib_webkit01.html 9906bb30ae08654f4c67bf6d97040abbca91082d'), "%3Cdiv%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E"],"97974a9c541d97c7bb5bd8ba97c2ccbe0c6e55bd":[async_test('html5lib_webkit01.html 97974a9c541d97c7bb5bd8ba97c2ccbe0c6e55bd'), "%3Cdiv%3ETest%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Test%22"],"f30960ce7d5b25adc846e47823f977616d38b296":[async_test('html5lib_webkit01.html f30960ce7d5b25adc846e47823f977616d38b296'), "%3Cdi", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"f3ed3ec3a14058fd97c9aad83299bc8836d21283":[async_test('html5lib_webkit01.html f3ed3ec3a14058fd97c9aad83299bc8836d21283'), "%3Cdiv%3EHello%3C/div%3E%0A%3Cscript%3E%0Aconsole.log%28%22PASS%22%29%3B%0A%3C/script%3E%0A%3Cdiv%3EBye%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Hello%22%0A%7C%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%22%0Aconsole.log%28%22PASS%22%29%3B%0A%22%0A%7C%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Bye%22"],"f073fda1df7d917e37a207c326bdc4db0b4b3481":[async_test('html5lib_webkit01.html f073fda1df7d917e37a207c326bdc4db0b4b3481'), "%3Cdiv%20foo%3D%22bar%22%3EHello%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20foo%3D%22bar%22%0A%7C%20%20%20%20%20%20%20%22Hello%22"],"5533bf52e328c5748a203be1bb245848de592783":[async_test('html5lib_webkit01.html 5533bf52e328c5748a203be1bb245848de592783'), "%3Cdiv%3EHello%3C/div%3E%0A%3Cscript%3E%0Aconsole.log%28%22FOO%3Cspan%3EBAR%3C/span%3EBAZ%22%29%3B%0A%3C/script%3E%0A%3Cdiv%3EBye%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Hello%22%0A%7C%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%3Cscript%3E%0A%7C%20%20%20%20%20%20%20%22%0Aconsole.log%28%22FOO%3Cspan%3EBAR%3C/span%3EBAZ%22%29%3B%0A%22%0A%7C%20%20%20%20%20%22%0A%22%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%22Bye%22"],"5b753a783c228a1b423152d9707cf900e57bc5da":[async_test('html5lib_webkit01.html 5b753a783c228a1b423152d9707cf900e57bc5da'), "%3Cfoo%20bar%3D%22baz%22%3E%3C/foo%3E%3Cpotato%20quack%3D%22duck%22%3E%3C/potato%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22baz%22%0A%7C%20%20%20%20%20%3Cpotato%3E%0A%7C%20%20%20%20%20%20%20quack%3D%22duck%22"],"eea9ac89544ec31fb78f7629ea0e065bd7422c98":[async_test('html5lib_webkit01.html eea9ac89544ec31fb78f7629ea0e065bd7422c98'), "%3Cfoo%20bar%3D%22baz%22%3E%3Cpotato%20quack%3D%22duck%22%3E%3C/potato%3E%3C/foo%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22baz%22%0A%7C%20%20%20%20%20%20%20%3Cpotato%3E%0A%7C%20%20%20%20%20%20%20%20%20quack%3D%22duck%22"],"03a99ca235d60b3191a3c5671ff7df5ffca5372d":[async_test('html5lib_webkit01.html 03a99ca235d60b3191a3c5671ff7df5ffca5372d'), "%3Cfoo%3E%3C/foo%20bar%3D%22baz%22%3E%3Cpotato%3E%3C/potato%20quack%3D%22duck%22%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%3Cpotato%3E"],"c37bc2e44b2765025f58c9680a560c1a3dc3ab93":[async_test('html5lib_webkit01.html c37bc2e44b2765025f58c9680a560c1a3dc3ab93'), "%3C/%20tttt%3E", "%23document%0A%7C%20%3C%21--%20%20tttt%20--%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"c6b4dc9c0041dd5a069741dbf228f03439115b8d":[async_test('html5lib_webkit01.html c6b4dc9c0041dd5a069741dbf228f03439115b8d'), "%3Cdiv%20FOO%20%3E%3Cimg%3E%3Cimg%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20foo%3D%22%22%0A%7C%20%20%20%20%20%20%20%3Cimg%3E%0A%7C%20%20%20%20%20%20%20%3Cimg%3E"],"d4613a2b82f5d4ec251149508096f8071a8714d5":[async_test('html5lib_webkit01.html d4613a2b82f5d4ec251149508096f8071a8714d5'), "%3Cp%3ETest%3C/p%3Cp%3ETest2%3C/p%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%22TestTest2%22"],"0f78a3fae382185ef9ac8f767efafb401249c1e1":[async_test('html5lib_webkit01.html 0f78a3fae382185ef9ac8f767efafb401249c1e1'), "%3Crdar%3A//problem/6869687%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Crdar%3A%3E%0A%7C%20%20%20%20%20%20%206869687%3D%22%22%0A%7C%20%20%20%20%20%20%20problem%3D%22%22"],"375260e547e078df727a3669f5c8dcef7ccf71a7":[async_test('html5lib_webkit01.html 375260e547e078df727a3669f5c8dcef7ccf71a7'), "%3CA%3Etest%3C%20/A%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%22test%3C%20/A%3E%22"],"3bea2bf663be5de2bbcdad57ac95c5933e266d42":[async_test('html5lib_webkit01.html 3bea2bf663be5de2bbcdad57ac95c5933e266d42'), "%26lt%3B", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22%3C%22"],"19944775fd9dd871fbc4cf813eb105c29bc5d834":[async_test('html5lib_webkit01.html 19944775fd9dd871fbc4cf813eb105c29bc5d834'), "%3Cbody%20foo%3D%27bar%27%3E%3Cbody%20foo%3D%27baz%27%20yo%3D%27mama%27%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20foo%3D%22bar%22%0A%7C%20%20%20%20%20yo%3D%22mama%22"],"25b53e528a0ad0b002c8a26b7260213a24981860":[async_test('html5lib_webkit01.html 25b53e528a0ad0b002c8a26b7260213a24981860'), "%3Cbody%3E%3C/br%20foo%3D%22bar%22%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbr%3E"],"ce59a8ae9cf138cb81fd017711097d1643c6f227":[async_test('html5lib_webkit01.html ce59a8ae9cf138cb81fd017711097d1643c6f227'), "%3Cbdy%3E%3Cbr%20foo%3D%22bar%22%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbdy%3E%0A%7C%20%20%20%20%20%20%20%3Cbr%3E%0A%7C%20%20%20%20%20%20%20%20%20foo%3D%22bar%22"],"913071287591cc570d512c824b419d9a172d4339":[async_test('html5lib_webkit01.html 913071287591cc570d512c824b419d9a172d4339'), "%3Cbody%3E%3C/body%3E%3C/br%20foo%3D%22bar%22%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbr%3E"],"2669743ff272e43978ac0f8a2f2c602ec9036c26":[async_test('html5lib_webkit01.html 2669743ff272e43978ac0f8a2f2c602ec9036c26'), "%3Cbdy%3E%3C/body%3E%3Cbr%20foo%3D%22bar%22%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cbdy%3E%0A%7C%20%20%20%20%20%20%20%3Cbr%3E%0A%7C%20%20%20%20%20%20%20%20%20foo%3D%22bar%22"],"a9e759bf3ce415ad6216c58ee906639c03ffa03f":[async_test('html5lib_webkit01.html a9e759bf3ce415ad6216c58ee906639c03ffa03f'), "%3Chtml%3E%3Cbody%3E%3C/body%3E%3C/html%3E%3C%21--%20Hi%20there%20--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%3C%21--%20%20Hi%20there%20%20--%3E"],"bbbea9a3752a36a64f2b62f15383406b16113fe7":[async_test('html5lib_webkit01.html bbbea9a3752a36a64f2b62f15383406b16113fe7'), "%3Chtml%3E%3Cbody%3E%3C/body%3E%3C/html%3Ex%3C%21--%20Hi%20there%20--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%3C%21--%20%20Hi%20there%20%20--%3E"],"e0910f26aac678f50612da8d05d20aa29e140655":[async_test('html5lib_webkit01.html e0910f26aac678f50612da8d05d20aa29e140655'), "%3Chtml%3E%3Cbody%3E%3C/body%3E%3C/html%3Ex%3C%21--%20Hi%20there%20--%3E%3C/html%3E%3C%21--%20Again%20--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%3C%21--%20%20Hi%20there%20%20--%3E%0A%7C%20%3C%21--%20%20Again%20%20--%3E"],"f30a9e97cdf3c54ffccaa7b9c2067ff109317530":[async_test('html5lib_webkit01.html f30a9e97cdf3c54ffccaa7b9c2067ff109317530'), "%3Chtml%3E%3Cbody%3E%3C/body%3E%3C/html%3Ex%3C%21--%20Hi%20there%20--%3E%3C/body%3E%3C/html%3E%3C%21--%20Again%20--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22x%22%0A%7C%20%20%20%20%20%3C%21--%20%20Hi%20there%20%20--%3E%0A%7C%20%3C%21--%20%20Again%20%20--%3E"],"0d99b69e40dbb898cd4a188aa4920042c30815b4":[async_test('html5lib_webkit01.html 0d99b69e40dbb898cd4a188aa4920042c30815b4'), "%3Chtml%3E%3Cbody%3E%3Cruby%3E%3Cdiv%3E%3Crp%3Exx%3C/rp%3E%3C/div%3E%3C/ruby%3E%3C/body%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crp%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22xx%22"],"a20991a86f6d34fd67ddb4002e3972d82230d879":[async_test('html5lib_webkit01.html a20991a86f6d34fd67ddb4002e3972d82230d879'), "%3Chtml%3E%3Cbody%3E%3Cruby%3E%3Cdiv%3E%3Crt%3Exx%3C/rt%3E%3C/div%3E%3C/ruby%3E%3C/body%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cruby%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crt%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22xx%22"],"006dbf89bfa3df51d837e7557c3e32dfbc6f0f4c":[async_test('html5lib_webkit01.html 006dbf89bfa3df51d837e7557c3e32dfbc6f0f4c'), "%3Chtml%3E%3Cframeset%3E%3C%21--1--%3E%3Cnoframes%3EA%3C/noframes%3E%3C%21--2--%3E%3C/frameset%3E%3C%21--3--%3E%3Cnoframes%3EB%3C/noframes%3E%3C%21--4--%3E%3C/html%3E%3C%21--5--%3E%3Cnoframes%3EC%3C/noframes%3E%3C%21--6--%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E%0A%7C%20%20%20%20%20%3C%21--%201%20--%3E%0A%7C%20%20%20%20%20%3Cnoframes%3E%0A%7C%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3C%21--%202%20--%3E%0A%7C%20%20%20%3C%21--%203%20--%3E%0A%7C%20%20%20%3Cnoframes%3E%0A%7C%20%20%20%20%20%22B%22%0A%7C%20%20%20%3C%21--%204%20--%3E%0A%7C%20%20%20%3Cnoframes%3E%0A%7C%20%20%20%20%20%22C%22%0A%7C%20%3C%21--%205%20--%3E%0A%7C%20%3C%21--%206%20--%3E"],"7e8f1399f9c87dbd103303c6051873079b265360":[async_test('html5lib_webkit01.html 7e8f1399f9c87dbd103303c6051873079b265360'), "%3Cselect%3E%3Coption%3EA%3Cselect%3E%3Coption%3EB%3Cselect%3E%3Coption%3EC%3Cselect%3E%3Coption%3ED%3Cselect%3E%3Coption%3EE%3Cselect%3E%3Coption%3EF%3Cselect%3E%3Coption%3EG%3Cselect%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%22B%22%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22C%22%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%22D%22%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22E%22%0A%7C%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%22F%22%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Coption%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22G%22"],"5081f4afe652b92f23e80d275f67dec9139df8e3":[async_test('html5lib_webkit01.html 5081f4afe652b92f23e80d275f67dec9139df8e3'), "%3Cdd%3E%3Cdd%3E%3Cdt%3E%3Cdt%3E%3Cdd%3E%3Cli%3E%3Cli%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdd%3E%0A%7C%20%20%20%20%20%3Cdd%3E%0A%7C%20%20%20%20%20%3Cdt%3E%0A%7C%20%20%20%20%20%3Cdt%3E%0A%7C%20%20%20%20%20%3Cdd%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E"],"f904db0ad0c00794f8a2ca238b4c36084993c741":[async_test('html5lib_webkit01.html f904db0ad0c00794f8a2ca238b4c36084993c741'), "%3Cdiv%3E%3Cb%3E%3C/div%3E%3Cdiv%3E%3Cnobr%3Ea%3Cnobr%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cnobr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22a%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cnobr%3E"],"d56fcf271bf902fc4739f055f031f0d11620057c":[async_test('html5lib_webkit01.html d56fcf271bf902fc4739f055f031f0d11620057c'), "%3Chead%3E%3C/head%3E%0A%3Cbody%3E%3C/body%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%22%0A%22%0A%7C%20%20%20%3Cbody%3E"],"a897ca0ad0492945709d0772c91e33d485ddf9c7":[async_test('html5lib_webkit01.html a897ca0ad0492945709d0772c91e33d485ddf9c7'), "%3Chead%3E%3C/head%3E%20%3Cstyle%3E%3C/style%3Eddd", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%22%20%22%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22ddd%22"],"7274654c671e2e1715a017a239a98399496b7ba6":[async_test('html5lib_webkit01.html 7274654c671e2e1715a017a239a98399496b7ba6'), "%3Ckbd%3E%3Ctable%3E%3C/kbd%3E%3Ccol%3E%3Cselect%3E%3Ctr%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ckbd%3E%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E"],"346ed4219453716e3fee23ccddf283fde408d349":[async_test('html5lib_webkit01.html 346ed4219453716e3fee23ccddf283fde408d349'), "%3Ckbd%3E%3Ctable%3E%3C/kbd%3E%3Ccol%3E%3Cselect%3E%3Ctr%3E%3C/table%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ckbd%3E%0A%7C%20%20%20%20%20%20%20%3Cselect%3E%0A%7C%20%20%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ccolgroup%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ccol%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%3Cdiv%3E"],"4d1b6f58e6bb11d27e2097f656abdd1122a45a67":[async_test('html5lib_webkit01.html 4d1b6f58e6bb11d27e2097f656abdd1122a45a67'), "%3Ca%3E%3Cli%3E%3Cstyle%3E%3C/style%3E%3Ctitle%3E%3C/title%3E%3C/a%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctitle%3E"],"bb7bc3a43938aef67cffb49084f27cc678cd9b7a":[async_test('html5lib_webkit01.html bb7bc3a43938aef67cffb49084f27cc678cd9b7a'), "%3Cfont%3E%3C/p%3E%3Cp%3E%3Cmeta%3E%3Ctitle%3E%3C/title%3E%3C/font%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20%3Cfont%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmeta%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctitle%3E"],"992947d22821e1eb7b9116a99420b6c7f5ad46f2":[async_test('html5lib_webkit01.html 992947d22821e1eb7b9116a99420b6c7f5ad46f2'), "%3Ca%3E%3Ccenter%3E%3Ctitle%3E%3C/title%3E%3Ca%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%3Ccenter%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctitle%3E%0A%7C%20%20%20%20%20%20%20%3Ca%3E"],"88eca99701e0ad1fda391722e5f0cdcf1e2b667d":[async_test('html5lib_webkit01.html 88eca99701e0ad1fda391722e5f0cdcf1e2b667d'), "%3Csvg%3E%3Ctitle%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"4b36a9545e5d8df93c447eaa8b1dc42d704d9c61":[async_test('html5lib_webkit01.html 4b36a9545e5d8df93c447eaa8b1dc42d704d9c61'), "%3Csvg%3E%3Ctitle%3E%3Crect%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Crect%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"dc2437252e38b998fec43311653af309a65ef35f":[async_test('html5lib_webkit01.html dc2437252e38b998fec43311653af309a65ef35f'), "%3Csvg%3E%3Ctitle%3E%3Csvg%3E%3Cdiv%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"ec499b1124d241faaa28e2f985ecf5f3fa00fcf8":[async_test('html5lib_webkit01.html ec499b1124d241faaa28e2f985ecf5f3fa00fcf8'), "%3Cimg%20%3C%3D%22%22%20FAIL%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cimg%3E%0A%7C%20%20%20%20%20%20%20%3C%3D%22%22%0A%7C%20%20%20%20%20%20%20fail%3D%22%22"],"cd236e537fa5d967d11efea30d96cd6ef6c9f46b":[async_test('html5lib_webkit01.html cd236e537fa5d967d11efea30d96cd6ef6c9f46b'), "%3Cul%3E%3Cli%3E%3Cdiv%20id%3D%27foo%27/%3EA%3C/li%3E%3Cli%3EB%3Cdiv%3EC%3C/div%3E%3C/li%3E%3C/ul%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cul%3E%0A%7C%20%20%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20id%3D%22foo%22%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%20%20%3Cli%3E%0A%7C%20%20%20%20%20%20%20%20%20%22B%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22C%22"],"2ee90ed930fca8db8278161af28adde1e0c3907b":[async_test('html5lib_webkit01.html 2ee90ed930fca8db8278161af28adde1e0c3907b'), "%3Csvg%3E%3Cem%3E%3Cdesc%3E%3C/em%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%3Cdesc%3E"],"9804e9659cd045f199d9f58ef85c2639724359aa":[async_test('html5lib_webkit01.html 9804e9659cd045f199d9f58ef85c2639724359aa'), "%3Ctable%3E%3Ctr%3E%3Ctd%3E%3Csvg%3E%3Cdesc%3E%3Ctd%3E%3C/desc%3E%3Ccircle%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Csvg%20desc%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccircle%3E"],"a785e349a36349db19df18c06032315c6356486c":[async_test('html5lib_webkit01.html a785e349a36349db19df18c06032315c6356486c'), "%3Csvg%3E%3Ctfoot%3E%3C/mi%3E%3Ctd%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20tfoot%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Csvg%20td%3E"],"401c8625b8574b46d03b8e95acd29358c82b53d3":[async_test('html5lib_webkit01.html 401c8625b8574b46d03b8e95acd29358c82b53d3'), "%3Cmath%3E%3Cmrow%3E%3Cmrow%3E%3Cmn%3E1%3C/mn%3E%3C/mrow%3E%3Cmi%3Ea%3C/mi%3E%3C/mrow%3E%3C/math%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cmath%20math%3E%0A%7C%20%20%20%20%20%20%20%3Cmath%20mrow%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mrow%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cmath%20mn%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%221%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cmath%20mi%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22a%22"],"1390b296dc6152683e9de9820194bca39e18cbd6":[async_test('html5lib_webkit01.html 1390b296dc6152683e9de9820194bca39e18cbd6'), "%3C%21doctype%20html%3E%3Cinput%20type%3D%22hidden%22%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cframeset%3E"],"7dc7e88fa9eba71234bdb4037a15a4f70183a466":[async_test('html5lib_webkit01.html 7dc7e88fa9eba71234bdb4037a15a4f70183a466'), "%3C%21doctype%20html%3E%3Cinput%20type%3D%22button%22%3E%3Cframeset%3E", "%23document%0A%7C%20%3C%21DOCTYPE%20html%3E%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%20%20type%3D%22button%22"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_webkit02.html b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_webkit02.html
index 2d324eb..55ee1aad 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_webkit02.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/html5lib_webkit02.html
@@ -18,9 +18,9 @@
     <script src="/resources/testharnessreport.js"></script>
     <script>
       var num_iframes = 8;
-      var order = ['f50b8c15847159a6d2c6ecc2bd1e4a944ba5aae6','326328ea805a2ebdde707e08567713f88a4cf8ab','05138397908cfdad69a3bfe5da5a06098320b504','2aaa2ac0d7cec6144633d8f82f3bcaafa7498cd9','4a256d7ef602c7c917c758e15981b9710f9b4130','98cea04429ddbe4ffaaa0b91fe77b8c0b1f7c1f4','209ad7d6f6c9c53cb856c7d78b2bc4a7f38abd5f','cb9a86fbac96b08a6e708a2dbcd9f78539dfe9c6',];
+      var order = ['f50b8c15847159a6d2c6ecc2bd1e4a944ba5aae6','326328ea805a2ebdde707e08567713f88a4cf8ab','05138397908cfdad69a3bfe5da5a06098320b504','2aaa2ac0d7cec6144633d8f82f3bcaafa7498cd9','4a256d7ef602c7c917c758e15981b9710f9b4130','98cea04429ddbe4ffaaa0b91fe77b8c0b1f7c1f4','209ad7d6f6c9c53cb856c7d78b2bc4a7f38abd5f','cb9a86fbac96b08a6e708a2dbcd9f78539dfe9c6','c46a4badc6b1ebc524e6f90ea56183310e93ab25','464eeaecc49646ff810cadad537880c9b473a262','7b4eb6981451ede406f2f4112e83a8584e7adbf5','73aed96d7cd3116e4a3e701104616c07d1ec5e0c','139a546c72bfcedf638d031f33da43f24995f688','6e33515b4dc011dd390d433a6358bf68b786b1fd','b6d2377b0dd710ca812c97b2b65cb5d2e93b0e5b','21a5b2b413c4db8ed588334b9a50dea9872bbcfa','90d3f6f2dff994f63293ca46f7cd50a75cde96a6',];
       var tests = {
-          "f50b8c15847159a6d2c6ecc2bd1e4a944ba5aae6":[async_test('html5lib_webkit02.html f50b8c15847159a6d2c6ecc2bd1e4a944ba5aae6'), "%3Cfoo%20bar%3Dqux/%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22qux/%22"],"326328ea805a2ebdde707e08567713f88a4cf8ab":[async_test('html5lib_webkit02.html 326328ea805a2ebdde707e08567713f88a4cf8ab'), "%3Cp%20id%3D%22status%22%3E%3Cnoscript%3E%3Cstrong%3EA%3C/strong%3E%3C/noscript%3E%3Cspan%3EB%3C/span%3E%3C/p%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20id%3D%22status%22%0A%7C%20%20%20%20%20%20%20%3Cnoscript%3E%0A%7C%20%20%20%20%20%20%20%20%20%22%3Cstrong%3EA%3C/strong%3E%22%0A%7C%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%22B%22"],"05138397908cfdad69a3bfe5da5a06098320b504":[async_test('html5lib_webkit02.html 05138397908cfdad69a3bfe5da5a06098320b504'), "%3Cdiv%3E%3Csarcasm%3E%3Cdiv%3E%3C/div%3E%3C/sarcasm%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Csarcasm%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"2aaa2ac0d7cec6144633d8f82f3bcaafa7498cd9":[async_test('html5lib_webkit02.html 2aaa2ac0d7cec6144633d8f82f3bcaafa7498cd9'), "%3Chtml%3E%3Cbody%3E%3Cimg%20src%3D%22%22%20border%3D%220%22%20alt%3D%22%3E%3Cdiv%3EA%3C/div%3E%3C/body%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"4a256d7ef602c7c917c758e15981b9710f9b4130":[async_test('html5lib_webkit02.html 4a256d7ef602c7c917c758e15981b9710f9b4130'), "%3Ctable%3E%3Ctd%3E%3C/tbody%3EA", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"98cea04429ddbe4ffaaa0b91fe77b8c0b1f7c1f4":[async_test('html5lib_webkit02.html 98cea04429ddbe4ffaaa0b91fe77b8c0b1f7c1f4'), "%3Ctable%3E%3Ctd%3E%3C/thead%3EA", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22A%22"],"209ad7d6f6c9c53cb856c7d78b2bc4a7f38abd5f":[async_test('html5lib_webkit02.html 209ad7d6f6c9c53cb856c7d78b2bc4a7f38abd5f'), "%3Ctable%3E%3Ctd%3E%3C/tfoot%3EA", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22A%22"],"cb9a86fbac96b08a6e708a2dbcd9f78539dfe9c6":[async_test('html5lib_webkit02.html cb9a86fbac96b08a6e708a2dbcd9f78539dfe9c6'), "%3Ctable%3E%3Cthead%3E%3Ctd%3E%3C/tbody%3EA", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22A%22"],
+          "f50b8c15847159a6d2c6ecc2bd1e4a944ba5aae6":[async_test('html5lib_webkit02.html f50b8c15847159a6d2c6ecc2bd1e4a944ba5aae6'), "%3Cfoo%20bar%3Dqux/%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20bar%3D%22qux/%22"],"326328ea805a2ebdde707e08567713f88a4cf8ab":[async_test('html5lib_webkit02.html 326328ea805a2ebdde707e08567713f88a4cf8ab'), "%3Cp%20id%3D%22status%22%3E%3Cnoscript%3E%3Cstrong%3EA%3C/strong%3E%3C/noscript%3E%3Cspan%3EB%3C/span%3E%3C/p%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cp%3E%0A%7C%20%20%20%20%20%20%20id%3D%22status%22%0A%7C%20%20%20%20%20%20%20%3Cnoscript%3E%0A%7C%20%20%20%20%20%20%20%20%20%22%3Cstrong%3EA%3C/strong%3E%22%0A%7C%20%20%20%20%20%20%20%3Cspan%3E%0A%7C%20%20%20%20%20%20%20%20%20%22B%22"],"05138397908cfdad69a3bfe5da5a06098320b504":[async_test('html5lib_webkit02.html 05138397908cfdad69a3bfe5da5a06098320b504'), "%3Cdiv%3E%3Csarcasm%3E%3Cdiv%3E%3C/div%3E%3C/sarcasm%3E%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%3Csarcasm%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E"],"2aaa2ac0d7cec6144633d8f82f3bcaafa7498cd9":[async_test('html5lib_webkit02.html 2aaa2ac0d7cec6144633d8f82f3bcaafa7498cd9'), "%3Chtml%3E%3Cbody%3E%3Cimg%20src%3D%22%22%20border%3D%220%22%20alt%3D%22%3E%3Cdiv%3EA%3C/div%3E%3C/body%3E%3C/html%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E"],"4a256d7ef602c7c917c758e15981b9710f9b4130":[async_test('html5lib_webkit02.html 4a256d7ef602c7c917c758e15981b9710f9b4130'), "%3Ctable%3E%3Ctd%3E%3C/tbody%3EA", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%22A%22%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E"],"98cea04429ddbe4ffaaa0b91fe77b8c0b1f7c1f4":[async_test('html5lib_webkit02.html 98cea04429ddbe4ffaaa0b91fe77b8c0b1f7c1f4'), "%3Ctable%3E%3Ctd%3E%3C/thead%3EA", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22A%22"],"209ad7d6f6c9c53cb856c7d78b2bc4a7f38abd5f":[async_test('html5lib_webkit02.html 209ad7d6f6c9c53cb856c7d78b2bc4a7f38abd5f'), "%3Ctable%3E%3Ctd%3E%3C/tfoot%3EA", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Ctbody%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22A%22"],"cb9a86fbac96b08a6e708a2dbcd9f78539dfe9c6":[async_test('html5lib_webkit02.html cb9a86fbac96b08a6e708a2dbcd9f78539dfe9c6'), "%3Ctable%3E%3Cthead%3E%3Ctd%3E%3C/tbody%3EA", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Ctable%3E%0A%7C%20%20%20%20%20%20%20%3Cthead%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%22A%22"],"c46a4badc6b1ebc524e6f90ea56183310e93ab25":[async_test('html5lib_webkit02.html c46a4badc6b1ebc524e6f90ea56183310e93ab25'), "%3Clegend%3Etest%3C/legend%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Clegend%3E%0A%7C%20%20%20%20%20%20%20%22test%22"],"464eeaecc49646ff810cadad537880c9b473a262":[async_test('html5lib_webkit02.html 464eeaecc49646ff810cadad537880c9b473a262'), "%3Ctable%3E%3Cinput%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cinput%3E%0A%7C%20%20%20%20%20%3Ctable%3E"],"7b4eb6981451ede406f2f4112e83a8584e7adbf5":[async_test('html5lib_webkit02.html 7b4eb6981451ede406f2f4112e83a8584e7adbf5'), "%3Cb%3E%3Cem%3E%3Cfoo%3E%3Cfoo%3E%3Caside%3E%3C/b%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%3Caside%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cb%3E"],"73aed96d7cd3116e4a3e701104616c07d1ec5e0c":[async_test('html5lib_webkit02.html 73aed96d7cd3116e4a3e701104616c07d1ec5e0c'), "%3Cb%3E%3Cem%3E%3Cfoo%3E%3Cfoo%3E%3Caside%3E%3C/b%3E%3C/em%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%3Caside%3E%0A%7C%20%20%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cb%3E"],"139a546c72bfcedf638d031f33da43f24995f688":[async_test('html5lib_webkit02.html 139a546c72bfcedf638d031f33da43f24995f688'), "%3Cb%3E%3Cem%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Caside%3E%3C/b%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%3Caside%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E"],"6e33515b4dc011dd390d433a6358bf68b786b1fd":[async_test('html5lib_webkit02.html 6e33515b4dc011dd390d433a6358bf68b786b1fd'), "%3Cb%3E%3Cem%3E%3Cfoo%3E%3Cfoo%3E%3Cfoo%3E%3Caside%3E%3C/b%3E%3C/em%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cb%3E%0A%7C%20%20%20%20%20%20%20%3Cem%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cfoo%3E%0A%7C%20%20%20%20%20%3Caside%3E%0A%7C%20%20%20%20%20%20%20%3Cb%3E"],"b6d2377b0dd710ca812c97b2b65cb5d2e93b0e5b":[async_test('html5lib_webkit02.html b6d2377b0dd710ca812c97b2b65cb5d2e93b0e5b'), "%3Csvg%3E%3CforeignObject%3E%3Cdiv%3Efoo%3C/div%3E%3Cplaintext%3E%3C/foreignObject%3E%3C/svg%3E%3Cdiv%3Ebar%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22foo%22%0A%7C%20%20%20%20%20%20%20%20%20%3Cplaintext%3E%0A%7C%20%20%20%20%20%20%20%20%20%20%20%22%3C/foreignObject%3E%3C/svg%3E%3Cdiv%3Ebar%3C/div%3E%22"],"21a5b2b413c4db8ed588334b9a50dea9872bbcfa":[async_test('html5lib_webkit02.html 21a5b2b413c4db8ed588334b9a50dea9872bbcfa'), "%3Csvg%3E%3CforeignObject%3E%3C/foreignObject%3E%3Ctitle%3E%3C/svg%3Efoo", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Csvg%20svg%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20foreignObject%3E%0A%7C%20%20%20%20%20%20%20%3Csvg%20title%3E%0A%7C%20%20%20%20%20%22foo%22"],"90d3f6f2dff994f63293ca46f7cd50a75cde96a6":[async_test('html5lib_webkit02.html 90d3f6f2dff994f63293ca46f7cd50a75cde96a6'), "%3C/foreignObject%3E%3Cplaintext%3E%3Cdiv%3Efoo%3C/div%3E", "%23document%0A%7C%20%3Chtml%3E%0A%7C%20%20%20%3Chead%3E%0A%7C%20%20%20%3Cbody%3E%0A%7C%20%20%20%20%20%3Cplaintext%3E%0A%7C%20%20%20%20%20%20%20%22%3Cdiv%3Efoo%3C/div%3E%22"],
       }
       init_tests(get_type());
     </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/test.js b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/test.js
index 362272a..6f4afba 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/test.js
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/syntax/parsing/test.js
@@ -1,5 +1,6 @@
 var namespaces = {
   "html":"http://www.w3.org/1999/xhtml",
+  "math":"http://www.w3.org/1998/Math/MathML",
   "mathml":"http://www.w3.org/1998/Math/MathML",
   "svg":"http://www.w3.org/2000/svg",
   "xlink":"http://www.w3.org/1999/xlink",
@@ -94,6 +95,18 @@
             lines.push(format("|%s%s=\"%s\"", indent_spaces, attr[0], attr[1]));
           }
         );
+        if ("HTMLTemplateElement" in window &&
+            Object.prototype.toString.call(element) === "[object HTMLTemplateElement]") {
+          indent += 2;
+          indent_spaces = (new Array(indent)).join(" ");
+          lines.push(format("|%scontent", indent_spaces));
+          indent += 2;
+          Array.prototype.forEach.call(element.content.childNodes,
+                                       function(node) {
+                                         serialize_element(node, indent);
+                                       });
+          indent -= 4;
+        }
         break;
     }
     indent += 2;
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/update-built-tests.sh b/third_party/WebKit/LayoutTests/imported/wpt/update-built-tests.sh
new file mode 100755
index 0000000..970a930
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/update-built-tests.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env sh
+set -ex
+
+2dcontext/tools/build.sh
+html/tools/build.sh
+offscreen-canvas/tools/build.sh
diff --git a/third_party/WebKit/LayoutTests/intersection-observer/tracking-document.html b/third_party/WebKit/LayoutTests/intersection-observer/tracking-document.html
new file mode 100644
index 0000000..4f1f120
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/intersection-observer/tracking-document.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+
+<div id="root"></div>
+
+<script>
+test(function() {
+  var observer = new IntersectionObserver((changes) => {}, {root: root});
+  var doc = document.implementation.createDocument("", null);
+  doc.appendChild(root);
+}, "IntersectionObserver with root in a document that has no window does not crash.");
+</script>
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
index 79de8ad65..13c4bff5 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -4567,9 +4567,7 @@
     method toJSON
 interface PerformanceLongTaskTiming : PerformanceEntry
     attribute @@toStringTag
-    getter culpritFrameId
-    getter culpritFrameName
-    getter culpritFrameSrc
+    getter attribution
     method constructor
 interface PerformanceMark : PerformanceEntry
     attribute @@toStringTag
@@ -6455,6 +6453,12 @@
     method constructor
     method getTags
     method register
+interface TaskAttributionTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter frameId
+    getter frameName
+    getter frameSrc
+    method constructor
 interface Text : CharacterData
     attribute @@toStringTag
     getter assignedSlot
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp
index b08a2e2..de5bf4e 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp
@@ -312,16 +312,6 @@
     windowProxy(DOMWrapperWorld::mainWorld())->updateDocument();
 }
 
-void ScriptController::namedItemAdded(HTMLDocument* doc,
-                                      const AtomicString& name) {
-  windowProxy(DOMWrapperWorld::mainWorld())->namedItemAdded(doc, name);
-}
-
-void ScriptController::namedItemRemoved(HTMLDocument* doc,
-                                        const AtomicString& name) {
-  windowProxy(DOMWrapperWorld::mainWorld())->namedItemRemoved(doc, name);
-}
-
 bool ScriptController::canExecuteScripts(
     ReasonForCallingCanExecuteScripts reason) {
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptController.h b/third_party/WebKit/Source/bindings/core/v8/ScriptController.h
index daba37c..74246f42 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptController.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptController.h
@@ -49,7 +49,6 @@
 class CompiledScript;
 class DOMWrapperWorld;
 class Element;
-class HTMLDocument;
 class KURL;
 class ScriptSourceCode;
 class SecurityOrigin;
@@ -136,9 +135,6 @@
   void clearWindowProxy();
   void updateDocument();
 
-  void namedItemAdded(HTMLDocument*, const AtomicString&);
-  void namedItemRemoved(HTMLDocument*, const AtomicString&);
-
   void updateSecurityOrigin(SecurityOrigin*);
 
   void clearForClose();
diff --git a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
index 69aae26..bf7d4eb0 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
@@ -518,7 +518,7 @@
 void WindowProxy::namedItemAdded(HTMLDocument* document,
                                  const AtomicString& name) {
   DCHECK(m_world->isMainWorld());
-
+  DCHECK(m_scriptState);
   if (!isContextInitialized())
     return;
 
@@ -535,10 +535,9 @@
 void WindowProxy::namedItemRemoved(HTMLDocument* document,
                                    const AtomicString& name) {
   DCHECK(m_world->isMainWorld());
-
+  DCHECK(m_scriptState);
   if (!isContextInitialized())
     return;
-
   if (document->hasNamedItem(name) || document->hasExtraNamedItem(name))
     return;
 
diff --git a/third_party/WebKit/Source/core/BUILD.gn b/third_party/WebKit/Source/core/BUILD.gn
index 8ca4a71..8bb5ecc 100644
--- a/third_party/WebKit/Source/core/BUILD.gn
+++ b/third_party/WebKit/Source/core/BUILD.gn
@@ -725,7 +725,7 @@
   script = "html/parser/create-html-entity-table"
 
   inputs = [
-    "html/parser/HTMLEntityNames.in",
+    "html/parser/HTMLEntityNames.csv",
   ]
   outputs = [
     "$blink_core_output_dir/HTMLEntityTable.cpp",
diff --git a/third_party/WebKit/Source/core/core_idl_files.gni b/third_party/WebKit/Source/core/core_idl_files.gni
index b0271be5..0a8ab8ee 100644
--- a/third_party/WebKit/Source/core/core_idl_files.gni
+++ b/third_party/WebKit/Source/core/core_idl_files.gni
@@ -401,6 +401,7 @@
                                  "timing/PerformanceObserverEntryList.idl",
                                  "timing/PerformanceResourceTiming.idl",
                                  "timing/PerformanceTiming.idl",
+                                 "timing/TaskAttributionTiming.idl",
                                  "timing/WorkerPerformance.idl",
                                  "workers/SharedWorker.idl",
                                  "workers/Worker.idl",
diff --git a/third_party/WebKit/Source/core/css/BUILD.gn b/third_party/WebKit/Source/core/css/BUILD.gn
index 12775937..5914630 100644
--- a/third_party/WebKit/Source/core/css/BUILD.gn
+++ b/third_party/WebKit/Source/core/css/BUILD.gn
@@ -344,6 +344,7 @@
     "parser/SizesAttributeParser.cpp",
     "parser/SizesCalcParser.cpp",
     "properties/CSSPropertyAPI.h",
+    "properties/CSSPropertyAPITransformOrigin.cpp",
     "properties/CSSPropertyAPITranslate.cpp",
     "properties/CSSPropertyAPIWebkitPadding.cpp",
     "properties/CSSPropertyAPIWillChange.cpp",
diff --git a/third_party/WebKit/Source/core/css/CSSProperties.in b/third_party/WebKit/Source/core/css/CSSProperties.in
index 6792c18c..ddc5904 100644
--- a/third_party/WebKit/Source/core/css/CSSProperties.in
+++ b/third_party/WebKit/Source/core/css/CSSProperties.in
@@ -388,7 +388,7 @@
 top typedom_types=[Length], keywords=[auto], supports_percentage, interpolable, initial=initialOffset, converter=convertLengthOrAuto
 touch-action converter=convertFlags<TouchAction>, type_name=TouchAction
 transform typedom_types=[Transform], keywords=[none], interpolable, converter=convertTransformOperations
-transform-origin interpolable, converter=convertTransformOrigin
+transform-origin interpolable, converter=convertTransformOrigin, api_class
 transform-style name_for_methods=TransformStyle3D
 translate runtime_flag=CSSIndependentTransformProperties, converter=convertTranslate, interpolable, api_class
 rotate runtime_flag=CSSIndependentTransformProperties, converter=convertRotate, interpolable
diff --git a/third_party/WebKit/Source/core/css/CSSSyntaxDescriptor.cpp b/third_party/WebKit/Source/core/css/CSSSyntaxDescriptor.cpp
index 813c657..4dc999a 100644
--- a/third_party/WebKit/Source/core/css/CSSSyntaxDescriptor.cpp
+++ b/third_party/WebKit/Source/core/css/CSSSyntaxDescriptor.cpp
@@ -165,7 +165,7 @@
     case CSSSyntaxType::Time:
       return consumeTime(range, ValueRange::ValueRangeAll);
     case CSSSyntaxType::Resolution:
-      return nullptr;  // TODO(timloh): Implement this.
+      return consumeResolution(range);
     case CSSSyntaxType::TransformFunction:
       return nullptr;  // TODO(timloh): Implement this.
     case CSSSyntaxType::CustomIdent:
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
index c1f9099..2ae3529 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -282,26 +282,6 @@
   return true;
 }
 
-static CSSValueList* consumeTransformOrigin(CSSParserTokenRange& range,
-                                            CSSParserMode cssParserMode,
-                                            UnitlessQuirk unitless) {
-  CSSValue* resultX = nullptr;
-  CSSValue* resultY = nullptr;
-  if (consumeOneOrTwoValuedPosition(range, cssParserMode, unitless, resultX,
-                                    resultY)) {
-    CSSValueList* list = CSSValueList::createSpaceSeparated();
-    list->append(*resultX);
-    list->append(*resultY);
-    CSSValue* resultZ = consumeLength(range, cssParserMode, ValueRangeAll);
-    if (!resultZ)
-      resultZ =
-          CSSPrimitiveValue::create(0, CSSPrimitiveValue::UnitType::Pixels);
-    list->append(*resultZ);
-    return list;
-  }
-  return nullptr;
-}
-
 static CSSFontFeatureValue* consumeFontFeatureTag(CSSParserTokenRange& range) {
   // Feature tag name consists of 4-letter characters.
   static const unsigned tagNameLength = 4;
@@ -3707,9 +3687,6 @@
       return consumeCursor(m_range, m_context, inQuirksMode());
     case CSSPropertyContain:
       return consumeContain(m_range);
-    case CSSPropertyTransformOrigin:
-      return consumeTransformOrigin(m_range, m_context.mode(),
-                                    UnitlessQuirk::Forbid);
     case CSSPropertyContent:
       return consumeContent(m_range, m_context);
     case CSSPropertyListStyleImage:
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
index 5e9b730..a537649 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
@@ -313,6 +313,21 @@
   return nullptr;
 }
 
+CSSPrimitiveValue* consumeResolution(CSSParserTokenRange& range) {
+  const CSSParserToken& token = range.peek();
+  // Unlike the other types, calc() does not work with <resolution>.
+  if (token.type() != DimensionToken)
+    return nullptr;
+  CSSPrimitiveValue::UnitType unit = token.unitType();
+  if (unit == CSSPrimitiveValue::UnitType::DotsPerPixel ||
+      unit == CSSPrimitiveValue::UnitType::DotsPerInch ||
+      unit == CSSPrimitiveValue::UnitType::DotsPerCentimeter) {
+    return CSSPrimitiveValue::create(
+        range.consumeIncludingWhitespace().numericValue(), unit);
+  }
+  return nullptr;
+}
+
 CSSIdentifierValue* consumeIdent(CSSParserTokenRange& range) {
   if (range.peek().type() != IdentToken)
     return nullptr;
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.h b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.h
index bad5813..6e78d07 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.h
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.h
@@ -52,6 +52,7 @@
     UnitlessQuirk = UnitlessQuirk::Forbid);
 CSSPrimitiveValue* consumeAngle(CSSParserTokenRange&);
 CSSPrimitiveValue* consumeTime(CSSParserTokenRange&, ValueRange);
+CSSPrimitiveValue* consumeResolution(CSSParserTokenRange&);
 
 CSSIdentifierValue* consumeIdent(CSSParserTokenRange&);
 CSSIdentifierValue* consumeIdentRange(CSSParserTokenRange&,
diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPITransformOrigin.cpp b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPITransformOrigin.cpp
new file mode 100644
index 0000000..2079cab
--- /dev/null
+++ b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPITransformOrigin.cpp
@@ -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.
+
+#include "core/css/properties/CSSPropertyAPITransformOrigin.h"
+
+#include "core/css/CSSValueList.h"
+#include "core/css/parser/CSSParserContext.h"
+#include "core/css/parser/CSSPropertyParserHelpers.h"
+
+namespace blink {
+
+const CSSValue* CSSPropertyAPITransformOrigin::parseSingleValue(
+    CSSParserTokenRange& range,
+    const CSSParserContext& context) {
+  CSSValue* resultX = nullptr;
+  CSSValue* resultY = nullptr;
+  if (CSSPropertyParserHelpers::consumeOneOrTwoValuedPosition(
+          range, context.mode(),
+          CSSPropertyParserHelpers::UnitlessQuirk::Forbid, resultX, resultY)) {
+    CSSValueList* list = CSSValueList::createSpaceSeparated();
+    list->append(*resultX);
+    list->append(*resultY);
+    CSSValue* resultZ = CSSPropertyParserHelpers::consumeLength(
+        range, context.mode(), ValueRangeAll);
+    if (!resultZ) {
+      resultZ =
+          CSSPrimitiveValue::create(0, CSSPrimitiveValue::UnitType::Pixels);
+    }
+    list->append(*resultZ);
+    return list;
+  }
+  return nullptr;
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp b/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
index eade5171..838f8cf 100644
--- a/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
@@ -220,17 +220,12 @@
 }
 
 Document& IntersectionObserver::trackingDocument() const {
-  Document* document = nullptr;
   if (rootIsImplicit()) {
     DCHECK(m_callback->getExecutionContext());
-    document = toDocument(m_callback->getExecutionContext());
-  } else {
-    DCHECK(root());
-    document = &root()->document();
+    return *toDocument(m_callback->getExecutionContext());
   }
-  DCHECK(document);
-  DCHECK(document->frame());
-  return *document->frame()->localFrameRoot()->document();
+  DCHECK(root());
+  return root()->document();
 }
 
 void IntersectionObserver::observe(Element* target,
diff --git a/third_party/WebKit/Source/core/editing/Editor.cpp b/third_party/WebKit/Source/core/editing/Editor.cpp
index 79d38cb..66ef6be 100644
--- a/third_party/WebKit/Source/core/editing/Editor.cpp
+++ b/third_party/WebKit/Source/core/editing/Editor.cpp
@@ -201,6 +201,16 @@
   return emptyEditorClient();
 }
 
+static bool isCaretAtStartOfWrappedLine(const FrameSelection& selection) {
+  if (!selection.isCaret())
+    return false;
+  if (selection.affinity() != TextAffinity::Downstream)
+    return false;
+  const Position& position = selection.start();
+  return !inSameLine(PositionWithAffinity(position, TextAffinity::Upstream),
+                     PositionWithAffinity(position, TextAffinity::Downstream));
+}
+
 bool Editor::handleTextEvent(TextEvent* event) {
   // Default event handling for Drag and Drop will be handled by DragController
   // so we leave the event for it.
@@ -237,6 +247,17 @@
     return insertParagraphSeparator();
   }
 
+  // Typing spaces at the beginning of wrapped line is confusing, because
+  // inserted spaces would appear in the previous line.
+  // Insert a line break automatically so that the spaces appear at the caret.
+  // TODO(kojii): rich editing has the same issue, but has more options and
+  // needs coordination with JS. Enable for plaintext only for now and collect
+  // feedback.
+  if (data == " " && !canEditRichly() &&
+      isCaretAtStartOfWrappedLine(frame().selection())) {
+    insertLineBreak();
+  }
+
   return insertTextWithoutSendingTextEvent(EditCommandSource::kMenuOrKeyBinding,
                                            data, false, event);
 }
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
index b9b322b..a8d40a8c 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
@@ -175,7 +175,6 @@
       m_didScrollTimer(this, &FrameView::didScrollTimerFired),
       m_browserControlsViewportAdjustment(0),
       m_needsUpdateWidgetGeometries(false),
-      m_needsUpdateViewportIntersection(true),
 #if ENABLE(ASSERT)
       m_hasBeenDisposed(false),
 #endif
@@ -2987,6 +2986,7 @@
 
 void FrameView::updatePaintProperties() {
   TRACE_EVENT0("blink", "FrameView::updatePaintProperties");
+  SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Blink.PrePaint.UpdateTime");
 
   if (!m_paintController)
     m_paintController = PaintController::create();
@@ -3584,7 +3584,6 @@
   Widget::setParent(parentView);
 
   updateParentScrollableAreaSet();
-  setNeedsUpdateViewportIntersection();
   setupRenderThrottling();
 
   if (parentFrameView())
@@ -3635,7 +3634,6 @@
   if (layoutSizeFixedToFrameSize())
     setLayoutSizeInternal(frameRect().size());
 
-  setNeedsUpdateViewportIntersection();
   if (RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled()) {
     // The overflow clip property depends on the frame rect.
     setNeedsPaintPropertyUpdate();
@@ -4550,12 +4548,6 @@
     collectAnnotatedRegions(*curr, regions);
 }
 
-void FrameView::setNeedsUpdateViewportIntersection() {
-  for (FrameView* parent = parentFrameView(); parent;
-       parent = parent->parentFrameView())
-    parent->m_needsUpdateViewportIntersectionInSubtree = true;
-}
-
 void FrameView::updateViewportIntersectionsForSubtree(
     DocumentLifecycle::LifecycleState targetState) {
   // TODO(dcheng): Since widget tree updates are deferred, FrameViews might
@@ -4574,10 +4566,6 @@
         ->intersectionObserverController()
         ->computeTrackedIntersectionObservations();
 
-  if (!m_needsUpdateViewportIntersectionInSubtree)
-    return;
-  m_needsUpdateViewportIntersectionInSubtree = false;
-
   for (Frame* child = m_frame->tree().firstChild(); child;
        child = child->tree().nextSibling()) {
     if (!child->isLocalFrame())
diff --git a/third_party/WebKit/Source/core/frame/FrameView.h b/third_party/WebKit/Source/core/frame/FrameView.h
index 47517031..e18af94 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.h
+++ b/third_party/WebKit/Source/core/frame/FrameView.h
@@ -984,7 +984,6 @@
   template <typename Function>
   void forAllNonThrottledFrameViews(const Function&);
 
-  void setNeedsUpdateViewportIntersection();
   void updateViewportIntersectionsForSubtree(
       DocumentLifecycle::LifecycleState targetState);
   void updateRenderThrottlingStatus(bool hidden, bool subtreeThrottled);
@@ -1075,8 +1074,6 @@
   float m_browserControlsViewportAdjustment;
 
   bool m_needsUpdateWidgetGeometries;
-  bool m_needsUpdateViewportIntersection;
-  bool m_needsUpdateViewportIntersectionInSubtree;
 
 #if ENABLE(ASSERT)
   // Verified when finalizing.
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index 272bd29c..68806e32 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1395,6 +1395,12 @@
     V8StereoPannerNode_Constructor = 1722,
     V8WaveShaperNode_Constructor = 1723,
     V8Headers_GetAll_Method = 1724,
+    NavigatorVibrateEngagementNone = 1725,
+    NavigatorVibrateEngagementMinimal = 1726,
+    NavigatorVibrateEngagementLow = 1727,
+    NavigatorVibrateEngagementMedium = 1728,
+    NavigatorVibrateEngagementHigh = 1729,
+    NavigatorVibrateEngagementMax = 1730,
 
     // 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/html/HTMLDocument.cpp b/third_party/WebKit/Source/core/html/HTMLDocument.cpp
index 76513b6..358922ba 100644
--- a/third_party/WebKit/Source/core/html/HTMLDocument.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLDocument.cpp
@@ -54,6 +54,7 @@
 #include "core/html/HTMLDocument.h"
 
 #include "bindings/core/v8/ScriptController.h"
+#include "bindings/core/v8/WindowProxy.h"
 #include "core/HTMLNames.h"
 #include "core/frame/LocalFrame.h"
 #include "core/html/HTMLBodyElement.h"
@@ -152,8 +153,11 @@
   if (name.isEmpty())
     return;
   map.add(name);
-  if (LocalFrame* f = frame())
-    f->script().namedItemAdded(this, name);
+  if (LocalFrame* f = frame()) {
+    f->script()
+        .windowProxy(DOMWrapperWorld::mainWorld())
+        ->namedItemAdded(this, name);
+  }
 }
 
 void HTMLDocument::removeItemFromMap(HashCountedSet<AtomicString>& map,
@@ -161,8 +165,11 @@
   if (name.isEmpty())
     return;
   map.remove(name);
-  if (LocalFrame* f = frame())
-    f->script().namedItemRemoved(this, name);
+  if (LocalFrame* f = frame()) {
+    f->script()
+        .windowProxy(DOMWrapperWorld::mainWorld())
+        ->namedItemRemoved(this, name);
+  }
 }
 
 void HTMLDocument::addNamedItem(const AtomicString& name) {
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLEntityNames.in b/third_party/WebKit/Source/core/html/parser/HTMLEntityNames.csv
similarity index 100%
rename from third_party/WebKit/Source/core/html/parser/HTMLEntityNames.in
rename to third_party/WebKit/Source/core/html/parser/HTMLEntityNames.csv
diff --git a/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp b/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp
index 77210fc..508eb52 100644
--- a/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp
+++ b/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp
@@ -135,14 +135,14 @@
   HeapVector<Member<Digest>> oldList;
   for (Node* child = parentNode->firstChild(); child;
        child = child->nextSibling())
-    oldList.append(createDigest(child, 0));
+    oldList.push_back(createDigest(child, 0));
 
   // Compose the new list.
   String markupCopy = markup.lower();
   HeapVector<Member<Digest>> newList;
   for (Node* child = parentNode->firstChild(); child != node;
        child = child->nextSibling())
-    newList.append(createDigest(child, 0));
+    newList.push_back(createDigest(child, 0));
   for (Node* child = fragment->firstChild(); child;
        child = child->nextSibling()) {
     if (isHTMLHeadElement(*child) && !child->hasChildren() &&
@@ -155,10 +155,10 @@
       // HTML5 parser inserts empty <body> tag whenever it parses </head>
       continue;
     }
-    newList.append(createDigest(child, &m_unusedNodesMap));
+    newList.push_back(createDigest(child, &m_unusedNodesMap));
   }
   for (Node* child = node->nextSibling(); child; child = child->nextSibling())
-    newList.append(createDigest(child, 0));
+    newList.push_back(createDigest(child, 0));
 
   if (!innerPatchChildren(parentNode, oldList, newList, exceptionState)) {
     // Fall back to total replace.
@@ -263,12 +263,12 @@
 
   for (size_t i = 0; i < newList.size(); ++i) {
     newTable.add(newList[i]->m_sha1, Vector<size_t>())
-        .storedValue->value.append(i);
+        .storedValue->value.push_back(i);
   }
 
   for (size_t i = 0; i < oldList.size(); ++i) {
     oldTable.add(oldList[i]->m_sha1, Vector<size_t>())
-        .storedValue->value.append(i);
+        .storedValue->value.push_back(i);
   }
 
   for (auto& newIt : newTable) {
@@ -467,7 +467,7 @@
       Digest* childInfo = createDigest(child, unusedNodesMap);
       addStringToDigestor(digestor.get(), childInfo->m_sha1);
       child = child->nextSibling();
-      digest->m_children.append(childInfo);
+      digest->m_children.push_back(childInfo);
     }
 
     AttributeCollection attributes = element.attributesWithoutUpdate();
diff --git a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp
index 710272c..633d8ee 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp
@@ -289,7 +289,7 @@
       KeyframeVector oldKeyframes = oldStringKeyframeModel->getFrames();
       StringKeyframeVector newKeyframes;
       for (auto& oldKeyframe : oldKeyframes)
-        newKeyframes.append(toStringKeyframe(oldKeyframe.get()));
+        newKeyframes.push_back(toStringKeyframe(oldKeyframe.get()));
       newModel = StringKeyframeEffectModel::create(newKeyframes);
     } else if (oldModel->isAnimatableValueKeyframeEffectModel()) {
       AnimatableValueKeyframeEffectModel* oldAnimatableValueKeyframeModel =
@@ -298,7 +298,7 @@
           oldAnimatableValueKeyframeModel->getFrames();
       AnimatableValueKeyframeVector newKeyframes;
       for (auto& oldKeyframe : oldKeyframes)
-        newKeyframes.append(toAnimatableValueKeyframe(oldKeyframe.get()));
+        newKeyframes.push_back(toAnimatableValueKeyframe(oldKeyframe.get()));
       newModel = AnimatableValueKeyframeEffectModel::create(newKeyframes);
     }
 
@@ -378,7 +378,7 @@
     ASSERT(frames.size() == 3);
     KeyframeVector newFrames;
     for (int i = 0; i < 3; i++)
-      newFrames.append(toAnimatableValueKeyframe(frames[i]->clone().get()));
+      newFrames.push_back(toAnimatableValueKeyframe(frames[i]->clone().get()));
     // Update delay, represented by the distance between the first two
     // keyframes.
     newFrames[1]->setOffset(delay / (delay + duration));
@@ -457,11 +457,11 @@
   Vector<CSSPropertyID> cssProperties;
   if (type == AnimationType::CSSAnimation) {
     for (CSSPropertyID property : animationProperties)
-      cssProperties.append(property);
+      cssProperties.push_back(property);
   } else {
     for (CSSPropertyID property : transitionProperties)
-      cssProperties.append(property);
-    cssProperties.append(cssPropertyID(animation.id()));
+      cssProperties.push_back(property);
+    cssProperties.push_back(cssPropertyID(animation.id()));
   }
 
   Element* element = effect->target();
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
index fc61883..96ca12d6 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
@@ -132,7 +132,7 @@
         uniqRulesSet.contains(rule))
       continue;
     uniqRulesSet.add(rule);
-    uniqRules.append(toCSSStyleRule(rule));
+    uniqRules.push_back(toCSSStyleRule(rule));
   }
   uniqRules.reverse();
   return uniqRules;
@@ -179,7 +179,7 @@
     for (auto stopColor : stopColors) {
       foundNonTransparentColor =
           foundNonTransparentColor || (stopColor.alpha() != 0);
-      colors.append(existingColor.blend(stopColor));
+      colors.push_back(existingColor.blend(stopColor));
     }
   }
   foundOpaqueColor =
@@ -263,11 +263,11 @@
       if (colors.isEmpty()) {
         if (!backgroundColor.hasAlpha())
           foundOpaqueColor = true;
-        colors.append(backgroundColor);
+        colors.push_back(backgroundColor);
       } else {
         if (!backgroundColor.hasAlpha()) {
           colors.clear();
-          colors.append(backgroundColor);
+          colors.push_back(backgroundColor);
           foundOpaqueColor = true;
         } else {
           for (size_t i = 0; i < colors.size(); i++)
@@ -377,7 +377,7 @@
 
   static void constructDeletedValue(Vector<String>& vec, bool) {
     vec.clear();
-    vec.append(String(WTF::HashTableDeletedValue));
+    vec.push_back(String(WTF::HashTableDeletedValue));
   }
 
   static bool isDeletedValue(const Vector<String>& vec) {
@@ -806,9 +806,9 @@
     if (removedSheets.contains(cssStyleSheet)) {
       removedSheets.remove(cssStyleSheet);
       if (isInitialFrontendLoad)
-        addedSheets.append(cssStyleSheet);
+        addedSheets.push_back(cssStyleSheet);
     } else {
-      addedSheets.append(cssStyleSheet);
+      addedSheets.push_back(cssStyleSheet);
     }
   }
 
@@ -1374,13 +1374,13 @@
           static_cast<InspectorStyleSheetForInlineStyle*>(inspectorStyleSheet);
       SetElementStyleAction* action =
           new SetElementStyleAction(inlineStyleSheet, edit->getText());
-      actions->append(action);
+      actions->push_back(action);
     } else {
       ModifyRuleAction* action = new ModifyRuleAction(
           ModifyRuleAction::SetStyleText,
           static_cast<InspectorStyleSheet*>(inspectorStyleSheet), range,
           edit->getText());
-      actions->append(action);
+      actions->push_back(action);
     }
   }
   return Response::OK();
@@ -1794,7 +1794,7 @@
 void InspectorCSSAgent::collectStyleSheets(
     CSSStyleSheet* styleSheet,
     HeapVector<Member<CSSStyleSheet>>& result) {
-  result.append(styleSheet);
+  result.push_back(styleSheet);
   for (unsigned i = 0, size = styleSheet->length(); i < size; ++i) {
     CSSRule* rule = styleSheet->item(i);
     if (rule->type() == CSSRule::kImportRule) {
@@ -2082,12 +2082,12 @@
           element, pseudoId, StyleResolver::AllCSSRules));
   HeapVector<Member<CSSStyleDeclaration>> styles;
   if (!pseudoId && element->style())
-    styles.append(element->style());
+    styles.push_back(element->style());
   for (unsigned i = rules.size(); i > 0; --i) {
     CSSStyleSheet* parentStyleSheet = rules.at(i - 1)->parentStyleSheet();
     if (!parentStyleSheet || !parentStyleSheet->ownerNode())
       continue;  // User agent.
-    styles.append(rules.at(i - 1)->style());
+    styles.push_back(rules.at(i - 1)->style());
   }
   return styles;
 }
@@ -2251,7 +2251,7 @@
   if (isMainFrame && !view->isTransparent()) {
     // Start with the "default" page color (typically white).
     Color baseBackgroundColor = view->baseBackgroundColor();
-    colors.append(view->baseBackgroundColor());
+    colors.push_back(view->baseBackgroundColor());
     foundOpaqueColor = !baseBackgroundColor.hasAlpha();
   }
 
@@ -2287,7 +2287,7 @@
     CSSPropertyID propertyId = cssPropertyID(styleWhitelist->get(i));
     if (propertyId == CSSPropertyInvalid)
       continue;
-    cssPropertyWhitelist.append(
+    cssPropertyWhitelist.push_back(
         std::make_pair(styleWhitelist->get(i), propertyId));
   }
 
@@ -2315,7 +2315,7 @@
     String value = computedStyleInfo->getPropertyValue(pair.second);
     if (!value.isEmpty())
       allPropertiesEmpty = false;
-    style.append(value);
+    style.push_back(value);
   }
 
   // -1 means an empty style.
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp
index 1f5c8b81..5412bae 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp
@@ -172,7 +172,7 @@
   // be called after m_domAgent has been destroyed.
   HeapVector<Member<Element>> elements;
   for (auto& attribute : m_styleAttrInvalidatedElements)
-    elements.append(attribute.get());
+    elements.push_back(attribute.get());
   m_domAgent->styleAttributeInvalidated(elements);
   m_styleAttrInvalidatedElements.clear();
 }
@@ -271,7 +271,7 @@
   if (m_document) {
     for (LocalFrame* frame : *m_inspectedFrames) {
       if (Document* document = frame->document())
-        result.append(document);
+        result.push_back(document);
     }
   }
   return result;
@@ -661,7 +661,7 @@
     Node* parent = innerParentNode(node);
     if (!parent)
       return 0;
-    path.append(parent);
+    path.push_back(parent);
     if (nodeMap->get(parent))
       break;
     node = parent;
@@ -690,7 +690,7 @@
   // Node being pushed is detached -> push subtree root.
   NodeToIdMap* newMap = new NodeToIdMap;
   NodeToIdMap* danglingMap = newMap;
-  m_danglingNodeToIdMaps.append(newMap);
+  m_danglingNodeToIdMaps.push_back(newMap);
   std::unique_ptr<protocol::Array<protocol::DOM::Node>> children =
       protocol::Array<protocol::DOM::Node>::create();
   children->addItem(buildObjectForNode(node, 0, false, danglingMap));
@@ -1072,7 +1072,7 @@
            .storedValue->value;
 
   for (auto& result : resultCollector)
-    resultsIt->append(result);
+    resultsIt->push_back(result);
 
   *resultCount = resultsIt->size();
   return Response::OK();
@@ -1439,7 +1439,7 @@
 
   Vector<String> paths;
   for (size_t index = 0; index < files->length(); ++index)
-    paths.append(files->get(index));
+    paths.push_back(files->get(index));
   toHTMLInputElement(node)->setFilesFromPaths(paths);
   return Response::OK();
 }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp
index 437b7d83..c812d34 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp
@@ -215,7 +215,7 @@
       if (handler.IsEmpty())
         continue;
       bool useCapture = listeners->at(k).capture();
-      eventInformation.append(V8EventListenerInfo(
+      eventInformation.push_back(V8EventListenerInfo(
           type, useCapture, listeners->at(k).passive(), listeners->at(k).once(),
           handler,
           createRemoveFunction(context, value, handler, type, useCapture)));
@@ -375,8 +375,8 @@
       if (!node)
         continue;
       m_domBreakpoints.remove(node);
-      stack.append(InspectorDOMAgent::innerFirstChild(node));
-      stack.append(InspectorDOMAgent::innerNextSibling(node));
+      stack.push_back(InspectorDOMAgent::innerFirstChild(node));
+      stack.push_back(InspectorDOMAgent::innerNextSibling(node));
     } while (!stack.isEmpty());
   }
 }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorHistory.cpp b/third_party/WebKit/Source/core/inspector/InspectorHistory.cpp
index da21aa672..614621e 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorHistory.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorHistory.cpp
@@ -91,7 +91,7 @@
     m_history.resize(m_afterLastActionIndex);
   } else {
     m_history.resize(m_afterLastActionIndex);
-    m_history.append(action);
+    m_history.push_back(action);
     ++m_afterLastActionIndex;
   }
 }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorInputAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorInputAgent.cpp
index 025abea..6d0cb045 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorInputAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorInputAgent.cpp
@@ -115,7 +115,7 @@
   }
 
   void append(const blink::PlatformTouchPoint& point) {
-    m_touchPoints.append(point);
+    m_touchPoints.push_back(point);
   }
 };
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp
index eb7d4ef..a3b3929 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp
@@ -495,7 +495,7 @@
 }
 
 void InspectorLayerTreeAgent::willAddPageOverlay(const GraphicsLayer* layer) {
-  m_pageOverlayLayerIds.append(layer->platformLayer()->id());
+  m_pageOverlayLayerIds.push_back(layer->platformLayer()->id());
 }
 
 void InspectorLayerTreeAgent::didRemovePageOverlay(const GraphicsLayer* layer) {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
index 7280fb3..f75a8df 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
@@ -477,7 +477,7 @@
       continue;
     if (cachedResource->getType() == Resource::Raw && skipXHRs)
       continue;
-    result.append(cachedResource);
+    result.push_back(cachedResource);
   }
 }
 
@@ -490,7 +490,7 @@
   if (HTMLImportsController* controller = rootDocument->importsController()) {
     for (size_t i = 0; i < controller->loaderCount(); ++i) {
       if (Document* document = controller->loaderAt(i)->document())
-        result.append(document);
+        result.push_back(document);
     }
   }
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.cpp b/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.cpp
index 75bd0726..7a4e20a 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.cpp
@@ -101,7 +101,7 @@
   HeapVector<Member<Document>> documents;
   InspectedFrames* inspectedFrames = InspectedFrames::create(m_inspectedFrame);
   for (LocalFrame* frame : *inspectedFrames) {
-    documents.append(frame->document());
+    documents.push_back(frame->document());
     documents.appendVector(InspectorPageAgent::importsForFrame(frame));
   }
   for (Document* document : documents) {
@@ -125,7 +125,7 @@
       Resource* resource = RawResource::fetch(request, document->fetcher());
       if (resource) {
         // Prevent garbage collection by holding a reference to this resource.
-        m_resources.append(resource);
+        m_resources.push_back(resource);
         ResourceClient* resourceClient = new ResourceClient(this);
         m_pendingResourceClients.add(resourceClient);
         resourceClient->waitForResource(resource);
@@ -150,7 +150,7 @@
       if (!resource)
         continue;
       // Prevent garbage collection by holding a reference to this resource.
-      m_resources.append(resource);
+      m_resources.push_back(resource);
       ResourceClient* resourceClient = new ResourceClient(this);
       m_pendingResourceClients.add(resourceClient);
       resourceClient->waitForResource(resource);
@@ -171,7 +171,7 @@
   if (!m_started)
     start();
   m_callbacks.add(clientId, Callbacks())
-      .storedValue->value.append(std::move(callback));
+      .storedValue->value.push_back(std::move(callback));
   checkDone();
 }
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorSession.cpp b/third_party/WebKit/Source/core/inspector/InspectorSession.cpp
index 387a818..a7a9374 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorSession.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorSession.cpp
@@ -53,7 +53,7 @@
 }
 
 void InspectorSession::append(InspectorAgent* agent) {
-  m_agents.append(agent);
+  m_agents.push_back(agent);
   agent->init(m_instrumentingAgents.get(), m_inspectorBackendDispatcher.get(),
               m_state.get());
 }
@@ -161,7 +161,7 @@
     std::unique_ptr<protocol::Serializable> notification) {
   if (m_disposed)
     return;
-  m_notificationQueue.append(
+  m_notificationQueue.push_back(
       Notification::createForBlink(std::move(notification)));
 }
 
@@ -169,7 +169,7 @@
     std::unique_ptr<v8_inspector::StringBuffer> notification) {
   if (m_disposed)
     return;
-  m_notificationQueue.append(
+  m_notificationQueue.push_back(
       Notification::createForV8(std::move(notification)));
 }
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
index b3ba93ff..8b0be2b 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
@@ -195,7 +195,7 @@
   RefPtr<CSSRuleSourceData> data = CSSRuleSourceData::create(type);
   data->ruleHeaderRange.start = offset;
   m_currentRuleData = data.get();
-  m_currentRuleDataStack.append(data.release());
+  m_currentRuleDataStack.push_back(data.release());
 }
 
 template <typename CharacterType>
@@ -225,7 +225,7 @@
 void StyleSheetHandler::observeSelector(unsigned startOffset,
                                         unsigned endOffset) {
   ASSERT(m_currentRuleDataStack.size());
-  m_currentRuleDataStack.back()->selectorRanges.append(
+  m_currentRuleDataStack.back()->selectorRanges.push_back(
       SourceRange(startOffset, endOffset));
 }
 
@@ -249,9 +249,9 @@
 void StyleSheetHandler::addNewRuleToSourceTree(
     PassRefPtr<CSSRuleSourceData> rule) {
   if (m_currentRuleDataStack.isEmpty())
-    m_result->append(rule);
+    m_result->push_back(rule);
   else
-    m_currentRuleDataStack.back()->childRules.append(rule);
+    m_currentRuleDataStack.back()->childRules.push_back(rule);
 }
 
 PassRefPtr<CSSRuleSourceData> StyleSheetHandler::popRuleData() {
@@ -352,7 +352,7 @@
   String value =
       propertyString.substring(colonIndex + 1, propertyString.length())
           .stripWhiteSpace();
-  m_currentRuleDataStack.back()->styleSourceData->propertyData.append(
+  m_currentRuleDataStack.back()->styleSourceData->propertyData.push_back(
       CSSPropertySourceData(name, value, isImportant, false, isParsed,
                             SourceRange(startOffset, endOffset)));
 }
@@ -401,7 +401,7 @@
   if (!parsedOk || propertyData.range.length() != commentText.length())
     return;
 
-  m_currentRuleDataStack.back()->styleSourceData->propertyData.append(
+  m_currentRuleDataStack.back()->styleSourceData->propertyData.push_back(
       CSSPropertySourceData(propertyData.name, propertyData.value, false, true,
                             true, SourceRange(startOffset, endOffset)));
 }
@@ -549,12 +549,12 @@
       case StyleRule::FontFace:
       case StyleRule::Viewport:
       case StyleRule::Keyframe:
-        result->append(data.get());
+        result->push_back(data.get());
         break;
       case StyleRule::Media:
       case StyleRule::Supports:
       case StyleRule::Keyframes:
-        result->append(data.get());
+        result->push_back(data.get());
         flattenSourceData(data->childRules, result);
         break;
       default:
@@ -597,12 +597,12 @@
       case CSSRule::kFontFaceRule:
       case CSSRule::kViewportRule:
       case CSSRule::kKeyframeRule:
-        result->append(rule);
+        result->push_back(rule);
         break;
       case CSSRule::kMediaRule:
       case CSSRule::kSupportsRule:
       case CSSRule::kKeyframesRule:
-        result->append(rule);
+        result->push_back(rule);
         collectFlatRules(asCSSRuleList(rule), result);
         break;
       default:
@@ -724,7 +724,7 @@
   Vector<String> propertyNames;
   CSSStyleDeclaration* style = styleRule->style();
   for (unsigned i = 0; i < style->length(); ++i)
-    propertyNames.append(style->item(i));
+    propertyNames.push_back(style->item(i));
 
   std::sort(propertyNames.begin(), propertyNames.end(),
             WTF::codePointCompareLessThan);
@@ -845,7 +845,7 @@
     Vector<CSSPropertySourceData>& sourcePropertyData =
         m_sourceData->styleSourceData->propertyData;
     for (const auto& data : sourcePropertyData) {
-      result.append(data);
+      result.push_back(data);
       sourcePropertyNames.add(data.name.lower());
     }
   }
@@ -858,7 +858,7 @@
     String value = m_style->getPropertyValue(name);
     if (value.isEmpty())
       continue;
-    result.append(CSSPropertySourceData(
+    result.push_back(CSSPropertySourceData(
         name, value, !m_style->getPropertyPriority(name).isEmpty(), false, true,
         SourceRange()));
   }
@@ -1862,9 +1862,9 @@
   Vector<String> cssomRulesText = Vector<String>();
   Vector<String> parsedRulesText = Vector<String>();
   for (size_t i = 0; i < cssomRules.size(); ++i)
-    cssomRulesText.append(canonicalCSSText(cssomRules.at(i)));
+    cssomRulesText.push_back(canonicalCSSText(cssomRules.at(i)));
   for (size_t j = 0; j < parsedRules.size(); ++j)
-    parsedRulesText.append(canonicalCSSText(parsedRules.at(j)));
+    parsedRulesText.push_back(canonicalCSSText(parsedRules.at(j)));
 
   diff(cssomRulesText, parsedRulesText, &m_ruleToSourceData,
        &m_sourceDataToRule);
diff --git a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp
index e1fa0e5..3ddf25f 100644
--- a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp
+++ b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp
@@ -351,7 +351,7 @@
 NetworkResourcesData::resources() {
   HeapVector<Member<ResourceData>> result;
   for (auto& request : m_requestIdToResourceDataMap)
-    result.append(request.value);
+    result.push_back(request.value);
   return result;
 }
 
diff --git a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
index 3b6c2df..017e59aa 100644
--- a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
+++ b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
@@ -276,7 +276,7 @@
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   Vector<String> types;
   if (info.Length() > 1 && info[1]->IsString())
-    types.append(toCoreString(info[1].As<v8::String>()));
+    types.push_back(toCoreString(info[1].As<v8::String>()));
   if (info.Length() > 1 && info[1]->IsArray()) {
     v8::Local<v8::Array> typesArray = v8::Local<v8::Array>::Cast(info[1]);
     for (size_t i = 0; i < typesArray->Length(); ++i) {
@@ -285,7 +285,7 @@
                .ToLocal(&typeValue) ||
           !typeValue->IsString())
         continue;
-      types.append(toCoreString(v8::Local<v8::String>::Cast(typeValue)));
+      types.push_back(toCoreString(v8::Local<v8::String>::Cast(typeValue)));
     }
   }
   if (info.Length() == 1)
@@ -321,7 +321,7 @@
           Vector<String>({"resize", "scroll", "zoom", "focus", "blur", "select",
                           "input", "change", "submit", "reset"}));
     else
-      outputTypes.append(types[i]);
+      outputTypes.push_back(types[i]);
   }
   return outputTypes;
 }
@@ -456,13 +456,13 @@
     double interval,
     V8InspectorClient::TimerCallback callback,
     void* data) {
-  m_timerData.append(data);
-  m_timerCallbacks.append(callback);
+  m_timerData.push_back(data);
+  m_timerCallbacks.push_back(callback);
 
   std::unique_ptr<Timer<ThreadDebugger>> timer = WTF::wrapUnique(
       new Timer<ThreadDebugger>(this, &ThreadDebugger::onTimer));
   Timer<ThreadDebugger>* timerPtr = timer.get();
-  m_timers.append(std::move(timer));
+  m_timers.push_back(std::move(timer));
   timerPtr->startRepeating(interval, BLINK_FROM_HERE);
 }
 
diff --git a/third_party/WebKit/Source/core/layout/BUILD.gn b/third_party/WebKit/Source/core/layout/BUILD.gn
index 978bd2c..524d6e5 100644
--- a/third_party/WebKit/Source/core/layout/BUILD.gn
+++ b/third_party/WebKit/Source/core/layout/BUILD.gn
@@ -290,6 +290,8 @@
     "ng/ng_block_layout_algorithm.h",
     "ng/ng_block_node.cc",
     "ng/ng_block_node.h",
+    "ng/ng_box_fragment.cc",
+    "ng/ng_box_fragment.h",
     "ng/ng_break_token.h",
     "ng/ng_constraint_space.cc",
     "ng/ng_constraint_space.h",
@@ -297,8 +299,6 @@
     "ng/ng_constraint_space_builder.h",
     "ng/ng_fragment.cc",
     "ng/ng_fragment.h",
-    "ng/ng_fragment_base.cc",
-    "ng/ng_fragment_base.h",
     "ng/ng_fragment_builder.cc",
     "ng/ng_fragment_builder.h",
     "ng/ng_inline_layout_algorithm.cc",
@@ -324,10 +324,10 @@
     "ng/ng_macros.h",
     "ng/ng_out_of_flow_layout_part.cc",
     "ng/ng_out_of_flow_layout_part.h",
+    "ng/ng_physical_box_fragment.cc",
+    "ng/ng_physical_box_fragment.h",
     "ng/ng_physical_fragment.cc",
     "ng/ng_physical_fragment.h",
-    "ng/ng_physical_fragment_base.cc",
-    "ng/ng_physical_fragment_base.h",
     "ng/ng_physical_text_fragment.h",
     "ng/ng_text_fragment.cc",
     "ng/ng_text_fragment.h",
diff --git a/third_party/WebKit/Source/core/layout/LayoutText.cpp b/third_party/WebKit/Source/core/layout/LayoutText.cpp
index dd8366d..c156ca1 100644
--- a/third_party/WebKit/Source/core/layout/LayoutText.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutText.cpp
@@ -1084,7 +1084,8 @@
   bool keepAll =
       styleToUse.wordBreak() == KeepAllWordBreak && styleToUse.autoWrap();
 
-  Hyphenation* hyphenation = styleToUse.getHyphenation();
+  Hyphenation* hyphenation =
+      styleToUse.autoWrap() ? styleToUse.getHyphenation() : nullptr;
   bool disableSoftHyphen = styleToUse.getHyphens() == HyphensNone;
   float maxWordWidth = 0;
   if (!hyphenation)
diff --git a/third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h b/third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h
index 02072ff..ebebad9 100644
--- a/third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h
+++ b/third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h
@@ -958,7 +958,7 @@
   // See: fast/css3-text/css3-word-break/word-break-all-wrap-with-floats.html
   float widthMeasurementAtLastBreakOpportunity = 0;
 
-  Hyphenation* hyphenation = style.getHyphenation();
+  Hyphenation* hyphenation = m_autoWrap ? style.getHyphenation() : nullptr;
   bool disableSoftHyphen = style.getHyphens() == HyphensNone;
   float hyphenWidth = 0;
   bool isLineEmpty = m_lineInfo.isEmpty();
diff --git a/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc b/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc
index eeff2fa..405c4e8 100644
--- a/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc
+++ b/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc
@@ -4,8 +4,8 @@
 
 #include "core/layout/ng/layout_ng_block_flow.h"
 #include "core/layout/ng/ng_constraint_space.h"
-#include "core/layout/ng/ng_fragment_base.h"
 #include "core/layout/LayoutAnalyzer.h"
+#include "core/layout/ng/ng_fragment.h"
 
 namespace blink {
 
@@ -26,7 +26,7 @@
   // passes (probably FirstChild(), etc).
   m_box = new NGBlockNode(this);
 
-  NGFragmentBase* fragment;
+  NGFragment* fragment;
   while (!m_box->Layout(constraint_space, &fragment))
     ;
 
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
index 9f88d94..4116155 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
@@ -7,14 +7,14 @@
 #include "core/layout/ng/ng_break_token.h"
 #include "core/layout/ng/ng_constraint_space.h"
 #include "core/layout/ng/ng_constraint_space_builder.h"
-#include "core/layout/ng/ng_fragment_base.h"
 #include "core/layout/ng/ng_fragment_builder.h"
-#include "core/layout/ng/ng_fragment.h"
 #include "core/layout/ng/ng_layout_opportunity_iterator.h"
 #include "core/layout/ng/ng_length_utils.h"
 #include "core/layout/ng/ng_out_of_flow_layout_part.h"
 #include "core/layout/ng/ng_units.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_box_fragment.h"
+#include "core/layout/ng/ng_fragment.h"
 #include "platform/LengthFunctions.h"
 #include "wtf/Optional.h"
 
@@ -68,7 +68,7 @@
 
 // Creates an exclusion from the fragment that will be placed in the provided
 // layout opportunity.
-NGExclusion CreateExclusion(const NGFragmentBase& fragment,
+NGExclusion CreateExclusion(const NGFragment& fragment,
                             const NGLayoutOpportunity& opportunity,
                             LayoutUnit float_offset,
                             NGBoxStrut margins,
@@ -101,7 +101,7 @@
 // @return Layout opportunity for the fragment.
 const NGLayoutOpportunity FindLayoutOpportunityForFragment(
     NGConstraintSpace* space,
-    const NGFragmentBase& fragment,
+    const NGFragment& fragment,
     const NGBoxStrut& margins) {
   NGLayoutOpportunityIterator* opportunity_iter = space->LayoutOpportunities();
   NGLayoutOpportunity opportunity;
@@ -239,8 +239,8 @@
 }
 
 NGLayoutStatus NGBlockLayoutAlgorithm::Layout(
-    NGPhysicalFragmentBase* child_fragment,
-    NGPhysicalFragmentBase** fragment_out,
+    NGPhysicalFragment* child_fragment,
+    NGPhysicalFragment** fragment_out,
     NGLayoutAlgorithm** algorithm_out) {
   switch (layout_state_) {
     case kStateInit: {
@@ -282,7 +282,7 @@
 
       content_size_ = border_and_padding_.block_start;
 
-      builder_ = new NGFragmentBuilder(NGPhysicalFragmentBase::kFragmentBox);
+      builder_ = new NGFragmentBuilder(NGPhysicalFragment::kFragmentBox);
       builder_->SetDirection(constraint_space_->Direction());
       builder_->SetWritingMode(constraint_space_->WritingMode());
       builder_->SetInlineSize(inline_size).SetBlockSize(block_size);
@@ -330,12 +330,12 @@
       DCHECK(child_fragment);
 
       // TODO(layout_ng): Seems like a giant hack to call this here.
-      current_child_->UpdateLayoutBox(toNGPhysicalFragment(child_fragment),
+      current_child_->UpdateLayoutBox(toNGPhysicalBoxFragment(child_fragment),
                                       space_for_current_child_);
 
-      FinishCurrentChildLayout(new NGFragment(
+      FinishCurrentChildLayout(new NGBoxFragment(
           ConstraintSpace().WritingMode(), ConstraintSpace().Direction(),
-          toNGPhysicalFragment(child_fragment)));
+          toNGPhysicalBoxFragment(child_fragment)));
       current_child_ = current_child_->NextSibling();
       layout_state_ = kStatePrepareForChildLayout;
       return kNotFinished;
@@ -347,7 +347,7 @@
     case kStateFinalize: {
       builder_->SetInlineOverflow(max_inline_size_)
           .SetBlockOverflow(content_size_);
-      *fragment_out = builder_->ToFragment();
+      *fragment_out = builder_->ToBoxFragment();
       layout_state_ = kStateInit;
       return kNewFragment;
     }
@@ -357,8 +357,7 @@
   return kNewFragment;
 }
 
-void NGBlockLayoutAlgorithm::FinishCurrentChildLayout(
-    NGFragmentBase* fragment) {
+void NGBlockLayoutAlgorithm::FinishCurrentChildLayout(NGFragment* fragment) {
   NGBoxStrut child_margins = ComputeMargins(
       *space_for_current_child_, CurrentChildStyle(),
       constraint_space_->WritingMode(), constraint_space_->Direction());
@@ -392,7 +391,7 @@
       return false;
     }
   }
-  NGFragmentBase* fragment;
+  NGFragment* fragment;
   NGLogicalOffset offset;
   if (out_of_flow_layout_->Layout(&fragment, &offset) == kNewFragment) {
     // TODO(atotic) Need to adjust size of overflow rect per spec.
@@ -404,7 +403,7 @@
 
 NGBoxStrut NGBlockLayoutAlgorithm::CollapseMargins(
     const NGBoxStrut& margins,
-    const NGFragment& fragment) {
+    const NGBoxFragment& fragment) {
   bool is_zero_height_box = !fragment.BlockSize() && margins.IsEmpty() &&
                             fragment.MarginStrut().IsEmpty();
   // Create the current child's margin strut from its children's margin strut or
@@ -469,10 +468,10 @@
 }
 
 NGLogicalOffset NGBlockLayoutAlgorithm::PositionFragment(
-    const NGFragmentBase& fragment,
+    const NGFragment& fragment,
     const NGBoxStrut& child_margins) {
   const NGBoxStrut collapsed_margins =
-      CollapseMargins(child_margins, toNGFragment(fragment));
+      CollapseMargins(child_margins, toNGBoxFragment(fragment));
 
   AdjustToClearance(ConstraintSpace(), CurrentChildStyle(), &content_size_);
 
@@ -488,7 +487,7 @@
 }
 
 NGLogicalOffset NGBlockLayoutAlgorithm::PositionFloatFragment(
-    const NGFragmentBase& fragment,
+    const NGFragment& fragment,
     const NGBoxStrut& margins) {
   // TODO(glebl@chromium.org): Support the top edge alignment rule.
   // Find a layout opportunity that will fit our float.
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.h
index 4a0545a..13f67cc 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.h
@@ -17,10 +17,10 @@
 class NGBreakToken;
 class NGConstraintSpace;
 class NGConstraintSpaceBuilder;
-class NGFragment;
+class NGBoxFragment;
 class NGFragmentBuilder;
 class NGOutOfFlowLayoutPart;
-class NGPhysicalFragmentBase;
+class NGPhysicalFragment;
 
 // A class for general block layout (e.g. a <div> with no special style).
 // Lays out the children in sequence.
@@ -38,8 +38,8 @@
                          NGBreakToken* break_token = nullptr);
 
   MinAndMaxState ComputeMinAndMaxContentSizes(MinAndMaxContentSizes*) override;
-  NGLayoutStatus Layout(NGPhysicalFragmentBase*,
-                        NGPhysicalFragmentBase**,
+  NGLayoutStatus Layout(NGPhysicalFragment*,
+                        NGPhysicalFragment**,
                         NGLayoutAlgorithm**) override;
 
   DECLARE_VIRTUAL_TRACE();
@@ -47,7 +47,7 @@
  private:
   // Creates a new constraint space for the current child.
   NGConstraintSpace* CreateConstraintSpaceForCurrentChild() const;
-  void FinishCurrentChildLayout(NGFragmentBase* fragment);
+  void FinishCurrentChildLayout(NGFragment* fragment);
   bool LayoutOutOfFlowChild();
 
   // Computes collapsed margins for 2 adjoining blocks and updates the resultant
@@ -58,7 +58,7 @@
   // @param fragment Current child's fragment.
   // @return NGBoxStrut with margins block start/end.
   NGBoxStrut CollapseMargins(const NGBoxStrut& child_margins,
-                             const NGFragment& fragment);
+                             const NGBoxFragment& fragment);
 
   // Calculates position of the in-flow block-level fragment that needs to be
   // positioned relative to the current fragment that is being built.
@@ -66,7 +66,7 @@
   // @param fragment Fragment that needs to be placed.
   // @param child_margins Margins information for the current child fragment.
   // @return Position of the fragment in the parent's constraint space.
-  NGLogicalOffset PositionFragment(const NGFragmentBase& fragment,
+  NGLogicalOffset PositionFragment(const NGFragment& fragment,
                                    const NGBoxStrut& child_margins);
 
   // Calculates position of the float fragment that needs to be
@@ -75,7 +75,7 @@
   // @param fragment Fragment that needs to be placed.
   // @param margins Margins information for the fragment.
   // @return Position of the fragment in the parent's constraint space.
-  NGLogicalOffset PositionFloatFragment(const NGFragmentBase& fragment,
+  NGLogicalOffset PositionFloatFragment(const NGFragment& fragment,
                                         const NGBoxStrut& margins);
 
   // Updates block-{start|end} of the currently constructed fragment.
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
index ec08a06..4f17239725 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
@@ -7,12 +7,12 @@
 #include "core/layout/ng/ng_block_node.h"
 #include "core/layout/ng/ng_constraint_space.h"
 #include "core/layout/ng/ng_constraint_space_builder.h"
-#include "core/layout/ng/ng_physical_fragment_base.h"
-#include "core/layout/ng/ng_physical_fragment.h"
 #include "core/layout/ng/ng_layout_coordinator.h"
 #include "core/layout/ng/ng_length_utils.h"
 #include "core/layout/ng/ng_units.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
+#include "core/layout/ng/ng_physical_fragment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace blink {
@@ -35,20 +35,20 @@
  protected:
   void SetUp() override { style_ = ComputedStyle::create(); }
 
-  NGPhysicalFragment* RunBlockLayoutAlgorithm(NGConstraintSpace* space,
-                                              NGBlockNode* first_child) {
+  NGPhysicalBoxFragment* RunBlockLayoutAlgorithm(NGConstraintSpace* space,
+                                                 NGBlockNode* first_child) {
     NGBlockNode parent(style_.get());
     parent.SetFirstChild(first_child);
 
     NGLayoutCoordinator coordinator(&parent, space);
-    NGPhysicalFragmentBase* fragment;
+    NGPhysicalFragment* fragment;
     coordinator.Tick(&fragment);
     EXPECT_EQ(kBlockLayoutAlgorithm,
               coordinator.GetAlgorithmStackForTesting()[0]->algorithmType());
     while (!coordinator.Tick(&fragment))
       ;
 
-    return toNGPhysicalFragment(fragment);
+    return toNGPhysicalBoxFragment(fragment);
   }
 
   MinAndMaxContentSizes RunComputeMinAndMax(NGBlockNode* first_child) {
@@ -80,7 +80,7 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
-  NGPhysicalFragmentBase* frag = RunBlockLayoutAlgorithm(space, nullptr);
+  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, nullptr);
 
   EXPECT_EQ(LayoutUnit(30), frag->Width());
   EXPECT_EQ(LayoutUnit(40), frag->Height());
@@ -110,14 +110,14 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, first_child);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, first_child);
 
   EXPECT_EQ(LayoutUnit(kWidth), frag->Width());
   EXPECT_EQ(LayoutUnit(kHeight1 + kHeight2 + kMarginTop), frag->Height());
-  EXPECT_EQ(NGPhysicalFragmentBase::kFragmentBox, frag->Type());
+  EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type());
   ASSERT_EQ(frag->Children().size(), 2UL);
 
-  const NGPhysicalFragmentBase* child = frag->Children()[0];
+  const NGPhysicalFragment* child = frag->Children()[0];
   EXPECT_EQ(kHeight1, child->Height());
   EXPECT_EQ(0, child->TopOffset());
 
@@ -156,11 +156,11 @@
   auto* space =
       ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::Ltr,
                                NGLogicalSize(LayoutUnit(500), LayoutUnit(500)));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
 
-  const NGPhysicalFragmentBase* child = frag->Children()[0];
+  const NGPhysicalFragment* child = frag->Children()[0];
   // DIV2
-  child = static_cast<const NGPhysicalFragment*>(child)->Children()[0];
+  child = static_cast<const NGPhysicalBoxFragment*>(child)->Children()[0];
 
   EXPECT_EQ(kHeight, child->Height());
   EXPECT_EQ(0, child->TopOffset());
@@ -205,12 +205,12 @@
           .SetTextDirection(TextDirection::Ltr)
           .SetIsNewFormattingContext(true)
           .ToConstraintSpace();
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
 
   EXPECT_TRUE(frag->MarginStrut().IsEmpty());
   ASSERT_EQ(frag->Children().size(), 1UL);
-  const NGPhysicalFragment* div2_fragment =
-      static_cast<const NGPhysicalFragment*>(frag->Children()[0].get());
+  const NGPhysicalBoxFragment* div2_fragment =
+      static_cast<const NGPhysicalBoxFragment*>(frag->Children()[0].get());
   EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2MarginTop)}),
             div2_fragment->MarginStrut());
   EXPECT_EQ(kDiv1MarginTop, div2_fragment->TopOffset());
@@ -279,12 +279,12 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
 
   ASSERT_EQ(frag->Children().size(), 3UL);
 
   // DIV1
-  const NGPhysicalFragmentBase* child = frag->Children()[0];
+  const NGPhysicalFragment* child = frag->Children()[0];
   EXPECT_EQ(kHeight, child->Height());
   EXPECT_EQ(0, child->TopOffset());
 
@@ -328,7 +328,7 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
 
   // Verify that margins are collapsed.
   EXPECT_EQ(NGMarginStrut({LayoutUnit(0), LayoutUnit(kDiv2MarginBottom)}),
@@ -377,7 +377,7 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
 
   // Verify that margins do NOT collapse.
   frag = RunBlockLayoutAlgorithm(space, div1);
@@ -386,7 +386,7 @@
   ASSERT_EQ(frag->Children().size(), 1UL);
 
   EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2Margin), LayoutUnit(kDiv2Margin)}),
-            static_cast<const NGPhysicalFragment*>(frag->Children()[0].get())
+            static_cast<const NGPhysicalBoxFragment*>(frag->Children()[0].get())
                 ->MarginStrut());
 
   // Reset padding and verify that margins DO collapse.
@@ -433,10 +433,10 @@
   auto* space =
       ConstructConstraintSpace(kVerticalLeftRight, TextDirection::Ltr,
                                NGLogicalSize(LayoutUnit(500), LayoutUnit(500)));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, vertical_div);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, vertical_div);
 
   ASSERT_EQ(frag->Children().size(), 2UL);
-  const NGPhysicalFragmentBase* child = frag->Children()[1];
+  const NGPhysicalFragment* child = frag->Children()[1];
   // Horizontal div
   EXPECT_EQ(0, child->TopOffset());
   EXPECT_EQ(kVerticalDivWidth + kHorizontalDivMarginLeft, child->LeftOffset());
@@ -491,15 +491,15 @@
   auto* space =
       ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::Ltr,
                                NGLogicalSize(LayoutUnit(500), LayoutUnit(500)));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
 
   ASSERT_EQ(frag->Children().size(), 2UL);
 
-  const NGPhysicalFragmentBase* child1 = frag->Children()[0];
+  const NGPhysicalFragment* child1 = frag->Children()[0];
   EXPECT_EQ(0, child1->TopOffset());
   EXPECT_EQ(kHeight, child1->Height());
 
-  const NGPhysicalFragmentBase* child2 = frag->Children()[1];
+  const NGPhysicalFragment* child2 = frag->Children()[1];
   EXPECT_EQ(kHeight + std::max(kMarginBottom, kMarginTop), child2->TopOffset());
 }
 
@@ -554,23 +554,23 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
 
   ASSERT_EQ(frag->Children().size(), 1UL);
 
   // div1
-  const NGPhysicalFragmentBase* child = frag->Children()[0];
+  const NGPhysicalFragment* child = frag->Children()[0];
   EXPECT_EQ(kBorderLeft + kPaddingLeft + kWidth + kPaddingRight + kBorderRight,
             child->Width());
   EXPECT_EQ(kBorderTop + kPaddingTop + kHeight + kPaddingBottom + kBorderBottom,
             child->Height());
 
-  ASSERT_TRUE(child->Type() == NGPhysicalFragmentBase::kFragmentBox);
-  ASSERT_EQ(static_cast<const NGPhysicalFragment*>(child)->Children().size(),
+  ASSERT_TRUE(child->Type() == NGPhysicalFragment::kFragmentBox);
+  ASSERT_EQ(static_cast<const NGPhysicalBoxFragment*>(child)->Children().size(),
             1UL);
 
   // div2
-  child = static_cast<const NGPhysicalFragment*>(child)->Children()[0];
+  child = static_cast<const NGPhysicalBoxFragment*>(child)->Children()[0];
   EXPECT_EQ(kBorderTop + kPaddingTop, child->TopOffset());
   EXPECT_EQ(kBorderLeft + kPaddingLeft, child->LeftOffset());
 }
@@ -588,13 +588,13 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, first_child);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, first_child);
 
   EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->Width());
-  EXPECT_EQ(NGPhysicalFragmentBase::kFragmentBox, frag->Type());
+  EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type());
   ASSERT_EQ(frag->Children().size(), 1UL);
 
-  const NGPhysicalFragmentBase* child = frag->Children()[0];
+  const NGPhysicalFragment* child = frag->Children()[0];
   EXPECT_EQ(LayoutUnit(12), child->Width());
 }
 
@@ -616,14 +616,14 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, first_child);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, first_child);
 
   EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->Width());
-  EXPECT_EQ(NGPhysicalFragmentBase::kFragmentBox, frag->Type());
+  EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type());
   EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->WidthOverflow());
   ASSERT_EQ(1UL, frag->Children().size());
 
-  const NGPhysicalFragmentBase* child = frag->Children()[0];
+  const NGPhysicalFragment* child = frag->Children()[0];
   EXPECT_EQ(LayoutUnit(kChildWidth), child->Width());
   EXPECT_EQ(LayoutUnit(kPaddingLeft + 10), child->LeftOffset());
   EXPECT_EQ(LayoutUnit(0), child->TopOffset());
@@ -697,26 +697,26 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(kParentSize), LayoutUnit(kParentSize)));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
   ASSERT_EQ(frag->Children().size(), 4UL);
 
   // DIV1
-  const NGPhysicalFragmentBase* child1 = frag->Children()[0];
+  const NGPhysicalFragment* child1 = frag->Children()[0];
   EXPECT_EQ(kDiv1TopMargin, child1->TopOffset());
   EXPECT_EQ(kParentLeftPadding, child1->LeftOffset());
 
   // DIV2
-  const NGPhysicalFragmentBase* child2 = frag->Children()[1];
+  const NGPhysicalFragment* child2 = frag->Children()[1];
   EXPECT_EQ(0, child2->TopOffset());
   EXPECT_EQ(kParentLeftPadding, child2->LeftOffset());
 
   // DIV3
-  const NGPhysicalFragmentBase* child3 = frag->Children()[2];
+  const NGPhysicalFragment* child3 = frag->Children()[2];
   EXPECT_EQ(kDiv2Size, child3->TopOffset());
   EXPECT_EQ(kParentLeftPadding + kParentSize - kDiv3Size, child3->LeftOffset());
 
   // DIV4
-  const NGPhysicalFragmentBase* child4 = frag->Children()[3];
+  const NGPhysicalFragment* child4 = frag->Children()[3];
   EXPECT_EQ(kDiv2Size + kDiv3Size, child4->TopOffset());
   EXPECT_EQ(kParentLeftPadding + kDiv4LeftMargin, child4->LeftOffset());
 }
@@ -774,8 +774,8 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(kParentSize), LayoutUnit(kParentSize)));
-  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
-  const NGPhysicalFragmentBase* child3 = frag->Children()[2];
+  NGPhysicalBoxFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+  const NGPhysicalFragment* child3 = frag->Children()[2];
   EXPECT_EQ(kDiv1Size, child3->TopOffset());
 
   // clear: right;
@@ -842,7 +842,7 @@
   auto* space = ConstructConstraintSpace(
       kHorizontalTopBottom, TextDirection::Ltr,
       NGLogicalSize(LayoutUnit(100), NGSizeIndefinite), true);
-  NGPhysicalFragmentBase* frag = RunBlockLayoutAlgorithm(space, first_child);
+  NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, first_child);
 
   EXPECT_EQ(LayoutUnit(30), frag->Width());
 }
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
index 1849d7a2..b5c6d1c 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
@@ -11,12 +11,12 @@
 #include "core/layout/ng/ng_block_layout_algorithm.h"
 #include "core/layout/ng/ng_constraint_space_builder.h"
 #include "core/layout/ng/ng_constraint_space.h"
-#include "core/layout/ng/ng_fragment.h"
 #include "core/layout/ng/ng_fragment_builder.h"
 #include "core/layout/ng/ng_inline_node.h"
 #include "core/layout/ng/ng_layout_coordinator.h"
 #include "core/layout/ng/ng_length_utils.h"
 #include "core/layout/ng/ng_writing_mode.h"
+#include "core/layout/ng/ng_box_fragment.h"
 #include "platform/RuntimeEnabledFeatures.h"
 
 namespace blink {
@@ -40,14 +40,14 @@
 NGBlockNode::~NGBlockNode() {}
 
 bool NGBlockNode::Layout(NGConstraintSpace* constraint_space,
-                         NGFragmentBase** out) {
+                         NGFragment** out) {
   DCHECK(!minmax_algorithm_)
       << "Can't interleave Layout and ComputeMinAndMaxContentSizes";
   // We can either use the new layout code to do the layout and then copy the
   // resulting size to the LayoutObject, or use the old layout code and
   // synthesize a fragment.
   if (CanUseNewLayout()) {
-    NGPhysicalFragmentBase* fragment;
+    NGPhysicalFragment* fragment;
 
     // Store a coordinator so Layout can preserve its existing semantic
     // of returning false until completed.
@@ -57,21 +57,21 @@
     if (!layout_coordinator_->Tick(&fragment))
       return false;
 
-    fragment_ = toNGPhysicalFragment(fragment);
+    fragment_ = toNGPhysicalBoxFragment(fragment);
 
     UpdateLayoutBox(fragment_, constraint_space);
   } else {
     DCHECK(layout_box_);
     fragment_ = RunOldLayout(*constraint_space);
   }
-  *out = new NGFragment(FromPlatformWritingMode(Style()->getWritingMode()),
-                        Style()->direction(), fragment_.get());
+  *out = new NGBoxFragment(FromPlatformWritingMode(Style()->getWritingMode()),
+                           Style()->direction(), fragment_.get());
   // Reset coordinator for future use
   layout_coordinator_ = nullptr;
   return true;
 }
 
-void NGBlockNode::UpdateLayoutBox(NGPhysicalFragment* fragment,
+void NGBlockNode::UpdateLayoutBox(NGPhysicalBoxFragment* fragment,
                                   const NGConstraintSpace* constraint_space) {
   fragment_ = fragment;
   if (layout_box_) {
@@ -127,12 +127,12 @@
       new NGLayoutCoordinator(this, constraint_space);
 
   // Have to synthesize this value.
-  NGPhysicalFragmentBase* physical_fragment;
+  NGPhysicalFragment* physical_fragment;
   while (!minmax_coordinator->Tick(&physical_fragment))
     continue;
-  NGFragment* fragment = new NGFragment(
+  NGBoxFragment* fragment = new NGBoxFragment(
       FromPlatformWritingMode(Style()->getWritingMode()), Style()->direction(),
-      toNGPhysicalFragment(physical_fragment));
+      toNGPhysicalBoxFragment(physical_fragment));
 
   sizes->min_content = fragment->InlineOverflow();
 
@@ -149,9 +149,9 @@
   while (!minmax_coordinator->Tick(&physical_fragment))
     continue;
 
-  fragment = new NGFragment(FromPlatformWritingMode(Style()->getWritingMode()),
-                            Style()->direction(),
-                            toNGPhysicalFragment(physical_fragment));
+  fragment = new NGBoxFragment(
+      FromPlatformWritingMode(Style()->getWritingMode()), Style()->direction(),
+      toNGPhysicalBoxFragment(physical_fragment));
   sizes->max_content = fragment->InlineOverflow();
   minmax_algorithm_ = nullptr;
   return true;
@@ -298,7 +298,7 @@
   }
 }
 
-NGPhysicalFragment* NGBlockNode::RunOldLayout(
+NGPhysicalBoxFragment* NGBlockNode::RunOldLayout(
     const NGConstraintSpace& constraint_space) {
   NGLogicalSize available_size = constraint_space.PercentageResolutionSize();
   layout_box_->setOverrideContainingBlockContentLogicalWidth(
@@ -325,7 +325,7 @@
   LayoutRect overflow = layout_box_->layoutOverflowRect();
   // TODO(layout-ng): This does not handle writing modes correctly (for
   // overflow)
-  NGFragmentBuilder builder(NGPhysicalFragmentBase::kFragmentBox);
+  NGFragmentBuilder builder(NGPhysicalFragment::kFragmentBox);
   builder.SetInlineSize(layout_box_->logicalWidth())
       .SetBlockSize(layout_box_->logicalHeight())
       .SetDirection(layout_box_->styleRef().direction())
@@ -333,7 +333,7 @@
           FromPlatformWritingMode(layout_box_->styleRef().getWritingMode()))
       .SetInlineOverflow(overflow.width())
       .SetBlockOverflow(overflow.height());
-  return builder.ToFragment();
+  return builder.ToBoxFragment();
 }
 
 void NGBlockNode::UseOldOutOfFlowPositioning() {
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_node.h b/third_party/WebKit/Source/core/layout/ng/ng_block_node.h
index 54dbe09..d2b9a38 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_node.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_node.h
@@ -15,10 +15,10 @@
 class LayoutBox;
 class LayoutObject;
 class NGConstraintSpace;
-class NGFragmentBase;
+class NGFragment;
 class NGLayoutAlgorithm;
 class NGLayoutCoordinator;
-class NGPhysicalFragment;
+class NGPhysicalBoxFragment;
 struct MinAndMaxContentSizes;
 
 // Represents a node to be laid out.
@@ -33,7 +33,7 @@
 
   ~NGBlockNode() override;
 
-  bool Layout(NGConstraintSpace*, NGFragmentBase**) override;
+  bool Layout(NGConstraintSpace*, NGFragment**) override;
   NGBlockNode* NextSibling() override;
 
   // Computes the value of min-content and max-content for this box.
@@ -59,13 +59,13 @@
 
   // Runs layout on layout_box_ and creates a fragment for the resulting
   // geometry.
-  NGPhysicalFragment* RunOldLayout(const NGConstraintSpace&);
+  NGPhysicalBoxFragment* RunOldLayout(const NGConstraintSpace&);
 
   // Called if this is an out-of-flow block which needs to be
   // positioned with legacy layout.
   void UseOldOutOfFlowPositioning();
 
-  void UpdateLayoutBox(NGPhysicalFragment* fragment,
+  void UpdateLayoutBox(NGPhysicalBoxFragment* fragment,
                        const NGConstraintSpace* constraint_space);
 
  private:
@@ -89,7 +89,7 @@
   Member<NGLayoutInputNode> first_child_;
   Member<NGLayoutCoordinator> layout_coordinator_;
   Member<NGLayoutAlgorithm> minmax_algorithm_;
-  Member<NGPhysicalFragment> fragment_;
+  Member<NGPhysicalBoxFragment> fragment_;
 };
 
 DEFINE_TYPE_CASTS(NGBlockNode,
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_node_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_node_test.cc
index 434f379..c18f95d 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_node_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_node_test.cc
@@ -4,8 +4,8 @@
 
 #include "core/layout/ng/ng_block_node.h"
 
-#include "core/layout/ng/ng_fragment.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_box_fragment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_box_fragment.cc b/third_party/WebKit/Source/core/layout/ng/ng_box_fragment.cc
new file mode 100644
index 0000000..40d77d4
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/ng/ng_box_fragment.cc
@@ -0,0 +1,20 @@
+// 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 "core/layout/ng/ng_box_fragment.h"
+
+#include "core/layout/ng/ng_macros.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
+
+namespace blink {
+
+NGMarginStrut NGBoxFragment::MarginStrut() const {
+  WRITING_MODE_IGNORED(
+      "Accessing the margin strut is fine here. Changing the writing mode"
+      "establishes a new formatting context, for which a margin strut is never"
+      "set for a fragment.");
+  return toNGPhysicalBoxFragment(physical_fragment_)->MarginStrut();
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_box_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_box_fragment.h
new file mode 100644
index 0000000..36fbaf3
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/ng/ng_box_fragment.h
@@ -0,0 +1,34 @@
+// 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 NGBoxFragment_h
+#define NGBoxFragment_h
+
+#include "core/CoreExport.h"
+#include "core/layout/ng/ng_units.h"
+#include "core/layout/ng/ng_writing_mode.h"
+#include "core/layout/ng/ng_fragment.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
+
+namespace blink {
+
+class CORE_EXPORT NGBoxFragment final : public NGFragment {
+ public:
+  NGBoxFragment(NGWritingMode writing_mode,
+                TextDirection direction,
+                NGPhysicalBoxFragment* physical_fragment)
+      : NGFragment(writing_mode, direction, physical_fragment) {}
+
+  NGMarginStrut MarginStrut() const;
+};
+
+DEFINE_TYPE_CASTS(NGBoxFragment,
+                  NGFragment,
+                  fragment,
+                  fragment->Type() == NGPhysicalFragment::kFragmentBox,
+                  fragment.Type() == NGPhysicalFragment::kFragmentBox);
+
+}  // namespace blink
+
+#endif  // NGBoxFragment_h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc
index 9ec2d52..5af006f4 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc
@@ -95,7 +95,7 @@
   return static_cast<NGFragmentationType>(block_direction_fragmentation_type_);
 }
 
-void NGConstraintSpace::Subtract(const NGFragment*) {
+void NGConstraintSpace::Subtract(const NGBoxFragment*) {
   // TODO(layout-ng): Implement.
 }
 
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
index ddfdd8c..ccbe235e 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
@@ -14,7 +14,7 @@
 namespace blink {
 
 class LayoutBox;
-class NGFragment;
+class NGBoxFragment;
 class NGLayoutOpportunityIterator;
 
 // TODO(glebl@): unused, delete.
@@ -107,7 +107,7 @@
   // Modifies constraint space to account for a placed fragment. Depending on
   // the shape of the fragment this will either modify the inline or block
   // size, or add an exclusion.
-  void Subtract(const NGFragment*);
+  void Subtract(const NGBoxFragment*);
 
   NGLayoutOpportunityIterator* LayoutOpportunities(
       unsigned clear = kNGClearNone,
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragment.cc b/third_party/WebKit/Source/core/layout/ng/ng_fragment.cc
index 9ccb19c..25ff831 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_fragment.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_fragment.cc
@@ -4,17 +4,48 @@
 
 #include "core/layout/ng/ng_fragment.h"
 
-#include "core/layout/ng/ng_macros.h"
-#include "core/layout/ng/ng_physical_fragment.h"
-
 namespace blink {
 
-NGMarginStrut NGFragment::MarginStrut() const {
-  WRITING_MODE_IGNORED(
-      "Accessing the margin strut is fine here. Changing the writing mode"
-      "establishes a new formatting context, for which a margin strut is never"
-      "set for a fragment.");
-  return toNGPhysicalFragment(physical_fragment_)->MarginStrut();
+LayoutUnit NGFragment::InlineSize() const {
+  return writing_mode_ == kHorizontalTopBottom ? physical_fragment_->Width()
+                                               : physical_fragment_->Height();
+}
+
+LayoutUnit NGFragment::BlockSize() const {
+  return writing_mode_ == kHorizontalTopBottom ? physical_fragment_->Height()
+                                               : physical_fragment_->Width();
+}
+
+LayoutUnit NGFragment::InlineOverflow() const {
+  return writing_mode_ == kHorizontalTopBottom
+             ? physical_fragment_->WidthOverflow()
+             : physical_fragment_->HeightOverflow();
+}
+
+LayoutUnit NGFragment::BlockOverflow() const {
+  return writing_mode_ == kHorizontalTopBottom
+             ? physical_fragment_->HeightOverflow()
+             : physical_fragment_->WidthOverflow();
+}
+
+LayoutUnit NGFragment::InlineOffset() const {
+  return writing_mode_ == kHorizontalTopBottom
+             ? physical_fragment_->LeftOffset()
+             : physical_fragment_->TopOffset();
+}
+
+LayoutUnit NGFragment::BlockOffset() const {
+  return writing_mode_ == kHorizontalTopBottom
+             ? physical_fragment_->TopOffset()
+             : physical_fragment_->LeftOffset();
+}
+
+NGPhysicalFragment::NGFragmentType NGFragment::Type() const {
+  return physical_fragment_->Type();
+}
+
+DEFINE_TRACE(NGFragment) {
+  visitor->trace(physical_fragment_);
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_fragment.h
index b08d214..bafe525 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_fragment.h
@@ -6,29 +6,54 @@
 #define NGFragment_h
 
 #include "core/CoreExport.h"
-#include "core/layout/ng/ng_fragment_base.h"
-#include "core/layout/ng/ng_physical_fragment.h"
-#include "core/layout/ng/ng_units.h"
 #include "core/layout/ng/ng_writing_mode.h"
+#include "core/layout/ng/ng_physical_fragment.h"
+#include "platform/LayoutUnit.h"
+#include "platform/heap/Handle.h"
 
 namespace blink {
 
-class CORE_EXPORT NGFragment final : public NGFragmentBase {
+class CORE_EXPORT NGFragment : public GarbageCollected<NGFragment> {
  public:
+  NGWritingMode WritingMode() const {
+    return static_cast<NGWritingMode>(writing_mode_);
+  }
+  TextDirection Direction() const {
+    return static_cast<TextDirection>(direction_);
+  }
+
+  // Returns the border-box size.
+  LayoutUnit InlineSize() const;
+  LayoutUnit BlockSize() const;
+
+  // Returns the total size, including the contents outside of the border-box.
+  LayoutUnit InlineOverflow() const;
+  LayoutUnit BlockOverflow() const;
+
+  // Returns the offset relative to the parent fragement's content-box.
+  LayoutUnit InlineOffset() const;
+  LayoutUnit BlockOffset() const;
+
+  NGPhysicalFragment::NGFragmentType Type() const;
+
+  NGPhysicalFragment* PhysicalFragment() const { return physical_fragment_; };
+
+  DECLARE_TRACE();
+
+ protected:
   NGFragment(NGWritingMode writing_mode,
              TextDirection direction,
              NGPhysicalFragment* physical_fragment)
-      : NGFragmentBase(writing_mode, direction, physical_fragment) {}
+      : physical_fragment_(physical_fragment),
+        writing_mode_(writing_mode),
+        direction_(static_cast<unsigned>(direction)) {}
 
-  NGMarginStrut MarginStrut() const;
+  Member<NGPhysicalFragment> physical_fragment_;
+
+  unsigned writing_mode_ : 3;
+  unsigned direction_ : 1;
 };
 
-DEFINE_TYPE_CASTS(NGFragment,
-                  NGFragmentBase,
-                  fragment,
-                  fragment->Type() == NGPhysicalFragmentBase::kFragmentBox,
-                  fragment.Type() == NGPhysicalFragmentBase::kFragmentBox);
-
 }  // namespace blink
 
 #endif  // NGFragment_h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragment_base.cc b/third_party/WebKit/Source/core/layout/ng/ng_fragment_base.cc
deleted file mode 100644
index 67c6250..0000000
--- a/third_party/WebKit/Source/core/layout/ng/ng_fragment_base.cc
+++ /dev/null
@@ -1,51 +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 "core/layout/ng/ng_fragment_base.h"
-
-namespace blink {
-
-LayoutUnit NGFragmentBase::InlineSize() const {
-  return writing_mode_ == kHorizontalTopBottom ? physical_fragment_->Width()
-                                               : physical_fragment_->Height();
-}
-
-LayoutUnit NGFragmentBase::BlockSize() const {
-  return writing_mode_ == kHorizontalTopBottom ? physical_fragment_->Height()
-                                               : physical_fragment_->Width();
-}
-
-LayoutUnit NGFragmentBase::InlineOverflow() const {
-  return writing_mode_ == kHorizontalTopBottom
-             ? physical_fragment_->WidthOverflow()
-             : physical_fragment_->HeightOverflow();
-}
-
-LayoutUnit NGFragmentBase::BlockOverflow() const {
-  return writing_mode_ == kHorizontalTopBottom
-             ? physical_fragment_->HeightOverflow()
-             : physical_fragment_->WidthOverflow();
-}
-
-LayoutUnit NGFragmentBase::InlineOffset() const {
-  return writing_mode_ == kHorizontalTopBottom
-             ? physical_fragment_->LeftOffset()
-             : physical_fragment_->TopOffset();
-}
-
-LayoutUnit NGFragmentBase::BlockOffset() const {
-  return writing_mode_ == kHorizontalTopBottom
-             ? physical_fragment_->TopOffset()
-             : physical_fragment_->LeftOffset();
-}
-
-NGPhysicalFragmentBase::NGFragmentType NGFragmentBase::Type() const {
-  return physical_fragment_->Type();
-}
-
-DEFINE_TRACE(NGFragmentBase) {
-  visitor->trace(physical_fragment_);
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragment_base.h b/third_party/WebKit/Source/core/layout/ng/ng_fragment_base.h
deleted file mode 100644
index 559e36d8..0000000
--- a/third_party/WebKit/Source/core/layout/ng/ng_fragment_base.h
+++ /dev/null
@@ -1,61 +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 NGFragmentBase_h
-#define NGFragmentBase_h
-
-#include "core/CoreExport.h"
-#include "core/layout/ng/ng_physical_fragment_base.h"
-#include "core/layout/ng/ng_writing_mode.h"
-#include "platform/LayoutUnit.h"
-#include "platform/heap/Handle.h"
-
-namespace blink {
-
-class CORE_EXPORT NGFragmentBase : public GarbageCollected<NGFragmentBase> {
- public:
-  NGWritingMode WritingMode() const {
-    return static_cast<NGWritingMode>(writing_mode_);
-  }
-  TextDirection Direction() const {
-    return static_cast<TextDirection>(direction_);
-  }
-
-  // Returns the border-box size.
-  LayoutUnit InlineSize() const;
-  LayoutUnit BlockSize() const;
-
-  // Returns the total size, including the contents outside of the border-box.
-  LayoutUnit InlineOverflow() const;
-  LayoutUnit BlockOverflow() const;
-
-  // Returns the offset relative to the parent fragement's content-box.
-  LayoutUnit InlineOffset() const;
-  LayoutUnit BlockOffset() const;
-
-  NGPhysicalFragmentBase::NGFragmentType Type() const;
-
-  NGPhysicalFragmentBase* PhysicalFragment() const {
-    return physical_fragment_;
-  };
-
-  DECLARE_TRACE();
-
- protected:
-  NGFragmentBase(NGWritingMode writing_mode,
-                 TextDirection direction,
-                 NGPhysicalFragmentBase* physical_fragment)
-      : physical_fragment_(physical_fragment),
-        writing_mode_(writing_mode),
-        direction_(static_cast<unsigned>(direction)) {}
-
-  Member<NGPhysicalFragmentBase> physical_fragment_;
-
-  unsigned writing_mode_ : 3;
-  unsigned direction_ : 1;
-};
-
-}  // namespace blink
-
-#endif  // NGFragmentBase_h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc b/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc
index 89f547c0..2d7ff3d 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc
@@ -5,14 +5,13 @@
 #include "core/layout/ng/ng_fragment_builder.h"
 
 #include "core/layout/ng/ng_block_node.h"
-#include "core/layout/ng/ng_fragment_base.h"
-#include "core/layout/ng/ng_physical_fragment.h"
 #include "core/layout/ng/ng_physical_text_fragment.h"
+#include "core/layout/ng/ng_fragment.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
 
 namespace blink {
 
-NGFragmentBuilder::NGFragmentBuilder(
-    NGPhysicalFragmentBase::NGFragmentType type)
+NGFragmentBuilder::NGFragmentBuilder(NGPhysicalFragment::NGFragmentType type)
     : type_(type),
       writing_mode_(kHorizontalTopBottom),
       direction_(TextDirection::Ltr) {}
@@ -49,14 +48,14 @@
 }
 
 NGFragmentBuilder& NGFragmentBuilder::AddChild(
-    NGFragmentBase* child,
+    NGFragment* child,
     const NGLogicalOffset& child_offset) {
-  DCHECK_EQ(type_, NGPhysicalFragmentBase::kFragmentBox)
+  DCHECK_EQ(type_, NGPhysicalFragment::kFragmentBox)
       << "Only box fragments can have children";
   children_.append(child->PhysicalFragment());
   offsets_.append(child_offset);
   // Collect child's out of flow descendants.
-  const NGPhysicalFragmentBase* physical_fragment = child->PhysicalFragment();
+  const NGPhysicalFragment* physical_fragment = child->PhysicalFragment();
   const Vector<NGStaticPosition>& oof_positions =
       physical_fragment->OutOfFlowPositions();
   size_t oof_index = 0;
@@ -132,22 +131,22 @@
   return *this;
 }
 
-NGPhysicalFragment* NGFragmentBuilder::ToFragment() {
+NGPhysicalBoxFragment* NGFragmentBuilder::ToBoxFragment() {
   // TODO(layout-ng): Support text fragments
-  DCHECK_EQ(type_, NGPhysicalFragmentBase::kFragmentBox);
+  DCHECK_EQ(type_, NGPhysicalFragment::kFragmentBox);
   DCHECK_EQ(offsets_.size(), children_.size());
 
   NGPhysicalSize physical_size = size_.ConvertToPhysical(writing_mode_);
-  HeapVector<Member<const NGPhysicalFragmentBase>> children;
+  HeapVector<Member<const NGPhysicalFragment>> children;
   children.reserveCapacity(children_.size());
 
   for (size_t i = 0; i < children_.size(); ++i) {
-    NGPhysicalFragmentBase* child = children_[i].get();
+    NGPhysicalFragment* child = children_[i].get();
     child->SetOffset(offsets_[i].ConvertToPhysical(
         writing_mode_, direction_, physical_size, child->Size()));
     children.append(child);
   }
-  return new NGPhysicalFragment(
+  return new NGPhysicalBoxFragment(
       physical_size, overflow_.ConvertToPhysical(writing_mode_), children,
       out_of_flow_descendants_, out_of_flow_positions_, margin_strut_);
 }
@@ -155,7 +154,7 @@
 NGPhysicalTextFragment* NGFragmentBuilder::ToTextFragment(NGInlineNode* node,
                                                           unsigned start_index,
                                                           unsigned end_index) {
-  DCHECK_EQ(type_, NGPhysicalFragmentBase::kFragmentText);
+  DCHECK_EQ(type_, NGPhysicalFragment::kFragmentText);
   DCHECK(children_.isEmpty());
   DCHECK(offsets_.isEmpty());
   return new NGPhysicalTextFragment(
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.h b/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.h
index c871f6df..6084f97 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.h
@@ -5,20 +5,20 @@
 #ifndef NGFragmentBuilder_h
 #define NGFragmentBuilder_h
 
-#include "core/layout/ng/ng_physical_fragment_base.h"
 #include "core/layout/ng/ng_units.h"
+#include "core/layout/ng/ng_physical_fragment.h"
 
 namespace blink {
 
-class NGFragmentBase;
+class NGFragment;
 class NGInlineNode;
-class NGPhysicalFragment;
+class NGPhysicalBoxFragment;
 class NGPhysicalTextFragment;
 
 class CORE_EXPORT NGFragmentBuilder final
     : public GarbageCollectedFinalized<NGFragmentBuilder> {
  public:
-  NGFragmentBuilder(NGPhysicalFragmentBase::NGFragmentType);
+  NGFragmentBuilder(NGPhysicalFragment::NGFragmentType);
 
   using WeakBoxList = HeapLinkedHashSet<WeakMember<NGBlockNode>>;
 
@@ -32,7 +32,7 @@
   NGFragmentBuilder& SetInlineOverflow(LayoutUnit);
   NGFragmentBuilder& SetBlockOverflow(LayoutUnit);
 
-  NGFragmentBuilder& AddChild(NGFragmentBase*, const NGLogicalOffset&);
+  NGFragmentBuilder& AddChild(NGFragment*, const NGLogicalOffset&);
 
   // Builder has non-trivial out-of-flow descendant methods.
   // These methods are building blocks for implementation of
@@ -89,7 +89,7 @@
   // do not provide a setter here.
 
   // Creates the fragment. Can only be called once.
-  NGPhysicalFragment* ToFragment();
+  NGPhysicalBoxFragment* ToBoxFragment();
   NGPhysicalTextFragment* ToTextFragment(NGInlineNode*,
                                          unsigned start_index,
                                          unsigned end_index);
@@ -115,7 +115,7 @@
     NGStaticPosition descendant_position;
   };
 
-  NGPhysicalFragmentBase::NGFragmentType type_;
+  NGPhysicalFragment::NGFragmentType type_;
   NGWritingMode writing_mode_;
   TextDirection direction_;
 
@@ -124,7 +124,7 @@
 
   NGMarginStrut margin_strut_;
 
-  HeapVector<Member<NGPhysicalFragmentBase>> children_;
+  HeapVector<Member<NGPhysicalFragment>> children_;
   Vector<NGLogicalOffset> offsets_;
 
   WeakBoxList out_of_flow_descendant_candidates_;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc
index a4f2d3cc..425090a0 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.cc
@@ -11,8 +11,8 @@
 #include "core/layout/ng/ng_inline_node.h"
 #include "core/layout/ng/ng_length_utils.h"
 #include "core/layout/ng/ng_line_builder.h"
-#include "core/layout/ng/ng_physical_fragment.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
 
 namespace blink {
 
@@ -30,14 +30,14 @@
 }
 
 NGLayoutStatus NGInlineLayoutAlgorithm::Layout(
-    NGPhysicalFragmentBase*,
-    NGPhysicalFragmentBase** fragment_out,
+    NGPhysicalFragment*,
+    NGPhysicalFragment** fragment_out,
     NGLayoutAlgorithm**) {
   // TODO(kojii): Implement sizing and child constraint spaces. Share common
   // logic with NGBlockLayoutAlgorithm using composition.
   switch (state_) {
     case kStateInit: {
-      builder_ = new NGFragmentBuilder(NGPhysicalFragmentBase::kFragmentBox);
+      builder_ = new NGFragmentBuilder(NGPhysicalFragment::kFragmentBox);
       builder_->SetWritingMode(constraint_space_->WritingMode());
       builder_->SetDirection(constraint_space_->Direction());
       current_child_ = first_child_;
@@ -68,7 +68,7 @@
     }
     case kStateFinalize:
       line_builder_->CreateFragments(builder_);
-      *fragment_out = builder_->ToFragment();
+      *fragment_out = builder_->ToBoxFragment();
       state_ = kStateInit;
       return kNewFragment;
   };
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.h
index d7a628227..da2579f 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.h
@@ -37,8 +37,8 @@
                           NGConstraintSpace* space,
                           NGBreakToken* break_token = nullptr);
 
-  NGLayoutStatus Layout(NGPhysicalFragmentBase*,
-                        NGPhysicalFragmentBase**,
+  NGLayoutStatus Layout(NGPhysicalFragment*,
+                        NGPhysicalFragment**,
                         NGLayoutAlgorithm**) override;
 
   DECLARE_VIRTUAL_TRACE();
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_inline_node.cc b/third_party/WebKit/Source/core/layout/ng/ng_inline_node.cc
index 5ba54af..875f52a 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_inline_node.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_node.cc
@@ -7,15 +7,15 @@
 #include "core/layout/LayoutObject.h"
 #include "core/layout/LayoutText.h"
 #include "core/layout/ng/ng_bidi_paragraph.h"
-#include "core/layout/ng/ng_fragment.h"
 #include "core/layout/ng/ng_fragment_builder.h"
 #include "core/layout/ng/ng_layout_inline_items_builder.h"
 #include "core/layout/ng/ng_text_layout_algorithm.h"
 #include "core/layout/ng/ng_constraint_space_builder.h"
-#include "core/layout/ng/ng_physical_fragment.h"
 #include "core/layout/ng/ng_physical_text_fragment.h"
 #include "core/layout/ng/ng_text_fragment.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_box_fragment.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
 #include "platform/fonts/shaping/CachingWordShaper.h"
 #include "platform/fonts/shaping/CachingWordShapeIterator.h"
 #include "wtf/text/CharacterNames.h"
@@ -214,7 +214,7 @@
 }
 
 bool NGInlineNode::Layout(NGConstraintSpace* constraint_space,
-                          NGFragmentBase** out) {
+                          NGFragment** out) {
   ASSERT_NOT_REACHED();
   *out = nullptr;
   return true;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_inline_node.h b/third_party/WebKit/Source/core/layout/ng/ng_inline_node.h
index 2c856ca8..6dad8b6 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_inline_node.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_node.h
@@ -21,7 +21,7 @@
 class LayoutObject;
 class LayoutUnit;
 class NGConstraintSpace;
-class NGFragmentBase;
+class NGFragment;
 class NGLayoutAlgorithm;
 class NGLayoutInlineItem;
 class NGLayoutInlineItemRange;
@@ -34,7 +34,7 @@
   NGInlineNode(LayoutObject* start_inline, ComputedStyle* block_style);
   ~NGInlineNode() override;
 
-  bool Layout(NGConstraintSpace*, NGFragmentBase**) override;
+  bool Layout(NGConstraintSpace*, NGFragment**) override;
   bool LayoutInline(NGConstraintSpace*, NGLineBuilder*);
   NGInlineNode* NextSibling() override;
 
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_inline_node_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_inline_node_test.cc
index 39e67e2..5bebe45a 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_inline_node_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_node_test.cc
@@ -7,7 +7,7 @@
 #include "core/layout/ng/ng_constraint_space.h"
 #include "core/layout/ng/ng_constraint_space_builder.h"
 #include "core/layout/ng/ng_fragment_builder.h"
-#include "core/layout/ng/ng_physical_fragment.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
 #include "core/layout/ng/ng_physical_text_fragment.h"
 #include "core/layout/ng/ng_text_fragment.h"
 #include "core/layout/ng/ng_text_layout_algorithm.h"
@@ -68,10 +68,10 @@
         new NGTextLayoutAlgorithm(node, constraint_space);
     algorithm->LayoutInline(&line_builder);
 
-    NGFragmentBuilder fragment_builder(NGPhysicalFragmentBase::kFragmentBox);
+    NGFragmentBuilder fragment_builder(NGPhysicalFragment::kFragmentBox);
     line_builder.CreateFragments(&fragment_builder);
-    NGPhysicalFragment* fragment = fragment_builder.ToFragment();
-    for (const NGPhysicalFragmentBase* child : fragment->Children()) {
+    NGPhysicalBoxFragment* fragment = fragment_builder.ToBoxFragment();
+    for (const NGPhysicalFragment* child : fragment->Children()) {
       fragments_out->append(toNGPhysicalTextFragment(child));
     }
   }
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/ng_layout_algorithm.h
index e90fcb57..7b547c8 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_algorithm.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_algorithm.h
@@ -15,7 +15,7 @@
 struct MinAndMaxContentSizes;
 class NGBlockNode;
 class NGConstraintSpace;
-class NGPhysicalFragmentBase;
+class NGPhysicalFragment;
 
 enum NGLayoutStatus { kNotFinished, kChildAlgorithmRequired, kNewFragment };
 
@@ -45,8 +45,8 @@
   // be set with the NGBlockNode that needs to be layed out next.
   // If it returns NewFragment, the NGPhysicalFragmentBase out parameter
   // will contain the new fragment.
-  virtual NGLayoutStatus Layout(NGPhysicalFragmentBase*,
-                                NGPhysicalFragmentBase**,
+  virtual NGLayoutStatus Layout(NGPhysicalFragment*,
+                                NGPhysicalFragment**,
                                 NGLayoutAlgorithm**) = 0;
 
   enum MinAndMaxState { kSuccess, kPending, kNotImplemented };
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_coordinator.cc b/third_party/WebKit/Source/core/layout/ng/ng_layout_coordinator.cc
index 9528a97d35..977f1c7 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_coordinator.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_coordinator.cc
@@ -5,7 +5,7 @@
 #include "core/layout/ng/ng_layout_coordinator.h"
 
 #include "core/layout/ng/ng_layout_input_node.h"
-#include "core/layout/ng/ng_physical_fragment_base.h"
+#include "core/layout/ng/ng_physical_fragment.h"
 
 namespace blink {
 
@@ -15,14 +15,14 @@
       NGLayoutInputNode::AlgorithmForInputNode(input_node, constraint_space));
 }
 
-bool NGLayoutCoordinator::Tick(NGPhysicalFragmentBase** out_fragment) {
+bool NGLayoutCoordinator::Tick(NGPhysicalFragment** out_fragment) {
   NGLayoutAlgorithm* child_algorithm;
 
   // Tick should never be called without a layout algorithm on the stack.
   DCHECK(layout_algorithms_.size());
 
-  NGPhysicalFragmentBase* fragment;
-  NGPhysicalFragmentBase* in_fragment = fragment_;
+  NGPhysicalFragment* fragment;
+  NGPhysicalFragment* in_fragment = fragment_;
   fragment_ = nullptr;
 
   switch (layout_algorithms_.back()->Layout(in_fragment, &fragment,
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_coordinator.h b/third_party/WebKit/Source/core/layout/ng/ng_layout_coordinator.h
index bf2615da..3fea30e5 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_coordinator.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_coordinator.h
@@ -20,7 +20,7 @@
  public:
   NGLayoutCoordinator(NGLayoutInputNode*, NGConstraintSpace*);
 
-  bool Tick(NGPhysicalFragmentBase**);
+  bool Tick(NGPhysicalFragment**);
 
   DECLARE_TRACE()
 
@@ -31,7 +31,7 @@
 
  private:
   HeapVector<Member<NGLayoutAlgorithm>> layout_algorithms_;
-  Member<NGPhysicalFragmentBase> fragment_;
+  Member<NGPhysicalFragment> fragment_;
 };
 }
 
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_input_node.h b/third_party/WebKit/Source/core/layout/ng/ng_layout_input_node.h
index 7bb5742..ebe8f8c 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_input_node.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_input_node.h
@@ -11,7 +11,7 @@
 namespace blink {
 
 class NGConstraintSpace;
-class NGFragmentBase;
+class NGFragment;
 class NGLayoutAlgorithm;
 
 // Represents the input to a layout algorithm for a given node. The layout
@@ -27,7 +27,7 @@
   // Returns true when done; when this function returns false, it has to be
   // called again. The out parameter will only be set when this function
   // returns true. The same constraint space has to be passed each time.
-  virtual bool Layout(NGConstraintSpace*, NGFragmentBase**) = 0;
+  virtual bool Layout(NGConstraintSpace*, NGFragment**) = 0;
 
   // Returns the next sibling.
   virtual NGLayoutInputNode* NextSibling() = 0;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_legacy_block_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_legacy_block_layout_algorithm.cc
index 015213d..3f4d8c63 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_legacy_block_layout_algorithm.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_legacy_block_layout_algorithm.cc
@@ -4,7 +4,7 @@
 
 #include "core/layout/ng/ng_legacy_block_layout_algorithm.h"
 
-#include "core/layout/ng/ng_physical_fragment.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
 
 namespace blink {
 
@@ -16,8 +16,8 @@
       constraint_space_(constraint_space) {}
 
 NGLayoutStatus NGLegacyBlockLayoutAlgorithm::Layout(
-    NGPhysicalFragmentBase*,
-    NGPhysicalFragmentBase** fragment_out,
+    NGPhysicalFragment*,
+    NGPhysicalFragment** fragment_out,
     NGLayoutAlgorithm**) {
   *fragment_out = block_->RunOldLayout(*constraint_space_);
   return kNewFragment;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_legacy_block_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/ng_legacy_block_layout_algorithm.h
index c0147c1..c148a82 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_legacy_block_layout_algorithm.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_legacy_block_layout_algorithm.h
@@ -19,8 +19,8 @@
  public:
   NGLegacyBlockLayoutAlgorithm(NGBlockNode*, const NGConstraintSpace*);
 
-  NGLayoutStatus Layout(NGPhysicalFragmentBase*,
-                        NGPhysicalFragmentBase**,
+  NGLayoutStatus Layout(NGPhysicalFragment*,
+                        NGPhysicalFragment**,
                         NGLayoutAlgorithm**) override;
 
   DECLARE_VIRTUAL_TRACE();
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc
index 44a104f7..17776108 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc
@@ -6,8 +6,8 @@
 
 #include "core/layout/ng/ng_constraint_space.h"
 #include "core/layout/ng/ng_constraint_space_builder.h"
-#include "core/layout/ng/ng_fragment_base.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_fragment.h"
 #include "platform/LayoutUnit.h"
 #include "platform/Length.h"
 #include "wtf/Optional.h"
@@ -390,7 +390,7 @@
 
 void ApplyAutoMargins(const NGConstraintSpace& constraint_space,
                       const ComputedStyle& style,
-                      const NGFragmentBase& fragment,
+                      const NGFragment& fragment,
                       NGBoxStrut* margins) {
   DCHECK(margins) << "Margins cannot be NULL here";
   const LayoutUnit used_space = fragment.InlineSize() + margins->InlineSum();
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_length_utils.h b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.h
index a53ba2e3..3a1e333f 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_length_utils.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.h
@@ -18,7 +18,7 @@
 struct MinAndMaxContentSizes;
 class NGConstraintSpace;
 struct NGBoxStrut;
-class NGFragmentBase;
+class NGFragment;
 
 enum class LengthResolveType {
   kMinSize,
@@ -118,7 +118,7 @@
 // the given NGBoxStrut accordingly.
 CORE_EXPORT void ApplyAutoMargins(const NGConstraintSpace&,
                                   const ComputedStyle&,
-                                  const NGFragmentBase&,
+                                  const NGFragment&,
                                   NGBoxStrut* margins);
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_length_utils_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_length_utils_test.cc
index 0df5c67d..5f5e867 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_length_utils_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_length_utils_test.cc
@@ -6,11 +6,11 @@
 
 #include "core/layout/ng/ng_constraint_space.h"
 #include "core/layout/ng/ng_constraint_space_builder.h"
-#include "core/layout/ng/ng_fragment.h"
 #include "core/layout/ng/ng_fragment_builder.h"
-#include "core/layout/ng/ng_physical_fragment.h"
 #include "core/layout/ng/ng_units.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_box_fragment.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
 #include "platform/CalculationValue.h"
 #include "platform/LayoutUnit.h"
 #include "platform/Length.h"
@@ -393,11 +393,11 @@
   style_->setMarginRight(Length(Auto));
   style_->setMarginLeft(Length(Auto));
 
-  NGFragmentBuilder builder(NGPhysicalFragmentBase::kFragmentBox);
+  NGFragmentBuilder builder(NGPhysicalFragment::kFragmentBox);
   builder.SetInlineSize(LayoutUnit(150));
-  NGPhysicalFragment* physical_fragment = builder.ToFragment();
-  NGFragment* fragment = new NGFragment(kHorizontalTopBottom,
-                                        TextDirection::Ltr, physical_fragment);
+  NGPhysicalBoxFragment* physical_fragment = builder.ToBoxFragment();
+  NGBoxFragment* fragment = new NGBoxFragment(
+      kHorizontalTopBottom, TextDirection::Ltr, physical_fragment);
 
   NGConstraintSpace* constraint_space(ConstructConstraintSpace(200, 300));
 
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_line_builder.cc b/third_party/WebKit/Source/core/layout/ng/ng_line_builder.cc
index f8cd3223..4072fc23 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_line_builder.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_line_builder.cc
@@ -36,7 +36,7 @@
   if (inline_box_->IsBidiEnabled())
     BidiReorder();
 
-  NGFragmentBuilder text_builder(NGPhysicalFragmentBase::kFragmentText);
+  NGFragmentBuilder text_builder(NGPhysicalFragment::kFragmentText);
   text_builder.SetWritingMode(constraint_space_->WritingMode());
   LayoutUnit inline_offset;
   const Vector<NGLayoutInlineItem>& items = inline_box_->Items();
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_line_builder.h b/third_party/WebKit/Source/core/layout/ng/ng_line_builder.h
index 9bcfcfb..b80684f 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_line_builder.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_line_builder.h
@@ -13,7 +13,7 @@
 namespace blink {
 
 class NGConstraintSpace;
-class NGFragmentBase;
+class NGFragment;
 class NGFragmentBuilder;
 class NGInlineNode;
 
@@ -45,7 +45,7 @@
 
   Member<NGInlineNode> inline_box_;
   Member<const NGConstraintSpace> constraint_space_;
-  HeapVector<Member<NGFragmentBase>, 32> fragments_;
+  HeapVector<Member<NGFragment>, 32> fragments_;
   Vector<NGLogicalOffset, 32> offsets_;
   Vector<LineItemChunk, 32> line_item_chunks_;
   LayoutUnit content_size_;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_out_of_flow_layout_part.cc b/third_party/WebKit/Source/core/layout/ng/ng_out_of_flow_layout_part.cc
index ec503ba..241640e4 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_out_of_flow_layout_part.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_out_of_flow_layout_part.cc
@@ -7,9 +7,9 @@
 #include "core/layout/ng/ng_absolute_utils.h"
 #include "core/layout/ng/ng_block_node.h"
 #include "core/layout/ng/ng_constraint_space_builder.h"
-#include "core/layout/ng/ng_fragment_base.h"
 #include "core/layout/ng/ng_length_utils.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_fragment.h"
 
 namespace blink {
 
@@ -60,7 +60,7 @@
   return false;
 }
 
-NGLayoutStatus NGOutOfFlowLayoutPart::Layout(NGFragmentBase** fragment,
+NGLayoutStatus NGOutOfFlowLayoutPart::Layout(NGFragment** fragment,
                                              NGLogicalOffset* offset) {
   DCHECK(node_);
   switch (state_) {
@@ -152,7 +152,7 @@
     builder.SetIsNewFormattingContext(true);
     node_space_ = builder.ToConstraintSpace();
   }
-  NGFragmentBase* fragment;
+  NGFragment* fragment;
   if (node_->Layout(node_space_, &fragment)) {
     node_fragment_ = fragment;
     return true;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_out_of_flow_layout_part.h b/third_party/WebKit/Source/core/layout/ng/ng_out_of_flow_layout_part.h
index a4c66b8..32810925 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_out_of_flow_layout_part.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_out_of_flow_layout_part.h
@@ -18,7 +18,7 @@
 
 class ComputedStyle;
 class NGBlockNode;
-class NGFragmentBase;
+class NGFragment;
 class NGConstraintSpace;
 
 // Helper class for positioning of out-of-flow blocks.
@@ -33,7 +33,7 @@
   // If false, this fragment should be passed up the tree for layout by
   // an ancestor.
   bool StartLayout(NGBlockNode*, const NGStaticPosition&);
-  NGLayoutStatus Layout(NGFragmentBase**, NGLogicalOffset*);
+  NGLayoutStatus Layout(NGFragment**, NGLogicalOffset*);
 
   DECLARE_TRACE();
 
@@ -61,7 +61,7 @@
   Member<NGConstraintSpace> parent_space_;
   Member<NGBlockNode> node_;
   Member<NGConstraintSpace> node_space_;
-  Member<NGFragmentBase> node_fragment_;
+  Member<NGFragment> node_fragment_;
   NGAbsolutePhysicalPosition node_position_;
   Optional<LayoutUnit> inline_estimate_;
   Optional<LayoutUnit> block_estimate_;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.cc b/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.cc
new file mode 100644
index 0000000..f5e2c41
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.cc
@@ -0,0 +1,30 @@
+// 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 "core/layout/ng/ng_physical_box_fragment.h"
+
+namespace blink {
+
+NGPhysicalBoxFragment::NGPhysicalBoxFragment(
+    NGPhysicalSize size,
+    NGPhysicalSize overflow,
+    HeapVector<Member<const NGPhysicalFragment>>& children,
+    HeapLinkedHashSet<WeakMember<NGBlockNode>>& out_of_flow_descendants,
+    Vector<NGStaticPosition>& out_of_flow_positions,
+    NGMarginStrut margin_strut)
+    : NGPhysicalFragment(size,
+                         overflow,
+                         kFragmentBox,
+                         out_of_flow_descendants,
+                         out_of_flow_positions),
+      margin_strut_(margin_strut) {
+  children_.swap(children);
+}
+
+DEFINE_TRACE_AFTER_DISPATCH(NGPhysicalBoxFragment) {
+  visitor->trace(children_);
+  NGPhysicalFragment::traceAfterDispatch(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.h
new file mode 100644
index 0000000..7c1fa44e
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.h
@@ -0,0 +1,51 @@
+// 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 NGPhysicalBoxFragment_h
+#define NGPhysicalBoxFragment_h
+
+#include "core/CoreExport.h"
+#include "core/layout/ng/ng_units.h"
+#include "core/layout/ng/ng_physical_fragment.h"
+#include "platform/heap/Handle.h"
+
+namespace blink {
+
+class NGBlockNode;
+
+class CORE_EXPORT NGPhysicalBoxFragment final : public NGPhysicalFragment {
+ public:
+  // This modifies the passed-in children vector.
+  NGPhysicalBoxFragment(
+      NGPhysicalSize size,
+      NGPhysicalSize overflow,
+      HeapVector<Member<const NGPhysicalFragment>>& children,
+      HeapLinkedHashSet<WeakMember<NGBlockNode>>& out_of_flow_descendants,
+      Vector<NGStaticPosition>& out_of_flow_positions,
+      NGMarginStrut margin_strut);
+
+  const HeapVector<Member<const NGPhysicalFragment>>& Children() const {
+    return children_;
+  }
+
+  NGMarginStrut MarginStrut() const { return margin_strut_; }
+
+  DECLARE_TRACE_AFTER_DISPATCH();
+
+ private:
+  HeapVector<Member<const NGPhysicalFragment>> children_;
+  NGMarginStrut margin_strut_;
+};
+
+WILL_NOT_BE_EAGERLY_TRACED_CLASS(NGPhysicalBoxFragment);
+
+DEFINE_TYPE_CASTS(NGPhysicalBoxFragment,
+                  NGPhysicalFragment,
+                  fragment,
+                  fragment->Type() == NGPhysicalFragment::kFragmentBox,
+                  fragment.Type() == NGPhysicalFragment::kFragmentBox);
+
+}  // namespace blink
+
+#endif  // NGPhysicalBoxFragment_h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc
index 2a7cf51..a313a6b 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc
@@ -4,27 +4,45 @@
 
 #include "core/layout/ng/ng_physical_fragment.h"
 
+#include "core/layout/ng/ng_break_token.h"
+#include "core/layout/ng/ng_physical_text_fragment.h"
+#include "core/layout/ng/ng_physical_box_fragment.h"
+
 namespace blink {
 
 NGPhysicalFragment::NGPhysicalFragment(
     NGPhysicalSize size,
     NGPhysicalSize overflow,
-    HeapVector<Member<const NGPhysicalFragmentBase>>& children,
+    NGFragmentType type,
     HeapLinkedHashSet<WeakMember<NGBlockNode>>& out_of_flow_descendants,
-    Vector<NGStaticPosition>& out_of_flow_positions,
-    NGMarginStrut margin_strut)
-    : NGPhysicalFragmentBase(size,
-                             overflow,
-                             kFragmentBox,
-                             out_of_flow_descendants,
-                             out_of_flow_positions),
-      margin_strut_(margin_strut) {
-  children_.swap(children);
+    Vector<NGStaticPosition> out_of_flow_positions,
+    NGBreakToken* break_token)
+    : size_(size),
+      overflow_(overflow),
+      break_token_(break_token),
+      type_(type),
+      has_been_placed_(false) {
+  out_of_flow_descendants_.swap(out_of_flow_descendants);
+  out_of_flow_positions_.swap(out_of_flow_positions);
+}
+
+DEFINE_TRACE(NGPhysicalFragment) {
+  if (Type() == kFragmentText)
+    static_cast<NGPhysicalTextFragment*>(this)->traceAfterDispatch(visitor);
+  else
+    static_cast<NGPhysicalBoxFragment*>(this)->traceAfterDispatch(visitor);
+}
+
+void NGPhysicalFragment::finalizeGarbageCollectedObject() {
+  if (Type() == kFragmentText)
+    static_cast<NGPhysicalTextFragment*>(this)->~NGPhysicalTextFragment();
+  else
+    static_cast<NGPhysicalBoxFragment*>(this)->~NGPhysicalBoxFragment();
 }
 
 DEFINE_TRACE_AFTER_DISPATCH(NGPhysicalFragment) {
-  visitor->trace(children_);
-  NGPhysicalFragmentBase::traceAfterDispatch(visitor);
+  visitor->trace(out_of_flow_descendants_);
+  visitor->trace(break_token_);
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
index f4c5796..4a4c533 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
@@ -6,46 +6,95 @@
 #define NGPhysicalFragment_h
 
 #include "core/CoreExport.h"
-#include "core/layout/ng/ng_physical_fragment_base.h"
 #include "core/layout/ng/ng_units.h"
+#include "platform/LayoutUnit.h"
 #include "platform/heap/Handle.h"
+#include "wtf/Vector.h"
 
 namespace blink {
 
 class NGBlockNode;
+class NGBreakToken;
 
-class CORE_EXPORT NGPhysicalFragment final : public NGPhysicalFragmentBase {
+// The NGPhysicalFragmentBase contains the output information from layout. The
+// fragment stores all of its information in the physical coordinate system for
+// use by paint, hit-testing etc.
+//
+// Layout code should only access output layout information through the
+// NGFragmentBase classes which transforms information into the logical
+// coordinate system.
+class CORE_EXPORT NGPhysicalFragment
+    : public GarbageCollectedFinalized<NGPhysicalFragment> {
  public:
-  // This modifies the passed-in children vector.
+  enum NGFragmentType { kFragmentBox = 0, kFragmentText = 1 };
+
+  NGFragmentType Type() const { return static_cast<NGFragmentType>(type_); }
+
+  // The accessors in this class shouldn't be used by layout code directly,
+  // instead should be accessed by the NGFragmentBase classes. These accessors
+  // exist for paint, hit-testing, etc.
+
+  // Returns the border-box size.
+  NGPhysicalSize Size() const { return size_; }
+  LayoutUnit Width() const { return size_.width; }
+  LayoutUnit Height() const { return size_.height; }
+
+  // Returns the total size, including the contents outside of the border-box.
+  LayoutUnit WidthOverflow() const { return overflow_.width; }
+  LayoutUnit HeightOverflow() const { return overflow_.height; }
+
+  // Returns the offset relative to the parent fragement's content-box.
+  LayoutUnit LeftOffset() const {
+    DCHECK(has_been_placed_);
+    return offset_.left;
+  }
+
+  LayoutUnit TopOffset() const {
+    DCHECK(has_been_placed_);
+    return offset_.top;
+  }
+
+  // Should only be used by the parent fragement's layout.
+  void SetOffset(NGPhysicalOffset offset) {
+    DCHECK(!has_been_placed_);
+    offset_ = offset;
+    has_been_placed_ = true;
+  }
+
+  const HeapLinkedHashSet<WeakMember<NGBlockNode>>& OutOfFlowDescendants()
+      const {
+    return out_of_flow_descendants_;
+  }
+
+  const Vector<NGStaticPosition>& OutOfFlowPositions() const {
+    return out_of_flow_positions_;
+  }
+
+  DECLARE_TRACE_AFTER_DISPATCH();
+  DECLARE_TRACE();
+
+  void finalizeGarbageCollectedObject();
+
+ protected:
   NGPhysicalFragment(
       NGPhysicalSize size,
       NGPhysicalSize overflow,
-      HeapVector<Member<const NGPhysicalFragmentBase>>& children,
+      NGFragmentType type,
       HeapLinkedHashSet<WeakMember<NGBlockNode>>& out_of_flow_descendants,
-      Vector<NGStaticPosition>& out_of_flow_positions,
-      NGMarginStrut margin_strut);
+      Vector<NGStaticPosition> out_of_flow_positions,
+      NGBreakToken* break_token = nullptr);
 
-  const HeapVector<Member<const NGPhysicalFragmentBase>>& Children() const {
-    return children_;
-  }
+  NGPhysicalSize size_;
+  NGPhysicalSize overflow_;
+  NGPhysicalOffset offset_;
+  Member<NGBreakToken> break_token_;
+  HeapLinkedHashSet<WeakMember<NGBlockNode>> out_of_flow_descendants_;
+  Vector<NGStaticPosition> out_of_flow_positions_;
 
-  NGMarginStrut MarginStrut() const { return margin_strut_; }
-
-  DECLARE_TRACE_AFTER_DISPATCH();
-
- private:
-  HeapVector<Member<const NGPhysicalFragmentBase>> children_;
-  NGMarginStrut margin_strut_;
+  unsigned type_ : 1;
+  unsigned has_been_placed_ : 1;
 };
 
-WILL_NOT_BE_EAGERLY_TRACED_CLASS(NGPhysicalFragment);
-
-DEFINE_TYPE_CASTS(NGPhysicalFragment,
-                  NGPhysicalFragmentBase,
-                  fragment,
-                  fragment->Type() == NGPhysicalFragmentBase::kFragmentBox,
-                  fragment.Type() == NGPhysicalFragmentBase::kFragmentBox);
-
 }  // namespace blink
 
 #endif  // NGPhysicalFragment_h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment_base.cc b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment_base.cc
deleted file mode 100644
index ee6b7b7..0000000
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment_base.cc
+++ /dev/null
@@ -1,48 +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 "core/layout/ng/ng_physical_fragment_base.h"
-
-#include "core/layout/ng/ng_break_token.h"
-#include "core/layout/ng/ng_physical_fragment.h"
-#include "core/layout/ng/ng_physical_text_fragment.h"
-
-namespace blink {
-
-NGPhysicalFragmentBase::NGPhysicalFragmentBase(
-    NGPhysicalSize size,
-    NGPhysicalSize overflow,
-    NGFragmentType type,
-    HeapLinkedHashSet<WeakMember<NGBlockNode>>& out_of_flow_descendants,
-    Vector<NGStaticPosition> out_of_flow_positions,
-    NGBreakToken* break_token)
-    : size_(size),
-      overflow_(overflow),
-      break_token_(break_token),
-      type_(type),
-      has_been_placed_(false) {
-  out_of_flow_descendants_.swap(out_of_flow_descendants);
-  out_of_flow_positions_.swap(out_of_flow_positions);
-}
-
-DEFINE_TRACE(NGPhysicalFragmentBase) {
-  if (Type() == kFragmentText)
-    static_cast<NGPhysicalTextFragment*>(this)->traceAfterDispatch(visitor);
-  else
-    static_cast<NGPhysicalFragment*>(this)->traceAfterDispatch(visitor);
-}
-
-void NGPhysicalFragmentBase::finalizeGarbageCollectedObject() {
-  if (Type() == kFragmentText)
-    static_cast<NGPhysicalTextFragment*>(this)->~NGPhysicalTextFragment();
-  else
-    static_cast<NGPhysicalFragment*>(this)->~NGPhysicalFragment();
-}
-
-DEFINE_TRACE_AFTER_DISPATCH(NGPhysicalFragmentBase) {
-  visitor->trace(out_of_flow_descendants_);
-  visitor->trace(break_token_);
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment_base.h b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment_base.h
deleted file mode 100644
index 7a933a2..0000000
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment_base.h
+++ /dev/null
@@ -1,100 +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 NGPhysicalFragmentBase_h
-#define NGPhysicalFragmentBase_h
-
-#include "core/CoreExport.h"
-#include "core/layout/ng/ng_units.h"
-#include "platform/LayoutUnit.h"
-#include "platform/heap/Handle.h"
-#include "wtf/Vector.h"
-
-namespace blink {
-
-class NGBlockNode;
-class NGBreakToken;
-
-// The NGPhysicalFragmentBase contains the output information from layout. The
-// fragment stores all of its information in the physical coordinate system for
-// use by paint, hit-testing etc.
-//
-// Layout code should only access output layout information through the
-// NGFragmentBase classes which transforms information into the logical
-// coordinate system.
-class CORE_EXPORT NGPhysicalFragmentBase
-    : public GarbageCollectedFinalized<NGPhysicalFragmentBase> {
- public:
-  enum NGFragmentType { kFragmentBox = 0, kFragmentText = 1 };
-
-  NGFragmentType Type() const { return static_cast<NGFragmentType>(type_); }
-
-  // The accessors in this class shouldn't be used by layout code directly,
-  // instead should be accessed by the NGFragmentBase classes. These accessors
-  // exist for paint, hit-testing, etc.
-
-  // Returns the border-box size.
-  NGPhysicalSize Size() const { return size_; }
-  LayoutUnit Width() const { return size_.width; }
-  LayoutUnit Height() const { return size_.height; }
-
-  // Returns the total size, including the contents outside of the border-box.
-  LayoutUnit WidthOverflow() const { return overflow_.width; }
-  LayoutUnit HeightOverflow() const { return overflow_.height; }
-
-  // Returns the offset relative to the parent fragement's content-box.
-  LayoutUnit LeftOffset() const {
-    DCHECK(has_been_placed_);
-    return offset_.left;
-  }
-
-  LayoutUnit TopOffset() const {
-    DCHECK(has_been_placed_);
-    return offset_.top;
-  }
-
-  // Should only be used by the parent fragement's layout.
-  void SetOffset(NGPhysicalOffset offset) {
-    DCHECK(!has_been_placed_);
-    offset_ = offset;
-    has_been_placed_ = true;
-  }
-
-  const HeapLinkedHashSet<WeakMember<NGBlockNode>>& OutOfFlowDescendants()
-      const {
-    return out_of_flow_descendants_;
-  }
-
-  const Vector<NGStaticPosition>& OutOfFlowPositions() const {
-    return out_of_flow_positions_;
-  }
-
-  DECLARE_TRACE_AFTER_DISPATCH();
-  DECLARE_TRACE();
-
-  void finalizeGarbageCollectedObject();
-
- protected:
-  NGPhysicalFragmentBase(
-      NGPhysicalSize size,
-      NGPhysicalSize overflow,
-      NGFragmentType type,
-      HeapLinkedHashSet<WeakMember<NGBlockNode>>& out_of_flow_descendants,
-      Vector<NGStaticPosition> out_of_flow_positions,
-      NGBreakToken* break_token = nullptr);
-
-  NGPhysicalSize size_;
-  NGPhysicalSize overflow_;
-  NGPhysicalOffset offset_;
-  Member<NGBreakToken> break_token_;
-  HeapLinkedHashSet<WeakMember<NGBlockNode>> out_of_flow_descendants_;
-  Vector<NGStaticPosition> out_of_flow_positions_;
-
-  unsigned type_ : 1;
-  unsigned has_been_placed_ : 1;
-};
-
-}  // namespace blink
-
-#endif  // NGFragmentBase_h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_text_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_physical_text_fragment.h
index 001447d..b5904ba9 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_text_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_text_fragment.h
@@ -8,12 +8,12 @@
 #include "core/CoreExport.h"
 #include "core/layout/ng/ng_block_node.h"
 #include "core/layout/ng/ng_inline_node.h"
-#include "core/layout/ng/ng_physical_fragment_base.h"
+#include "core/layout/ng/ng_physical_fragment.h"
 #include "platform/heap/Handle.h"
 
 namespace blink {
 
-class CORE_EXPORT NGPhysicalTextFragment final : public NGPhysicalFragmentBase {
+class CORE_EXPORT NGPhysicalTextFragment final : public NGPhysicalFragment {
  public:
   NGPhysicalTextFragment(
       const NGInlineNode* node,
@@ -23,18 +23,18 @@
       NGPhysicalSize overflow,
       HeapLinkedHashSet<WeakMember<NGBlockNode>>& out_of_flow_descendants,
       Vector<NGStaticPosition> out_of_flow_positions)
-      : NGPhysicalFragmentBase(size,
-                               overflow,
-                               kFragmentText,
-                               out_of_flow_descendants,
-                               out_of_flow_positions),
+      : NGPhysicalFragment(size,
+                           overflow,
+                           kFragmentText,
+                           out_of_flow_descendants,
+                           out_of_flow_positions),
         node_(node),
         start_index_(start_index),
         end_index_(end_index) {}
 
   DEFINE_INLINE_TRACE_AFTER_DISPATCH() {
     visitor->trace(node_);
-    NGPhysicalFragmentBase::traceAfterDispatch(visitor);
+    NGPhysicalFragment::traceAfterDispatch(visitor);
   }
 
   const NGInlineNode* Node() const { return node_; }
@@ -54,10 +54,10 @@
 };
 
 DEFINE_TYPE_CASTS(NGPhysicalTextFragment,
-                  NGPhysicalFragmentBase,
+                  NGPhysicalFragment,
                   text,
-                  text->Type() == NGPhysicalFragmentBase::kFragmentText,
-                  text.Type() == NGPhysicalFragmentBase::kFragmentText);
+                  text->Type() == NGPhysicalFragment::kFragmentText,
+                  text.Type() == NGPhysicalFragment::kFragmentText);
 
 }  // namespace blink
 
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_text_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_text_fragment.h
index a4addc7..6658cf8 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_text_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_text_fragment.h
@@ -6,17 +6,17 @@
 #define NGTextFragment_h
 
 #include "core/CoreExport.h"
-#include "core/layout/ng/ng_fragment_base.h"
 #include "core/layout/ng/ng_physical_text_fragment.h"
+#include "core/layout/ng/ng_fragment.h"
 
 namespace blink {
 
-class CORE_EXPORT NGTextFragment final : public NGFragmentBase {
+class CORE_EXPORT NGTextFragment final : public NGFragment {
  public:
   NGTextFragment(NGWritingMode writing_mode,
                  TextDirection direction,
                  NGPhysicalTextFragment* physical_text_fragment)
-      : NGFragmentBase(writing_mode, direction, physical_text_fragment) {}
+      : NGFragment(writing_mode, direction, physical_text_fragment) {}
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.cc
index 4009d8e6..b98b2ddc6 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.cc
@@ -6,12 +6,12 @@
 
 #include "core/layout/ng/ng_break_token.h"
 #include "core/layout/ng/ng_constraint_space.h"
-#include "core/layout/ng/ng_fragment.h"
 #include "core/layout/ng/ng_fragment_builder.h"
 #include "core/layout/ng/ng_line_builder.h"
 #include "core/layout/ng/ng_text_fragment.h"
 #include "core/layout/ng/ng_inline_node.h"
 #include "core/style/ComputedStyle.h"
+#include "core/layout/ng/ng_box_fragment.h"
 
 namespace blink {
 
@@ -26,10 +26,9 @@
   DCHECK(inline_box_);
 }
 
-NGLayoutStatus NGTextLayoutAlgorithm::Layout(
-    NGPhysicalFragmentBase*,
-    NGPhysicalFragmentBase** fragment_out,
-    NGLayoutAlgorithm**) {
+NGLayoutStatus NGTextLayoutAlgorithm::Layout(NGPhysicalFragment*,
+                                             NGPhysicalFragment** fragment_out,
+                                             NGLayoutAlgorithm**) {
   ASSERT_NOT_REACHED();
   *fragment_out = nullptr;
   return kNewFragment;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.h
index 8d5c3cdb..2b22c3b 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.h
@@ -31,8 +31,8 @@
                         NGConstraintSpace* space,
                         NGBreakToken* break_token = nullptr);
 
-  NGLayoutStatus Layout(NGPhysicalFragmentBase*,
-                        NGPhysicalFragmentBase**,
+  NGLayoutStatus Layout(NGPhysicalFragment*,
+                        NGPhysicalFragment**,
                         NGLayoutAlgorithm**) override;
   bool LayoutInline(NGLineBuilder*);
 
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
index 3cd6087..61c2753 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
@@ -564,7 +564,7 @@
 
     if (activityLogger) {
       Vector<String> argv;
-      argv.append(Resource::resourceTypeToString(type, fetchInitiatorName));
+      argv.push_back(Resource::resourceTypeToString(type, fetchInitiatorName));
       argv.append(request.url());
       activityLogger->logEvent("blinkRequestResource", argv.size(),
                                argv.data());
diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
index 294c5530..a72902b 100644
--- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
@@ -140,7 +140,7 @@
   void append(TaskWithLocation task) {
     DCHECK(isMainThread());
     CHECK(!m_isSignalCalled);
-    m_tasks.append(std::move(task));
+    m_tasks.push_back(std::move(task));
   }
   void setIsAborted() {
     DCHECK(isMainThread());
diff --git a/third_party/WebKit/Source/core/loader/appcache/ApplicationCacheHost.cpp b/third_party/WebKit/Source/core/loader/appcache/ApplicationCacheHost.cpp
index c93a1e2..fa601fd 100644
--- a/third_party/WebKit/Source/core/loader/appcache/ApplicationCacheHost.cpp
+++ b/third_party/WebKit/Source/core/loader/appcache/ApplicationCacheHost.cpp
@@ -206,9 +206,9 @@
 
   if (m_defersEvents) {
     // Event dispatching is deferred until document.onload has fired.
-    m_deferredEvents.append(DeferredEvent(id, progressTotal, progressDone,
-                                          errorReason, errorURL, errorStatus,
-                                          errorMessage));
+    m_deferredEvents.push_back(DeferredEvent(id, progressTotal, progressDone,
+                                             errorReason, errorURL, errorStatus,
+                                             errorMessage));
     return;
   }
   dispatchDOMEvent(id, progressTotal, progressDone, errorReason, errorURL,
@@ -232,7 +232,7 @@
   WebVector<WebApplicationCacheHost::ResourceInfo> webResources;
   m_host->getResourceList(&webResources);
   for (size_t i = 0; i < webResources.size(); ++i) {
-    resources->append(
+    resources->push_back(
         ResourceInfo(webResources[i].url, webResources[i].isMaster,
                      webResources[i].isManifest, webResources[i].isFallback,
                      webResources[i].isForeign, webResources[i].isExplicit,
diff --git a/third_party/WebKit/Source/core/loader/resource/MultipartImageResourceParserTest.cpp b/third_party/WebKit/Source/core/loader/resource/MultipartImageResourceParserTest.cpp
index f596ac3..7a3d4d5 100644
--- a/third_party/WebKit/Source/core/loader/resource/MultipartImageResourceParserTest.cpp
+++ b/third_party/WebKit/Source/core/loader/resource/MultipartImageResourceParserTest.cpp
@@ -27,8 +27,8 @@
 
  public:
   void onePartInMultipartReceived(const ResourceResponse& response) override {
-    m_responses.append(response);
-    m_data.append(Vector<char>());
+    m_responses.push_back(response);
+    m_data.push_back(Vector<char>());
   }
   void multipartDataReceived(const char* bytes, size_t size) override {
     m_data.back().append(bytes, size);
diff --git a/third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp b/third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp
index 0b540e9b..8198176 100644
--- a/third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp
+++ b/third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp
@@ -73,7 +73,7 @@
   if (labelString.isEmpty())
     return;
 
-  m_menuItems.append(menuItem);
+  m_menuItems.push_back(menuItem);
 
   bool enabled = !menuItem->fastHasAttribute(disabledAttr);
   String icon = menuItem->fastGetAttribute(iconAttr);
diff --git a/third_party/WebKit/Source/core/page/DragData.cpp b/third_party/WebKit/Source/core/page/DragData.cpp
index 373172d..3059fa6 100644
--- a/third_party/WebKit/Source/core/page/DragData.cpp
+++ b/third_party/WebKit/Source/core/page/DragData.cpp
@@ -81,7 +81,7 @@
   const Vector<String>& filenames = m_platformDragData->filenames();
   for (size_t i = 0; i < filenames.size(); ++i) {
     if (!filenames[i].isEmpty())
-      result.append(filenames[i]);
+      result.push_back(filenames[i]);
   }
 }
 
diff --git a/third_party/WebKit/Source/core/page/FrameTree.cpp b/third_party/WebKit/Source/core/page/FrameTree.cpp
index 85bcb34..5f69da38 100644
--- a/third_party/WebKit/Source/core/page/FrameTree.cpp
+++ b/third_party/WebKit/Source/core/page/FrameTree.cpp
@@ -177,7 +177,7 @@
   for (frame = m_thisFrame; frame; frame = frame->tree().parent()) {
     if (frame->tree().uniqueName().startsWith(framePathPrefix))
       break;
-    chain.append(frame);
+    chain.push_back(frame);
   }
   StringBuilder uniqueName;
   uniqueName.append(framePathPrefix);
diff --git a/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp b/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp
index 431e1050..3ceaaccc 100644
--- a/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp
+++ b/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp
@@ -96,7 +96,7 @@
     result.storedValue->value = WTF::wrapUnique(new ObserverList);
 
   ASSERT(result.storedValue->value->observers.find(observer) == kNotFound);
-  result.storedValue->value->observers.append(observer);
+  result.storedValue->value->observers.push_back(observer);
 }
 
 void NetworkStateNotifier::removeObserver(NetworkStateObserver* observer,
@@ -112,7 +112,7 @@
   size_t index = observers.find(observer);
   if (index != kNotFound) {
     observers[index] = 0;
-    observerList->zeroedObservers.append(index);
+    observerList->zeroedObservers.push_back(index);
   }
 
   if (!observerList->iterating && !observerList->zeroedObservers.isEmpty())
diff --git a/third_party/WebKit/Source/core/page/Page.cpp b/third_party/WebKit/Source/core/page/Page.cpp
index d167b5f..a635ac89 100644
--- a/third_party/WebKit/Source/core/page/Page.cpp
+++ b/third_party/WebKit/Source/core/page/Page.cpp
@@ -82,7 +82,7 @@
       // FIXME: There is currently no way to dispatch events to out-of-process
       // frames.
       if (frame->isLocalFrame())
-        frames.append(toLocalFrame(frame));
+        frames.push_back(toLocalFrame(frame));
     }
   }
 
@@ -485,7 +485,7 @@
   for (Frame* frame = mainFrame(); frame;
        frame = frame->tree().traverseNext()) {
     if (frame->isLocalFrame())
-      frames.append(toLocalFrame(frame));
+      frames.push_back(toLocalFrame(frame));
   }
 
   for (unsigned i = 0; i < frames.size(); ++i)
diff --git a/third_party/WebKit/Source/core/page/PageAnimator.cpp b/third_party/WebKit/Source/core/page/PageAnimator.cpp
index 9ba3ee6f..b1a1f1d 100644
--- a/third_party/WebKit/Source/core/page/PageAnimator.cpp
+++ b/third_party/WebKit/Source/core/page/PageAnimator.cpp
@@ -37,7 +37,7 @@
   for (Frame* frame = m_page->mainFrame(); frame;
        frame = frame->tree().traverseNext()) {
     if (frame->isLocalFrame())
-      documents.append(toLocalFrame(frame)->document());
+      documents.push_back(toLocalFrame(frame)->document());
   }
 
   for (auto& document : documents) {
diff --git a/third_party/WebKit/Source/core/page/PrintContext.cpp b/third_party/WebKit/Source/core/page/PrintContext.cpp
index 930a768..e88fd38 100644
--- a/third_party/WebKit/Source/core/page/PrintContext.cpp
+++ b/third_party/WebKit/Source/core/page/PrintContext.cpp
@@ -159,7 +159,7 @@
                      pageLogicalHeight);
     if (!isHorizontal)
       pageRect = pageRect.transposedRect();
-    m_pageRects.append(pageRect);
+    m_pageRects.push_back(pageRect);
   }
 }
 
diff --git a/third_party/WebKit/Source/core/page/PrintContextTest.cpp b/third_party/WebKit/Source/core/page/PrintContextTest.cpp
index 9145940f..562e204 100644
--- a/third_party/WebKit/Source/core/page/PrintContextTest.cpp
+++ b/third_party/WebKit/Source/core/page/PrintContextTest.cpp
@@ -54,11 +54,11 @@
       SkPoint point = getTotalMatrix().mapXY(rect.x(), rect.y());
       Operation operation = {DrawPoint,
                              SkRect::MakeXYWH(point.x(), point.y(), 0, 0)};
-      m_recordedOperations.append(operation);
+      m_recordedOperations.push_back(operation);
     } else {
       Operation operation = {DrawRect, rect};
       getTotalMatrix().mapRect(&operation.rect);
-      m_recordedOperations.append(operation);
+      m_recordedOperations.push_back(operation);
     }
   }
 
diff --git a/third_party/WebKit/Source/core/page/TouchAdjustment.cpp b/third_party/WebKit/Source/core/page/TouchAdjustment.cpp
index 4da62480..43dad53a 100644
--- a/third_party/WebKit/Source/core/page/TouchAdjustment.cpp
+++ b/third_party/WebKit/Source/core/page/TouchAdjustment.cpp
@@ -153,7 +153,7 @@
   Vector<FloatQuad>::const_iterator it = quads.begin();
   const Vector<FloatQuad>::const_iterator end = quads.end();
   for (; it != end; ++it)
-    subtargets.append(SubtargetGeometry(node, *it));
+    subtargets.push_back(SubtargetGeometry(node, *it));
 }
 
 static inline void appendBasicSubtargetsForNode(
@@ -240,16 +240,16 @@
   Vector<FloatQuad> quads;
   FloatRect borderBoxRect(layoutObject->borderBoxRect());
   FloatRect contentBoxRect(layoutObject->contentBoxRect());
-  quads.append(layoutObject->localToAbsoluteQuad(borderBoxRect));
+  quads.push_back(layoutObject->localToAbsoluteQuad(borderBoxRect));
   if (borderBoxRect != contentBoxRect)
-    quads.append(layoutObject->localToAbsoluteQuad(contentBoxRect));
+    quads.push_back(layoutObject->localToAbsoluteQuad(contentBoxRect));
   // FIXME: For LayoutBlocks, add column boxes and content boxes cleared for
   // floats.
 
   Vector<FloatQuad>::const_iterator it = quads.begin();
   const Vector<FloatQuad>::const_iterator end = quads.end();
   for (; it != end; ++it)
-    subtargets.append(SubtargetGeometry(node, *it));
+    subtargets.push_back(SubtargetGeometry(node, *it));
 }
 
 static inline Node* parentShadowHostOrOwner(const Node* node) {
@@ -285,7 +285,7 @@
       respondingNode = responderMap.get(visitedNode);
       if (respondingNode)
         break;
-      visitedNodes.append(visitedNode);
+      visitedNodes.push_back(visitedNode);
       // Check if the node filter applies, which would mean we have found a
       // responding node.
       if (nodeFilter(visitedNode)) {
@@ -307,7 +307,7 @@
       responderMap.add(visitedNodes[j], respondingNode);
 
     if (respondingNode)
-      candidates.append(node);
+      candidates.push_back(node);
   }
 
   // We compile the list of component absolute quads instead of using the
diff --git a/third_party/WebKit/Source/core/page/TouchDisambiguation.cpp b/third_party/WebKit/Source/core/page/TouchDisambiguation.cpp
index d7b62e87..e912538 100644
--- a/third_party/WebKit/Source/core/page/TouchDisambiguation.cpp
+++ b/third_party/WebKit/Source/core/page/TouchDisambiguation.cpp
@@ -156,8 +156,8 @@
     // avoid excessive popups.
     if (touchTarget.value.score < bestScore * 0.5)
       continue;
-    goodTargets.append(touchTarget.value.windowBoundingBox);
-    highlightNodes.append(touchTarget.key);
+    goodTargets.push_back(touchTarget.value.windowBoundingBox);
+    highlightNodes.push_back(touchTarget.key);
   }
 }
 
diff --git a/third_party/WebKit/Source/core/page/WindowFeatures.cpp b/third_party/WebKit/Source/core/page/WindowFeatures.cpp
index f1d78f9e..4e299ee87 100644
--- a/third_party/WebKit/Source/core/page/WindowFeatures.cpp
+++ b/third_party/WebKit/Source/core/page/WindowFeatures.cpp
@@ -169,7 +169,7 @@
   } else if (keyString == "noopener") {
     noopener = true;
   } else if (value == 1) {
-    additionalFeatures.append(keyString);
+    additionalFeatures.push_back(keyString);
   }
 }
 
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
index 49aa09d..91d5b6c 100644
--- a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
+++ b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
@@ -521,9 +521,9 @@
     LayerFrameMap::iterator iter = map->find(containingLayer);
     if (iter == map->end())
       map->add(containingLayer, HeapVector<Member<const LocalFrame>>())
-          .storedValue->value.append(toLocalFrame(child));
+          .storedValue->value.push_back(toLocalFrame(child));
     else
-      iter->value.append(toLocalFrame(child));
+      iter->value.push_back(toLocalFrame(child));
   }
 }
 
diff --git a/third_party/WebKit/Source/core/page/scrolling/SnapCoordinator.cpp b/third_party/WebKit/Source/core/page/scrolling/SnapCoordinator.cpp
index ad27eae9..c0c58cc4 100644
--- a/third_party/WebKit/Source/core/page/scrolling/SnapCoordinator.cpp
+++ b/third_party/WebKit/Source/core/page/scrolling/SnapCoordinator.cpp
@@ -95,7 +95,7 @@
     FloatPoint containerPoint =
         snapArea.localToAncestorPoint(localPoint, &containerBox);
     containerPoint.moveBy(scrollOffset);
-    result.append(containerPoint);
+    result.push_back(containerPoint);
   }
   return result;
 }
@@ -131,7 +131,7 @@
     repeat = std::max<LayoutUnit>(repeat, LayoutUnit(1));
     for (LayoutUnit offset = repeat; offset <= (scrollSize - clientSize);
          offset += repeat) {
-      result.append(offset.toFloat());
+      result.push_back(offset.toFloat());
     }
   }
 
@@ -148,7 +148,7 @@
                                : snapCoordinate.y();
         if (snapOffset > scrollSize - clientSize)
           continue;
-        result.append(snapOffset);
+        result.push_back(snapOffset);
         didAddSnapAreaOffset = true;
       }
     }
diff --git a/third_party/WebKit/Source/core/timing/BUILD.gn b/third_party/WebKit/Source/core/timing/BUILD.gn
index 938f3437..d7a94fa 100644
--- a/third_party/WebKit/Source/core/timing/BUILD.gn
+++ b/third_party/WebKit/Source/core/timing/BUILD.gn
@@ -34,6 +34,8 @@
     "PerformanceUserTiming.cpp",
     "PerformanceUserTiming.h",
     "SharedWorkerPerformance.cpp",
+    "TaskAttributionTiming.cpp",
+    "TaskAttributionTiming.h",
     "WorkerGlobalScopePerformance.cpp",
     "WorkerGlobalScopePerformance.h",
     "WorkerPerformance.cpp",
diff --git a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
index aa49b28..660507e 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
@@ -133,12 +133,6 @@
       PerformanceEntry::toEntryTypeEnum(entryType);
 
   switch (type) {
-    case PerformanceEntry::Invalid:
-      return entries;
-    case PerformanceEntry::LongTask:
-      // Unsupported for LongTask. Per the spec, Long task entries can only be
-      // accessed via Performance Observer. No separate buffer is maintained.
-      return entries;
     case PerformanceEntry::Resource:
       for (const auto& resource : m_resourceTimingBuffer)
         entries.append(resource);
@@ -163,6 +157,15 @@
       if (m_userTiming)
         entries.appendVector(m_userTiming->getMeasures());
       break;
+    // Unsupported for LongTask, TaskAttribution.
+    // Per the spec, these entries can only be accessed via
+    // Performance Observer. No separate buffer is maintained.
+    case PerformanceEntry::LongTask:
+      break;
+    case PerformanceEntry::TaskAttribution:
+      break;
+    case PerformanceEntry::Invalid:
+      break;
   }
 
   std::sort(entries.begin(), entries.end(),
@@ -428,15 +431,15 @@
 void PerformanceBase::addLongTaskTiming(double startTime,
                                         double endTime,
                                         const String& name,
-                                        const String& culpritFrameSrc,
-                                        const String& culpritFrameId,
-                                        const String& culpritFrameName) {
+                                        const String& frameSrc,
+                                        const String& frameId,
+                                        const String& frameName) {
   if (!hasObserverFor(PerformanceEntry::LongTask))
     return;
   PerformanceEntry* entry = PerformanceLongTaskTiming::create(
       monotonicTimeToDOMHighResTimeStamp(startTime),
-      monotonicTimeToDOMHighResTimeStamp(endTime), name, culpritFrameSrc,
-      culpritFrameId, culpritFrameName);
+      monotonicTimeToDOMHighResTimeStamp(endTime), name, frameSrc, frameId,
+      frameName);
   notifyObserversOfEntry(*entry);
 }
 
diff --git a/third_party/WebKit/Source/core/timing/PerformanceEntry.cpp b/third_party/WebKit/Source/core/timing/PerformanceEntry.cpp
index e4249a3..e5779fac 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceEntry.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceEntry.cpp
@@ -79,6 +79,8 @@
     return Resource;
   if (entryType == "navigation")
     return Navigation;
+  if (entryType == "taskattribution")
+    return TaskAttribution;
   return Invalid;
 }
 
diff --git a/third_party/WebKit/Source/core/timing/PerformanceEntry.h b/third_party/WebKit/Source/core/timing/PerformanceEntry.h
index 9189cd9..3abb644 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceEntry.h
+++ b/third_party/WebKit/Source/core/timing/PerformanceEntry.h
@@ -63,6 +63,7 @@
     Render = 1 << 4,
     Resource = 1 << 5,
     LongTask = 1 << 6,
+    TaskAttribution = 1 << 7,
   };
 
   String name() const;
diff --git a/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.cpp b/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.cpp
index 6b9032c6..448b4780 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.cpp
@@ -5,6 +5,7 @@
 #include "core/timing/PerformanceLongTaskTiming.h"
 
 #include "core/frame/DOMWindow.h"
+#include "core/timing/TaskAttributionTiming.h"
 
 namespace blink {
 
@@ -17,6 +18,17 @@
 
 }  // namespace
 
+// static
+PerformanceLongTaskTiming* PerformanceLongTaskTiming::create(double startTime,
+                                                             double endTime,
+                                                             String name,
+                                                             String frameSrc,
+                                                             String frameId,
+                                                             String frameName) {
+  return new PerformanceLongTaskTiming(startTime, endTime, name, frameSrc,
+                                       frameId, frameName);
+}
+
 PerformanceLongTaskTiming::PerformanceLongTaskTiming(double startTime,
                                                      double endTime,
                                                      String name,
@@ -26,26 +38,21 @@
     : PerformanceEntry(name,
                        "longtask",
                        clampToMillisecond(startTime),
-                       clampToMillisecond(endTime)),
-      m_culpritFrameSrc(culpritFrameSrc),
-      m_culpritFrameId(culpritFrameId),
-      m_culpritFrameName(culpritFrameName) {}
+                       clampToMillisecond(endTime)) {
+  // Only one possible name ("frame") currently.
+  TaskAttributionTiming* attributionEntry = TaskAttributionTiming::create(
+      "frame", culpritFrameSrc, culpritFrameId, culpritFrameName);
+  m_attribution.append(*attributionEntry);
+}
 
 PerformanceLongTaskTiming::~PerformanceLongTaskTiming() {}
 
-String PerformanceLongTaskTiming::culpritFrameSrc() const {
-  return m_culpritFrameSrc;
-}
-
-String PerformanceLongTaskTiming::culpritFrameId() const {
-  return m_culpritFrameId;
-}
-
-String PerformanceLongTaskTiming::culpritFrameName() const {
-  return m_culpritFrameName;
+TaskAttributionVector PerformanceLongTaskTiming::attribution() const {
+  return m_attribution;
 }
 
 DEFINE_TRACE(PerformanceLongTaskTiming) {
+  visitor->trace(m_attribution);
   PerformanceEntry::trace(visitor);
 }
 
diff --git a/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.h b/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.h
index 2784365c..134b8a6 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.h
+++ b/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.h
@@ -12,6 +12,9 @@
 
 namespace blink {
 
+class TaskAttributionTiming;
+using TaskAttributionVector = HeapVector<Member<TaskAttributionTiming>>;
+
 class PerformanceLongTaskTiming final : public PerformanceEntry {
   DEFINE_WRAPPERTYPEINFO();
 
@@ -19,17 +22,11 @@
   static PerformanceLongTaskTiming* create(double startTime,
                                            double endTime,
                                            String name,
-                                           String culpritFrameSrc,
-                                           String culpritFrameId,
-                                           String culpritFrameName) {
-    return new PerformanceLongTaskTiming(startTime, endTime, name,
-                                         culpritFrameSrc, culpritFrameId,
-                                         culpritFrameName);
-  }
+                                           String frameSrc,
+                                           String frameId,
+                                           String frameName);
 
-  String culpritFrameSrc() const;
-  String culpritFrameId() const;
-  String culpritFrameName() const;
+  TaskAttributionVector attribution() const;
 
   DECLARE_VIRTUAL_TRACE();
 
@@ -37,14 +34,12 @@
   PerformanceLongTaskTiming(double startTime,
                             double endTime,
                             String name,
-                            String culpritFrameSrc,
-                            String culpritFrameId,
-                            String culpritFrameName);
+                            String frameSrc,
+                            String frameId,
+                            String frameName);
   ~PerformanceLongTaskTiming() override;
 
-  String m_culpritFrameSrc;
-  String m_culpritFrameId;
-  String m_culpritFrameName;
+  TaskAttributionVector m_attribution;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.idl b/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.idl
index a608a0db..efe2444 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.idl
+++ b/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.idl
@@ -2,11 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://github.com/spanicker/longtasks
+// https://github.com/wicg/longtasks
 [
     OriginTrialEnabled=LongTaskObserver,
 ] interface PerformanceLongTaskTiming : PerformanceEntry {
-    readonly attribute DOMString culpritFrameSrc;
-    readonly attribute DOMString culpritFrameId;
-    readonly attribute DOMString culpritFrameName;
+    readonly attribute sequence<TaskAttributionTiming> attribution;
 };
diff --git a/third_party/WebKit/Source/core/timing/TaskAttributionTiming.cpp b/third_party/WebKit/Source/core/timing/TaskAttributionTiming.cpp
new file mode 100644
index 0000000..9f4ab74b3
--- /dev/null
+++ b/third_party/WebKit/Source/core/timing/TaskAttributionTiming.cpp
@@ -0,0 +1,38 @@
+// 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 "core/timing/TaskAttributionTiming.h"
+
+#include "core/frame/DOMWindow.h"
+
+namespace blink {
+
+TaskAttributionTiming::TaskAttributionTiming(String name,
+                                             String frameSrc,
+                                             String frameId,
+                                             String frameName)
+    : PerformanceEntry(name, "taskattribution", 0.0, 0.0),
+      m_frameSrc(frameSrc),
+      m_frameId(frameId),
+      m_frameName(frameName) {}
+
+TaskAttributionTiming::~TaskAttributionTiming() {}
+
+String TaskAttributionTiming::frameSrc() const {
+  return m_frameSrc;
+}
+
+String TaskAttributionTiming::frameId() const {
+  return m_frameId;
+}
+
+String TaskAttributionTiming::frameName() const {
+  return m_frameName;
+}
+
+DEFINE_TRACE(TaskAttributionTiming) {
+  PerformanceEntry::trace(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/timing/TaskAttributionTiming.h b/third_party/WebKit/Source/core/timing/TaskAttributionTiming.h
new file mode 100644
index 0000000..80699d3
--- /dev/null
+++ b/third_party/WebKit/Source/core/timing/TaskAttributionTiming.h
@@ -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.
+
+#ifndef TaskAttributionTiming_h
+#define TaskAttributionTiming_h
+
+#include "core/timing/PerformanceEntry.h"
+#include "platform/heap/Handle.h"
+#include "wtf/Forward.h"
+#include "wtf/text/WTFString.h"
+
+namespace blink {
+
+class TaskAttributionTiming final : public PerformanceEntry {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  static TaskAttributionTiming* create(String type,
+                                       String frameSrc,
+                                       String frameId,
+                                       String frameName) {
+    return new TaskAttributionTiming(type, frameSrc, frameId, frameName);
+  }
+
+  String frameSrc() const;
+  String frameId() const;
+  String frameName() const;
+
+  DECLARE_VIRTUAL_TRACE();
+
+  ~TaskAttributionTiming() override;
+
+ private:
+  TaskAttributionTiming(String type,
+                        String frameSrc,
+                        String frameId,
+                        String frameName);
+
+  String m_frameSrc;
+  String m_frameId;
+  String m_frameName;
+};
+
+}  // namespace blink
+
+#endif  // TaskAttributionTiming_h
diff --git a/third_party/WebKit/Source/core/timing/TaskAttributionTiming.idl b/third_party/WebKit/Source/core/timing/TaskAttributionTiming.idl
new file mode 100644
index 0000000..5d610947
--- /dev/null
+++ b/third_party/WebKit/Source/core/timing/TaskAttributionTiming.idl
@@ -0,0 +1,12 @@
+// 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.
+
+// https://github.com/wicg/longtasks
+[
+    OriginTrialEnabled=LongTaskObserver,
+] interface TaskAttributionTiming : PerformanceEntry {
+    readonly attribute DOMString frameSrc;
+    readonly attribute DOMString frameId;
+    readonly attribute DOMString frameName;
+};
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/SuggestBox.js b/third_party/WebKit/Source/devtools/front_end/ui/SuggestBox.js
index 38c08d6..cfa9f10c 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/SuggestBox.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/SuggestBox.js
@@ -134,12 +134,20 @@
     if (!items.length)
       return;
     // If there are no scrollbars, set the width to the width of the largest row.
-    var maxItem = items[0];
-    for (var i = 1; i < items.length; i++) {
-      if (items[i].title.length > maxItem.title.length)
+    var maxItem;
+    var maxLength = -Infinity;
+    for (var i = 0; i < items.length; i++) {
+      var length = items[i].title.length + (items[i].subtitle || '').length;
+      if (length > maxLength) {
+        maxLength = length;
         maxItem = items[i];
+      }
     }
-    this._element.style.width = UI.measurePreferredSize(this.createElementForItem(maxItem), this._element).width + 'px';
+    this._element.style.width =
+        UI.measurePreferredSize(
+              this.createElementForItem(/** @type {!UI.SuggestBox.Suggestion} */ (maxItem)), this._element)
+            .width +
+        'px';
   }
 
   /**
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp
index 2fa3906..8a8389b0 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp
@@ -61,12 +61,12 @@
     columnCount = rowCellCount;
 
   row->setRowIndex((int)m_rows.size());
-  m_rows.append(row);
+  m_rows.push_back(row);
 
   // Try adding the row if it's not ignoring accessibility,
   // otherwise add its children (the cells) as the grid's children.
   if (!row->accessibilityIsIgnored())
-    m_children.append(row);
+    m_children.push_back(row);
   else
     m_children.appendVector(row->children());
 
@@ -90,7 +90,7 @@
   HeapVector<Member<AXObject>> children;
   for (AXObject* child = rawFirstChild(); child;
        child = child->rawNextSibling())
-    children.append(child);
+    children.push_back(child);
   computeAriaOwnsChildren(children);
 
   AXObjectCacheImpl& axCache = axObjectCache();
@@ -118,14 +118,14 @@
     AXTableColumn* column = toAXTableColumn(axCache.getOrCreate(ColumnRole));
     column->setColumnIndex((int)i);
     column->setParent(this);
-    m_columns.append(column);
+    m_columns.push_back(column);
     if (!column->accessibilityIsIgnored())
-      m_children.append(column);
+      m_children.push_back(column);
   }
 
   AXObject* headerContainerObject = headerContainer();
   if (headerContainerObject && !headerContainerObject->accessibilityIsIgnored())
-    m_children.append(headerContainerObject);
+    m_children.push_back(headerContainerObject);
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.cpp b/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.cpp
index f3f3708..febaafa 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.cpp
@@ -55,7 +55,7 @@
 void AXARIAGridRow::headerObjectsForRow(AXObjectVector& headers) {
   for (const auto& cell : children()) {
     if (cell->roleValue() == RowHeaderRole)
-      headers.append(cell);
+      headers.push_back(cell);
   }
 }
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
index 27e2ca9..ed189f3 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
@@ -483,7 +483,7 @@
 
   if (!m_layoutObject) {
     if (ignoredReasons)
-      ignoredReasons->append(IgnoredReason(AXNotRendered));
+      ignoredReasons->push_back(IgnoredReason(AXNotRendered));
     return IgnoreObject;
   }
 
@@ -494,7 +494,7 @@
       return DefaultBehavior;
 
     if (ignoredReasons)
-      ignoredReasons->append(IgnoredReason(AXNotVisible));
+      ignoredReasons->push_back(IgnoredReason(AXNotVisible));
     return IgnoreObject;
   }
 
@@ -526,14 +526,14 @@
   // be exposed.
   if (isDescendantOfLeafNode()) {
     if (ignoredReasons)
-      ignoredReasons->append(
+      ignoredReasons->push_back(
           IgnoredReason(AXAncestorIsLeafNode, leafNodeAncestor()));
     return true;
   }
 
   if (roleValue() == IgnoredRole) {
     if (ignoredReasons)
-      ignoredReasons->append(IgnoredReason(AXUninteresting));
+      ignoredReasons->push_back(IgnoredReason(AXUninteresting));
     return true;
   }
 
@@ -541,9 +541,9 @@
     if (ignoredReasons) {
       const AXObject* inheritsFrom = inheritsPresentationalRoleFrom();
       if (inheritsFrom == this)
-        ignoredReasons->append(IgnoredReason(AXPresentationalRole));
+        ignoredReasons->push_back(IgnoredReason(AXPresentationalRole));
       else
-        ignoredReasons->append(
+        ignoredReasons->push_back(
             IgnoredReason(AXInheritsPresentation, inheritsFrom));
     }
     return true;
@@ -552,7 +552,7 @@
   // An ARIA tree can only have tree items and static text as children.
   if (AXObject* treeAncestor = treeAncestorDisallowingChild()) {
     if (ignoredReasons)
-      ignoredReasons->append(
+      ignoredReasons->push_back(
           IgnoredReason(AXAncestorDisallowsChild, treeAncestor));
     return true;
   }
@@ -576,10 +576,11 @@
       HTMLLabelElement* label = labelElementContainer();
       if (label && label != getNode()) {
         AXObject* labelAXObject = axObjectCache().getOrCreate(label);
-        ignoredReasons->append(IgnoredReason(AXLabelContainer, labelAXObject));
+        ignoredReasons->push_back(
+            IgnoredReason(AXLabelContainer, labelAXObject));
       }
 
-      ignoredReasons->append(IgnoredReason(AXLabelFor, controlObject));
+      ignoredReasons->push_back(IgnoredReason(AXLabelFor, controlObject));
     }
     return true;
   }
@@ -594,14 +595,14 @@
     if (parent && (parent->ariaRoleAttribute() == MenuItemRole ||
                    parent->ariaRoleAttribute() == MenuButtonRole)) {
       if (ignoredReasons)
-        ignoredReasons->append(
+        ignoredReasons->push_back(
             IgnoredReason(AXStaticTextUsedAsNameFor, parent));
       return true;
     }
     LayoutText* layoutText = toLayoutText(m_layoutObject);
     if (!layoutText->hasTextBoxes()) {
       if (ignoredReasons)
-        ignoredReasons->append(IgnoredReason(AXEmptyText));
+        ignoredReasons->push_back(IgnoredReason(AXEmptyText));
       return true;
     }
 
@@ -617,7 +618,7 @@
     // or similar...
     if (layoutText->text().impl()->containsOnlyWhitespace()) {
       if (ignoredReasons)
-        ignoredReasons->append(IgnoredReason(AXEmptyText));
+        ignoredReasons->push_back(IgnoredReason(AXEmptyText));
       return true;
     }
     return false;
@@ -712,7 +713,7 @@
   // textual block elements.
   if (isHTMLSpanElement(node)) {
     if (ignoredReasons)
-      ignoredReasons->append(IgnoredReason(AXUninteresting));
+      ignoredReasons->push_back(IgnoredReason(AXUninteresting));
     return true;
   }
 
@@ -725,7 +726,7 @@
     LayoutHTMLCanvas* canvas = toLayoutHTMLCanvas(m_layoutObject);
     if (canvas->size().height() <= 1 || canvas->size().width() <= 1) {
       if (ignoredReasons)
-        ignoredReasons->append(IgnoredReason(AXProbablyPresentational));
+        ignoredReasons->push_back(IgnoredReason(AXProbablyPresentational));
       return true;
     }
     // Otherwise fall through; use presence of help text, title, or description
@@ -770,14 +771,14 @@
       return false;
 
     if (ignoredReasons)
-      ignoredReasons->append(IgnoredReason(AXUninteresting));
+      ignoredReasons->push_back(IgnoredReason(AXUninteresting));
     return true;
   }
 
   // By default, objects should be ignored so that the AX hierarchy is not
   // filled with unnecessary items.
   if (ignoredReasons)
-    ignoredReasons->append(IgnoredReason(AXUninteresting));
+    ignoredReasons->push_back(IgnoredReason(AXUninteresting));
   return true;
 }
 
@@ -1219,7 +1220,7 @@
     if (foundTextAlternative) {
       nameFrom = AXNameFromContents;
       if (nameSources) {
-        nameSources->append(NameSource(false));
+        nameSources->push_back(NameSource(false));
         nameSources->back().type = nameFrom;
         nameSources->back().text = textAlternative;
       }
@@ -2158,7 +2159,7 @@
        box.get(); box = box->nextInlineTextBox()) {
     AXObject* axObject = axObjectCache().getOrCreate(box.get());
     if (!axObject->accessibilityIsIgnored())
-      m_children.append(axObject);
+      m_children.push_back(axObject);
   }
 }
 
@@ -2172,7 +2173,7 @@
   // nextLinePosition moves to the end of the current line when there are
   // no more lines.
   while (visiblePos.isNotNull() && !inSameLine(prevVisiblePos, visiblePos)) {
-    lineBreaks.append(indexForVisiblePosition(visiblePos));
+    lineBreaks.push_back(indexForVisiblePosition(visiblePos));
     prevVisiblePos = visiblePos;
     visiblePos = nextLinePosition(visiblePos, LayoutUnit(), HasEditableAXRole);
 
@@ -2424,7 +2425,7 @@
       toAXSpinButton(axObjectCache().getOrCreate(SpinButtonRole));
   axSpinButton->setSpinButtonElement(toSpinButtonElement(spinButtonElement));
   axSpinButton->setParent(this);
-  m_children.append(axSpinButton);
+  m_children.push_back(axSpinButton);
 }
 
 void AXLayoutObject::addImageMapChildren() {
@@ -2445,7 +2446,7 @@
       areaObject->setParent(this);
       ASSERT(areaObject->axObjectID() != 0);
       if (!areaObject->accessibilityIsIgnored())
-        m_children.append(areaObject);
+        m_children.push_back(areaObject);
       else
         axObjectCache().remove(areaObject->axObjectID());
     }
@@ -2468,7 +2469,7 @@
   if (!isHTMLInputElement(getNode()))
     return;
   if (AXObject* axPopup = toHTMLInputElement(getNode())->popupRootAXObject())
-    m_children.append(axPopup);
+    m_children.push_back(axPopup);
 }
 
 void AXLayoutObject::addRemoteSVGChildren() {
@@ -2480,9 +2481,9 @@
 
   if (root->accessibilityIsIgnored()) {
     for (const auto& child : root->children())
-      m_children.append(child);
+      m_children.push_back(child);
   } else {
-    m_children.append(root);
+    m_children.push_back(root);
   }
 }
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp b/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp
index 9d31d28..ecc8f20 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp
@@ -153,7 +153,7 @@
   nameFrom = AXNameFromContents;
   textAlternative = toHTMLOptionElement(getNode())->displayLabel();
   if (nameSources) {
-    nameSources->append(NameSource(foundTextAlternative));
+    nameSources->push_back(NameSource(foundTextAlternative));
     nameSources->back().type = nameFrom;
     nameSources->back().text = textAlternative;
     foundTextAlternative = true;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp
index d9a845ba..f99b345 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp
@@ -92,7 +92,7 @@
     return;
   }
 
-  m_children.append(list);
+  m_children.push_back(list);
 
   list->addChildren();
 }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
index 23442905..db27248 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
@@ -149,7 +149,7 @@
   nameFrom = AXNameFromContents;
   textAlternative = m_element->displayLabel();
   if (nameSources) {
-    nameSources->append(NameSource(foundTextAlternative));
+    nameSources->push_back(NameSource(foundTextAlternative));
     nameSources->back().type = nameFrom;
     nameSources->back().text = textAlternative;
     foundTextAlternative = true;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp
index 8f7db0ca..8c048338 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp
@@ -111,7 +111,7 @@
     AXMenuListOption* option = menuListOptionAXObject(optionElement);
     if (option) {
       option->setParent(this);
-      m_children.append(option);
+      m_children.push_back(option);
     }
   }
 }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
index ce29eef8..58b6cd3 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
@@ -134,7 +134,7 @@
   // be exposed.
   if (isDescendantOfLeafNode()) {
     if (ignoredReasons)
-      ignoredReasons->append(
+      ignoredReasons->push_back(
           IgnoredReason(AXAncestorIsLeafNode, leafNodeAncestor()));
     return true;
   }
@@ -147,10 +147,11 @@
       HTMLLabelElement* label = labelElementContainer();
       if (label && label != getNode()) {
         AXObject* labelAXObject = axObjectCache().getOrCreate(label);
-        ignoredReasons->append(IgnoredReason(AXLabelContainer, labelAXObject));
+        ignoredReasons->push_back(
+            IgnoredReason(AXLabelContainer, labelAXObject));
       }
 
-      ignoredReasons->append(IgnoredReason(AXLabelFor, controlObject));
+      ignoredReasons->push_back(IgnoredReason(AXLabelFor, controlObject));
     }
     return true;
   }
@@ -160,13 +161,13 @@
   if (!getLayoutObject() && (!element || !element->isInCanvasSubtree()) &&
       !equalIgnoringCase(getAttribute(aria_hiddenAttr), "false")) {
     if (ignoredReasons)
-      ignoredReasons->append(IgnoredReason(AXNotRendered));
+      ignoredReasons->push_back(IgnoredReason(AXNotRendered));
     return true;
   }
 
   if (m_role == UnknownRole) {
     if (ignoredReasons)
-      ignoredReasons->append(IgnoredReason(AXUninteresting));
+      ignoredReasons->push_back(IgnoredReason(AXUninteresting));
     return true;
   }
   return false;
@@ -574,7 +575,7 @@
           attr != aria_labeledbyAttr && attr != aria_describedbyAttr) {
         continue;
       }
-      children.append(child);
+      children.push_back(child);
     }
   }
 }
@@ -1207,8 +1208,8 @@
       case DocumentMarker::Spelling:
       case DocumentMarker::Grammar:
       case DocumentMarker::TextMatch:
-        markerTypes.append(marker->type());
-        markerRanges.append(
+        markerTypes.push_back(marker->type());
+        markerRanges.push_back(
             AXRange(marker->startOffset(), marker->endOffset()));
         break;
       case DocumentMarker::InvisibleSpellcheck:
@@ -1587,7 +1588,7 @@
   if (recursive || nameFromContents()) {
     nameFrom = AXNameFromContents;
     if (nameSources) {
-      nameSources->append(NameSource(foundTextAlternative));
+      nameSources->push_back(NameSource(foundTextAlternative));
       nameSources->back().type = nameFrom;
     }
 
@@ -1612,7 +1613,7 @@
   // Step 2H from: http://www.w3.org/TR/accname-aam-1.1
   nameFrom = AXNameFromTitle;
   if (nameSources) {
-    nameSources->append(NameSource(foundTextAlternative, titleAttr));
+    nameSources->push_back(NameSource(foundTextAlternative, titleAttr));
     nameSources->back().type = nameFrom;
   }
   const AtomicString& title = getAttribute(titleAttr);
@@ -1657,10 +1658,10 @@
   computeAriaOwnsChildren(ownedChildren);
   for (AXObject* obj = rawFirstChild(); obj; obj = obj->rawNextSibling()) {
     if (!axObjectCache().isAriaOwned(obj))
-      children.append(obj);
+      children.push_back(obj);
   }
   for (const auto& ownedChild : ownedChildren)
-    children.append(ownedChild);
+    children.push_back(ownedChild);
 
   for (AXObject* child : children) {
     // Don't recurse into children that are explicitly marked as aria-hidden.
@@ -1772,7 +1773,7 @@
           obj->getRelativeBounds(&container, bounds, outContainerTransform);
           if (container) {
             *outContainer = container;
-            rects.append(bounds);
+            rects.push_back(bounds);
           }
         }
       }
@@ -2246,7 +2247,7 @@
   if (htmlElement && htmlElement->isLabelable()) {
     nameFrom = AXNameFromRelatedElement;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative));
+      nameSources->push_back(NameSource(*foundTextAlternative));
       nameSources->back().type = nameFrom;
       nameSources->back().nativeSource = AXTextFromNativeHTMLLabel;
     }
@@ -2263,7 +2264,7 @@
           else
             nameSources->back().nativeSource = AXTextFromNativeHTMLLabelWrapped;
         }
-        labelElements.append(label);
+        labelElements.push_back(label);
       }
 
       textAlternative =
@@ -2288,7 +2289,7 @@
     // value attribue
     nameFrom = AXNameFromValue;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative, valueAttr));
+      nameSources->push_back(NameSource(*foundTextAlternative, valueAttr));
       nameSources->back().type = nameFrom;
     }
     String value = inputElement->value();
@@ -2311,7 +2312,7 @@
     // alt attr
     nameFrom = AXNameFromAttribute;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative, altAttr));
+      nameSources->push_back(NameSource(*foundTextAlternative, altAttr));
       nameSources->back().type = nameFrom;
     }
     const AtomicString& alt = inputElement->getAttribute(altAttr);
@@ -2329,7 +2330,7 @@
 
     // value attr
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative, valueAttr));
+      nameSources->push_back(NameSource(*foundTextAlternative, valueAttr));
       nameSources->back().type = nameFrom;
     }
     nameFrom = AXNameFromAttribute;
@@ -2350,7 +2351,7 @@
     textAlternative = inputElement->locale().queryString(
         WebLocalizedString::SubmitButtonDefaultLabel);
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative, typeAttr));
+      nameSources->push_back(NameSource(*foundTextAlternative, typeAttr));
       NameSource& source = nameSources->back();
       source.attributeValue = inputElement->getAttribute(typeAttr);
       source.type = nameFrom;
@@ -2366,7 +2367,8 @@
   if (htmlElement && htmlElement->isTextControl()) {
     nameFrom = AXNameFromPlaceholder;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative, placeholderAttr));
+      nameSources->push_back(
+          NameSource(*foundTextAlternative, placeholderAttr));
       NameSource& source = nameSources->back();
       source.type = nameFrom;
     }
@@ -2386,7 +2388,7 @@
     // Also check for aria-placeholder.
     nameFrom = AXNameFromPlaceholder;
     if (nameSources) {
-      nameSources->append(
+      nameSources->push_back(
           NameSource(*foundTextAlternative, aria_placeholderAttr));
       NameSource& source = nameSources->back();
       source.type = nameFrom;
@@ -2413,7 +2415,7 @@
     // figcaption
     nameFrom = AXNameFromRelatedElement;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative));
+      nameSources->push_back(NameSource(*foundTextAlternative));
       nameSources->back().type = nameFrom;
       nameSources->back().nativeSource = AXTextFromNativeHTMLFigcaption;
     }
@@ -2431,7 +2433,7 @@
             recursiveTextAlternative(*figcaptionAXObject, false, visited);
 
         if (relatedObjects) {
-          localRelatedObjects.append(
+          localRelatedObjects.push_back(
               new NameSourceRelatedObject(figcaptionAXObject, textAlternative));
           *relatedObjects = localRelatedObjects;
           localRelatedObjects.clear();
@@ -2456,7 +2458,7 @@
     // alt
     nameFrom = AXNameFromAttribute;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative, altAttr));
+      nameSources->push_back(NameSource(*foundTextAlternative, altAttr));
       nameSources->back().type = nameFrom;
     }
     const AtomicString& alt = getAttribute(altAttr);
@@ -2481,7 +2483,7 @@
     // caption
     nameFrom = AXNameFromCaption;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative));
+      nameSources->push_back(NameSource(*foundTextAlternative));
       nameSources->back().type = nameFrom;
       nameSources->back().nativeSource = AXTextFromNativeHTMLTableCaption;
     }
@@ -2492,7 +2494,7 @@
         textAlternative =
             recursiveTextAlternative(*captionAXObject, false, visited);
         if (relatedObjects) {
-          localRelatedObjects.append(
+          localRelatedObjects.push_back(
               new NameSourceRelatedObject(captionAXObject, textAlternative));
           *relatedObjects = localRelatedObjects;
           localRelatedObjects.clear();
@@ -2512,7 +2514,7 @@
     // summary
     nameFrom = AXNameFromAttribute;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative, summaryAttr));
+      nameSources->push_back(NameSource(*foundTextAlternative, summaryAttr));
       nameSources->back().type = nameFrom;
     }
     const AtomicString& summary = getAttribute(summaryAttr);
@@ -2535,7 +2537,7 @@
   if (getNode()->isSVGElement()) {
     nameFrom = AXNameFromRelatedElement;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative));
+      nameSources->push_back(NameSource(*foundTextAlternative));
       nameSources->back().type = nameFrom;
       nameSources->back().nativeSource = AXTextFromNativeHTMLTitleElement;
     }
@@ -2549,7 +2551,7 @@
         textAlternative =
             recursiveTextAlternative(*titleAXObject, false, visited);
         if (relatedObjects) {
-          localRelatedObjects.append(
+          localRelatedObjects.push_back(
               new NameSourceRelatedObject(titleAXObject, textAlternative));
           *relatedObjects = localRelatedObjects;
           localRelatedObjects.clear();
@@ -2570,7 +2572,7 @@
   if (isHTMLFieldSetElement(getNode())) {
     nameFrom = AXNameFromRelatedElement;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative));
+      nameSources->push_back(NameSource(*foundTextAlternative));
       nameSources->back().type = nameFrom;
       nameSources->back().nativeSource = AXTextFromNativeHTMLLegend;
     }
@@ -2583,7 +2585,7 @@
             recursiveTextAlternative(*legendAXObject, false, visited);
 
         if (relatedObjects) {
-          localRelatedObjects.append(
+          localRelatedObjects.push_back(
               new NameSourceRelatedObject(legendAXObject, textAlternative));
           *relatedObjects = localRelatedObjects;
           localRelatedObjects.clear();
@@ -2607,7 +2609,8 @@
     if (document) {
       nameFrom = AXNameFromAttribute;
       if (nameSources) {
-        nameSources->append(NameSource(foundTextAlternative, aria_labelAttr));
+        nameSources->push_back(
+            NameSource(foundTextAlternative, aria_labelAttr));
         nameSources->back().type = nameFrom;
       }
       if (Element* documentElement = document->documentElement()) {
@@ -2629,7 +2632,7 @@
 
       nameFrom = AXNameFromRelatedElement;
       if (nameSources) {
-        nameSources->append(NameSource(*foundTextAlternative));
+        nameSources->push_back(NameSource(*foundTextAlternative));
         nameSources->back().type = nameFrom;
         nameSources->back().nativeSource = AXTextFromNativeHTMLTitleElement;
       }
@@ -2640,7 +2643,7 @@
       AXObject* titleAXObject = axObjectCache().getOrCreate(titleElement);
       if (titleAXObject) {
         if (relatedObjects) {
-          localRelatedObjects.append(
+          localRelatedObjects.push_back(
               new NameSourceRelatedObject(titleAXObject, textAlternative));
           *relatedObjects = localRelatedObjects;
           localRelatedObjects.clear();
@@ -2670,7 +2673,7 @@
   if (descriptionObjects) {
     descriptionObjects->clear();
     for (size_t i = 0; i < relatedObjects.size(); i++)
-      descriptionObjects->append(relatedObjects[i]->object);
+      descriptionObjects->push_back(relatedObjects[i]->object);
   }
 
   return collapseWhitespace(result);
@@ -2695,7 +2698,7 @@
 
   descriptionFrom = AXDescriptionFromRelatedElement;
   if (descriptionSources) {
-    descriptionSources->append(
+    descriptionSources->push_back(
         DescriptionSource(foundDescription, aria_describedbyAttr));
     descriptionSources->back().type = descriptionFrom;
   }
@@ -2733,7 +2736,7 @@
       inputElement->isTextButton()) {
     descriptionFrom = AXDescriptionFromAttribute;
     if (descriptionSources) {
-      descriptionSources->append(
+      descriptionSources->push_back(
           DescriptionSource(foundDescription, valueAttr));
       descriptionSources->back().type = descriptionFrom;
     }
@@ -2757,7 +2760,7 @@
 
     descriptionFrom = AXDescriptionFromRelatedElement;
     if (descriptionSources) {
-      descriptionSources->append(DescriptionSource(foundDescription));
+      descriptionSources->push_back(DescriptionSource(foundDescription));
       descriptionSources->back().type = descriptionFrom;
       descriptionSources->back().nativeSource =
           AXTextFromNativeHTMLTableCaption;
@@ -2770,7 +2773,7 @@
         description =
             recursiveTextAlternative(*captionAXObject, false, visited);
         if (relatedObjects)
-          relatedObjects->append(
+          relatedObjects->push_back(
               new NameSourceRelatedObject(captionAXObject, description));
 
         if (descriptionSources) {
@@ -2790,7 +2793,7 @@
   if (nameFrom != AXNameFromContents && isHTMLSummaryElement(getNode())) {
     descriptionFrom = AXDescriptionFromContents;
     if (descriptionSources) {
-      descriptionSources->append(DescriptionSource(foundDescription));
+      descriptionSources->push_back(DescriptionSource(foundDescription));
       descriptionSources->back().type = descriptionFrom;
     }
 
@@ -2812,7 +2815,7 @@
   if (nameFrom != AXNameFromTitle) {
     descriptionFrom = AXDescriptionFromAttribute;
     if (descriptionSources) {
-      descriptionSources->append(
+      descriptionSources->push_back(
           DescriptionSource(foundDescription, titleAttr));
       descriptionSources->back().type = descriptionFrom;
     }
@@ -2833,7 +2836,7 @@
   // the built-in date/time controls use it.
   descriptionFrom = AXDescriptionFromAttribute;
   if (descriptionSources) {
-    descriptionSources->append(
+    descriptionSources->push_back(
         DescriptionSource(foundDescription, aria_helpAttr));
     descriptionSources->back().type = descriptionFrom;
   }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
index 43efc61..4371c90 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
@@ -503,7 +503,8 @@
   if (isPresentationalChild()) {
     if (ignoredReasons) {
       AXObject* ancestor = ancestorForWhichThisIsAPresentationalChild();
-      ignoredReasons->append(IgnoredReason(AXAncestorDisallowsChild, ancestor));
+      ignoredReasons->push_back(
+          IgnoredReason(AXAncestorDisallowsChild, ancestor));
     }
     return IgnoreObject;
   }
@@ -525,13 +526,13 @@
         if (dialog) {
           AXObject* dialogObject = axObjectCache().getOrCreate(dialog);
           if (dialogObject)
-            ignoredReasons->append(
+            ignoredReasons->push_back(
                 IgnoredReason(AXActiveModalDialog, dialogObject));
           else
-            ignoredReasons->append(IgnoredReason(AXInert));
+            ignoredReasons->push_back(IgnoredReason(AXInert));
         } else {
           // TODO(aboxhall): handle inert attribute if it eventuates
-          ignoredReasons->append(IgnoredReason(AXInert));
+          ignoredReasons->push_back(IgnoredReason(AXInert));
         }
       }
       return true;
@@ -549,9 +550,9 @@
   if (hiddenRoot) {
     if (ignoredReasons) {
       if (hiddenRoot == this)
-        ignoredReasons->append(IgnoredReason(AXAriaHidden));
+        ignoredReasons->push_back(IgnoredReason(AXAriaHidden));
       else
-        ignoredReasons->append(IgnoredReason(AXAriaHiddenRoot, hiddenRoot));
+        ignoredReasons->push_back(IgnoredReason(AXAriaHiddenRoot, hiddenRoot));
     }
     return true;
   }
@@ -676,7 +677,7 @@
   if (nameObjects) {
     nameObjects->clear();
     for (size_t i = 0; i < relatedObjects.size(); i++)
-      nameObjects->append(relatedObjects[i]->object);
+      nameObjects->push_back(relatedObjects[i]->object);
   }
 
   return text;
@@ -754,7 +755,7 @@
             : aria_labelledbyAttr;
     nameFrom = AXNameFromRelatedElement;
     if (nameSources) {
-      nameSources->append(NameSource(*foundTextAlternative, attr));
+      nameSources->push_back(NameSource(*foundTextAlternative, attr));
       nameSources->back().type = nameFrom;
     }
 
@@ -789,7 +790,7 @@
   // If you change this logic, update AXNodeObject::nameFromLabelElement, too.
   nameFrom = AXNameFromAttribute;
   if (nameSources) {
-    nameSources->append(NameSource(*foundTextAlternative, aria_labelAttr));
+    nameSources->push_back(NameSource(*foundTextAlternative, aria_labelAttr));
     nameSources->back().type = nameFrom;
   }
   const AtomicString& ariaLabel = getAttribute(aria_labelAttr);
@@ -825,7 +826,7 @@
 
       String result = recursiveTextAlternative(
           *axElement, inAriaLabelledbyTraversal, visited);
-      localRelatedObjects.append(
+      localRelatedObjects.push_back(
           new NameSourceRelatedObject(axElement, result));
       if (!result.isEmpty()) {
         if (!accumulatedText.isEmpty())
@@ -865,7 +866,7 @@
   TreeScope& scope = getNode()->treeScope();
   for (const auto& id : ids) {
     if (Element* idElement = scope.getElementById(AtomicString(id)))
-      elements.append(idElement);
+      elements.push_back(idElement);
   }
 }
 
@@ -1512,7 +1513,7 @@
     if (parentObject->getScrollableAreaIfScrollable())
       objects.prepend(parentObject);
   }
-  objects.append(this);
+  objects.push_back(this);
 
   // Start with the outermost scrollable (the main window) and try to scroll the
   // next innermost object to the given point.
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
index d3fde922..6de9215 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
@@ -686,7 +686,7 @@
   if (!object)
     return;
 
-  m_notificationsToPost.append(std::make_pair(object, notification));
+  m_notificationsToPost.push_back(std::make_pair(object, notification));
   if (!m_notificationPostTimer.isActive())
     m_notificationPostTimer.startOneShot(0, BLINK_FROM_HERE);
 }
@@ -778,8 +778,8 @@
     if (foundCycle)
       continue;
 
-    newChildAXIDs.append(child->axObjectID());
-    ownedChildren.append(child);
+    newChildAXIDs.push_back(child->axObjectID());
+    ownedChildren.push_back(child);
   }
 
   // Compare this to the current list of owned children, and exit early if there
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp b/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp
index 70390e1..56a5857 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp
@@ -97,7 +97,7 @@
   if (thumb->accessibilityIsIgnored())
     cache.remove(thumb->axObjectID());
   else
-    m_children.append(thumb);
+    m_children.push_back(thumb);
 }
 
 AXObject* AXSlider::elementAccessibilityHitTest(const IntPoint& point) const {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp b/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp
index 69248032..bc8a86c 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp
@@ -75,13 +75,13 @@
       toAXSpinButtonPart(axObjectCache().getOrCreate(SpinButtonPartRole));
   incrementor->setIsIncrementor(true);
   incrementor->setParent(this);
-  m_children.append(incrementor);
+  m_children.push_back(incrementor);
 
   AXSpinButtonPart* decrementor =
       toAXSpinButtonPart(axObjectCache().getOrCreate(SpinButtonPartRole));
   decrementor->setIsIncrementor(false);
   decrementor->setParent(this);
-  m_children.append(decrementor);
+  m_children.push_back(decrementor);
 }
 
 void AXSpinButton::step(int amount) {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTable.cpp b/third_party/WebKit/Source/modules/accessibility/AXTable.cpp
index cc5d4b6..a2e93e0 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXTable.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXTable.cpp
@@ -386,7 +386,7 @@
           toHTMLTableElement(tableNode)->caption()) {
     AXObject* captionObject = axCache.getOrCreate(caption);
     if (captionObject && !captionObject->accessibilityIsIgnored())
-      m_children.append(captionObject);
+      m_children.push_back(captionObject);
   }
 
   // Go through all the available sections to pull out the rows and add them as
@@ -416,9 +416,9 @@
         continue;
 
       row->setRowIndex(static_cast<int>(m_rows.size()));
-      m_rows.append(row);
+      m_rows.push_back(row);
       if (!row->accessibilityIsIgnored())
-        m_children.append(row);
+        m_children.push_back(row);
       appendedRows.add(row);
     }
 
@@ -431,14 +431,14 @@
     AXTableColumn* column = toAXTableColumn(axCache.getOrCreate(ColumnRole));
     column->setColumnIndex((int)i);
     column->setParent(this);
-    m_columns.append(column);
+    m_columns.push_back(column);
     if (!column->accessibilityIsIgnored())
-      m_children.append(column);
+      m_children.push_back(column);
   }
 
   AXObject* headerContainerObject = headerContainer();
   if (headerContainerObject && !headerContainerObject->accessibilityIsIgnored())
-    m_children.append(headerContainerObject);
+    m_children.push_back(headerContainerObject);
 }
 
 AXObject* AXTable::headerContainer() {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTableColumn.cpp b/third_party/WebKit/Source/modules/accessibility/AXTableColumn.cpp
index b629b132..8b16a25 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXTableColumn.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXTableColumn.cpp
@@ -65,7 +65,7 @@
   if (toAXTable(m_parent)->isAriaTable()) {
     for (const auto& cell : children()) {
       if (cell->roleValue() == ColumnHeaderRole)
-        headers.append(cell);
+        headers.push_back(cell);
     }
     return;
   }
@@ -92,7 +92,7 @@
         continue;
 
       if (toAXTableCell(cell)->scanToDecideHeaderRole() == ColumnHeaderRole)
-        headers.append(cell);
+        headers.push_back(cell);
     }
   }
 }
@@ -140,7 +140,7 @@
     if (m_children.size() > 0 && m_children.back() == cell)
       continue;
 
-    m_children.append(cell);
+    m_children.push_back(cell);
   }
 }
 
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp b/third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp
index 58fb6b1..9f5529a 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp
@@ -138,7 +138,7 @@
       continue;
 
     if (toAXTableCell(cell.get())->scanToDecideHeaderRole() == RowHeaderRole)
-      headers.append(cell);
+      headers.push_back(cell);
   }
 }
 
diff --git a/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp b/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
index 4d6f6241..8d5ef06e 100644
--- a/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
@@ -469,7 +469,7 @@
       populateDOMNodeAncestors(*domNode, *(ignoredNodeObject.get()), nodes,
                                cache);
     }
-    ignoredReasons.append(IgnoredReason(AXNotRendered));
+    ignoredReasons.push_back(IgnoredReason(AXNotRendered));
   }
 
   if (domNode)
diff --git a/third_party/WebKit/Source/modules/background_sync/SyncManager.cpp b/third_party/WebKit/Source/modules/background_sync/SyncManager.cpp
index 618149be..7a75f599 100644
--- a/third_party/WebKit/Source/modules/background_sync/SyncManager.cpp
+++ b/third_party/WebKit/Source/modules/background_sync/SyncManager.cpp
@@ -122,7 +122,7 @@
     case mojom::blink::BackgroundSyncError::NONE: {
       Vector<String> tags;
       for (const auto& r : registrations) {
-        tags.append(r->tag);
+        tags.push_back(r->tag);
       }
       resolver->resolve(tags);
       break;
diff --git a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
index b28791a..ac700a4 100644
--- a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
@@ -62,7 +62,7 @@
           BluetoothUUID::getService(service, exceptionState);
       if (exceptionState.hadException())
         return;
-      canonicalizedFilter->services->append(validatedService);
+      canonicalizedFilter->services->push_back(validatedService);
     }
   }
 
@@ -128,7 +128,7 @@
       if (exceptionState.hadException())
         return;
 
-      result->filters.value().append(std::move(canonicalizedFilter));
+      result->filters.value().push_back(std::move(canonicalizedFilter));
     }
   }
 
@@ -139,7 +139,7 @@
           BluetoothUUID::getService(optionalService, exceptionState);
       if (exceptionState.hadException())
         return;
-      result->optional_services.append(validatedOptionalService);
+      result->optional_services.push_back(validatedOptionalService);
     }
   }
 }
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
index 5ac6a05..2583213 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
@@ -133,7 +133,7 @@
     gattServices.reserveInitialCapacity(services->size());
 
     for (const auto& service : services.value()) {
-      gattServices.append(m_device->getOrCreateRemoteGATTService(
+      gattServices.push_back(m_device->getOrCreateRemoteGATTService(
           service->instance_id, service->uuid, true /* isPrimary */,
           device()->id()));
     }
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
index d73dd6b..9407314 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
@@ -84,10 +84,11 @@
     HeapVector<Member<BluetoothRemoteGATTCharacteristic>> gattCharacteristics;
     gattCharacteristics.reserveInitialCapacity(characteristics->size());
     for (const auto& characteristic : characteristics.value()) {
-      gattCharacteristics.append(device()->getOrCreateRemoteGATTCharacteristic(
-          resolver->getExecutionContext(), characteristic->instance_id,
-          serviceInstanceId, characteristic->uuid, characteristic->properties,
-          this));
+      gattCharacteristics.push_back(
+          device()->getOrCreateRemoteGATTCharacteristic(
+              resolver->getExecutionContext(), characteristic->instance_id,
+              serviceInstanceId, characteristic->uuid,
+              characteristic->properties, this));
     }
     resolver->resolve(gattCharacteristics);
   } else {
diff --git a/third_party/WebKit/Source/modules/cachestorage/Cache.cpp b/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
index ff0d44b5e..2c89c8a 100644
--- a/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
@@ -79,7 +79,7 @@
     ScriptState::Scope scope(m_resolver->getScriptState());
     HeapVector<Member<Response>> responses;
     for (size_t i = 0; i < webResponses.size(); ++i)
-      responses.append(
+      responses.push_back(
           Response::create(m_resolver->getScriptState(), webResponses[i]));
     m_resolver->resolve(responses);
     m_resolver.clear();
@@ -145,7 +145,7 @@
     ScriptState::Scope scope(m_resolver->getScriptState());
     HeapVector<Member<Request>> requests;
     for (size_t i = 0; i < webRequests.size(); ++i)
-      requests.append(
+      requests.push_back(
           Request::create(m_resolver->getScriptState(), webRequests[i]));
     m_resolver->resolve(requests);
     m_resolver.clear();
@@ -424,9 +424,9 @@
   ASSERT(!request.isNull());
   HeapVector<Member<Request>> requests;
   if (request.isRequest()) {
-    requests.append(request.getAsRequest());
+    requests.push_back(request.getAsRequest());
   } else {
-    requests.append(
+    requests.push_back(
         Request::create(scriptState, request.getAsUSVString(), exceptionState));
     if (exceptionState.hadException())
       return ScriptPromise();
@@ -441,10 +441,10 @@
   HeapVector<Member<Request>> requests;
   for (RequestInfo request : rawRequests) {
     if (request.isRequest()) {
-      requests.append(request.getAsRequest());
+      requests.push_back(request.getAsRequest());
     } else {
-      requests.append(Request::create(scriptState, request.getAsUSVString(),
-                                      exceptionState));
+      requests.push_back(Request::create(scriptState, request.getAsUSVString(),
+                                         exceptionState));
       if (exceptionState.hadException())
         return ScriptPromise();
     }
diff --git a/third_party/WebKit/Source/modules/cachestorage/CacheStorage.cpp b/third_party/WebKit/Source/modules/cachestorage/CacheStorage.cpp
index 58675ea9..e8a09ae 100644
--- a/third_party/WebKit/Source/modules/cachestorage/CacheStorage.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/CacheStorage.cpp
@@ -206,7 +206,7 @@
       return;
     Vector<String> wtfKeys;
     for (size_t i = 0; i < keys.size(); ++i)
-      wtfKeys.append(keys[i]);
+      wtfKeys.push_back(keys[i]);
     m_resolver->resolve(wtfKeys);
     m_resolver.clear();
   }
diff --git a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
index 167ff24..26949a0 100644
--- a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
@@ -385,7 +385,7 @@
     deleteOperation.operationType = WebServiceWorkerCache::OperationTypeDelete;
     deleteOperation.request.setURL(KURL(ParsedURLString, m_requestSpec));
     Vector<BatchOperation> operations;
-    operations.append(deleteOperation);
+    operations.push_back(deleteOperation);
     cache.release()->dispatchBatch(std::move(deleteRequest),
                                    WebVector<BatchOperation>(operations));
   }
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
index a970295..21e3fa1 100644
--- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
@@ -33,7 +33,7 @@
 
 BaseRenderingContext2D::BaseRenderingContext2D()
     : m_clipAntialiasing(NotAntiAliased) {
-  m_stateStack.append(CanvasRenderingContext2DState::create());
+  m_stateStack.push_back(CanvasRenderingContext2DState::create());
 }
 
 BaseRenderingContext2D::~BaseRenderingContext2D() {}
@@ -50,7 +50,7 @@
     // Reduce the current state's unrealized count by one now,
     // to reflect the fact we are saving one state.
     m_stateStack.back()->restore();
-    m_stateStack.append(CanvasRenderingContext2DState::create(
+    m_stateStack.push_back(CanvasRenderingContext2DState::create(
         state(), CanvasRenderingContext2DState::DontCopyClipList));
     // Set the new state's unrealized count to 0, because it has no outstanding
     // saves.
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DAPITest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DAPITest.cpp
index ac5fb5b..a5c3db5aa 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DAPITest.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DAPITest.cpp
@@ -215,8 +215,8 @@
   createContext(NonOpaque);
 
   Vector<double> simpleDash;
-  simpleDash.append(4);
-  simpleDash.append(2);
+  simpleDash.push_back(4);
+  simpleDash.push_back(2);
 
   context2d()->setLineDash(simpleDash);
   EXPECT_EQ(simpleDash, context2d()->getLineDash());
diff --git a/third_party/WebKit/Source/modules/canvas2d/ClipList.cpp b/third_party/WebKit/Source/modules/canvas2d/ClipList.cpp
index 24fad989..5b791bfc 100644
--- a/third_party/WebKit/Source/modules/canvas2d/ClipList.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/ClipList.cpp
@@ -24,7 +24,7 @@
   else
     Op(m_currentClipPath, path, SkPathOp::kIntersect_SkPathOp,
        &m_currentClipPath);
-  m_clipList.append(newClip);
+  m_clipList.push_back(newClip);
 }
 
 void ClipList::playback(SkCanvas* canvas) const {
diff --git a/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp b/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
index 9ecce48..5a0d24c 100644
--- a/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
+++ b/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
@@ -177,7 +177,7 @@
     for (const auto& string : providerStrings) {
       KURL url = KURL(KURL(), string);
       if (url.isValid())
-        providers.append(url);
+        providers.push_back(url);
     }
   }
 
diff --git a/third_party/WebKit/Source/modules/crypto/CryptoKey.cpp b/third_party/WebKit/Source/modules/crypto/CryptoKey.cpp
index bdca341b..9c0c46f 100644
--- a/third_party/WebKit/Source/modules/crypto/CryptoKey.cpp
+++ b/third_party/WebKit/Source/modules/crypto/CryptoKey.cpp
@@ -158,7 +158,7 @@
   for (size_t i = 0; i < WTF_ARRAY_LENGTH(keyUsageMappings); ++i) {
     WebCryptoKeyUsage usage = keyUsageMappings[i].value;
     if (m_key.usages() & usage)
-      result.append(keyUsageToString(usage));
+      result.push_back(keyUsageToString(usage));
   }
   return result;
 }
diff --git a/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.cpp b/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.cpp
index bd783625..e918899 100644
--- a/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.cpp
+++ b/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.cpp
@@ -217,7 +217,7 @@
 // tell what went wrong from a failure alone.
 class ErrorContext {
  public:
-  void add(const char* message) { m_messages.append(message); }
+  void add(const char* message) { m_messages.push_back(message); }
 
   void removeLast() { m_messages.pop_back(); }
 
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp b/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp
index e8b53db..452cd79 100644
--- a/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp
+++ b/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp
@@ -96,9 +96,9 @@
     for (const auto& property : properties) {
       CSSPropertyID propertyID = cssPropertyID(property);
       if (propertyID == CSSPropertyVariable) {
-        customInvalidationProperties.append(property);
+        customInvalidationProperties.push_back(property);
       } else if (propertyID != CSSPropertyInvalid) {
-        nativeInvalidationProperties.append(propertyID);
+        nativeInvalidationProperties.push_back(propertyID);
       }
     }
   }
diff --git a/third_party/WebKit/Source/modules/eventsource/EventSourceParser.cpp b/third_party/WebKit/Source/modules/eventsource/EventSourceParser.cpp
index 4fbad24..74ec019 100644
--- a/third_party/WebKit/Source/modules/eventsource/EventSourceParser.cpp
+++ b/third_party/WebKit/Source/modules/eventsource/EventSourceParser.cpp
@@ -98,7 +98,7 @@
   }
   if (fieldName == "data") {
     m_data.append(m_line.data() + fieldValueStart, fieldValueSize);
-    m_data.append('\n');
+    m_data.push_back('\n');
     return;
   }
   if (fieldName == "id") {
diff --git a/third_party/WebKit/Source/modules/eventsource/EventSourceParserTest.cpp b/third_party/WebKit/Source/modules/eventsource/EventSourceParserTest.cpp
index 96d17bd..e0fa449fd 100644
--- a/third_party/WebKit/Source/modules/eventsource/EventSourceParserTest.cpp
+++ b/third_party/WebKit/Source/modules/eventsource/EventSourceParserTest.cpp
@@ -46,10 +46,10 @@
   void onMessageEvent(const AtomicString& event,
                       const String& data,
                       const AtomicString& id) override {
-    m_events.append(EventOrReconnectionTimeSetting(event, data, id));
+    m_events.push_back(EventOrReconnectionTimeSetting(event, data, id));
   }
   void onReconnectionTimeSet(unsigned long long reconnectionTime) override {
-    m_events.append(EventOrReconnectionTimeSetting(reconnectionTime));
+    m_events.push_back(EventOrReconnectionTimeSetting(reconnectionTime));
   }
 
  private:
@@ -70,10 +70,10 @@
                       const String& data,
                       const AtomicString& id) override {
     m_parser->stop();
-    m_events.append(EventOrReconnectionTimeSetting(event, data, id));
+    m_events.push_back(EventOrReconnectionTimeSetting(event, data, id));
   }
   void onReconnectionTimeSet(unsigned long long reconnectionTime) override {
-    m_events.append(EventOrReconnectionTimeSetting(reconnectionTime));
+    m_events.push_back(EventOrReconnectionTimeSetting(reconnectionTime));
   }
 
   DEFINE_INLINE_VIRTUAL_TRACE() {
diff --git a/third_party/WebKit/Source/modules/fetch/FetchHeaderList.cpp b/third_party/WebKit/Source/modules/fetch/FetchHeaderList.cpp
index f87594ea0..ee964d6f 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchHeaderList.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchHeaderList.cpp
@@ -30,7 +30,7 @@
   // "To append a name/value (|name|/|value|) pair to a header list (|list|),
   // append a new header whose name is |name|, byte lowercased, and value is
   // |value|, to |list|."
-  m_headerList.append(WTF::wrapUnique(new Header(name.lower(), value)));
+  m_headerList.push_back(WTF::wrapUnique(new Header(name.lower(), value)));
 }
 
 void FetchHeaderList::set(const String& name, const String& value) {
@@ -54,7 +54,7 @@
       return;
     }
   }
-  m_headerList.append(WTF::makeUnique<Header>(lowercasedName, value));
+  m_headerList.push_back(WTF::makeUnique<Header>(lowercasedName, value));
 }
 
 String FetchHeaderList::extractMIMEType() const {
@@ -108,7 +108,7 @@
   result.clear();
   for (size_t i = 0; i < m_headerList.size(); ++i) {
     if (m_headerList[i]->first == lowercasedName)
-      result.append(m_headerList[i]->second);
+      result.push_back(m_headerList[i]->second);
   }
 }
 
diff --git a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
index 3937edec..c7e01e5 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
@@ -303,7 +303,7 @@
       m_didFinishLoading(false),
       m_isIsolatedWorld(isIsolatedWorld),
       m_executionContext(executionContext) {
-  m_urlList.append(request->url());
+  m_urlList.push_back(request->url());
 }
 
 FetchManager::Loader::~Loader() {
@@ -320,7 +320,7 @@
 }
 
 void FetchManager::Loader::didReceiveRedirectTo(const KURL& url) {
-  m_urlList.append(url);
+  m_urlList.push_back(url);
 }
 
 void FetchManager::Loader::didReceiveResponse(
diff --git a/third_party/WebKit/Source/modules/fetch/FetchResponseDataTest.cpp b/third_party/WebKit/Source/modules/fetch/FetchResponseDataTest.cpp
index e39fd700..13a40a8 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchResponseDataTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchResponseDataTest.cpp
@@ -19,7 +19,7 @@
     FetchResponseData* internalResponse = FetchResponseData::create();
     internalResponse->setStatus(200);
     Vector<KURL> urlList;
-    urlList.append(KURL(ParsedURLString, "http://www.example.com"));
+    urlList.push_back(KURL(ParsedURLString, "http://www.example.com"));
     internalResponse->setURLList(urlList);
     internalResponse->headerList()->append("set-cookie", "foo");
     internalResponse->headerList()->append("bar", "bar");
diff --git a/third_party/WebKit/Source/modules/fetch/ResponseTest.cpp b/third_party/WebKit/Source/modules/fetch/ResponseTest.cpp
index ef5253d..4d79646 100644
--- a/third_party/WebKit/Source/modules/fetch/ResponseTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/ResponseTest.cpp
@@ -38,7 +38,7 @@
                  {"foo", "bar"},
                  {0, 0}};
   Vector<WebURL> urlList;
-  urlList.append(url);
+  urlList.push_back(url);
   std::unique_ptr<WebServiceWorkerResponse> webResponse =
       WTF::makeUnique<WebServiceWorkerResponse>();
   webResponse->setURLList(urlList);
@@ -58,7 +58,7 @@
 
   FetchResponseData* fetchResponseData = FetchResponseData::create();
   Vector<KURL> urlList;
-  urlList.append(url);
+  urlList.push_back(url);
   fetchResponseData->setURLList(urlList);
   Response* response = Response::create(&page->document(), fetchResponseData);
   ASSERT(response);
@@ -228,7 +228,7 @@
   FetchResponseData* fetchResponseData =
       FetchResponseData::createWithBuffer(buffer);
   Vector<KURL> urlList;
-  urlList.append(KURL(ParsedURLString, "http://www.response.com"));
+  urlList.push_back(KURL(ParsedURLString, "http://www.response.com"));
   fetchResponseData->setURLList(urlList);
   Response* response =
       Response::create(scope.getExecutionContext(), fetchResponseData);
@@ -242,7 +242,7 @@
   FetchResponseData* fetchResponseData =
       FetchResponseData::createWithBuffer(buffer);
   Vector<KURL> urlList;
-  urlList.append(KURL(ParsedURLString, "http://www.response.com"));
+  urlList.push_back(KURL(ParsedURLString, "http://www.response.com"));
   fetchResponseData->setURLList(urlList);
   fetchResponseData = fetchResponseData->createBasicFilteredResponse();
   Response* response =
@@ -257,7 +257,7 @@
   FetchResponseData* fetchResponseData =
       FetchResponseData::createWithBuffer(buffer);
   Vector<KURL> urlList;
-  urlList.append(KURL(ParsedURLString, "http://www.response.com"));
+  urlList.push_back(KURL(ParsedURLString, "http://www.response.com"));
   fetchResponseData->setURLList(urlList);
   fetchResponseData = fetchResponseData->createCORSFilteredResponse();
   Response* response =
@@ -272,7 +272,7 @@
   FetchResponseData* fetchResponseData =
       FetchResponseData::createWithBuffer(buffer);
   Vector<KURL> urlList;
-  urlList.append(KURL(ParsedURLString, "http://www.response.com"));
+  urlList.push_back(KURL(ParsedURLString, "http://www.response.com"));
   fetchResponseData->setURLList(urlList);
   fetchResponseData = fetchResponseData->createOpaqueFilteredResponse();
   Response* response =
@@ -289,7 +289,7 @@
   FetchResponseData* fetchResponseData =
       FetchResponseData::createWithBuffer(buffer);
   Vector<KURL> urlList;
-  urlList.append(KURL(ParsedURLString, "http://www.response.com"));
+  urlList.push_back(KURL(ParsedURLString, "http://www.response.com"));
   fetchResponseData->setURLList(urlList);
   Response* response =
       Response::create(scope.getExecutionContext(), fetchResponseData);
diff --git a/third_party/WebKit/Source/modules/fetch/testing/InternalsFetch.cpp b/third_party/WebKit/Source/modules/fetch/testing/InternalsFetch.cpp
index ef71278f..9182716 100644
--- a/third_party/WebKit/Source/modules/fetch/testing/InternalsFetch.cpp
+++ b/third_party/WebKit/Source/modules/fetch/testing/InternalsFetch.cpp
@@ -16,7 +16,7 @@
   Vector<String> urlList;
   urlList.reserveCapacity(response->internalURLList().size());
   for (const auto& url : response->internalURLList())
-    urlList.append(url);
+    urlList.push_back(url);
   return urlList;
 }
 
diff --git a/third_party/WebKit/Source/modules/fetch/testing/WorkerInternalsFetch.cpp b/third_party/WebKit/Source/modules/fetch/testing/WorkerInternalsFetch.cpp
index 42c60e50..cf17d14 100644
--- a/third_party/WebKit/Source/modules/fetch/testing/WorkerInternalsFetch.cpp
+++ b/third_party/WebKit/Source/modules/fetch/testing/WorkerInternalsFetch.cpp
@@ -17,7 +17,7 @@
   Vector<String> urlList;
   urlList.reserveCapacity(response->internalURLList().size());
   for (const auto& url : response->internalURLList())
-    urlList.append(url);
+    urlList.push_back(url);
   return urlList;
 }
 
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFilePath.cpp b/third_party/WebKit/Source/modules/filesystem/DOMFilePath.cpp
index 6b9f64b..50a5b0e9 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFilePath.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFilePath.cpp
@@ -91,7 +91,7 @@
         canonicalized.pop_back();
       continue;
     }
-    canonicalized.append(components[i]);
+    canonicalized.push_back(components[i]);
   }
   if (canonicalized.isEmpty())
     return DOMFilePath::root;
diff --git a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
index 769aea17..99752df6 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
@@ -219,12 +219,13 @@
 void EntriesCallbacks::didReadDirectoryEntry(const String& name,
                                              bool isDirectory) {
   if (isDirectory)
-    m_entries.append(
+    m_entries.push_back(
         DirectoryEntry::create(m_directoryReader->filesystem(),
                                DOMFilePath::append(m_basePath, name)));
   else
-    m_entries.append(FileEntry::create(m_directoryReader->filesystem(),
-                                       DOMFilePath::append(m_basePath, name)));
+    m_entries.push_back(
+        FileEntry::create(m_directoryReader->filesystem(),
+                          DOMFilePath::append(m_basePath, name)));
 }
 
 void EntriesCallbacks::didReadDirectoryEntries(bool hasMore) {
diff --git a/third_party/WebKit/Source/modules/geolocation/Geolocation.cpp b/third_party/WebKit/Source/modules/geolocation/Geolocation.cpp
index 98272a4a..3f0f768d 100644
--- a/third_party/WebKit/Source/modules/geolocation/Geolocation.cpp
+++ b/third_party/WebKit/Source/modules/geolocation/Geolocation.cpp
@@ -363,9 +363,9 @@
   for (GeoNotifier* notifier : notifiers) {
     if (notifier->useCachedPosition()) {
       if (cached)
-        cached->append(notifier);
+        cached->push_back(notifier);
     } else
-      nonCached.append(notifier);
+      nonCached.push_back(notifier);
   }
   notifiers.swap(nonCached);
 }
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
index d07159f..bdd04c2 100644
--- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
+++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
@@ -180,7 +180,7 @@
       auto mojoPoint = media::mojom::blink::Point2D::New();
       mojoPoint->x = point.x();
       mojoPoint->y = point.y();
-      settings->points_of_interest.append(std::move(mojoPoint));
+      settings->points_of_interest.push_back(std::move(mojoPoint));
     }
   }
   settings->has_color_temperature = photoSettings.hasColorTemperature();
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
index da44d0a..39af221 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
@@ -387,7 +387,7 @@
           NotFoundError, "One of the specified object stores was not found.");
       return nullptr;
     }
-    objectStoreIds.append(objectStoreId);
+    objectStoreIds.push_back(objectStoreId);
   }
 
   WebIDBTransactionMode mode = IDBTransaction::stringToMode(modeString);
@@ -476,7 +476,7 @@
   EventQueue* eventQueue = getExecutionContext()->getEventQueue();
   event->setTarget(this);
   eventQueue->enqueueEvent(event);
-  m_enqueuedEvents.append(event);
+  m_enqueuedEvents.push_back(event);
 }
 
 DispatchEventResult IDBDatabase::dispatchEventInternal(Event* event) {
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBKey.h b/third_party/WebKit/Source/modules/indexeddb/IDBKey.h
index 61189e8..cbbf32c 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBKey.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBKey.h
@@ -70,7 +70,7 @@
         }
       }
       if (!skip) {
-        result.append(array[i]);
+        result.push_back(array[i]);
       }
     }
     IDBKey* idbKey = new IDBKey(result);
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.cpp
index e071880..d27ea037 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.cpp
@@ -144,7 +144,7 @@
     case WebIDBKeyPathTypeArray:
       m_type = ArrayType;
       for (size_t i = 0, size = keyPath.array().size(); i < size; ++i)
-        m_array.append(keyPath.array()[i]);
+        m_array.push_back(keyPath.array()[i]);
       return;
   }
   ASSERT_NOT_REACHED();
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBKeyPathTest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBKeyPathTest.cpp
index 89a4293f..e23129f 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBKeyPathTest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBKeyPathTest.cpp
@@ -61,16 +61,16 @@
 TEST(IDBKeyPathTest, ValidKeyPath1) {
   Vector<String> expected;
   String keyPath("foo");
-  expected.append(String("foo"));
+  expected.push_back(String("foo"));
   checkKeyPath(keyPath, expected, IDBKeyPathParseErrorNone);
 }
 
 TEST(IDBKeyPathTest, ValidKeyPath2) {
   Vector<String> expected;
   String keyPath("foo.bar.baz");
-  expected.append(String("foo"));
-  expected.append(String("bar"));
-  expected.append(String("baz"));
+  expected.push_back(String("foo"));
+  expected.push_back(String("bar"));
+  expected.push_back(String("baz"));
   checkKeyPath(keyPath, expected, IDBKeyPathParseErrorNone);
 }
 
@@ -89,28 +89,28 @@
 TEST(IDBKeyPathTest, InvalidKeyPath2) {
   Vector<String> expected;
   String keyPath("foo bar baz");
-  expected.append(String("foo"));
+  expected.push_back(String("foo"));
   checkKeyPath(keyPath, expected, IDBKeyPathParseErrorIdentifier);
 }
 
 TEST(IDBKeyPathTest, InvalidKeyPath3) {
   Vector<String> expected;
   String keyPath("foo .bar .baz");
-  expected.append(String("foo"));
+  expected.push_back(String("foo"));
   checkKeyPath(keyPath, expected, IDBKeyPathParseErrorIdentifier);
 }
 
 TEST(IDBKeyPathTest, InvalidKeyPath4) {
   Vector<String> expected;
   String keyPath("foo. bar. baz");
-  expected.append(String("foo"));
+  expected.push_back(String("foo"));
   checkKeyPath(keyPath, expected, IDBKeyPathParseErrorIdentifier);
 }
 
 TEST(IDBKeyPathTest, InvalidKeyPath5) {
   Vector<String> expected;
   String keyPath("foo..bar..baz");
-  expected.append(String("foo"));
+  expected.push_back(String("foo"));
   checkKeyPath(keyPath, expected, IDBKeyPathParseErrorIdentifier);
 }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
index b8ce139..296f25d 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
@@ -326,14 +326,14 @@
     if (!indexKey->isValid())
       return;
 
-    indexKeys->append(indexKey);
+    indexKeys->push_back(indexKey);
   } else {
     DCHECK(indexMetadata.multiEntry);
     DCHECK_EQ(indexKey->getType(), IDBKey::ArrayType);
     indexKey = IDBKey::createMultiEntryArray(indexKey->array());
 
     for (size_t i = 0; i < indexKey->array().size(); ++i)
-      indexKeys->append(indexKey->array()[i]);
+      indexKeys->push_back(indexKey->array()[i]);
   }
 }
 
@@ -502,8 +502,8 @@
           deserializeScriptValue(scriptState, serializedValue.get(), &blobInfo);
     IndexKeys keys;
     generateIndexKeysForValue(scriptState->isolate(), *it.value, clone, &keys);
-    indexIds.append(it.key);
-    indexKeys.append(keys);
+    indexIds.push_back(it.key);
+    indexKeys.push_back(keys);
   }
 
   IDBRequest* request =
@@ -665,7 +665,7 @@
       cursor = cursorAny->idbCursorWithValue();
 
     Vector<int64_t> indexIds;
-    indexIds.append(indexMetadata().id);
+    indexIds.push_back(indexMetadata().id);
     if (cursor && !cursor->isDeleted()) {
       cursor->continueFunction(nullptr, nullptr, ASSERT_NO_EXCEPTION);
 
@@ -677,7 +677,7 @@
                                 value, &indexKeys);
 
       HeapVector<IndexKeys> indexKeysList;
-      indexKeysList.append(indexKeys);
+      indexKeysList.push_back(indexKeys);
 
       m_database->backend()->setIndexKeys(m_transactionId, m_objectStoreId,
                                           primaryKey, indexIds, indexKeysList);
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp
index fed28f8..0d026f1 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp
@@ -89,7 +89,7 @@
   Vector<int32_t> observerIdsToRemove;
   for (const auto& it : m_observerIds) {
     if (it.value == database)
-      observerIdsToRemove.append(it.key);
+      observerIdsToRemove.push_back(it.key);
   }
   m_observerIds.removeAll(observerIdsToRemove);
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.cpp
index f3bde6f..5e80fe6 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObserverChanges.cpp
@@ -51,7 +51,8 @@
     m_records
         .add(observations[idx].objectStoreId,
              HeapVector<Member<IDBObservation>>())
-        .storedValue->value.append(IDBObservation::create(observations[idx]));
+        .storedValue->value.push_back(
+            IDBObservation::create(observations[idx]));
 }
 
 DEFINE_TRACE(IDBObserverChanges) {
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
index d1e768d5..84199728 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
@@ -431,14 +431,14 @@
   dequeueEvent(event);
 
   HeapVector<Member<EventTarget>> targets;
-  targets.append(this);
+  targets.push_back(this);
   if (m_transaction && !m_preventPropagation) {
-    targets.append(m_transaction);
+    targets.push_back(m_transaction);
     // If there ever are events that are associated with a database but
     // that do not have a transaction, then this will not work and we need
     // this object to actually hold a reference to the database (to ensure
     // it stays alive).
-    targets.append(m_transaction->db());
+    targets.push_back(m_transaction->db());
   }
 
   // Cursor properties should not be updated until the success event is being
@@ -546,7 +546,7 @@
   // in which case these must be cancelled. If the events not dispatched for
   // other reasons they must be removed from this list via dequeueEvent().
   if (eventQueue->enqueueEvent(event))
-    m_enqueuedEvents.append(event);
+    m_enqueuedEvents.push_back(event);
 }
 
 void IDBRequest::dequeueEvent(Event* event) {
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
index 7efb5056..9ed76a2 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
@@ -239,7 +239,7 @@
         m_database->metadata().objectStores.get(objectStoreId);
     DCHECK(metadata.get());
     DCHECK_EQ(metadata->name, name);
-    m_deletedObjectStores.append(std::move(metadata));
+    m_deletedObjectStores.push_back(std::move(metadata));
   } else {
     IDBObjectStore* objectStore = it->value;
     m_objectStoreMap.remove(name);
@@ -306,7 +306,7 @@
     return;
   }
 
-  m_deletedIndexes.append(index);
+  m_deletedIndexes.push_back(index);
 }
 
 void IDBTransaction::setActive(bool active) {
@@ -468,8 +468,8 @@
   m_state = Finished;
 
   HeapVector<Member<EventTarget>> targets;
-  targets.append(this);
-  targets.append(db());
+  targets.push_back(this);
+  targets.push_back(db());
 
   // FIXME: When we allow custom event dispatching, this will probably need to
   // change.
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBValue.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBValue.cpp
index 6fa0d2b..279a4eb 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBValue.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBValue.cpp
@@ -28,7 +28,7 @@
       m_keyPath(keyPath) {
   for (size_t i = 0; i < webBlobInfo.size(); ++i) {
     const WebBlobInfo& info = (*m_blobInfo)[i] = webBlobInfo[i];
-    m_blobData->append(
+    m_blobData->push_back(
         BlobDataHandle::create(info.uuid(), info.type(), info.size()));
   }
 }
@@ -44,7 +44,7 @@
       m_keyPath(keyPath) {
   for (size_t i = 0; i < value->m_blobInfo->size(); ++i) {
     const WebBlobInfo& info = (*m_blobInfo)[i] = value->m_blobInfo->at(i);
-    m_blobData->append(
+    m_blobData->push_back(
         BlobDataHandle::create(info.uuid(), info.type(), info.size()));
   }
 }
@@ -69,7 +69,7 @@
   Vector<String> uuids;
   uuids.reserveCapacity(m_blobInfo->size());
   for (const auto& info : *m_blobInfo)
-    uuids.append(info.uuid());
+    uuids.push_back(info.uuid());
   return uuids;
 }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp
index f7548fd8..6fb2388 100644
--- a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp
@@ -434,7 +434,7 @@
     IDBKey::KeyArray keyArray;
     auto array = key->getArray(nullptr);
     for (size_t i = 0; array && i < array->length(); ++i)
-      keyArray.append(idbKeyFromInspectorObject(array->get(i)));
+      keyArray.push_back(idbKeyFromInspectorObject(array->get(i)));
     idbKey = IDBKey::createArray(keyArray);
   } else {
     return nullptr;
diff --git a/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp b/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp
index 5e4e59d..a2937c7 100644
--- a/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp
@@ -89,7 +89,7 @@
 
   Vector<String> stringList;
   for (size_t i = 0; i < webStringList.size(); ++i)
-    stringList.append(webStringList[i]);
+    stringList.push_back(webStringList[i]);
   InspectorInstrumentation::AsyncTask asyncTask(
       m_request->getExecutionContext(), this);
   m_request->onSuccess(stringList);
diff --git a/third_party/WebKit/Source/modules/installedapp/NavigatorInstalledApp.cpp b/third_party/WebKit/Source/modules/installedapp/NavigatorInstalledApp.cpp
index 4ba29c0..0e998ff3 100644
--- a/third_party/WebKit/Source/modules/installedapp/NavigatorInstalledApp.cpp
+++ b/third_party/WebKit/Source/modules/installedapp/NavigatorInstalledApp.cpp
@@ -60,7 +60,7 @@
       const WebVector<WebRelatedApplication>& webInfo) {
     HeapVector<Member<RelatedApplication>> applications;
     for (const auto& webApplication : webInfo)
-      applications.append(RelatedApplication::create(
+      applications.push_back(RelatedApplication::create(
           webApplication.platform, webApplication.url, webApplication.id));
     return applications;
   }
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/HTMLCanvasElementCapture.cpp b/third_party/WebKit/Source/modules/mediacapturefromelement/HTMLCanvasElementCapture.cpp
index 10888d0..7a77daf 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/HTMLCanvasElementCapture.cpp
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/HTMLCanvasElementCapture.cpp
@@ -79,7 +79,7 @@
   canvasTrack->requestFrame();
 
   MediaStreamTrackVector tracks;
-  tracks.append(canvasTrack);
+  tracks.push_back(canvasTrack);
   return MediaStream::create(element.getExecutionContext(), tracks);
 }
 
diff --git a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp
index b06aaac..0ee0ca5 100644
--- a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp
+++ b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp
@@ -377,7 +377,7 @@
 }
 
 void MediaRecorder::scheduleDispatchEvent(Event* event) {
-  m_scheduledEvents.append(event);
+  m_scheduledEvents.push_back(event);
 
   m_dispatchScheduledEventRunner->runAsync();
 }
diff --git a/third_party/WebKit/Source/modules/mediasession/MediaMetadata.cpp b/third_party/WebKit/Source/modules/mediasession/MediaMetadata.cpp
index a3b93e1c..93c2aa8 100644
--- a/third_party/WebKit/Source/modules/mediasession/MediaMetadata.cpp
+++ b/third_party/WebKit/Source/modules/mediasession/MediaMetadata.cpp
@@ -24,7 +24,7 @@
   m_artist = metadata.artist();
   m_album = metadata.album();
   for (const auto& image : metadata.artwork())
-    m_artwork.append(MediaImage::create(context, image));
+    m_artwork.push_back(MediaImage::create(context, image));
 }
 
 String MediaMetadata::title() const {
diff --git a/third_party/WebKit/Source/modules/mediasession/MediaMetadataSanitizer.cpp b/third_party/WebKit/Source/modules/mediasession/MediaMetadataSanitizer.cpp
index d079eee..f26115e1 100644
--- a/third_party/WebKit/Source/modules/mediasession/MediaMetadataSanitizer.cpp
+++ b/third_party/WebKit/Source/modules/mediasession/MediaMetadataSanitizer.cpp
@@ -74,7 +74,7 @@
   mojoImage->type = image->type().left(kMaxImageTypeLength);
   for (const auto& webSize :
        WebIconSizesParser::parseIconSizes(image->sizes())) {
-    mojoImage->sizes.append(webSize);
+    mojoImage->sizes.push_back(webSize);
     if (mojoImage->sizes.size() == kMaxNumberOfImageSizes) {
       context->addConsoleMessage(ConsoleMessage::create(
           JSMessageSource, WarningMessageLevel,
@@ -105,7 +105,7 @@
     blink::mojom::blink::MediaImagePtr mojoImage =
         sanitizeMediaImageAndConvertToMojo(image.get(), context);
     if (!mojoImage.is_null())
-      mojoMetadata->artwork.append(std::move(mojoImage));
+      mojoMetadata->artwork.push_back(std::move(mojoImage));
     if (mojoMetadata->artwork.size() == kMaxNumberOfMediaImages) {
       context->addConsoleMessage(ConsoleMessage::create(
           JSMessageSource, WarningMessageLevel,
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
index c78480d1..d5b9798 100644
--- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
@@ -772,11 +772,11 @@
   for (const MediaTrackInfo& trackInfo : newTracks) {
     const TrackBase* track = nullptr;
     if (trackInfo.trackType == WebMediaPlayer::AudioTrack) {
-      newAudioTracks.append(trackInfo);
+      newAudioTracks.push_back(trackInfo);
       if (m_firstInitializationSegmentReceived)
         track = findExistingTrackById(audioTracks(), trackInfo.id);
     } else if (trackInfo.trackType == WebMediaPlayer::VideoTrack) {
-      newVideoTracks.append(trackInfo);
+      newVideoTracks.push_back(trackInfo);
       if (m_firstInitializationSegmentReceived)
         track = findExistingTrackById(videoTracks(), trackInfo.id);
     } else {
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBufferList.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBufferList.cpp
index 1394865a..535b694 100644
--- a/third_party/WebKit/Source/modules/mediasource/SourceBufferList.cpp
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBufferList.cpp
@@ -44,7 +44,7 @@
 SourceBufferList::~SourceBufferList() {}
 
 void SourceBufferList::add(SourceBuffer* buffer) {
-  m_list.append(buffer);
+  m_list.push_back(buffer);
   scheduleEvent(EventTypeNames::addsourcebuffer);
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp b/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp
index 316c3b7c..faaecad 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp
@@ -164,7 +164,7 @@
     return false;
 
   for (const auto& iter : mandatoryConstraintsHashMap)
-    mandatory.append(NameValueStringConstraint(iter.key, iter.value));
+    mandatory.push_back(NameValueStringConstraint(iter.key, iter.value));
   return true;
 }
 
@@ -183,7 +183,7 @@
   bool ok = DictionaryHelper::get(constraint, key, value);
   if (!ok)
     return false;
-  optionalConstraintsVector.append(NameValueStringConstraint(key, value));
+  optionalConstraintsVector.push_back(NameValueStringConstraint(key, value));
   return true;
 }
 
@@ -469,7 +469,7 @@
     parseOldStyleNames(context, elementAsList, false, advancedElement,
                        ignoredErrorState);
     if (!advancedElement.isEmpty())
-      advancedVector.append(advancedElement);
+      advancedVector.push_back(advancedElement);
   }
   constraints.initialize(basic, advancedVector);
   return constraints;
@@ -684,7 +684,7 @@
       WebMediaTrackConstraintSet advancedElement;
       copyConstraintSet(element, NakedValueDisposition::kTreatAsExact,
                         advancedElement);
-      advancedBuffer.append(advancedElement);
+      advancedBuffer.push_back(advancedElement);
     }
   }
   constraints.initialize(constraintBuffer, advancedBuffer);
@@ -813,7 +813,7 @@
   if (input.size() > 1) {
     Vector<String> buffer;
     for (const auto& scanner : input)
-      buffer.append(scanner);
+      buffer.push_back(scanner);
     theStrings.setStringSequence(buffer);
   } else if (input.size() > 0) {
     theStrings.setString(input[0]);
@@ -831,7 +831,7 @@
     if (inputBuffer.size() > 1) {
       Vector<String> buffer;
       for (const auto& scanner : inputBuffer)
-        buffer.append(scanner);
+        buffer.push_back(scanner);
       outputUnion.setStringSequence(buffer);
     } else if (inputBuffer.size() > 0) {
       outputUnion.setString(inputBuffer[0]);
@@ -910,7 +910,7 @@
   for (const auto& it : input.advanced()) {
     MediaTrackConstraintSet element;
     convertConstraintSet(it, NakedValueDisposition::kTreatAsExact, element);
-    advancedVector.append(element);
+    advancedVector.push_back(element);
   }
   if (!advancedVector.isEmpty())
     output.setAdvanced(advancedVector);
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaDevices.cpp b/third_party/WebKit/Source/modules/mediastream/MediaDevices.cpp
index 75113f2..79c0610 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaDevices.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaDevices.cpp
@@ -197,7 +197,7 @@
 }
 
 void MediaDevices::scheduleDispatchEvent(Event* event) {
-  m_scheduledEvents.append(event);
+  m_scheduledEvents.push_back(event);
   m_dispatchScheduledEventRunner->runAsync();
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStream.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStream.cpp
index 5faaad6..ac17c67 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStream.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStream.cpp
@@ -51,7 +51,7 @@
 
   MediaStreamSource* source = track->component()->source();
   if (!containsSource(trackVector, source))
-    trackVector.append(track);
+    trackVector.push_back(track);
 }
 
 MediaStream* MediaStream::create(ExecutionContext* context) {
@@ -107,7 +107,7 @@
     MediaStreamTrack* newTrack =
         MediaStreamTrack::create(context, m_descriptor->audioComponent(i));
     newTrack->registerMediaStream(this);
-    m_audioTracks.append(newTrack);
+    m_audioTracks.push_back(newTrack);
   }
 
   size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents();
@@ -116,7 +116,7 @@
     MediaStreamTrack* newTrack =
         MediaStreamTrack::create(context, m_descriptor->videoComponent(i));
     newTrack->registerMediaStream(this);
-    m_videoTracks.append(newTrack);
+    m_videoTracks.push_back(newTrack);
   }
 
   if (emptyOrOnlyEndedTracks()) {
@@ -135,11 +135,11 @@
   MediaStreamTrackVector::const_iterator iter;
   for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) {
     (*iter)->registerMediaStream(this);
-    audioComponents.append((*iter)->component());
+    audioComponents.push_back((*iter)->component());
   }
   for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) {
     (*iter)->registerMediaStream(this);
-    videoComponents.append((*iter)->component());
+    videoComponents.push_back((*iter)->component());
   }
 
   m_descriptor =
@@ -177,10 +177,10 @@
   MediaStreamTrackVector tracks;
   for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin();
        iter != m_audioTracks.end(); ++iter)
-    tracks.append(iter->get());
+    tracks.push_back(iter->get());
   for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin();
        iter != m_videoTracks.end(); ++iter)
-    tracks.append(iter->get());
+    tracks.push_back(iter->get());
   return tracks;
 }
 
@@ -197,10 +197,10 @@
 
   switch (track->component()->source()->type()) {
     case MediaStreamSource::TypeAudio:
-      m_audioTracks.append(track);
+      m_audioTracks.push_back(track);
       break;
     case MediaStreamSource::TypeVideo:
-      m_videoTracks.append(track);
+      m_videoTracks.push_back(track);
       break;
   }
   track->registerMediaStream(this);
@@ -271,10 +271,10 @@
   MediaStreamTrackVector tracks;
   for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin();
        iter != m_audioTracks.end(); ++iter)
-    tracks.append((*iter)->clone(context));
+    tracks.push_back((*iter)->clone(context));
   for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin();
        iter != m_videoTracks.end(); ++iter)
-    tracks.append((*iter)->clone(context));
+    tracks.push_back((*iter)->clone(context));
   return MediaStream::create(context, tracks);
 }
 
@@ -330,10 +330,10 @@
       MediaStreamTrack::create(m_executionContext, component);
   switch (component->source()->type()) {
     case MediaStreamSource::TypeAudio:
-      m_audioTracks.append(track);
+      m_audioTracks.push_back(track);
       break;
     case MediaStreamSource::TypeVideo:
-      m_videoTracks.append(track);
+      m_videoTracks.push_back(track);
       break;
   }
   track->registerMediaStream(this);
@@ -388,7 +388,7 @@
 }
 
 void MediaStream::scheduleDispatchEvent(Event* event) {
-  m_scheduledEvents.append(event);
+  m_scheduledEvents.push_back(event);
 
   if (!m_scheduledEventTimer.isActive())
     m_scheduledEventTimer.startOneShot(0, BLINK_FROM_HERE);
diff --git a/third_party/WebKit/Source/modules/nfc/NFC.cpp b/third_party/WebKit/Source/modules/nfc/NFC.cpp
index b2321e9..dc55d6e 100644
--- a/third_party/WebKit/Source/modules/nfc/NFC.cpp
+++ b/third_party/WebKit/Source/modules/nfc/NFC.cpp
@@ -165,7 +165,7 @@
 struct TypeConverter<NFCMessagePtr, WTF::String> {
   static NFCMessagePtr Convert(const WTF::String& string) {
     NFCMessagePtr message = NFCMessage::New();
-    message->data.append(NFCRecord::From(string));
+    message->data.push_back(NFCRecord::From(string));
     return message;
   }
 };
@@ -269,7 +269,7 @@
 struct TypeConverter<NFCMessagePtr, blink::DOMArrayBuffer*> {
   static NFCMessagePtr Convert(blink::DOMArrayBuffer* buffer) {
     NFCMessagePtr message = NFCMessage::New();
-    message->data.append(NFCRecord::From(buffer));
+    message->data.push_back(NFCRecord::From(buffer));
     return message;
   }
 };
@@ -553,7 +553,7 @@
   nfcMessage.setURL(message->url);
   blink::HeapVector<NFCRecord> records;
   for (size_t i = 0; i < message->data.size(); ++i)
-    records.append(toNFCRecord(scriptState, message->data[i]));
+    records.push_back(toNFCRecord(scriptState, message->data[i]));
   nfcMessage.setData(records);
   return nfcMessage;
 }
diff --git a/third_party/WebKit/Source/modules/notifications/NotificationData.cpp b/third_party/WebKit/Source/modules/notifications/NotificationData.cpp
index 1f3fa0e..4554db4 100644
--- a/third_party/WebKit/Source/modules/notifications/NotificationData.cpp
+++ b/third_party/WebKit/Source/modules/notifications/NotificationData.cpp
@@ -128,7 +128,7 @@
     if (action.hasIcon() && !action.icon().isEmpty())
       webAction.icon = completeURL(executionContext, action.icon());
 
-    actions.append(webAction);
+    actions.push_back(webAction);
   }
 
   webData.actions = actions;
diff --git a/third_party/WebKit/Source/modules/notifications/NotificationDataTest.cpp b/third_party/WebKit/Source/modules/notifications/NotificationDataTest.cpp
index c565426..eb264fc8 100644
--- a/third_party/WebKit/Source/modules/notifications/NotificationDataTest.cpp
+++ b/third_party/WebKit/Source/modules/notifications/NotificationDataTest.cpp
@@ -57,7 +57,7 @@
 TEST_F(NotificationDataTest, ReflectProperties) {
   Vector<unsigned> vibrationPattern;
   for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibration); ++i)
-    vibrationPattern.append(kNotificationVibration[i]);
+    vibrationPattern.push_back(kNotificationVibration[i]);
 
   UnsignedLongOrUnsignedLongSequence vibrationSequence;
   vibrationSequence.setUnsignedLongSequence(vibrationPattern);
@@ -71,7 +71,7 @@
     action.setIcon(kNotificationActionIcon);
     action.setPlaceholder(kNotificationActionPlaceholder);
 
-    actions.append(action);
+    actions.push_back(action);
   }
 
   NotificationOptions options;
@@ -129,7 +129,7 @@
 TEST_F(NotificationDataTest, SilentNotificationWithVibration) {
   Vector<unsigned> vibrationPattern;
   for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibration); ++i)
-    vibrationPattern.append(kNotificationVibration[i]);
+    vibrationPattern.push_back(kNotificationVibration[i]);
 
   UnsignedLongOrUnsignedLongSequence vibrationSequence;
   vibrationSequence.setUnsignedLongSequence(vibrationPattern);
@@ -152,7 +152,7 @@
   NotificationAction action;
   action.setType("button");
   action.setPlaceholder("I'm afraid I can't do that...");
-  actions.append(action);
+  actions.push_back(action);
 
   NotificationOptions options;
   options.setActions(actions);
@@ -188,7 +188,7 @@
     action.setAction(kNotificationActionAction);
     action.setTitle(kNotificationActionTitle);
     action.setIcon(kNotificationIconInvalid);
-    actions.append(action);
+    actions.push_back(action);
   }
 
   NotificationOptions options;
@@ -213,7 +213,7 @@
   Vector<unsigned> unnormalizedPattern;
   for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibrationUnnormalized);
        ++i)
-    unnormalizedPattern.append(kNotificationVibrationUnnormalized[i]);
+    unnormalizedPattern.push_back(kNotificationVibrationUnnormalized[i]);
 
   UnsignedLongOrUnsignedLongSequence vibrationSequence;
   vibrationSequence.setUnsignedLongSequence(unnormalizedPattern);
@@ -229,7 +229,7 @@
   Vector<int> normalizedPattern;
   for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibrationNormalized);
        ++i)
-    normalizedPattern.append(kNotificationVibrationNormalized[i]);
+    normalizedPattern.push_back(kNotificationVibrationNormalized[i]);
 
   ASSERT_EQ(normalizedPattern.size(), notificationData.vibrate.size());
   for (size_t i = 0; i < normalizedPattern.size(); ++i)
@@ -279,7 +279,7 @@
     action.setAction(String::number(i));
     action.setTitle(kNotificationActionTitle);
 
-    actions.append(action);
+    actions.push_back(action);
   }
 
   NotificationOptions options;
diff --git a/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoader.cpp b/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoader.cpp
index fff339b..6602ec2e 100644
--- a/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoader.cpp
+++ b/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoader.cpp
@@ -87,7 +87,7 @@
   }
 
   NotificationImageLoader* imageLoader = new NotificationImageLoader(type);
-  m_imageLoaders.append(imageLoader);
+  m_imageLoaders.push_back(imageLoader);
   imageLoader->start(executionContext, url, std::move(imageCallback));
 }
 
diff --git a/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp b/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
index c213a891..84dbbf26a 100644
--- a/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
+++ b/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
@@ -41,7 +41,7 @@
     HeapVector<Member<Notification>> notifications;
     for (const WebPersistentNotificationInfo& notificationInfo :
          notificationInfos)
-      notifications.append(Notification::create(
+      notifications.push_back(Notification::create(
           resolver->getExecutionContext(), notificationInfo.notificationId,
           notificationInfo.data, true /* showing */));
 
diff --git a/third_party/WebKit/Source/modules/payments/PaymentAddressTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentAddressTest.cpp
index 15d52634..f8919759 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentAddressTest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentAddressTest.cpp
@@ -14,9 +14,9 @@
   payments::mojom::blink::PaymentAddressPtr input =
       payments::mojom::blink::PaymentAddress::New();
   input->country = "US";
-  input->address_line.append("340 Main St");
-  input->address_line.append("BIN1");
-  input->address_line.append("First floor");
+  input->address_line.push_back("340 Main St");
+  input->address_line.push_back("BIN1");
+  input->address_line.push_back("First floor");
   input->region = "CA";
   input->city = "Los Angeles";
   input->dependent_locality = "Venice";
diff --git a/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp b/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
index 49a31af2..fd96130 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
@@ -44,7 +44,7 @@
     output->icon = input.hasIcon() ? input.icon() : WTF::String();
     if (input.hasOptions()) {
       for (size_t i = 0; i < input.options().size(); ++i) {
-        output->options.append(PaymentAppOption::From(input.options()[i]));
+        output->options.push_back(PaymentAppOption::From(input.options()[i]));
       }
     }
     return output;
@@ -59,7 +59,7 @@
     output.setIcon(input->icon);
     blink::HeapVector<blink::PaymentAppOption> options;
     for (const auto& option : input->options) {
-      options.append(mojo::ConvertTo<blink::PaymentAppOption>(option));
+      options.push_back(mojo::ConvertTo<blink::PaymentAppOption>(option));
     }
     output.setOptions(options);
     return output;
@@ -75,7 +75,7 @@
     output.setId(input->id);
     Vector<WTF::String> enabledMethods;
     for (const auto& method : input->enabled_methods) {
-      enabledMethods.append(method);
+      enabledMethods.push_back(method);
     }
     output.setEnabledMethods(enabledMethods);
     return output;
diff --git a/third_party/WebKit/Source/modules/payments/PaymentAppRequestDataConversion.cpp b/third_party/WebKit/Source/modules/payments/PaymentAppRequestDataConversion.cpp
index 3927d0be..b302ae4b 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentAppRequestDataConversion.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentAppRequestDataConversion.cpp
@@ -40,13 +40,13 @@
   PaymentDetailsModifier modifier;
   Vector<String> supportedMethods;
   for (const auto& webMethod : webModifier.supportedMethods) {
-    supportedMethods.append(webMethod);
+    supportedMethods.push_back(webMethod);
   }
   modifier.setSupportedMethods(supportedMethods);
   modifier.setTotal(toPaymentItem(webModifier.total));
   HeapVector<PaymentItem> additionalDisplayItems;
   for (const auto& webItem : webModifier.additionalDisplayItems) {
-    additionalDisplayItems.append(toPaymentItem(webItem));
+    additionalDisplayItems.push_back(toPaymentItem(webItem));
   }
   modifier.setAdditionalDisplayItems(additionalDisplayItems);
   return modifier;
@@ -73,7 +73,7 @@
   PaymentMethodData methodData;
   Vector<String> supportedMethods;
   for (const auto& method : webMethodData.supportedMethods) {
-    supportedMethods.append(method);
+    supportedMethods.push_back(method);
   }
   methodData.setSupportedMethods(supportedMethods);
   methodData.setData(
@@ -91,13 +91,13 @@
   data.setOrigin(webData.origin);
   HeapVector<PaymentMethodData> methodData;
   for (const auto& md : webData.methodData) {
-    methodData.append(toPaymentMethodData(scriptState, md));
+    methodData.push_back(toPaymentMethodData(scriptState, md));
   }
   data.setMethodData(methodData);
   data.setTotal(toPaymentItem(webData.total));
   HeapVector<PaymentDetailsModifier> modifiers;
   for (const auto& modifier : webData.modifiers) {
-    modifiers.append(toPaymentDetailsModifier(scriptState, modifier));
+    modifiers.push_back(toPaymentDetailsModifier(scriptState, modifier));
   }
   data.setOptionId(webData.optionId);
   return data;
diff --git a/third_party/WebKit/Source/modules/payments/PaymentAppRequestDataConversionTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentAppRequestDataConversionTest.cpp
index 0114ccf7..8587fb9 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentAppRequestDataConversionTest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentAppRequestDataConversionTest.cpp
@@ -35,7 +35,7 @@
   WebPaymentAppRequestData webData;
   webData.origin = WebString::fromUTF8("https://example.com");
   Vector<WebPaymentMethodData> methodData;
-  methodData.append(createWebPaymentMethodDataForTest());
+  methodData.push_back(createWebPaymentMethodDataForTest());
   webData.methodData = WebVector<WebPaymentMethodData>(methodData);
   webData.total = createWebPaymentItemForTest();
   webData.optionId = WebString::fromUTF8("payment-app-id");
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp
index 5878b4d..15d2f3d 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp
@@ -186,7 +186,7 @@
     validateShippingOptionOrPaymentItem(item, exceptionState);
     if (exceptionState.hadException())
       return;
-    output.append(payments::mojom::blink::PaymentItem::From(item));
+    output.push_back(payments::mojom::blink::PaymentItem::From(item));
   }
 }
 
@@ -218,7 +218,8 @@
     if (exceptionState.hadException())
       return;
 
-    output.append(payments::mojom::blink::PaymentShippingOption::From(option));
+    output.push_back(
+        payments::mojom::blink::PaymentShippingOption::From(option));
   }
 }
 
@@ -268,7 +269,7 @@
     for (const String& allowedCardNetwork : androidPay.allowedCardNetworks()) {
       for (size_t i = 0; i < arraysize(kAndroidPayNetwork); ++i) {
         if (allowedCardNetwork == kAndroidPayNetwork[i].name) {
-          output->allowed_card_networks.append(kAndroidPayNetwork[i].code);
+          output->allowed_card_networks.push_back(kAndroidPayNetwork[i].code);
           break;
         }
       }
@@ -299,7 +300,7 @@
       for (const String& key : keys) {
         if (!DictionaryHelper::get(tokenization.parameters(), key, value))
           continue;
-        output->parameters.append(
+        output->parameters.push_back(
             payments::mojom::blink::AndroidPayTokenizationParameter::New());
         output->parameters.back()->key = key;
         output->parameters.back()->value = value;
@@ -341,7 +342,7 @@
   }
 
   for (const PaymentDetailsModifier& modifier : input) {
-    output.append(payments::mojom::blink::PaymentDetailsModifier::New());
+    output.push_back(payments::mojom::blink::PaymentDetailsModifier::New());
     if (modifier.hasTotal()) {
       validateAndConvertTotal(modifier.total(), output.back()->total,
                               exceptionState);
@@ -453,7 +454,7 @@
       return;
     }
 
-    output.append(payments::mojom::blink::PaymentMethodData::New());
+    output.push_back(payments::mojom::blink::PaymentMethodData::New());
     output.back()->supported_methods = paymentMethodData.supportedMethods();
 
     if (paymentMethodData.hasData() && !paymentMethodData.data().isEmpty()) {
diff --git a/third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp
index 278b5494..ed79d3d 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp
@@ -135,9 +135,9 @@
   input->shipping_address->country = "US";
   input->shipping_address->language_code = "en";
   input->shipping_address->script_code = "Latn";
-  input->shipping_address->address_line.append("340 Main St");
-  input->shipping_address->address_line.append("BIN1");
-  input->shipping_address->address_line.append("First floor");
+  input->shipping_address->address_line.push_back("340 Main St");
+  input->shipping_address->address_line.push_back("BIN1");
+  input->shipping_address->address_line.push_back("First floor");
 
   PaymentResponse output(std::move(input), new MockPaymentCompleter);
   ScriptValue jsonObject = output.toJSONForBinding(scope.getScriptState());
diff --git a/third_party/WebKit/Source/modules/payments/PaymentTestHelper.cpp b/third_party/WebKit/Source/modules/payments/PaymentTestHelper.cpp
index 8f7d76a..d4e326b8 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentTestHelper.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentTestHelper.cpp
@@ -186,19 +186,19 @@
 
 v8::Local<v8::Function> PaymentRequestMockFunctionScope::expectCall(
     String* captor) {
-  m_mockFunctions.append(new MockFunction(m_scriptState, captor));
+  m_mockFunctions.push_back(new MockFunction(m_scriptState, captor));
   EXPECT_CALL(*m_mockFunctions.back(), call(testing::_));
   return m_mockFunctions.back()->bind();
 }
 
 v8::Local<v8::Function> PaymentRequestMockFunctionScope::expectCall() {
-  m_mockFunctions.append(new MockFunction(m_scriptState));
+  m_mockFunctions.push_back(new MockFunction(m_scriptState));
   EXPECT_CALL(*m_mockFunctions.back(), call(testing::_));
   return m_mockFunctions.back()->bind();
 }
 
 v8::Local<v8::Function> PaymentRequestMockFunctionScope::expectNoCall() {
-  m_mockFunctions.append(new MockFunction(m_scriptState));
+  m_mockFunctions.push_back(new MockFunction(m_scriptState));
   EXPECT_CALL(*m_mockFunctions.back(), call(testing::_)).Times(0);
   return m_mockFunctions.back()->bind();
 }
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCDTMFSender.cpp b/third_party/WebKit/Source/modules/peerconnection/RTCDTMFSender.cpp
index 36a21af..dfba82d 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCDTMFSender.cpp
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCDTMFSender.cpp
@@ -162,7 +162,7 @@
 }
 
 void RTCDTMFSender::scheduleDispatchEvent(Event* event) {
-  m_scheduledEvents.append(event);
+  m_scheduledEvents.push_back(event);
 
   if (!m_scheduledEventTimer.isActive())
     m_scheduledEventTimer.startOneShot(0, BLINK_FROM_HERE);
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCDataChannel.cpp b/third_party/WebKit/Source/modules/peerconnection/RTCDataChannel.cpp
index ba9ee13..4f9422177 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCDataChannel.cpp
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCDataChannel.cpp
@@ -353,7 +353,7 @@
 }
 
 void RTCDataChannel::scheduleDispatchEvent(Event* event) {
-  m_scheduledEvents.append(event);
+  m_scheduledEvents.push_back(event);
 
   if (!m_scheduledEventTimer.isActive())
     m_scheduledEventTimer.startOneShot(0, BLINK_FROM_HERE);
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCLegacyStatsReport.cpp b/third_party/WebKit/Source/modules/peerconnection/RTCLegacyStatsReport.cpp
index fee5c0a..91299a8 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCLegacyStatsReport.cpp
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCLegacyStatsReport.cpp
@@ -42,7 +42,7 @@
   Vector<String> result;
   for (HashMap<String, String>::const_iterator it = m_stats.begin();
        it != m_stats.end(); ++it) {
-    result.append(it->key);
+    result.push_back(it->key);
   }
   return result;
 }
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
index de940f2e..7163faa7 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
@@ -279,14 +279,14 @@
         UseCounter::count(context, UseCounter::RTCIceServerURLs);
         const StringOrStringSequence& urls = iceServer.urls();
         if (urls.isString()) {
-          urlStrings.append(urls.getAsString());
+          urlStrings.push_back(urls.getAsString());
         } else {
           DCHECK(urls.isStringSequence());
           urlStrings = urls.getAsStringSequence();
         }
       } else if (iceServer.hasURL()) {
         UseCounter::count(context, UseCounter::RTCIceServerURL);
-        urlStrings.append(iceServer.url());
+        urlStrings.push_back(iceServer.url());
       } else {
         exceptionState.throwTypeError("Malformed RTCIceServer");
         return WebRTCConfiguration();
@@ -317,7 +317,7 @@
                                            "required when the URL scheme is "
                                            "\"turn\" or \"turns\".");
         }
-        iceServers.append(WebRTCIceServer{url, username, credential});
+        iceServers.push_back(WebRTCIceServer{url, username, credential});
       }
     }
     webConfiguration.iceServers = iceServers;
@@ -1076,7 +1076,7 @@
     return;
   }
 
-  m_localStreams.append(stream);
+  m_localStreams.push_back(stream);
 
   bool valid = m_peerHandler->addStream(stream->descriptor(), constraints);
   if (!valid)
@@ -1287,7 +1287,7 @@
 
   MediaStream* stream =
       MediaStream::create(getExecutionContext(), remoteStream);
-  m_remoteStreams.append(stream);
+  m_remoteStreams.push_back(stream);
 
   scheduleDispatchEvent(
       MediaStreamEvent::create(EventTypeNames::addstream, stream));
@@ -1421,7 +1421,8 @@
 void RTCPeerConnection::scheduleDispatchEvent(
     Event* event,
     std::unique_ptr<BoolFunction> setupFunction) {
-  m_scheduledEvents.append(new EventWrapper(event, std::move(setupFunction)));
+  m_scheduledEvents.push_back(
+      new EventWrapper(event, std::move(setupFunction)));
 
   m_dispatchScheduledEventRunner->runAsync();
 }
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCStatsResponse.cpp b/third_party/WebKit/Source/modules/peerconnection/RTCStatsResponse.cpp
index 4d1f0765..712e20d 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCStatsResponse.cpp
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCStatsResponse.cpp
@@ -39,8 +39,8 @@
 }
 
 void RTCStatsResponse::addStats(const WebRTCLegacyStats& stats) {
-  m_result.append(RTCLegacyStatsReport::create(stats.id(), stats.type(),
-                                               stats.timestamp()));
+  m_result.push_back(RTCLegacyStatsReport::create(stats.id(), stats.type(),
+                                                  stats.timestamp()));
   m_idmap.add(stats.id(), m_result.size() - 1);
   RTCLegacyStatsReport* report = m_result[m_result.size() - 1].get();
 
diff --git a/third_party/WebKit/Source/modules/permissions/Permissions.cpp b/third_party/WebKit/Source/modules/permissions/Permissions.cpp
index 22a986cf..329a9a2 100644
--- a/third_party/WebKit/Source/modules/permissions/Permissions.cpp
+++ b/third_party/WebKit/Source/modules/permissions/Permissions.cpp
@@ -222,7 +222,7 @@
     }
     if (internalIndex == kNotFound) {
       internalIndex = internalPermissions.size();
-      internalPermissions.append(std::move(descriptor));
+      internalPermissions.push_back(std::move(descriptor));
     }
     callerIndexToInternalIndex[i] = internalIndex;
   }
@@ -242,7 +242,7 @@
   Vector<PermissionDescriptorPtr> internalPermissionsCopy;
   internalPermissionsCopy.reserveCapacity(internalPermissions.size());
   for (const auto& descriptor : internalPermissions)
-    internalPermissionsCopy.append(descriptor->Clone());
+    internalPermissionsCopy.push_back(descriptor->Clone());
 
   service->RequestPermissions(
       std::move(internalPermissions),
@@ -300,7 +300,7 @@
   HeapVector<Member<PermissionStatus>> result;
   result.reserveInitialCapacity(callerIndexToInternalIndex.size());
   for (int internalIndex : callerIndexToInternalIndex) {
-    result.append(PermissionStatus::createAndListen(
+    result.push_back(PermissionStatus::createAndListen(
         resolver->getExecutionContext(), results[internalIndex],
         descriptors[internalIndex]->Clone()));
   }
diff --git a/third_party/WebKit/Source/modules/plugins/PluginOcclusionSupport.cpp b/third_party/WebKit/Source/modules/plugins/PluginOcclusionSupport.cpp
index a738ac0d..ece11f5 100644
--- a/third_party/WebKit/Source/modules/plugins/PluginOcclusionSupport.cpp
+++ b/third_party/WebKit/Source/modules/plugins/PluginOcclusionSupport.cpp
@@ -50,7 +50,7 @@
                            Vector<const LayoutObject*>* roStack) {
   roStack->clear();
   while (ro) {
-    roStack->append(ro);
+    roStack->push_back(ro);
     ro = ro->parent();
   }
 }
@@ -125,8 +125,8 @@
 
 static void addToOcclusions(const LayoutBox* renderer,
                             Vector<IntRect>& occlusions) {
-  occlusions.append(IntRect(roundedIntPoint(renderer->localToAbsolute()),
-                            flooredIntSize(renderer->size())));
+  occlusions.push_back(IntRect(roundedIntPoint(renderer->localToAbsolute()),
+                               flooredIntSize(renderer->size())));
 }
 
 static void addTreeToOcclusions(const LayoutObject* renderer,
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnectionList.cpp b/third_party/WebKit/Source/modules/presentation/PresentationConnectionList.cpp
index dc215aa..a34d915 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationConnectionList.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationConnectionList.cpp
@@ -36,7 +36,7 @@
 
 void PresentationConnectionList::addConnection(
     PresentationConnection* connection) {
-  m_connections.append(connection);
+  m_connections.push_back(connection);
 }
 
 void PresentationConnectionList::dispatchConnectionAvailableEvent(
diff --git a/third_party/WebKit/Source/modules/quota/StorageQuota.cpp b/third_party/WebKit/Source/modules/quota/StorageQuota.cpp
index 1e948b6f..f8d6a2e 100644
--- a/third_party/WebKit/Source/modules/quota/StorageQuota.cpp
+++ b/third_party/WebKit/Source/modules/quota/StorageQuota.cpp
@@ -73,7 +73,7 @@
 Vector<String> StorageQuota::supportedTypes() const {
   Vector<String> types;
   for (size_t i = 0; i < WTF_ARRAY_LENGTH(storageTypeMappings); ++i)
-    types.append(storageTypeMappings[i].name);
+    types.push_back(storageTypeMappings[i].name);
   return types;
 }
 
diff --git a/third_party/WebKit/Source/modules/screen_orientation/ScreenOrientationControllerImpl.cpp b/third_party/WebKit/Source/modules/screen_orientation/ScreenOrientationControllerImpl.cpp
index c9eafbe..064a51a 100644
--- a/third_party/WebKit/Source/modules/screen_orientation/ScreenOrientationControllerImpl.cpp
+++ b/third_party/WebKit/Source/modules/screen_orientation/ScreenOrientationControllerImpl.cpp
@@ -139,7 +139,7 @@
   for (Frame* child = frame()->tree().firstChild(); child;
        child = child->tree().nextSibling()) {
     if (child->isLocalFrame())
-      childFrames.append(toLocalFrame(child));
+      childFrames.push_back(toLocalFrame(child));
   }
 
   // Notify current orientation object.
diff --git a/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp b/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp
index 0aad49f4..ca953a0a 100644
--- a/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp
+++ b/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp
@@ -242,7 +242,7 @@
     std::unique_ptr<Function<void(bool)>> callback,
     bool result) {
   if (result) {
-    m_frequenciesUsed.append(frequency);
+    m_frequenciesUsed.push_back(frequency);
     std::sort(m_frequenciesUsed.begin(), m_frequenciesUsed.end());
     if (isActive())
       m_readingUpdater->start();
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
index 9c31574..398555cc 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
@@ -125,7 +125,7 @@
     m_ports->reserveInitialCapacity(ports.size());
     for (const auto& port : ports) {
       CHECK(ThreadState::current()->isOnThreadHeap(port.get()));
-      m_ports->append(port);
+      m_ports->push_back(port);
     }
   }
 }
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClients.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClients.cpp
index 0bb9187..1c842fb 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClients.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClients.cpp
@@ -36,9 +36,9 @@
     for (size_t i = 0; i < webClients.clients.size(); ++i) {
       const WebServiceWorkerClientInfo& client = webClients.clients[i];
       if (client.clientType == WebServiceWorkerClientTypeWindow)
-        clients.append(ServiceWorkerWindowClient::create(client));
+        clients.push_back(ServiceWorkerWindowClient::create(client));
       else
-        clients.append(ServiceWorkerClient::create(client));
+        clients.push_back(ServiceWorkerClient::create(client));
     }
     return clients;
   }
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp
index beb0093..7d58653 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp
@@ -294,7 +294,7 @@
       m_owner.m_registerCallCount++;
       m_owner.m_registerScope = pattern;
       m_owner.m_registerScriptURL = scriptURL;
-      m_registrationCallbacksToDelete.append(std::move(callbacks));
+      m_registrationCallbacksToDelete.push_back(std::move(callbacks));
     }
 
     void getRegistration(
@@ -303,7 +303,7 @@
         override {
       m_owner.m_getRegistrationCallCount++;
       m_owner.m_getRegistrationURL = documentURL;
-      m_getRegistrationCallbacksToDelete.append(std::move(callbacks));
+      m_getRegistrationCallbacksToDelete.push_back(std::move(callbacks));
     }
 
     bool validateScopeAndScriptURL(const WebURL& scope,
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.h
index e4cd79e..c5da0e8 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.h
@@ -116,7 +116,7 @@
       WebType webServiceWorkerRegistrations) {
     HeapVector<Member<ServiceWorkerRegistration>> registrations;
     for (auto& registration : *webServiceWorkerRegistrations) {
-      registrations.append(
+      registrations.push_back(
           ServiceWorkerRegistration::take(resolver, std::move(registration)));
     }
     return registrations;
diff --git a/third_party/WebKit/Source/modules/shapedetection/BarcodeDetector.cpp b/third_party/WebKit/Source/modules/shapedetection/BarcodeDetector.cpp
index cf82763b..3ab69ce7 100644
--- a/third_party/WebKit/Source/modules/shapedetection/BarcodeDetector.cpp
+++ b/third_party/WebKit/Source/modules/shapedetection/BarcodeDetector.cpp
@@ -59,9 +59,9 @@
       Point2D point;
       point.setX(corner_point->x);
       point.setY(corner_point->y);
-      cornerPoints.append(point);
+      cornerPoints.push_back(point);
     }
-    detectedBarcodes.append(DetectedBarcode::create(
+    detectedBarcodes.push_back(DetectedBarcode::create(
         barcode->raw_value,
         DOMRect::create(barcode->bounding_box->x, barcode->bounding_box->y,
                         barcode->bounding_box->width,
diff --git a/third_party/WebKit/Source/modules/shapedetection/FaceDetector.cpp b/third_party/WebKit/Source/modules/shapedetection/FaceDetector.cpp
index 060c66f8..ca99bb0 100644
--- a/third_party/WebKit/Source/modules/shapedetection/FaceDetector.cpp
+++ b/third_party/WebKit/Source/modules/shapedetection/FaceDetector.cpp
@@ -64,7 +64,7 @@
 
   HeapVector<Member<DetectedFace>> detectedFaces;
   for (const auto& boundingBox : faceDetectionResult->bounding_boxes) {
-    detectedFaces.append(DetectedFace::create(
+    detectedFaces.push_back(DetectedFace::create(
         DOMRect::create(boundingBox->x, boundingBox->y, boundingBox->width,
                         boundingBox->height)));
   }
diff --git a/third_party/WebKit/Source/modules/speech/SpeechRecognition.cpp b/third_party/WebKit/Source/modules/speech/SpeechRecognition.cpp
index 65bc3e0b..feb23df 100644
--- a/third_party/WebKit/Source/modules/speech/SpeechRecognition.cpp
+++ b/third_party/WebKit/Source/modules/speech/SpeechRecognition.cpp
@@ -109,11 +109,11 @@
   size_t resultIndex = m_finalResults.size();
 
   for (size_t i = 0; i < newFinalResults.size(); ++i)
-    m_finalResults.append(newFinalResults[i]);
+    m_finalResults.push_back(newFinalResults[i]);
 
   HeapVector<Member<SpeechRecognitionResult>> results = m_finalResults;
   for (size_t i = 0; i < currentInterimResults.size(); ++i)
-    results.append(currentInterimResults[i]);
+    results.push_back(currentInterimResults[i]);
 
   dispatchEvent(SpeechRecognitionEvent::createResult(resultIndex, results));
 }
diff --git a/third_party/WebKit/Source/modules/speech/SpeechRecognitionEvent.cpp b/third_party/WebKit/Source/modules/speech/SpeechRecognitionEvent.cpp
index e08557a..1433687 100644
--- a/third_party/WebKit/Source/modules/speech/SpeechRecognitionEvent.cpp
+++ b/third_party/WebKit/Source/modules/speech/SpeechRecognitionEvent.cpp
@@ -45,7 +45,7 @@
     SpeechRecognitionResult* result) {
   if (result) {
     HeapVector<Member<SpeechRecognitionResult>> results;
-    results.append(result);
+    results.push_back(result);
     return new SpeechRecognitionEvent(
         EventTypeNames::nomatch, 0,
         SpeechRecognitionResultList::create(results));
diff --git a/third_party/WebKit/Source/modules/speech/SpeechSynthesis.cpp b/third_party/WebKit/Source/modules/speech/SpeechSynthesis.cpp
index c1b5b5f..d4b91e1 100644
--- a/third_party/WebKit/Source/modules/speech/SpeechSynthesis.cpp
+++ b/third_party/WebKit/Source/modules/speech/SpeechSynthesis.cpp
@@ -62,7 +62,7 @@
       m_platformSpeechSynthesizer->voiceList();
   size_t voiceCount = platformVoices.size();
   for (size_t k = 0; k < voiceCount; k++)
-    m_voiceList.append(SpeechSynthesisVoice::create(platformVoices[k]));
+    m_voiceList.push_back(SpeechSynthesisVoice::create(platformVoices[k]));
 
   return m_voiceList;
 }
diff --git a/third_party/WebKit/Source/modules/speech/testing/PlatformSpeechSynthesizerMock.cpp b/third_party/WebKit/Source/modules/speech/testing/PlatformSpeechSynthesizerMock.cpp
index b009c475..6fbd40a 100644
--- a/third_party/WebKit/Source/modules/speech/testing/PlatformSpeechSynthesizerMock.cpp
+++ b/third_party/WebKit/Source/modules/speech/testing/PlatformSpeechSynthesizerMock.cpp
@@ -77,13 +77,13 @@
 
 void PlatformSpeechSynthesizerMock::initializeVoiceList() {
   m_voiceList.clear();
-  m_voiceList.append(PlatformSpeechSynthesisVoice::create(
+  m_voiceList.push_back(PlatformSpeechSynthesisVoice::create(
       String("mock.voice.bruce"), String("bruce"), String("en-US"), true,
       true));
-  m_voiceList.append(PlatformSpeechSynthesisVoice::create(
+  m_voiceList.push_back(PlatformSpeechSynthesisVoice::create(
       String("mock.voice.clark"), String("clark"), String("en-US"), true,
       false));
-  m_voiceList.append(PlatformSpeechSynthesisVoice::create(
+  m_voiceList.push_back(PlatformSpeechSynthesisVoice::create(
       String("mock.voice.logan"), String("logan"), String("fr-CA"), true,
       true));
 }
diff --git a/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp b/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
index 95e5b353..26eb4fab 100644
--- a/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
+++ b/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
@@ -29,6 +29,7 @@
 #include "modules/vibration/VibrationController.h"
 #include "platform/Histogram.h"
 #include "platform/UserGestureIndicator.h"
+#include "public/platform/site_engagement.mojom-blink.h"
 
 namespace blink {
 
@@ -57,7 +58,7 @@
 // static
 bool NavigatorVibration::vibrate(Navigator& navigator, unsigned time) {
   VibrationPattern pattern;
-  pattern.append(time);
+  pattern.push_back(time);
   return NavigatorVibration::vibrate(navigator, pattern);
 }
 
@@ -124,6 +125,27 @@
   DEFINE_STATIC_LOCAL(EnumerationHistogram, NavigatorVibrateHistogram,
                       ("Vibration.Context", NavigatorVibrationType::EnumMax));
   NavigatorVibrateHistogram.count(type);
+
+  switch (frame.document()->getEngagementLevel()) {
+    case mojom::blink::EngagementLevel::NONE:
+      UseCounter::count(&frame, UseCounter::NavigatorVibrateEngagementNone);
+      break;
+    case mojom::blink::EngagementLevel::MINIMAL:
+      UseCounter::count(&frame, UseCounter::NavigatorVibrateEngagementMinimal);
+      break;
+    case mojom::blink::EngagementLevel::LOW:
+      UseCounter::count(&frame, UseCounter::NavigatorVibrateEngagementLow);
+      break;
+    case mojom::blink::EngagementLevel::MEDIUM:
+      UseCounter::count(&frame, UseCounter::NavigatorVibrateEngagementMedium);
+      break;
+    case mojom::blink::EngagementLevel::HIGH:
+      UseCounter::count(&frame, UseCounter::NavigatorVibrateEngagementHigh);
+      break;
+    case mojom::blink::EngagementLevel::MAX:
+      UseCounter::count(&frame, UseCounter::NavigatorVibrateEngagementMax);
+      break;
+  }
 }
 
 VibrationController* NavigatorVibration::controller(const LocalFrame& frame) {
diff --git a/third_party/WebKit/Source/modules/vibration/VibrationController.cpp b/third_party/WebKit/Source/modules/vibration/VibrationController.cpp
index 0e518f9..ef07f8b 100644
--- a/third_party/WebKit/Source/modules/vibration/VibrationController.cpp
+++ b/third_party/WebKit/Source/modules/vibration/VibrationController.cpp
@@ -22,7 +22,6 @@
 #include "bindings/modules/v8/UnsignedLongOrUnsignedLongSequence.h"
 #include "core/dom/Document.h"
 #include "core/frame/Navigator.h"
-#include "core/frame/UseCounter.h"
 #include "core/page/Page.h"
 #include "platform/mojo/MojoHelper.h"
 #include "public/platform/InterfaceProvider.h"
@@ -66,7 +65,7 @@
   VibrationPattern sanitized;
 
   if (pattern.isUnsignedLong())
-    sanitized.append(pattern.getAsUnsignedLong());
+    sanitized.push_back(pattern.getAsUnsignedLong());
   else if (pattern.isUnsignedLongSequence())
     sanitized = pattern.getAsUnsignedLongSequence();
 
diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp
index 77a2f29..a0169b0 100644
--- a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp
+++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp
@@ -35,7 +35,7 @@
   NavigatorVR* supplement = static_cast<NavigatorVR*>(
       Supplement<Navigator>::from(navigator, supplementName()));
   if (!supplement) {
-    supplement = new NavigatorVR(navigator.frame());
+    supplement = new NavigatorVR(navigator);
     provideTo(navigator, supplementName(), supplement);
   }
   return *supplement;
@@ -50,21 +50,20 @@
   ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
   ScriptPromise promise = resolver->promise();
 
-  Document* document = frame() ? frame()->document() : 0;
-
-  if (!document || !controller()) {
+  if (!document()) {
     DOMException* exception = DOMException::create(
         InvalidStateError, "The object is no longer associated to a document.");
     resolver->reject(exception);
     return promise;
   }
 
-  UseCounter::count(*document, UseCounter::VRGetDisplays);
+  UseCounter::count(*document(), UseCounter::VRGetDisplays);
   ExecutionContext* executionContext = scriptState->getExecutionContext();
   if (!executionContext->isSecureContext())
-    UseCounter::count(*document, UseCounter::VRGetDisplaysInsecureOrigin);
+    UseCounter::count(*document(), UseCounter::VRGetDisplaysInsecureOrigin);
 
-  Platform::current()->recordRapporURL("VR.WebVR.GetDisplays", document->url());
+  Platform::current()->recordRapporURL("VR.WebVR.GetDisplays",
+                                       document()->url());
 
   controller()->getDisplays(resolver);
 
@@ -72,7 +71,7 @@
 }
 
 VRController* NavigatorVR::controller() {
-  if (!frame())
+  if (!host()->frame())
     return 0;
 
   if (!m_controller) {
@@ -83,20 +82,19 @@
 }
 
 Document* NavigatorVR::document() {
-  return frame() ? frame()->document() : 0;
+  return host()->frame() ? host()->frame()->document() : nullptr;
 }
 
 DEFINE_TRACE(NavigatorVR) {
   visitor->trace(m_controller);
-
   Supplement<Navigator>::trace(visitor);
-  ContextClient::trace(visitor);
   PageVisibilityObserver::trace(visitor);
 }
 
-NavigatorVR::NavigatorVR(LocalFrame* frame)
-    : ContextClient(frame), PageVisibilityObserver(frame->page()) {
-  frame->domWindow()->registerEventListenerObserver(this);
+NavigatorVR::NavigatorVR(Navigator& navigator)
+    : Supplement<Navigator>(navigator),
+      PageVisibilityObserver(navigator.frame()->page()) {
+  navigator.frame()->domWindow()->registerEventListenerObserver(this);
 }
 
 NavigatorVR::~NavigatorVR() {}
@@ -106,20 +104,20 @@
 }
 
 void NavigatorVR::enqueueVREvent(VRDisplayEvent* event) {
-  // TODO(dcheng): Why does this need to check both frame and domWindow?
-  if (frame() && frame()->domWindow()) {
-    frame()->domWindow()->enqueueWindowEvent(event);
+  if (host()->frame()) {
+    host()->frame()->domWindow()->enqueueWindowEvent(event);
   }
 }
 
 void NavigatorVR::dispatchVRGestureEvent(VRDisplayEvent* event) {
-  // TODO(dcheng): Why does this need to check both frame and domWindow?
-  if (frame() && frame()->domWindow()) {
-    UserGestureIndicator gestureIndicator(
-        DocumentUserGestureToken::create(frame()->document()));
-    event->setTarget(frame()->domWindow());
-    frame()->domWindow()->dispatchEvent(event);
-  }
+  if (host()->frame())
+    return;
+  UserGestureIndicator gestureIndicator(
+      DocumentUserGestureToken::create(document()));
+  LocalDOMWindow* window = host()->frame()->domWindow();
+  DCHECK(window);
+  event->setTarget(window);
+  window->dispatchEvent(event);
 }
 
 void NavigatorVR::pageVisibilityChanged() {
diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.h b/third_party/WebKit/Source/modules/vr/NavigatorVR.h
index fb6489d5..a4d5a38 100644
--- a/third_party/WebKit/Source/modules/vr/NavigatorVR.h
+++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.h
@@ -6,7 +6,6 @@
 #define NavigatorVR_h
 
 #include "bindings/core/v8/ScriptPromise.h"
-#include "core/dom/ContextLifecycleObserver.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "core/frame/Navigator.h"
 #include "core/page/PageVisibilityObserver.h"
@@ -27,7 +26,6 @@
 class MODULES_EXPORT NavigatorVR final
     : public GarbageCollectedFinalized<NavigatorVR>,
       public Supplement<Navigator>,
-      public ContextClient,
       public PageVisibilityObserver,
       public LocalDOMWindow::EventListenerObserver {
   USING_GARBAGE_COLLECTED_MIXIN(NavigatorVR);
@@ -64,7 +62,7 @@
   friend class VRDisplay;
   friend class VRGetDevicesCallback;
 
-  explicit NavigatorVR(LocalFrame*);
+  explicit NavigatorVR(Navigator&);
 
   static const char* supplementName();
 
diff --git a/third_party/WebKit/Source/modules/vr/VRController.cpp b/third_party/WebKit/Source/modules/vr/VRController.cpp
index 52a02079..0f6b8e5 100644
--- a/third_party/WebKit/Source/modules/vr/VRController.cpp
+++ b/third_party/WebKit/Source/modules/vr/VRController.cpp
@@ -67,7 +67,7 @@
       new VRDisplay(m_navigatorVR, std::move(display), std::move(request));
   vrDisplay->update(displayInfo);
   vrDisplay->onConnected();
-  m_displays.append(vrDisplay);
+  m_displays.push_back(vrDisplay);
 
   if (m_displays.size() == m_numberOfSyncedDisplays) {
     m_displaySynced = true;
diff --git a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
index c35e7f13..21398f31 100644
--- a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
+++ b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
@@ -580,7 +580,7 @@
   HeapVector<VRLayer> layers;
 
   if (m_isPresenting) {
-    layers.append(m_layer);
+    layers.push_back(m_layer);
   }
 
   return layers;
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp
index fe8639de..a5dde58e 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp
@@ -177,7 +177,7 @@
       return;
 
     channelDataArray->setNeuterable(false);
-    m_channels.append(channelDataArray);
+    m_channels.push_back(channelDataArray);
   }
 }
 
@@ -197,7 +197,7 @@
     const float* src = bus->channel(i)->data();
     float* dst = channelDataArray->data();
     memmove(dst, src, m_length * sizeof(*dst));
-    m_channels.append(channelDataArray);
+    m_channels.push_back(channelDataArray);
   }
 }
 
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp b/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp
index 4d7fa832..3628954 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp
@@ -149,7 +149,7 @@
   // pulling on the graph again.
   {
     AutoLocker locker(this);
-    m_resumeResolvers.append(resolver);
+    m_resumeResolvers.push_back(resolver);
   }
 
   return promise;
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp
index 8ff6c81..04d1915 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp
@@ -174,12 +174,12 @@
 }
 
 void AudioHandler::addInput() {
-  m_inputs.append(AudioNodeInput::create(*this));
+  m_inputs.push_back(AudioNodeInput::create(*this));
 }
 
 void AudioHandler::addOutput(unsigned numberOfChannels) {
   DCHECK(isMainThread());
-  m_outputs.append(AudioNodeOutput::create(this, numberOfChannels));
+  m_outputs.push_back(AudioNodeOutput::create(this, numberOfChannels));
   node()->didAddOutput(numberOfOutputs());
 }
 
@@ -943,9 +943,9 @@
 }
 
 void AudioNode::didAddOutput(unsigned numberOfOutputs) {
-  m_connectedNodes.append(nullptr);
+  m_connectedNodes.push_back(nullptr);
   DCHECK_EQ(numberOfOutputs, m_connectedNodes.size());
-  m_connectedParams.append(nullptr);
+  m_connectedParams.push_back(nullptr);
   DCHECK_EQ(numberOfOutputs, m_connectedParams.size());
 }
 
diff --git a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
index 9867433..800c0a9 100644
--- a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
@@ -630,7 +630,7 @@
 void BaseAudioContext::notifySourceNodeFinishedProcessing(
     AudioHandler* handler) {
   DCHECK(isAudioThread());
-  m_finishedSourceHandlers.append(handler);
+  m_finishedSourceHandlers.push_back(handler);
 }
 
 void BaseAudioContext::removeFinishedSourceNodes() {
@@ -675,7 +675,7 @@
   DCHECK(isMainThread());
   AutoLocker locker(this);
 
-  m_activeSourceNodes.append(node);
+  m_activeSourceNodes.push_back(node);
   node->handler().makeConnection();
 }
 
diff --git a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp
index 10a3d8e..17a07a7 100644
--- a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp
@@ -73,7 +73,7 @@
 
 void DeferredTaskHandler::addDeferredBreakConnection(AudioHandler& node) {
   DCHECK(isAudioThread());
-  m_deferredBreakConnectionList.append(&node);
+  m_deferredBreakConnectionList.push_back(&node);
 }
 
 void DeferredTaskHandler::breakConnections() {
@@ -252,7 +252,7 @@
     PassRefPtr<AudioHandler> handler) {
   DCHECK(handler);
   DCHECK(!m_renderingOrphanHandlers.contains(handler));
-  m_renderingOrphanHandlers.append(handler);
+  m_renderingOrphanHandlers.push_back(handler);
 }
 
 void DeferredTaskHandler::requestToDeleteHandlersOnMainThread() {
diff --git a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.cpp b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.cpp
index c36de7a..b76b550 100644
--- a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.cpp
@@ -55,7 +55,7 @@
       "MediaStreamAudioDestinationNode", false,
       MediaStreamSource::ReadyStateLive, true);
   MediaStreamSourceVector audioSources;
-  audioSources.append(m_source.get());
+  audioSources.push_back(m_source.get());
   MediaStreamSourceVector videoSources;
   m_stream = MediaStream::create(
       node.context()->getExecutionContext(),
diff --git a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
index b71ced3..d55f92c 100644
--- a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
@@ -299,7 +299,7 @@
     std::unique_ptr<AudioFloatArray> table =
         WTF::makeUnique<AudioFloatArray>(waveSize);
     adjustV8ExternalMemory(waveSize * sizeof(float));
-    m_bandLimitedTables.append(std::move(table));
+    m_bandLimitedTables.push_back(std::move(table));
 
     // Apply an inverse FFT to generate the time-domain table data.
     float* data = m_bandLimitedTables[rangeIndex]->data();
diff --git a/third_party/WebKit/Source/modules/webaudio/ScriptProcessorNode.cpp b/third_party/WebKit/Source/modules/webaudio/ScriptProcessorNode.cpp
index 316d0522..19dc6b0 100644
--- a/third_party/WebKit/Source/modules/webaudio/ScriptProcessorNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/ScriptProcessorNode.cpp
@@ -103,8 +103,8 @@
                                                        bufferSize(), sampleRate)
                                  : 0;
 
-    m_inputBuffers.append(inputBuffer);
-    m_outputBuffers.append(outputBuffer);
+    m_inputBuffers.push_back(inputBuffer);
+    m_outputBuffers.push_back(outputBuffer);
   }
 
   AudioHandler::initialize();
diff --git a/third_party/WebKit/Source/modules/webdatabase/Database.cpp b/third_party/WebKit/Source/modules/webdatabase/Database.cpp
index e667ecf..97b4c6f7 100644
--- a/third_party/WebKit/Source/modules/webdatabase/Database.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/Database.cpp
@@ -908,7 +908,7 @@
   while ((result = statement.step()) == SQLResultRow) {
     String name = statement.getColumnText(0);
     if (name != databaseInfoTableName())
-      tableNames.append(name);
+      tableNames.push_back(name);
   }
 
   enableAuthorizer();
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.cpp b/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.cpp
index 5998bfb..a54de38 100644
--- a/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.cpp
@@ -59,7 +59,8 @@
 
   Vector<std::pair<String, SQLValue>> dataArray;
   for (unsigned i = 0; i < numColumns; ++i)
-    dataArray.append(std::make_pair(m_columns[i], m_result[valuesIndex + i]));
+    dataArray.push_back(
+        std::make_pair(m_columns[i], m_result[valuesIndex + i]));
 
   return ScriptValue::from(scriptState, dataArray);
 }
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.h b/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.h
index 367f4d53..0e4cd17b 100644
--- a/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.h
+++ b/third_party/WebKit/Source/modules/webdatabase/SQLResultSetRowList.h
@@ -51,8 +51,8 @@
   const Vector<String>& columnNames() const { return m_columns; }
   const Vector<SQLValue>& values() const { return m_result; }
 
-  void addColumn(const String& name) { m_columns.append(name); }
-  void addResult(const SQLValue& result) { m_result.append(result); }
+  void addColumn(const String& name) { m_columns.push_back(name); }
+  void addResult(const SQLValue& result) { m_result.push_back(result); }
 
   unsigned length() const;
   ScriptValue item(ScriptState*, unsigned index, ExceptionState&);
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLDrawBuffers.cpp b/third_party/WebKit/Source/modules/webgl/WebGLDrawBuffers.cpp
index a5c3397e..dd50473 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLDrawBuffers.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLDrawBuffers.cpp
@@ -145,7 +145,7 @@
     GLuint color;
 
     gl->GenTextures(1, &color);
-    colors.append(color);
+    colors.push_back(color);
     gl->BindTexture(GL_TEXTURE_2D, color);
     gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA,
                    GL_UNSIGNED_BYTE, buffer);
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
index badcb26..51e311d 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -1304,7 +1304,7 @@
 
 void WebGLRenderingContextBase::addCompressedTextureFormat(GLenum format) {
   if (!m_compressedTextureFormats.contains(format))
-    m_compressedTextureFormats.append(format);
+    m_compressedTextureFormats.push_back(format);
 }
 
 void WebGLRenderingContextBase::removeAllCompressedTextureFormats() {
@@ -2693,7 +2693,7 @@
   for (unsigned i = 0; i < sizeof(shaderType) / sizeof(GLenum); ++i) {
     WebGLShader* shader = program->getAttachedShader(shaderType[i]);
     if (shader)
-      shaderObjects.append(shader);
+      shaderObjects.push_back(shader);
   }
   return shaderObjects;
 }
@@ -3392,7 +3392,7 @@
       const char* const* prefixes = tracker->prefixes();
       for (; *prefixes; ++prefixes) {
         String prefixedName = String(*prefixes) + tracker->extensionName();
-        result.append(prefixedName);
+        result.push_back(prefixedName);
       }
     }
   }
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
index d6de7b3..8227e12 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
@@ -885,7 +885,7 @@
   void registerExtension(Member<T>& extensionPtr,
                          ExtensionFlags flags = ApprovedExtension,
                          const char* const* prefixes = nullptr) {
-    m_extensions.append(TraceWrapperMember<ExtensionTracker>(
+    m_extensions.push_back(TraceWrapperMember<ExtensionTracker>(
         this, TypedExtensionTracker<T>::create(extensionPtr, flags, prefixes)));
   }
 
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccess.cpp b/third_party/WebKit/Source/modules/webmidi/MIDIAccess.cpp
index 1b2cc564..6e4543c 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccess.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccess.cpp
@@ -72,11 +72,11 @@
   for (size_t i = 0; i < ports.size(); ++i) {
     const MIDIAccessInitializer::PortDescriptor& port = ports[i];
     if (port.type == MIDIPort::TypeInput) {
-      m_inputs.append(MIDIInput::create(this, port.id, port.manufacturer,
-                                        port.name, port.version,
-                                        ToDeviceState(port.state)));
+      m_inputs.push_back(MIDIInput::create(this, port.id, port.manufacturer,
+                                           port.name, port.version,
+                                           ToDeviceState(port.state)));
     } else {
-      m_outputs.append(MIDIOutput::create(
+      m_outputs.push_back(MIDIOutput::create(
           this, m_outputs.size(), port.id, port.manufacturer, port.name,
           port.version, ToDeviceState(port.state)));
     }
@@ -109,7 +109,7 @@
   for (size_t i = 0; i < m_inputs.size(); ++i) {
     MIDIInput* input = m_inputs[i];
     if (input->getState() != PortState::DISCONNECTED) {
-      inputs.append(input);
+      inputs.push_back(input);
       ids.add(input->id());
     }
   }
@@ -126,7 +126,7 @@
   for (size_t i = 0; i < m_outputs.size(); ++i) {
     MIDIOutput* output = m_outputs[i];
     if (output->getState() != PortState::DISCONNECTED) {
-      outputs.append(output);
+      outputs.push_back(output);
       ids.add(output->id());
     }
   }
@@ -145,7 +145,7 @@
   DCHECK(isMainThread());
   MIDIInput* port = MIDIInput::create(this, id, manufacturer, name, version,
                                       ToDeviceState(state));
-  m_inputs.append(port);
+  m_inputs.push_back(port);
   dispatchEvent(MIDIConnectionEvent::create(port));
 }
 
@@ -158,7 +158,7 @@
   unsigned portIndex = m_outputs.size();
   MIDIOutput* port = MIDIOutput::create(this, portIndex, id, manufacturer, name,
                                         version, ToDeviceState(state));
-  m_outputs.append(port);
+  m_outputs.push_back(port);
   dispatchEvent(MIDIConnectionEvent::create(port));
 }
 
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp b/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
index fd8e307..fe1aa79 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
@@ -57,8 +57,8 @@
                                             const String& version,
                                             PortState state) {
   DCHECK(m_accessor);
-  m_portDescriptors.append(PortDescriptor(id, manufacturer, name,
-                                          MIDIPort::TypeInput, version, state));
+  m_portDescriptors.push_back(PortDescriptor(
+      id, manufacturer, name, MIDIPort::TypeInput, version, state));
 }
 
 void MIDIAccessInitializer::didAddOutputPort(const String& id,
@@ -67,7 +67,7 @@
                                              const String& version,
                                              PortState state) {
   DCHECK(m_accessor);
-  m_portDescriptors.append(PortDescriptor(
+  m_portDescriptors.push_back(PortDescriptor(
       id, manufacturer, name, MIDIPort::TypeOutput, version, state));
 }
 
diff --git a/third_party/WebKit/Source/modules/websockets/DOMWebSocket.cpp b/third_party/WebKit/Source/modules/websockets/DOMWebSocket.cpp
index 6d60ab4..a62dd87 100644
--- a/third_party/WebKit/Source/modules/websockets/DOMWebSocket.cpp
+++ b/third_party/WebKit/Source/modules/websockets/DOMWebSocket.cpp
@@ -268,7 +268,7 @@
     webSocket->connect(url, protocolsVector, exceptionState);
   } else if (protocols.isString()) {
     Vector<String> protocolsVector;
-    protocolsVector.append(protocols.getAsString());
+    protocolsVector.push_back(protocols.getAsString());
     webSocket->connect(url, protocolsVector, exceptionState);
   } else {
     DCHECK(protocols.isStringSequence());
diff --git a/third_party/WebKit/Source/modules/websockets/DOMWebSocketTest.cpp b/third_party/WebKit/Source/modules/websockets/DOMWebSocketTest.cpp
index 9ed57cf..b27e4c6 100644
--- a/third_party/WebKit/Source/modules/websockets/DOMWebSocketTest.cpp
+++ b/third_party/WebKit/Source/modules/websockets/DOMWebSocketTest.cpp
@@ -189,7 +189,7 @@
   V8TestingScope scope;
   DOMWebSocketTestScope webSocketScope(scope.getExecutionContext());
   Vector<String> subprotocols;
-  subprotocols.append("@subprotocol-|'\"x\x01\x02\x03x");
+  subprotocols.push_back("@subprotocol-|'\"x\x01\x02\x03x");
 
   webSocketScope.socket().connect("ws://example.com/", subprotocols,
                                   scope.getExceptionState());
@@ -246,8 +246,8 @@
   V8TestingScope scope;
   DOMWebSocketTestScope webSocketScope(scope.getExecutionContext());
   Vector<String> subprotocols;
-  subprotocols.append("aa");
-  subprotocols.append("bb");
+  subprotocols.push_back("aa");
+  subprotocols.push_back("bb");
 
   {
     InSequence s;
@@ -271,8 +271,8 @@
   V8TestingScope scope;
   DOMWebSocketTestScope webSocketScope(scope.getExecutionContext());
   Vector<String> subprotocols;
-  subprotocols.append("aa");
-  subprotocols.append("bb");
+  subprotocols.push_back("aa");
+  subprotocols.push_back("bb");
 
   {
     InSequence s;
@@ -325,8 +325,8 @@
   V8TestingScope scope;
   DOMWebSocketTestScope webSocketScope(scope.getExecutionContext());
   Vector<String> subprotocols;
-  subprotocols.append("aa");
-  subprotocols.append("bb");
+  subprotocols.push_back("aa");
+  subprotocols.push_back("bb");
   {
     InSequence s;
     EXPECT_CALL(webSocketScope.channel(),
diff --git a/third_party/WebKit/Source/modules/webusb/USB.cpp b/third_party/WebKit/Source/modules/webusb/USB.cpp
index c2ec9d3..6d0171f 100644
--- a/third_party/WebKit/Source/modules/webusb/USB.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USB.cpp
@@ -131,7 +131,7 @@
     if (options.hasFilters()) {
       filters.reserveCapacity(options.filters().size());
       for (const auto& filter : options.filters())
-        filters.append(convertDeviceFilter(filter));
+        filters.push_back(convertDeviceFilter(filter));
     }
     m_chooserServiceRequests.add(resolver);
     m_chooserService->GetPermission(
@@ -179,7 +179,7 @@
 
   HeapVector<Member<USBDevice>> devices;
   for (auto& deviceInfo : deviceInfos)
-    devices.append(getOrCreateDevice(std::move(deviceInfo)));
+    devices.push_back(getOrCreateDevice(std::move(deviceInfo)));
   resolver->resolve(devices);
   m_deviceManagerRequests.remove(resolver);
 }
diff --git a/third_party/WebKit/Source/modules/webusb/USBAlternateInterface.cpp b/third_party/WebKit/Source/modules/webusb/USBAlternateInterface.cpp
index 3668cb6..e61d42a 100644
--- a/third_party/WebKit/Source/modules/webusb/USBAlternateInterface.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBAlternateInterface.cpp
@@ -46,7 +46,7 @@
 HeapVector<Member<USBEndpoint>> USBAlternateInterface::endpoints() const {
   HeapVector<Member<USBEndpoint>> endpoints;
   for (size_t i = 0; i < info().endpoints.size(); ++i)
-    endpoints.append(USBEndpoint::create(this, i));
+    endpoints.push_back(USBEndpoint::create(this, i));
   return endpoints;
 }
 
diff --git a/third_party/WebKit/Source/modules/webusb/USBConfiguration.cpp b/third_party/WebKit/Source/modules/webusb/USBConfiguration.cpp
index cb18aec..4b1f351 100644
--- a/third_party/WebKit/Source/modules/webusb/USBConfiguration.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBConfiguration.cpp
@@ -50,7 +50,7 @@
 HeapVector<Member<USBInterface>> USBConfiguration::interfaces() const {
   HeapVector<Member<USBInterface>> interfaces;
   for (size_t i = 0; i < info().interfaces.size(); ++i)
-    interfaces.append(USBInterface::create(this, i));
+    interfaces.push_back(USBInterface::create(this, i));
   return interfaces;
 }
 
diff --git a/third_party/WebKit/Source/modules/webusb/USBDevice.cpp b/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
index b71fcdb..06ba10e1 100644
--- a/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
@@ -903,7 +903,7 @@
       resolver->reject(error);
       return;
     }
-    packets.append(USBIsochronousInTransferPacket::create(
+    packets.push_back(USBIsochronousInTransferPacket::create(
         convertTransferStatus(packet->status),
         buffer ? DOMDataView::create(buffer, byteOffset,
                                      packet->transferred_length)
@@ -927,7 +927,7 @@
       resolver->reject(error);
       return;
     }
-    packets.append(USBIsochronousOutTransferPacket::create(
+    packets.push_back(USBIsochronousOutTransferPacket::create(
         convertTransferStatus(packet->status), packet->transferred_length));
   }
   resolver->resolve(USBIsochronousOutTransferResult::create(packets));
diff --git a/third_party/WebKit/Source/modules/webusb/USBInterface.cpp b/third_party/WebKit/Source/modules/webusb/USBInterface.cpp
index c5e7934..01dd3d6 100644
--- a/third_party/WebKit/Source/modules/webusb/USBInterface.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBInterface.cpp
@@ -59,7 +59,7 @@
 HeapVector<Member<USBAlternateInterface>> USBInterface::alternates() const {
   HeapVector<Member<USBAlternateInterface>> alternates;
   for (size_t i = 0; i < info().alternates.size(); ++i)
-    alternates.append(USBAlternateInterface::create(this, i));
+    alternates.push_back(USBAlternateInterface::create(this, i));
   return alternates;
 }
 
diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.cpp b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
index 809b39de..ae7eb060 100644
--- a/third_party/WebKit/Source/web/ChromeClientImpl.cpp
+++ b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
@@ -1100,7 +1100,7 @@
 void ChromeClientImpl::registerPopupOpeningObserver(
     PopupOpeningObserver* observer) {
   DCHECK(observer);
-  m_popupOpeningObservers.append(observer);
+  m_popupOpeningObservers.push_back(observer);
 }
 
 void ChromeClientImpl::unregisterPopupOpeningObserver(
diff --git a/third_party/WebKit/Source/web/ColorChooserPopupUIController.cpp b/third_party/WebKit/Source/web/ColorChooserPopupUIController.cpp
index 976daab..8df6c62 100644
--- a/third_party/WebKit/Source/web/ColorChooserPopupUIController.cpp
+++ b/third_party/WebKit/Source/web/ColorChooserPopupUIController.cpp
@@ -89,7 +89,7 @@
   Vector<ColorSuggestion> suggestions = m_client->suggestions();
   Vector<String> suggestionValues;
   for (unsigned i = 0; i < suggestions.size(); i++)
-    suggestionValues.append(suggestions[i].color.serialized());
+    suggestionValues.push_back(suggestions[i].color.serialized());
   IntRect anchorRectInScreen = m_chromeClient->viewportToScreen(
       m_client->elementRectRelativeToViewport(), m_frame->view());
 
diff --git a/third_party/WebKit/Source/web/CompositionUnderlineVectorBuilder.cpp b/third_party/WebKit/Source/web/CompositionUnderlineVectorBuilder.cpp
index 673063b3..9ae30ea 100644
--- a/third_party/WebKit/Source/web/CompositionUnderlineVectorBuilder.cpp
+++ b/third_party/WebKit/Source/web/CompositionUnderlineVectorBuilder.cpp
@@ -39,7 +39,7 @@
   size_t size = underlines.size();
   reserveCapacity(size);
   for (size_t i = 0; i < size; ++i)
-    append(CompositionUnderlineBuilder(underlines[i]));
+    push_back(CompositionUnderlineBuilder(underlines[i]));
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/web/ContextMenuClientImpl.cpp b/third_party/WebKit/Source/web/ContextMenuClientImpl.cpp
index 2c18919..36d6cdf 100644
--- a/third_party/WebKit/Source/web/ContextMenuClientImpl.cpp
+++ b/third_party/WebKit/Source/web/ContextMenuClientImpl.cpp
@@ -442,7 +442,7 @@
                              outputItem.subMenuItems);
         break;
     }
-    subItems.append(outputItem);
+    subItems.push_back(outputItem);
   }
 
   WebVector<WebMenuItemInfo> outputItems(subItems.size());
diff --git a/third_party/WebKit/Source/web/DateTimeChooserImpl.cpp b/third_party/WebKit/Source/web/DateTimeChooserImpl.cpp
index 2a36cf25..bc8490cc 100644
--- a/third_party/WebKit/Source/web/DateTimeChooserImpl.cpp
+++ b/third_party/WebKit/Source/web/DateTimeChooserImpl.cpp
@@ -176,11 +176,11 @@
     Vector<String> localizedSuggestionValues;
     Vector<String> suggestionLabels;
     for (unsigned i = 0; i < m_parameters.suggestions.size(); i++) {
-      suggestionValues.append(valueToDateTimeString(
+      suggestionValues.push_back(valueToDateTimeString(
           m_parameters.suggestions[i].value, m_parameters.type));
-      localizedSuggestionValues.append(
+      localizedSuggestionValues.push_back(
           m_parameters.suggestions[i].localizedValue);
-      suggestionLabels.append(m_parameters.suggestions[i].label);
+      suggestionLabels.push_back(m_parameters.suggestions[i].label);
     }
     addProperty("suggestionValues", suggestionValues, data);
     addProperty("localizedSuggestionValues", localizedSuggestionValues, data);
diff --git a/third_party/WebKit/Source/web/ExternalPopupMenu.cpp b/third_party/WebKit/Source/web/ExternalPopupMenu.cpp
index 2fe19c36..98c74fa 100644
--- a/third_party/WebKit/Source/web/ExternalPopupMenu.cpp
+++ b/third_party/WebKit/Source/web/ExternalPopupMenu.cpp
@@ -214,7 +214,7 @@
     Vector<int> listIndices;
     listIndices.reserveCapacity(indices.size());
     for (size_t i = 0; i < indices.size(); ++i)
-      listIndices.append(toPopupMenuItemIndex(indices[i], *ownerElement));
+      listIndices.push_back(toPopupMenuItemIndex(indices[i], *ownerElement));
     ownerElement->selectMultipleOptionsByPopup(listIndices);
   }
 
diff --git a/third_party/WebKit/Source/web/SuspendableScriptExecutor.cpp b/third_party/WebKit/Source/web/SuspendableScriptExecutor.cpp
index 4fe999f..d3e6692 100644
--- a/third_party/WebKit/Source/web/SuspendableScriptExecutor.cpp
+++ b/third_party/WebKit/Source/web/SuspendableScriptExecutor.cpp
@@ -69,7 +69,7 @@
     v8::Local<v8::Value> scriptValue =
         frame->script().executeScriptInMainWorldAndReturnValue(
             m_sources.front());
-    results.append(scriptValue);
+    results.push_back(scriptValue);
   }
 
   return results;
@@ -113,7 +113,7 @@
   Vector<v8::Local<v8::Value>> args;
   args.reserveCapacity(m_args.Size());
   for (size_t i = 0; i < m_args.Size(); ++i)
-    args.append(m_args.Get(i));
+    args.push_back(m_args.Get(i));
   {
     std::unique_ptr<UserGestureIndicator> gestureIndicator;
     if (m_gestureToken) {
@@ -125,7 +125,7 @@
                                      m_receiver.newLocal(isolate), args.size(),
                                      args.data(), toIsolate(frame))
             .ToLocal(&singleResult))
-      results.append(singleResult);
+      results.push_back(singleResult);
   }
   return results;
 }
diff --git a/third_party/WebKit/Source/web/TextFinder.cpp b/third_party/WebKit/Source/web/TextFinder.cpp
index 6bdd96d..d9c0a27 100644
--- a/third_party/WebKit/Source/web/TextFinder.cpp
+++ b/third_party/WebKit/Source/web/TextFinder.cpp
@@ -392,7 +392,7 @@
     ownerFrame().frame()->document()->markers().addTextMatchMarker(
         EphemeralRange(resultRange), foundActiveMatch);
 
-    m_findMatchesCache.append(
+    m_findMatchesCache.push_back(
         FindMatch(resultRange, m_lastMatchCount + matchCount));
 
     // Set the new start for the search range to be the end of the previous
@@ -535,7 +535,7 @@
 
     for (const FindMatch& match : m_findMatchesCache) {
       if (!match.m_rect.isEmpty())
-        filteredMatches.append(match);
+        filteredMatches.push_back(match);
     }
 
     m_findMatchesCache.swap(filteredMatches);
@@ -566,7 +566,7 @@
   matchRects.reserveCapacity(matchRects.size() + m_findMatchesCache.size());
   for (const FindMatch& match : m_findMatchesCache) {
     DCHECK(!match.m_rect.isEmpty());
-    matchRects.append(match.m_rect);
+    matchRects.push_back(match.m_rect);
   }
 
   outputRects = matchRects;
diff --git a/third_party/WebKit/Source/web/WebDOMActivityLogger.cpp b/third_party/WebKit/Source/web/WebDOMActivityLogger.cpp
index 1a03101f..027e4f5 100644
--- a/third_party/WebKit/Source/web/WebDOMActivityLogger.cpp
+++ b/third_party/WebKit/Source/web/WebDOMActivityLogger.cpp
@@ -69,7 +69,7 @@
                 const String* argv) override {
     Vector<WebString> webStringArgv;
     for (int i = 0; i < argc; i++)
-      webStringArgv.append(argv[i]);
+      webStringArgv.push_back(argv[i]);
     m_domActivityLogger->logEvent(WebString(eventName), argc,
                                   webStringArgv.data(), getURL(), getTitle());
   }
diff --git a/third_party/WebKit/Source/web/WebDocument.cpp b/third_party/WebKit/Source/web/WebDocument.cpp
index 26f088f..9ccdab7 100644
--- a/third_party/WebKit/Source/web/WebDocument.cpp
+++ b/third_party/WebKit/Source/web/WebDocument.cpp
@@ -165,7 +165,7 @@
     Element* element = forms->item(i);
     // Strange but true, sometimes node can be 0.
     if (element && element->isHTMLElement())
-      temp.append(WebFormElement(toHTMLFormElement(element)));
+      temp.push_back(WebFormElement(toHTMLFormElement(element)));
   }
   results.assign(temp);
 }
diff --git a/third_party/WebKit/Source/web/WebFileChooserCompletionImpl.cpp b/third_party/WebKit/Source/web/WebFileChooserCompletionImpl.cpp
index d65a94f0..85fd50a 100644
--- a/third_party/WebKit/Source/web/WebFileChooserCompletionImpl.cpp
+++ b/third_party/WebKit/Source/web/WebFileChooserCompletionImpl.cpp
@@ -45,7 +45,7 @@
     const WebVector<WebString>& fileNames) {
   Vector<FileChooserFileInfo> fileInfo;
   for (size_t i = 0; i < fileNames.size(); ++i)
-    fileInfo.append(FileChooserFileInfo(fileNames[i]));
+    fileInfo.push_back(FileChooserFileInfo(fileNames[i]));
   m_fileChooser->chooseFiles(fileInfo);
   // This object is no longer needed.
   delete this;
@@ -56,14 +56,15 @@
   Vector<FileChooserFileInfo> fileInfo;
   for (size_t i = 0; i < files.size(); ++i) {
     if (files[i].fileSystemURL.isEmpty()) {
-      fileInfo.append(FileChooserFileInfo(files[i].path, files[i].displayName));
+      fileInfo.push_back(
+          FileChooserFileInfo(files[i].path, files[i].displayName));
     } else {
       FileMetadata metadata;
       metadata.modificationTime = files[i].modificationTime * msPerSecond;
       metadata.length = files[i].length;
       metadata.type = files[i].isDirectory ? FileMetadata::TypeDirectory
                                            : FileMetadata::TypeFile;
-      fileInfo.append(FileChooserFileInfo(files[i].fileSystemURL, metadata));
+      fileInfo.push_back(FileChooserFileInfo(files[i].fileSystemURL, metadata));
     }
   }
   m_fileChooser->chooseFiles(fileInfo);
diff --git a/third_party/WebKit/Source/web/WebFormElement.cpp b/third_party/WebKit/Source/web/WebFormElement.cpp
index 72e0e38..e297aad 100644
--- a/third_party/WebKit/Source/web/WebFormElement.cpp
+++ b/third_party/WebKit/Source/web/WebFormElement.cpp
@@ -67,7 +67,7 @@
   for (ListedElement::List::const_iterator it = listedElements.begin();
        it != listedElements.end(); ++it) {
     if ((*it)->isFormControlElement())
-      formControlElements.append(toHTMLFormControlElement(*it));
+      formControlElements.push_back(toHTMLFormControlElement(*it));
   }
   result.assign(formControlElements);
 }
diff --git a/third_party/WebKit/Source/web/WebFrameSerializer.cpp b/third_party/WebKit/Source/web/WebFrameSerializer.cpp
index 5fdf086b..38008c2 100644
--- a/third_party/WebKit/Source/web/WebFrameSerializer.cpp
+++ b/third_party/WebKit/Source/web/WebFrameSerializer.cpp
@@ -199,7 +199,7 @@
   if (element.isFormControlElement() &&
       !element.fastHasAttribute(HTMLNames::disabledAttr)) {
     Attribute disabledAttribute(HTMLNames::disabledAttr, "");
-    attributes.append(disabledAttribute);
+    attributes.push_back(disabledAttribute);
   }
 
   return attributes;
diff --git a/third_party/WebKit/Source/web/WebHistoryItem.cpp b/third_party/WebKit/Source/web/WebHistoryItem.cpp
index 08fafab..6897417 100644
--- a/third_party/WebKit/Source/web/WebHistoryItem.cpp
+++ b/third_party/WebKit/Source/web/WebHistoryItem.cpp
@@ -121,7 +121,7 @@
   // FIXME: would be nice to avoid the intermediate copy
   Vector<String> ds;
   for (size_t i = 0; i < state.size(); ++i)
-    ds.append(state[i]);
+    ds.push_back(state[i]);
   m_private->setDocumentState(ds);
 }
 
diff --git a/third_party/WebKit/Source/web/WebIDBKey.cpp b/third_party/WebKit/Source/web/WebIDBKey.cpp
index fea52f0..187ee5d2 100644
--- a/third_party/WebKit/Source/web/WebIDBKey.cpp
+++ b/third_party/WebKit/Source/web/WebIDBKey.cpp
@@ -87,22 +87,22 @@
   for (size_t i = 0; i < array.size(); ++i) {
     switch (array[i].keyType()) {
       case WebIDBKeyTypeArray:
-        keys.append(convertFromWebIDBKeyArray(array[i].array()));
+        keys.push_back(convertFromWebIDBKeyArray(array[i].array()));
         break;
       case WebIDBKeyTypeBinary:
-        keys.append(IDBKey::createBinary(array[i].binary()));
+        keys.push_back(IDBKey::createBinary(array[i].binary()));
         break;
       case WebIDBKeyTypeString:
-        keys.append(IDBKey::createString(array[i].string()));
+        keys.push_back(IDBKey::createString(array[i].string()));
         break;
       case WebIDBKeyTypeDate:
-        keys.append(IDBKey::createDate(array[i].date()));
+        keys.push_back(IDBKey::createDate(array[i].date()));
         break;
       case WebIDBKeyTypeNumber:
-        keys.append(IDBKey::createNumber(array[i].number()));
+        keys.push_back(IDBKey::createNumber(array[i].number()));
         break;
       case WebIDBKeyTypeInvalid:
-        keys.append(IDBKey::createInvalid());
+        keys.push_back(IDBKey::createInvalid());
         break;
       case WebIDBKeyTypeNull:
       case WebIDBKeyTypeMin:
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
index 6eacdc8..2c84f58 100644
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
@@ -416,7 +416,7 @@
     for (Frame* currentFrame = frame(); currentFrame;
          currentFrame = currentFrame->tree().traverseNext(frame())) {
       if (currentFrame->isLocalFrame())
-        documents.append(toLocalFrame(currentFrame)->document());
+        documents.push_back(toLocalFrame(currentFrame)->document());
     }
 
     for (auto& doc : documents)
diff --git a/third_party/WebKit/Source/web/WebSearchableFormData.cpp b/third_party/WebKit/Source/web/WebSearchableFormData.cpp
index 9c440b36..1cee88d 100644
--- a/third_party/WebKit/Source/web/WebSearchableFormData.cpp
+++ b/third_party/WebKit/Source/web/WebSearchableFormData.cpp
@@ -197,10 +197,10 @@
 
     for (const auto& entry : formData->entries()) {
       if (!encodedString->isEmpty())
-        encodedString->append('&');
+        encodedString->push_back('&');
       FormDataEncoder::encodeStringAsFormData(*encodedString, entry->name(),
                                               FormDataEncoder::NormalizeCRLF);
-      encodedString->append('=');
+      encodedString->push_back('=');
       if (&control == textElement) {
         encodedString->append("{searchTerms}", 13);
         isElementFound = true;
diff --git a/third_party/WebKit/Source/web/WebTextCheckingCompletionImpl.cpp b/third_party/WebKit/Source/web/WebTextCheckingCompletionImpl.cpp
index e2327cd..b76edf0 100644
--- a/third_party/WebKit/Source/web/WebTextCheckingCompletionImpl.cpp
+++ b/third_party/WebKit/Source/web/WebTextCheckingCompletionImpl.cpp
@@ -42,7 +42,7 @@
     const WebVector<WebTextCheckingResult>& results) {
   Vector<TextCheckingResult> coreResults;
   for (size_t i = 0; i < results.size(); ++i)
-    coreResults.append(results[i]);
+    coreResults.push_back(results[i]);
   return coreResults;
 }
 
diff --git a/third_party/WebKit/Source/web/WebTextCheckingResult.cpp b/third_party/WebKit/Source/web/WebTextCheckingResult.cpp
index 179faf3..630e238 100644
--- a/third_party/WebKit/Source/web/WebTextCheckingResult.cpp
+++ b/third_party/WebKit/Source/web/WebTextCheckingResult.cpp
@@ -46,7 +46,7 @@
     detail.location = 0;
     detail.length = length;
     detail.userDescription = replacement;
-    result.details.append(detail);
+    result.details.push_back(detail);
   }
 
   return result;
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
index f104598..25834de 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -301,7 +301,7 @@
 }
 
 void WebView::willEnterModalLoop() {
-  pageSuspenderStack().append(WTF::makeUnique<ScopedPageSuspender>());
+  pageSuspenderStack().push_back(WTF::makeUnique<ScopedPageSuspender>());
 }
 
 void WebView::didExitModalLoop() {
@@ -1466,7 +1466,7 @@
   Node* touchNode = bestTapNode(targetedTapEvent);
 
   HeapVector<Member<Node>> highlightNodes;
-  highlightNodes.append(touchNode);
+  highlightNodes.push_back(touchNode);
 
   enableTapHighlights(highlightNodes);
 }
@@ -1493,7 +1493,7 @@
     if (!highlightColor.alpha())
       continue;
 
-    m_linkHighlights.append(LinkHighlightImpl::create(node, this));
+    m_linkHighlights.push_back(LinkHighlightImpl::create(node, this));
   }
 
   updateAllLifecyclePhases();
@@ -3374,7 +3374,7 @@
     const DocumentMarkerVector& documentMarkers =
         toLocalFrame(frame)->document()->markers().markers();
     for (size_t i = 0; i < documentMarkers.size(); ++i)
-      result.append(documentMarkers[i]->hash());
+      result.push_back(documentMarkers[i]->hash());
   }
   markers->assign(result);
 }
diff --git a/third_party/WebKit/Source/web/tests/ActivityLoggerTest.cpp b/third_party/WebKit/Source/web/tests/ActivityLoggerTest.cpp
index e74dd129..d25a991b 100644
--- a/third_party/WebKit/Source/web/tests/ActivityLoggerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/ActivityLoggerTest.cpp
@@ -25,13 +25,13 @@
   ~TestActivityLogger() override {}
 
   void logGetter(const String& apiName) override {
-    m_loggedActivities.append(apiName);
+    m_loggedActivities.push_back(apiName);
   }
 
   void logSetter(const String& apiName,
                  const v8::Local<v8::Value>& newValue) override {
-    m_loggedActivities.append(apiName + " | " +
-                              toCoreStringWithUndefinedOrNullCheck(newValue));
+    m_loggedActivities.push_back(
+        apiName + " | " + toCoreStringWithUndefinedOrNullCheck(newValue));
   }
 
   void logMethod(const String& apiName,
@@ -41,7 +41,7 @@
     for (int i = 0; i < argc; i++)
       activityString = activityString + " | " +
                        toCoreStringWithUndefinedOrNullCheck(argv[i]);
-    m_loggedActivities.append(activityString);
+    m_loggedActivities.push_back(activityString);
   }
 
   void logEvent(const String& eventName,
@@ -51,7 +51,7 @@
     for (int i = 0; i < argc; i++) {
       activityString = activityString + " | " + argv[i];
     }
-    m_loggedActivities.append(activityString);
+    m_loggedActivities.push_back(activityString);
   }
 
   void clear() { m_loggedActivities.clear(); }
@@ -93,7 +93,7 @@
   void executeScriptInIsolatedWorld(const String& script) const {
     v8::HandleScope scope(v8::Isolate::GetCurrent());
     HeapVector<ScriptSourceCode> sources;
-    sources.append(ScriptSourceCode(script));
+    sources.push_back(ScriptSourceCode(script));
     Vector<v8::Local<v8::Value>> results;
     m_scriptController->executeScriptInIsolatedWorld(isolatedWorldId, sources,
                                                      extensionGroup, 0);
diff --git a/third_party/WebKit/Source/web/tests/FrameSerializerTest.cpp b/third_party/WebKit/Source/web/tests/FrameSerializerTest.cpp
index bb8ea51e..14d9367 100644
--- a/third_party/WebKit/Source/web/tests/FrameSerializerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/FrameSerializerTest.cpp
@@ -111,7 +111,7 @@
   }
 
   void registerSkipURL(const char* url) {
-    m_skipURLs.append(KURL(m_baseUrl, url));
+    m_skipURLs.push_back(KURL(m_baseUrl, url));
   }
 
   void serialize(const char* url) {
diff --git a/third_party/WebKit/Source/web/tests/MHTMLTest.cpp b/third_party/WebKit/Source/web/tests/MHTMLTest.cpp
index 2a01a9d..06ac0b5 100644
--- a/third_party/WebKit/Source/web/tests/MHTMLTest.cpp
+++ b/third_party/WebKit/Source/web/tests/MHTMLTest.cpp
@@ -115,7 +115,7 @@
                    const char* mime,
                    PassRefPtr<SharedBuffer> data) {
     SerializedResource resource(toKURL(url), mime, data);
-    m_resources.append(resource);
+    m_resources.push_back(resource);
   }
 
   void addResource(const char* url, const char* mime, const char* fileName) {
diff --git a/third_party/WebKit/Source/web/tests/NGInlineLayoutTest.cpp b/third_party/WebKit/Source/web/tests/NGInlineLayoutTest.cpp
index c44883a..8d69bfb3 100644
--- a/third_party/WebKit/Source/web/tests/NGInlineLayoutTest.cpp
+++ b/third_party/WebKit/Source/web/tests/NGInlineLayoutTest.cpp
@@ -51,7 +51,7 @@
   NGInlineLayoutAlgorithm* layoutAlgorithm = new NGInlineLayoutAlgorithm(
       blockFlow->style(), inlineBox, constraintSpace);
 
-  NGPhysicalFragmentBase* fragment;
+  NGPhysicalFragment* fragment;
   while (layoutAlgorithm->Layout(nullptr, &fragment, nullptr) != kNewFragment) {
     // Repeat until layout completes.
   }
@@ -80,7 +80,7 @@
   NGInlineLayoutAlgorithm* layoutAlgorithm = new NGInlineLayoutAlgorithm(
       blockFlow->style(), inlineBox, constraintSpace);
 
-  NGPhysicalFragmentBase* fragment;
+  NGPhysicalFragment* fragment;
   while (layoutAlgorithm->Layout(nullptr, &fragment, nullptr) != kNewFragment) {
     // Repeat until layout completes.
   }
diff --git a/third_party/WebKit/Source/web/tests/PrerenderingTest.cpp b/third_party/WebKit/Source/web/tests/PrerenderingTest.cpp
index 1e84a74e..5ca09d2 100644
--- a/third_party/WebKit/Source/web/tests/PrerenderingTest.cpp
+++ b/third_party/WebKit/Source/web/tests/PrerenderingTest.cpp
@@ -138,15 +138,15 @@
  private:
   // From WebPrerenderingSupport:
   void add(const WebPrerender& prerender) override {
-    m_addedPrerenders.append(prerender);
+    m_addedPrerenders.push_back(prerender);
   }
 
   void cancel(const WebPrerender& prerender) override {
-    m_canceledPrerenders.append(prerender);
+    m_canceledPrerenders.push_back(prerender);
   }
 
   void abandon(const WebPrerender& prerender) override {
-    m_abandonedPrerenders.append(prerender);
+    m_abandonedPrerenders.push_back(prerender);
   }
 
   void prefetchFinished() override {}
diff --git a/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp b/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
index 34cfd0fa..f0551847 100644
--- a/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
@@ -200,7 +200,7 @@
   // should remain the same.
   NonThrowableExceptionState nonThrow;
   HeapVector<NodeOrString> nodes;
-  nodes.append(NodeOrString::fromNode(iframe));
+  nodes.push_back(NodeOrString::fromNode(iframe));
   document->documentElement()->replaceWith(nodes, nonThrow);
 
   mainFrameView()->updateAllLifecyclePhases();
diff --git a/third_party/WebKit/Source/web/tests/ViewportTest.cpp b/third_party/WebKit/Source/web/tests/ViewportTest.cpp
index 6b957ce..baa02b74 100644
--- a/third_party/WebKit/Source/web/tests/ViewportTest.cpp
+++ b/third_party/WebKit/Source/web/tests/ViewportTest.cpp
@@ -3029,7 +3029,7 @@
                                       const WebString& sourceName,
                                       unsigned sourceLine,
                                       const WebString& stackTrace) {
-    messages.append(msg);
+    messages.push_back(msg);
   }
 
   Vector<WebConsoleMessage> messages;
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
index 59663d5..628cc592 100644
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -777,7 +777,7 @@
       "<div class=\"initial_off\"></div>");
 
   Vector<WebString> selectors;
-  selectors.append(WebString::fromUTF8("div.initial_on"));
+  selectors.push_back(WebString::fromUTF8("div.initial_on"));
   m_frame->document().watchCSSSelectors(WebVector<WebString>(selectors));
   m_frame->view()->updateAllLifecyclePhases();
   runPendingTasks();
@@ -785,7 +785,7 @@
   EXPECT_THAT(matchedSelectors(), ElementsAre("div.initial_on"));
 
   // Check that adding a watched selector calls back for already-present nodes.
-  selectors.append(WebString::fromUTF8("div.initial_off"));
+  selectors.push_back(WebString::fromUTF8("div.initial_off"));
   doc().watchCSSSelectors(WebVector<WebString>(selectors));
   m_frame->view()->updateAllLifecyclePhases();
   runPendingTasks();
@@ -804,7 +804,7 @@
 TEST_F(WebFrameCSSCallbackTest, SharedComputedStyle) {
   // Check that adding an element calls back when it matches an existing rule.
   Vector<WebString> selectors;
-  selectors.append(WebString::fromUTF8("span"));
+  selectors.push_back(WebString::fromUTF8("span"));
   doc().watchCSSSelectors(WebVector<WebString>(selectors));
 
   executeScript(
@@ -844,7 +844,7 @@
   loadHTML("<span></span>");
 
   Vector<WebString> selectors;
-  selectors.append(WebString::fromUTF8("span[attr=\"value\"]"));
+  selectors.push_back(WebString::fromUTF8("span[attr=\"value\"]"));
   doc().watchCSSSelectors(WebVector<WebString>(selectors));
   runPendingTasks();
 
@@ -861,7 +861,7 @@
   loadHTML("<div style='display:none'><span></span></div>");
 
   Vector<WebString> selectors;
-  selectors.append(WebString::fromUTF8("span"));
+  selectors.push_back(WebString::fromUTF8("span"));
   doc().watchCSSSelectors(WebVector<WebString>(selectors));
   runPendingTasks();
 
@@ -913,7 +913,7 @@
       "<div id='d2'></div>");
 
   Vector<WebString> selectors;
-  selectors.append(WebString::fromUTF8("span"));
+  selectors.push_back(WebString::fromUTF8("span"));
   doc().watchCSSSelectors(WebVector<WebString>(selectors));
   m_frame->view()->updateAllLifecyclePhases();
   runPendingTasks();
@@ -936,8 +936,8 @@
   // Check that selector lists match as the whole list, not as each element
   // independently.
   Vector<WebString> selectors;
-  selectors.append(WebString::fromUTF8("span"));
-  selectors.append(WebString::fromUTF8("span,p"));
+  selectors.push_back(WebString::fromUTF8("span"));
+  selectors.push_back(WebString::fromUTF8("span,p"));
   doc().watchCSSSelectors(WebVector<WebString>(selectors));
   m_frame->view()->updateAllLifecyclePhases();
   runPendingTasks();
@@ -951,9 +951,9 @@
 
   // Build a list with one valid selector and one invalid.
   Vector<WebString> selectors;
-  selectors.append(WebString::fromUTF8("span"));
-  selectors.append(WebString::fromUTF8("["));       // Invalid.
-  selectors.append(WebString::fromUTF8("p span"));  // Not compound.
+  selectors.push_back(WebString::fromUTF8("span"));
+  selectors.push_back(WebString::fromUTF8("["));       // Invalid.
+  selectors.push_back(WebString::fromUTF8("p span"));  // Not compound.
   doc().watchCSSSelectors(WebVector<WebString>(selectors));
   m_frame->view()->updateAllLifecyclePhases();
   runPendingTasks();
@@ -4279,14 +4279,14 @@
                               v8::Local<v8::Context> context,
                               int extensionGroup,
                               int worldId) override {
-    createNotifications.append(
+    createNotifications.push_back(
         WTF::makeUnique<Notification>(frame, context, worldId));
   }
 
   void willReleaseScriptContext(WebLocalFrame* frame,
                                 v8::Local<v8::Context> context,
                                 int worldId) override {
-    releaseNotifications.append(
+    releaseNotifications.push_back(
         WTF::makeUnique<Notification>(frame, context, worldId));
   }
 };
@@ -4937,9 +4937,9 @@
 
   // Override the tickmarks.
   Vector<IntRect> overridingTickmarksExpected;
-  overridingTickmarksExpected.append(IntRect(0, 0, 100, 100));
-  overridingTickmarksExpected.append(IntRect(0, 20, 100, 100));
-  overridingTickmarksExpected.append(IntRect(0, 30, 100, 100));
+  overridingTickmarksExpected.push_back(IntRect(0, 0, 100, 100));
+  overridingTickmarksExpected.push_back(IntRect(0, 20, 100, 100));
+  overridingTickmarksExpected.push_back(IntRect(0, 30, 100, 100));
   mainFrame->setTickmarks(overridingTickmarksExpected);
 
   // Check the tickmarks are overriden correctly.
@@ -6280,7 +6280,7 @@
     Vector<WebTextCheckingResult> results;
     const int misspellingStartOffset = 1;
     const int misspellingLength = 8;
-    results.append(WebTextCheckingResult(
+    results.push_back(WebTextCheckingResult(
         WebTextDecorationTypeSpelling, misspellingStartOffset,
         misspellingLength, WebString(), m_hash));
     completion->didFinishCheckingText(results);
@@ -6385,7 +6385,7 @@
   EXPECT_EQ(1U, documentMarkers1.size());
 
   Vector<String> words;
-  words.append("wellcome");
+  words.push_back("wellcome");
   frame->removeSpellingMarkersUnderWords(words);
 
   WebVector<uint32_t> documentMarkers2;
@@ -6458,8 +6458,8 @@
       return;
     Vector<WebTextCheckingResult> results;
     if (misspellingStartOffset >= 0 && misspellingLength > 0)
-      results.append(WebTextCheckingResult(type, misspellingStartOffset,
-                                           misspellingLength));
+      results.push_back(WebTextCheckingResult(type, misspellingStartOffset,
+                                              misspellingLength));
     m_completion->didFinishCheckingText(results);
     m_completion = 0;
   }
@@ -9402,7 +9402,7 @@
                                       const WebString& sourceName,
                                       unsigned sourceLine,
                                       const WebString& stackTrace) {
-    messages.append(message);
+    messages.push_back(message);
   }
 
   Vector<WebConsoleMessage> messages;
diff --git a/third_party/WebKit/Source/web/tests/sim/SimCanvas.cpp b/third_party/WebKit/Source/web/tests/sim/SimCanvas.cpp
index 083a63c2..9a7957fa 100644
--- a/third_party/WebKit/Source/web/tests/sim/SimCanvas.cpp
+++ b/third_party/WebKit/Source/web/tests/sim/SimCanvas.cpp
@@ -25,7 +25,7 @@
   if (s_depth > 1)
     return;
   Command command = {type, color};
-  m_commands.append(command);
+  m_commands.push_back(command);
 }
 
 void SimCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) {
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
index 639cdda..09d8d60 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
@@ -329,16 +329,13 @@
             optparse.make_option(
                 "--order",
                 action="store",
-                # TODO(jeffcarp): platforms are moving to random-order by default independently.
-                # See _set_up_derived_options below and crbug.com/601332.
-                default=("default"),
+                default="random",
                 help=("Determine the order in which the test cases will be run. "
                       "'none' == use the order in which the tests were listed "
                       "either in arguments or test list, "
-                      "'random' == pseudo-random order. Seed can be specified "
-                      "via --seed, otherwise it will default to the current unix timestamp "
-                      "(default on Mac & Linux). "
-                      "'natural' == use the natural order (default on all others).")),
+                      "'random' == pseudo-random order (default). Seed can be specified "
+                      "via --seed, otherwise it will default to the current unix timestamp. "
+                      "'natural' == use the natural order")),
             optparse.make_option(
                 "--profile",
                 action="store_true",
@@ -566,16 +563,6 @@
     if not options.seed:
         options.seed = port.host.time()
 
-    # TODO(jeffcarp): This will be removed once all platforms move to random order.
-    # This must be here and not in parse_args because host is not instantiated yet there.
-    # See crbug.com/601332.
-    if options.order == 'default':
-        port_name = port.host.port_factory.get().port_name
-        if port_name.startswith(("linux-", "mac-")):
-            options.order = 'random'
-        else:
-            options.order = 'natural'
-
 def _run_tests(port, options, args, printer):
     _set_up_derived_options(port, options, args)
     manager = Manager(port, options, printer)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
index 63b43ca5..52ce9a6 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
@@ -474,7 +474,7 @@
         # Test that we wrap around if the number of tests is not evenly divisible by the chunk size
         # (here we end up with 3 parts, each with 2 tests, and we only have 4 tests total, so the
         # last part repeats the first two tests).
-        chunk_tests_run = get_tests_run(['--run-part', '3:3'] + tests_to_run)
+        chunk_tests_run = get_tests_run(['--order', 'natural', '--run-part', '3:3'] + tests_to_run)
         self.assertEqual(['passes/error.html', 'passes/image.html'], chunk_tests_run)
 
     def test_run_singly(self):
@@ -512,7 +512,7 @@
 
     def test_stderr_is_saved(self):
         host = MockHost()
-        self.assertTrue(passing_run(host=host))
+        self.assertTrue(passing_run(['--order', 'natural'], host=host))
 
     def test_reftest_crash_log_is_saved(self):
         host = MockHost()
@@ -545,12 +545,12 @@
 
         host.environ['GTEST_SHARD_INDEX'] = '0'
         host.environ['GTEST_TOTAL_SHARDS'] = '1'
-        shard_0_tests_run = get_tests_run(['--order=natural'] + tests_to_run, host=host)
+        shard_0_tests_run = get_tests_run(['--order', 'natural'] + tests_to_run, host=host)
         self.assertEqual(shard_0_tests_run, ['passes/error.html', 'passes/image.html'])
 
         host.environ['GTEST_SHARD_INDEX'] = '1'
         host.environ['GTEST_TOTAL_SHARDS'] = '1'
-        shard_1_tests_run = get_tests_run(tests_to_run, host=host)
+        shard_1_tests_run = get_tests_run(['--order', 'natural'] + tests_to_run, host=host)
         self.assertEqual(shard_1_tests_run, ['passes/platform_image.html', 'passes/text.html'])
 
     def test_smoke_test(self):
@@ -677,7 +677,9 @@
         self.assertEqual(['failures/unexpected/text-image-checksum.html'], tests_run)
 
         # But we'll keep going for expected ones.
-        tests_run = get_tests_run(['failures/expected/text.html', 'passes/text.html', '--exit-after-n-failures', '1'])
+        tests_run = get_tests_run(['failures/expected/text.html', 'passes/text.html',
+                                   '--exit-after-n-failures', '1',
+                                   '--order', 'natural'])
         self.assertEqual(['failures/expected/text.html', 'passes/text.html'], tests_run)
 
     def test_exit_after_n_crashes(self):
@@ -688,11 +690,14 @@
 
         # Same with timeouts.
         tests_run = get_tests_run(['failures/unexpected/timeout.html', 'passes/text.html',
-                                   '--exit-after-n-crashes-or-timeouts', '1'])
+                                   '--exit-after-n-crashes-or-timeouts', '1',
+                                   '--order', 'natural'])
         self.assertEqual(['failures/unexpected/timeout.html'], tests_run)
 
         # But we'll keep going for expected ones.
-        tests_run = get_tests_run(['failures/expected/crash.html', 'passes/text.html', '--exit-after-n-crashes-or-timeouts', '1'])
+        tests_run = get_tests_run(['failures/expected/crash.html', 'passes/text.html',
+                                   '--exit-after-n-crashes-or-timeouts', '1',
+                                   '--order', 'natural'])
         self.assertEqual(['failures/expected/crash.html', 'passes/text.html'], tests_run)
 
     def test_results_directory_absolute(self):
@@ -746,7 +751,8 @@
         host = MockHost()
         filename = '/tmp/foo.txt'
         host.filesystem.write_text_file(filename, 'failures')
-        details, err, _ = logging_run(['--debug-rwt-logging', '--test-list=%s' % filename], tests_included=True, host=host)
+        details, err, _ = logging_run(['--order', 'natural', '--debug-rwt-logging', '--test-list=%s' % filename],
+                                      tests_included=True, host=host)
         self.assertEqual(details.exit_code, 0)
         self.assertIn('Retrying', err.getvalue())
 
@@ -834,7 +840,7 @@
         tests_run = get_tests_run(['--order', 'natural', '-i', 'passes/virtual_passes', 'passes'])
         self.assertEqual(tests_run, sorted(tests_run))
 
-        tests_run = get_tests_run(['http/tests/passes'])
+        tests_run = get_tests_run(['--order', 'natural', 'http/tests/passes'])
         self.assertEqual(tests_run, sorted(tests_run))
 
     def test_virtual(self):
diff --git a/third_party/closure_compiler/externs/networking_private.js b/third_party/closure_compiler/externs/networking_private.js
index 8a1a78f..5c7c329 100644
--- a/third_party/closure_compiler/externs/networking_private.js
+++ b/third_party/closure_compiler/externs/networking_private.js
@@ -1,4 +1,4 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
+// 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.
 
@@ -412,7 +412,7 @@
  *   ClientCertType: (!chrome.networkingPrivate.ManagedDOMString|undefined),
  *   EAP: (!chrome.networkingPrivate.ManagedEAPProperties|undefined),
  *   Group: (!chrome.networkingPrivate.ManagedDOMString|undefined),
- *   IKEVersion: !chrome.networkingPrivate.ManagedLong,
+ *   IKEVersion: (!chrome.networkingPrivate.ManagedLong|undefined),
  *   PSK: (!chrome.networkingPrivate.ManagedDOMString|undefined),
  *   SaveCredentials: (!chrome.networkingPrivate.ManagedBoolean|undefined),
  *   ServerCARefs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
@@ -674,6 +674,7 @@
  *   ServingOperator: (!chrome.networkingPrivate.CellularProviderProperties|undefined),
  *   SIMLockStatus: (!chrome.networkingPrivate.SIMLockStatus|undefined),
  *   SIMPresent: (boolean|undefined),
+ *   SignalStrength: (number|undefined),
  *   SupportNetworkScan: (boolean|undefined),
  *   SupportedCarriers: (!Array<string>|undefined)
  * }}
@@ -711,6 +712,7 @@
  *   ServingOperator: (!chrome.networkingPrivate.CellularProviderProperties|undefined),
  *   SIMLockStatus: (!chrome.networkingPrivate.SIMLockStatus|undefined),
  *   SIMPresent: (boolean|undefined),
+ *   SignalStrength: (number|undefined),
  *   SupportNetworkScan: (boolean|undefined),
  *   SupportedCarriers: (!Array<string>|undefined)
  * }}
@@ -1262,6 +1264,7 @@
  * succeeds (|puk| is valid), the PIN will be set to |pin|.   (If |pin| is empty
  * or invalid the operation will fail).
  * @param {string} networkGuid The GUID of the cellular network to unlock.
+ *     If empty, the default cellular device will be used.
  * @param {string} pin The current SIM PIN, or the new PIN if PUK is provided.
  * @param {string=} puk The operator provided PUK for unblocking a blocked SIM.
  * @param {function():void=} callback Called when the operation has completed.
@@ -1278,7 +1281,7 @@
  * unlockCellularSim() before this can be called (otherwise it will fail and
  * chrome.runtime.lastError will be set to Error.SimLocked).
  * @param {string} networkGuid The GUID of the cellular network to set the SIM
- *     state of.
+ *     state of.     If empty, the default cellular device will be used.
  * @param {!chrome.networkingPrivate.CellularSimState} simState The SIM state to
  *     set.
  * @param {function():void=} callback Called when the operation has completed.
diff --git a/tools/battor_agent/battor_agent.cc b/tools/battor_agent/battor_agent.cc
index ce9e1f6a..2a1d7d7 100644
--- a/tools/battor_agent/battor_agent.cc
+++ b/tools/battor_agent/battor_agent.cc
@@ -517,6 +517,7 @@
       return;
 
     case Action::SEND_GIT_HASH_REQUEST:
+      connection_->Flush();
       SendControlMessage(
           BATTOR_CONTROL_MESSAGE_TYPE_GET_FIRMWARE_GIT_HASH, 0, 0);
       return;
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index b2b74c0..a97dbe3 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -847,7 +847,7 @@
                       help='print current clang version (e.g. x.y.z) and exit.')
   parser.add_argument('--run-tests', action='store_true',
                       help='run tests after building; only for local builds')
-  parser.add_argument('--extra-tools', '--tools', nargs='*',
+  parser.add_argument('--extra-tools', '--tools', nargs='*', default=[],
                       help='select additional chrome tools to build')
   parser.add_argument('--without-android', action='store_false',
                       help='don\'t build Android ASan runtime (linux only)',
diff --git a/tools/grit/grit/format/html_inline.py b/tools/grit/grit/format/html_inline.py
index e8cf22d..9e5ec6a8 100755
--- a/tools/grit/grit/format/html_inline.py
+++ b/tools/grit/grit/format/html_inline.py
@@ -32,12 +32,12 @@
 DIST_ENV_VAR = 'CHROMIUM_BUILD'
 DIST_SUBSTR = '%DISTRIBUTION%'
 
-# Matches beginning of an "if" block with trailing spaces.
+# Matches beginning of an "if" block.
 _BEGIN_IF_BLOCK = lazy_re.compile(
-    '<if [^>]*?expr=("(?P<expr1>[^">]*)"|\'(?P<expr2>[^\'>]*)\')[^>]*?>\s*')
+    '<if [^>]*?expr=("(?P<expr1>[^">]*)"|\'(?P<expr2>[^\'>]*)\')[^>]*?>')
 
-# Matches ending of an "if" block with preceding spaces.
-_END_IF_BLOCK = lazy_re.compile('\s*</if>')
+# Matches ending of an "if" block.
+_END_IF_BLOCK = lazy_re.compile('</if>')
 
 # Used by DoInline to replace various links with inline content.
 _STYLESHEET_RE = lazy_re.compile(
diff --git a/tools/grit/grit/format/html_inline_unittest.py b/tools/grit/grit/format/html_inline_unittest.py
index c236f4f..d049b1ef 100755
--- a/tools/grit/grit/format/html_inline_unittest.py
+++ b/tools/grit/grit/format/html_inline_unittest.py
@@ -444,5 +444,68 @@
     self.failUnlessEqual(expected_inlined,
                          util.FixLineEnd(result.inlined_data, '\n'))
 
+  def testCommentedJsInclude(self):
+    '''Tests that <include> works inside a comment.'''
+
+    files = {
+      'include.js': '// <include src="other.js">',
+      'other.js': '// Copyright somebody\nalert(1);',
+    }
+
+    expected_inlined = '// // Copyright somebody\nalert(1);'
+
+    source_resources = set()
+    tmp_dir = util.TempDir(files)
+    for filename in files:
+      source_resources.add(tmp_dir.GetPath(filename))
+
+    result = html_inline.DoInline(tmp_dir.GetPath('include.js'), None)
+    resources = result.inlined_files
+    resources.add(tmp_dir.GetPath('include.js'))
+    self.failUnlessEqual(resources, source_resources)
+    self.failUnlessEqual(expected_inlined,
+                         util.FixLineEnd(result.inlined_data, '\n'))
+
+  def testCommentedJsIf(self):
+    '''Tests that <if> works inside a comment.'''
+
+    files = {
+      'if.js': '''
+      // <if expr="True">
+      yep();
+      // </if>
+
+      // <if expr="False">
+      nope();
+      // </if>
+      ''',
+    }
+
+    expected_inlined = '''
+      // 
+      yep();
+      // 
+
+      // 
+      '''
+
+    source_resources = set()
+    tmp_dir = util.TempDir(files)
+    for filename in files:
+      source_resources.add(tmp_dir.GetPath(filename))
+
+    class FakeGrdNode(object):
+      def EvaluateCondition(self, cond):
+        return eval(cond)
+
+    result = html_inline.DoInline(tmp_dir.GetPath('if.js'), FakeGrdNode())
+    resources = result.inlined_files
+
+    resources.add(tmp_dir.GetPath('if.js'))
+    self.failUnlessEqual(resources, source_resources)
+    self.failUnlessEqual(expected_inlined,
+                         util.FixLineEnd(result.inlined_data, '\n'))
+
+
 if __name__ == '__main__':
   unittest.main()
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 3bc14b1..babe5424 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -4402,7 +4402,17 @@
 <histogram name="Blink.PaintInvalidation.UpdateTime" units="microseconds">
   <owner>paint-dev@chromium.org</owner>
   <summary>
-    Time spent updating paint invalidation in the Blink document lifecycle.
+    Time spent updating paint invalidation in the Blink document lifecycle. Not
+    available when SlimmingPaintInvalidation or SlimmingPaintV2 is enabled.
+  </summary>
+</histogram>
+
+<histogram name="Blink.PrePaint.UpdateTime" units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating paint properties and paint invalidation in the Blink
+    document lifecycle. Available when SlimmingPaintInvalidation or
+    SlimmingPaintV2 is enabled.
   </summary>
 </histogram>
 
@@ -25827,6 +25837,15 @@
   </summary>
 </histogram>
 
+<histogram name="Media.Video.TimeFromForegroundToFirstFrame" units="ms">
+  <owner>avayvod@chromium.org</owner>
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Records the time between the moment when the video element is brought to the
+    foreground and when the video frame compositor outputs the next frame.
+  </summary>
+</histogram>
+
 <histogram name="Media.VideoCapture.AspectRatio" units="%">
   <owner>mcasas@chromium.org</owner>
   <summary>
@@ -88343,6 +88362,12 @@
   <int value="1722" label="V8StereoPannerNode_Constructor"/>
   <int value="1723" label="V8WaveShaperNode_Constructor"/>
   <int value="1724" label="V8Headers_GetAll_Method"/>
+  <int value="1725" label="NavigatorVibrateEngagementNone"/>
+  <int value="1726" label="NavigatorVibrateEngagementMinimal"/>
+  <int value="1727" label="NavigatorVibrateEngagementLow"/>
+  <int value="1728" label="NavigatorVibrateEngagementMedium"/>
+  <int value="1729" label="NavigatorVibrateEngagementHigh"/>
+  <int value="1730" label="NavigatorVibrateEngagementMax"/>
 </enum>
 
 <enum name="FetchRequestMode" type="int">
@@ -114607,6 +114632,8 @@
   <suffix name="DownloadAttribution" label="Download referrer attribution."/>
   <suffix name="PhishingInterstitialAttribution"
       label="Phishing interstitial referrer attribution."/>
+  <suffix name="PPAPIDownloadAttribution"
+      label="PPAPI download referrer attribution."/>
   <suffix name="MalwareInterstitialAttribution"
       label="Malware interstitial referrer attribution."/>
   <suffix name="UwsInterstitialAttribution"
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
index 15f78e5..9408e427 100644
--- a/ui/base/BUILD.gn
+++ b/ui/base/BUILD.gn
@@ -673,6 +673,13 @@
     sources += [ "test/user_interactive_test_case.cc" ]
   }
 
+  if (is_chromeos) {
+    sources += [
+      "ime/chromeos/mock_input_method_manager.cc",
+      "ime/chromeos/mock_input_method_manager.h",
+    ]
+  }
+
   public_deps = [
     ":base",
   ]
diff --git a/ui/base/cursor/cursor_loader_x11.cc b/ui/base/cursor/cursor_loader_x11.cc
index 1929d9f..3aacfa2f 100644
--- a/ui/base/cursor/cursor_loader_x11.cc
+++ b/ui/base/cursor/cursor_loader_x11.cc
@@ -284,6 +284,7 @@
   if (*cursor == kCursorCustom)
     return;
 
+  cursor->set_device_scale_factor(scale());
   cursor->SetPlatformCursor(CursorFromId(cursor->native_type()));
 }
 
diff --git a/ui/base/cursor/cursors_aura.cc b/ui/base/cursor/cursors_aura.cc
index a69517f..1f29f29 100644
--- a/ui/base/cursor/cursors_aura.cc
+++ b/ui/base/cursor/cursors_aura.cc
@@ -239,6 +239,7 @@
   cursor_loader.SetPlatformCursor(&cursor_copy);
   const std::unique_ptr<SkBitmap> cursor_bitmap(
       IconUtil::CreateSkBitmapFromHICON(cursor_copy.platform()));
+  *point = IconUtil::GetHotSpotFromHICON(cursor_copy.platform());
 #else
   int resource_id;
   if (!GetCursorDataFor(ui::CURSOR_SET_NORMAL,
diff --git a/ui/base/ime/chromeos/mock_input_method_manager.cc b/ui/base/ime/chromeos/mock_input_method_manager.cc
new file mode 100644
index 0000000..0e4c6230
--- /dev/null
+++ b/ui/base/ime/chromeos/mock_input_method_manager.cc
@@ -0,0 +1,189 @@
+// Copyright (c) 2012 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 "ui/base/ime/chromeos/mock_input_method_manager.h"
+
+#include <utility>
+
+namespace chromeos {
+namespace input_method {
+MockInputMethodManager::State::State() {}
+
+void MockInputMethodManager::State::AddInputMethodExtension(
+    const std::string& extension_id,
+    const InputMethodDescriptors& descriptors,
+    ui::IMEEngineHandlerInterface* instance) {}
+
+void MockInputMethodManager::State::RemoveInputMethodExtension(
+    const std::string& extension_id) {}
+
+void MockInputMethodManager::State::ChangeInputMethod(
+    const std::string& input_method_id,
+    bool show_message) {}
+
+bool MockInputMethodManager::State::EnableInputMethod(
+    const std::string& new_active_input_method_id) {
+  return true;
+}
+
+void MockInputMethodManager::State::EnableLoginLayouts(
+    const std::string& language_code,
+    const std::vector<std::string>& initial_layout) {}
+
+void MockInputMethodManager::State::EnableLockScreenLayouts() {}
+
+void MockInputMethodManager::State::GetInputMethodExtensions(
+    InputMethodDescriptors* result) {}
+
+std::unique_ptr<InputMethodDescriptors>
+MockInputMethodManager::State::GetActiveInputMethods() const {
+  return nullptr;
+}
+
+const std::vector<std::string>&
+MockInputMethodManager::State::GetActiveInputMethodIds() const {
+  return active_input_method_ids;
+}
+
+const InputMethodDescriptor*
+MockInputMethodManager::State::GetInputMethodFromId(
+    const std::string& input_method_id) const {
+  return nullptr;
+}
+
+size_t MockInputMethodManager::State::GetNumActiveInputMethods() const {
+  return active_input_method_ids.size();
+}
+
+void MockInputMethodManager::State::SetEnabledExtensionImes(
+    std::vector<std::string>* ids) {}
+
+void MockInputMethodManager::State::SetInputMethodLoginDefault() {}
+
+void MockInputMethodManager::State::SetInputMethodLoginDefaultFromVPD(
+    const std::string& locale,
+    const std::string& layout) {}
+
+bool MockInputMethodManager::State::CanCycleInputMethod() {
+  return true;
+}
+
+void MockInputMethodManager::State::SwitchToNextInputMethod() {}
+
+void MockInputMethodManager::State::SwitchToPreviousInputMethod() {}
+
+bool MockInputMethodManager::State::CanSwitchInputMethod(
+    const ui::Accelerator& accelerator) {
+  return true;
+}
+
+void MockInputMethodManager::State::SwitchInputMethod(
+    const ui::Accelerator& accelerator) {}
+
+InputMethodDescriptor MockInputMethodManager::State::GetCurrentInputMethod()
+    const {
+  InputMethodDescriptor descriptor;
+  return descriptor;
+}
+
+bool MockInputMethodManager::State::ReplaceEnabledInputMethods(
+    const std::vector<std::string>& new_active_input_method_ids) {
+  return true;
+}
+
+MockInputMethodManager::State::~State() {}
+
+MockInputMethodManager::MockInputMethodManager() {}
+
+MockInputMethodManager::~MockInputMethodManager() {}
+
+InputMethodManager::UISessionState MockInputMethodManager::GetUISessionState() {
+  return InputMethodManager::STATE_BROWSER_SCREEN;
+}
+
+void MockInputMethodManager::AddObserver(
+    InputMethodManager::Observer* observer) {}
+
+void MockInputMethodManager::AddCandidateWindowObserver(
+    InputMethodManager::CandidateWindowObserver* observer) {}
+
+void MockInputMethodManager::AddImeMenuObserver(
+    InputMethodManager::ImeMenuObserver* observer) {}
+
+void MockInputMethodManager::RemoveObserver(
+    InputMethodManager::Observer* observer) {}
+
+void MockInputMethodManager::RemoveCandidateWindowObserver(
+    InputMethodManager::CandidateWindowObserver* observer) {}
+
+void MockInputMethodManager::RemoveImeMenuObserver(
+    InputMethodManager::ImeMenuObserver* observer) {}
+
+std::unique_ptr<InputMethodDescriptors>
+MockInputMethodManager::GetSupportedInputMethods() const {
+  return nullptr;
+}
+
+void MockInputMethodManager::ActivateInputMethodMenuItem(
+    const std::string& key) {}
+
+bool MockInputMethodManager::IsISOLevel5ShiftUsedByCurrentInputMethod() const {
+  return false;
+}
+
+bool MockInputMethodManager::IsAltGrUsedByCurrentInputMethod() const {
+  return false;
+}
+
+ImeKeyboard* MockInputMethodManager::GetImeKeyboard() {
+  return nullptr;
+}
+
+InputMethodUtil* MockInputMethodManager::GetInputMethodUtil() {
+  return nullptr;
+}
+
+ComponentExtensionIMEManager*
+MockInputMethodManager::GetComponentExtensionIMEManager() {
+  return nullptr;
+}
+
+bool MockInputMethodManager::IsLoginKeyboard(const std::string& layout) const {
+  return true;
+}
+
+bool MockInputMethodManager::MigrateInputMethods(
+    std::vector<std::string>* input_method_ids) {
+  return false;
+}
+scoped_refptr<InputMethodManager::State> MockInputMethodManager::CreateNewState(
+    Profile* profile) {
+  return nullptr;
+}
+
+scoped_refptr<InputMethodManager::State>
+MockInputMethodManager::GetActiveIMEState() {
+  return nullptr;
+}
+
+void MockInputMethodManager::SetState(
+    scoped_refptr<InputMethodManager::State> state) {}
+
+void MockInputMethodManager::ImeMenuActivationChanged(bool is_active) {}
+
+void MockInputMethodManager::NotifyImeMenuItemsChanged(
+    const std::string& engine_id,
+    const std::vector<InputMethodManager::MenuItem>& items) {}
+
+void MockInputMethodManager::MaybeNotifyImeMenuActivationChanged() {}
+
+void MockInputMethodManager::OverrideKeyboardUrlRef(const std::string& keyset) {
+}
+
+bool MockInputMethodManager::IsEmojiHandwritingVoiceOnImeMenuEnabled() {
+  return true;
+}
+
+}  // namespace input_method
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager.h b/ui/base/ime/chromeos/mock_input_method_manager.h
similarity index 68%
rename from chrome/browser/chromeos/input_method/mock_input_method_manager.h
rename to ui/base/ime/chromeos/mock_input_method_manager.h
index 168de62a8..586d9e5 100644
--- a/chrome/browser/chromeos/input_method/mock_input_method_manager.h
+++ b/ui/base/ime/chromeos/mock_input_method_manager.h
@@ -2,30 +2,25 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MOCK_INPUT_METHOD_MANAGER_H_
-#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MOCK_INPUT_METHOD_MANAGER_H_
-
-#include <stddef.h>
+#ifndef UI_BASE_IME_CHROMEOS_MOCK_INPUT_METHOD_MANAGER_H_
+#define UI_BASE_IME_CHROMEOS_MOCK_INPUT_METHOD_MANAGER_H_
 
 #include "base/macros.h"
-#include "chrome/browser/chromeos/input_method/input_method_util.h"
-#include "ui/base/ime/chromeos/component_extension_ime_manager.h"
-#include "ui/base/ime/chromeos/fake_ime_keyboard.h"
-#include "ui/base/ime/chromeos/fake_input_method_delegate.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
-#include "ui/base/ime/chromeos/input_method_whitelist.h"
 
 namespace chromeos {
 namespace input_method {
+class InputMethodUtil;
+class ImeKeyboard;
 
-// The mock implementation of InputMethodManager for testing.
-class MockInputMethodManager : public InputMethodManager {
+// The mock InputMethodManager for testing.
+class UI_BASE_IME_EXPORT MockInputMethodManager : public InputMethodManager {
+ public:
  public:
   class State : public InputMethodManager::State {
    public:
-    explicit State(MockInputMethodManager* manager);
+    State();
 
-    scoped_refptr<InputMethodManager::State> Clone() const override;
     void AddInputMethodExtension(
         const std::string& extension_id,
         const InputMethodDescriptors& descriptors,
@@ -59,23 +54,21 @@
     bool ReplaceEnabledInputMethods(
         const std::vector<std::string>& new_active_input_method_ids) override;
 
-    // The value GetCurrentInputMethod().id() will return.
-    std::string current_input_method_id;
-
     // The active input method ids cache (actually default only)
     std::vector<std::string> active_input_method_ids;
 
    protected:
-    friend base::RefCounted<chromeos::input_method::InputMethodManager::State>;
+    friend base::RefCounted<InputMethodManager::State>;
     ~State() override;
 
-    MockInputMethodManager* const manager_;
+   private:
+    DISALLOW_COPY_AND_ASSIGN(State);
   };
 
   MockInputMethodManager();
   ~MockInputMethodManager() override;
 
-  // InputMethodManager override:
+  // InputMethodManager:
   UISessionState GetUISessionState() override;
   void AddObserver(InputMethodManager::Observer* observer) override;
   void AddCandidateWindowObserver(
@@ -109,36 +102,11 @@
   void OverrideKeyboardUrlRef(const std::string& keyset) override;
   bool IsEmojiHandwritingVoiceOnImeMenuEnabled() override;
 
-  // Sets an input method ID which will be returned by GetCurrentInputMethod().
-  void SetCurrentInputMethodId(const std::string& input_method_id);
-
-  void SetComponentExtensionIMEManager(
-      std::unique_ptr<ComponentExtensionIMEManager> comp_ime_manager);
-
-  // Set values that will be provided to the InputMethodUtil.
-  void set_application_locale(const std::string& value);
-
-  // Set the value returned by IsISOLevel5ShiftUsedByCurrentInputMethod
-  void set_mod3_used(bool value) { mod3_used_ = value; }
-
-  // TODO(yusukes): Add more variables for counting the numbers of the API calls
-  int add_observer_count_;
-  int remove_observer_count_;
-
- protected:
-  scoped_refptr<State> state_;
-
  private:
-  FakeInputMethodDelegate delegate_;  // used by util_
-  InputMethodUtil util_;
-  FakeImeKeyboard keyboard_;
-  bool mod3_used_;
-  std::unique_ptr<ComponentExtensionIMEManager> comp_ime_manager_;
-
   DISALLOW_COPY_AND_ASSIGN(MockInputMethodManager);
 };
 
 }  // namespace input_method
 }  // namespace chromeos
 
-#endif  // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MOCK_INPUT_METHOD_MANAGER_H_
+#endif  // UI_BASE_IME_CHROMEOS_MOCK_INPUT_METHOD_MANAGER_H_
diff --git a/ui/gfx/icon_util.cc b/ui/gfx/icon_util.cc
index 2d9bc21..f5b9b179 100644
--- a/ui/gfx/icon_util.cc
+++ b/ui/gfx/icon_util.cc
@@ -369,6 +369,14 @@
   return base::win::ScopedHICON(CreateIconIndirect(&ii));
 }
 
+gfx::Point IconUtil::GetHotSpotFromHICON(HICON icon) {
+  ScopedICONINFO icon_info;
+  gfx::Point hotspot;
+  if (::GetIconInfo(icon, &icon_info))
+    hotspot = gfx::Point(icon_info.xHotspot, icon_info.yHotspot);
+
+  return hotspot;
+}
 SkBitmap IconUtil::CreateSkBitmapFromHICONHelper(HICON icon,
                                                  const gfx::Size& s) {
   DCHECK(icon);
diff --git a/ui/gfx/icon_util.h b/ui/gfx/icon_util.h
index 960018e..e542caec 100644
--- a/ui/gfx/icon_util.h
+++ b/ui/gfx/icon_util.h
@@ -141,6 +141,10 @@
                                                     const void* dib_bits,
                                                     size_t dib_size);
 
+  // Given a valid HICON handle representing an icon, this function retrieves
+  // the hot spot of the icon.
+  static gfx::Point GetHotSpotFromHICON(HICON icon);
+
  private:
   // The icon format is published in the MSDN but there is no definition of
   // the icon file structures in any of the Windows header files so we need to
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
index 25c6e56..18dff1a7 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
@@ -51,6 +51,7 @@
       #centeredContent {
         display: flex;
         flex: 1 1 0;
+        justify-content: center;
       }
 
       #rightContent {