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(¶ms))));
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|: // < > & " ' -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 {